大模型中分词使用的是数据驱动的BPE,数据集分布对词表有很大的影响。本项目分析各个大模型的词表语言和词汇长度分布。
下面是各个大模型词表中英文和中文词汇数量统计,具体参考(大模型词汇语言分布和分析报告):
Language | Llama-3.3-70B-Instruct | MiniCPM3-4B | MiniMax-Text-01 | Mistral-7B-Instruct-v0.3 | Phi-3.5-mini-instruct | deepseek_v3 | gemma-2-9b-it | glm-4-9b-chat | gpt-4o | internlm3-8b-instruct | qwen2.5-72b | telechat-7B |
---|---|---|---|---|---|---|---|---|---|---|---|---|
chinese | 4265 | 28322 | 38420 | 1459 | 700 | 35184 | 21762 | 28478 | 7449 | 10364 | 24966 | 29919 |
pure_english | 28158 | 15832 | 33489 | 10612 | 10204 | 21994 | 72065 | 29915 | 37839 | 23291 | 27376 | 28863 |
Total | 128000 | 73440 | 200000 | 32768 | 32000 | 128000 | 256000 | 150252 | 200000 | 128569 | 151643 | 160135 |
2025/01/17: 增加了 360Zhinao2-7B-Chat-4K,词表一共157333
,中规中矩。中文词表数量46093
,迄今为止最大。最长词汇转载此文是出于传递更多信息之目的
、经相关部门批准后方可开展经营活动
。
2025/01/17: 增加了 Mistral-7B-Instruct-v0.3,词表一共32768
,和Phi-3.5-mini-instruct一样精简。中文1459
,除了3个两字词之外都是汉字。英文最长单词ancellationToken
。包括阿拉伯语、希伯来语、韩语、日语在内的其他语言也是类似处理策略。 另外 controls(词中包含\t
或者\n
)只有一个,词表很干净!
2025/01/17: 增加了 telechat-7B ,中文词表数量29919
,最长词请安装Unicode擴展字形档
和見:附录:漢語詞彙索引/
,有大量繁体中文数据。
2025/01/17: 增加了Gemma-2-9b-it ,词表巨大,一共有256000单词。中文词表数量256000
,最长的是点击下一页继续阅读
,还有繁体词汇請繼續往下閱讀
。
2025/01/17: 增加了Llama-3.3-70B-Instruct 中规中矩,中文词表数量4265
,最长是生命周期函数
,英文最长词 latesAutoresizingMaskIntoConstraints
2025/01/17: 增加了微软的Phi-3.5-mini-instruct ,相比与其他家动辄12万甚至20万,词表很特别,一共只有32000。其中中文单词只有700,都是汉字。包括阿拉伯语、希伯来语、韩语、日语在内的其他语言也是类似处理策略。 另外 controls(词中包含\t
或者\n
)只有一个,词表很干净!
2025/01/17: 增加了glm-4-9b-chat , 词表中规中矩,其中中文词数量高达28478
,最长的词是 词条初始信息均引自国家企业信用信息公示系统
。
2025/01/16: 发现几篇很好讲BPE的博客 how-to-train-tokenizer 如何训练模型分词器:BPE、WordPiece、ULM、SentencePiece
2025/01/16: 分析了今天刚刚发布的MiniMax-Text01,中文词汇以2个和3个字为主,有非常多的长词。原始词表38421,重新分词后 23473。 另外,词表有大量日文词,最长的是日以上更新していないブログに表示しています
。
2025/01/15: 分析了今天刚刚发布的internlm3-8b-instruct,中文词汇以1个和2个字为主,和本文期望一致,不提交issue。原始词表有 10364 中文词,重新 分词去重之后有7901。
2025/01/14: 给MiniCPM提交了issue OpenBMB/MiniCPM#276
2025/01/14: 发现 tokenizer-attack,利用BPE分词器的合并规则列表和每个类别的示例数据,推断出训练数据中各类别的比例。和本项目关注问题切入点非常相关。两个工作异同分析如下:
相同
都是关注BPE分词对大模型影响;相同
都建议谨慎使用BPE tokenizer;差异
tokenizer-attack解决如何根据BPE词表反向推到出大模型定量的数据分布,揭示模型训练数据中的一些未公开信息;本项目出发是思考分词准确率对大模型结果的影响,动机和方法都不同,虽然最后一个阶段分析数据来源是殊途同归。
2015/01/14: 给Deepseek和Qwen分别提交新的issues QwenLM/Qwen2.5#1161 deepseek-ai/DeepSeek-V3#273
2015/01/14: 给OpenAI提交issue openai/tiktoken#368
我分别给Qwen、Deepseek和OpenAI提交了issues:
- Qwen: QwenLM/Qwen2.5#1159 QwenLM/Qwen2.5#1161 , 都得到回复,被close;
- Deepseek: deepseek-ai/DeepSeek-V3#263 deepseek-ai/DeepSeek-V3#273 两个都尚未回复;
- OpenAI: openai/tiktoken#368 尚未回复;
- MiniCPM: OpenBMB/MiniCPM#276 尚未回复;
prompts.json
中包含论文中使用的提示词。其中包含了提示词、模型、调用途径、结果是否符合预期。
llm_segment.py
是对qwen、qwen2.5-72b-instruct、deepseek_v3三个大模型,给定中文输出给出分词结果。其中qwen2.5-72b-instruct、deepseek_v3的词表是unicode形式展示字节,因此会将其转化成bytes再用utf-8编码就可以正常输出。由于模型文件都是从huggingface直接加载,因此使用前需要先翻墙。
vocab_convert.py
,读入tokener.json
处理为vocab_extend.json
和 vocab_extend.tsv
脚本,并生成全部词表和汉字词表长度分布。使用方法:
python vocab_convert.py -tok_path deepseek_v3/qwen2.5-72b/both
目录中包含如下:
tokener.json
,来自 DeepSeek-V3/tokenizer.json;tokenizer_config.json
,词表配置,来自DeepSeek-V3/tokenizer_config.json。暂时未使用,据此可以判断出是基于LlamaTokenizerFast;vocab_extend.json
,基于tokener.json中的vocab字段将其中unicode形式转化成可读的utf-8字符串,其中包含(原始词汇、utf-8词汇、utf-8词汇长度、是否是中文)四个字段;vocab_extend.tsv
,以tsv格式展示vocab_extend.json内容,并以utf-8词汇长度顺序排序。
目录中包含如下:
tokener.json
,来自 Qwen2.5-72B-Instruct/tokenizer.json;tokenizer_config.json
,词表配置,来自 Qwen2.5-72B-Instruct/tokenizer_json.json。暂时未使用,据此可以判断出是基于Qwen2Tokenizer;vocab_extend.json
,和deepseek_v3
目录中相同格式;vocab_extend.tsv
,和deepseek_v3
目录中相同格式;
如果您觉得本论文对您研究工作有贡献,请引用:
{
"author": "赵迎功",
"title": "注意意分词!分词影响大模型的初初步发现",
"url": "https://github.com/zhaoyukoon/damoxing_fenci_gongji"
}