1. 大模型分词器与词表基础解析
在大语言模型(LLM)的工作流程中,分词器(Tokenizer)扮演着至关重要的角色。想象你正在教一个完全不懂中文的外国人阅读中文文章,你需要先给他一本字典,然后教他如何查字典——分词器就是这个过程中的"翻译官"和"查字典指南"。
1.1 为什么需要分词器?
直接使用原始字符或单词作为处理单元存在明显缺陷:
字符级处理的局限性:
- 中文把每个字单独处理:"机器学习"→"机"、"器"、"学"、"习"
- 英文把单词拆成字母:"unhappy"→"u"、"n"、"h"、"a"、"p"、"p"、"y"
- 导致的问题:序列长度暴增,模型处理效率低下,且丢失了有意义的语义单元
整词级处理的不足:
- 中文:"机器学习"作为一个整体单元
- 英文:"unhappy"作为一个整体单元
- 导致的问题:无法处理新词和罕见词,词表会无限膨胀
实际案例:GPT-3如果使用整词级处理,词表可能需要数百万个条目才能覆盖所有英语单词和变体,而使用子词算法后,词表仅5万左右就能有效处理。
1.2 子词(Subword)的平衡之道
子词级分词找到了一个巧妙的平衡点:
- 常见词保持完整:"machine"、"learning"
- 不常见词拆解:"unhappy"→"un"+"happy"
- 全新词也能处理:"ChatGPT"→"Chat"+"G"+"PT"
这种处理方式带来了三大优势:
- 词表大小可控(通常3万-10万)
- 能处理未见过的词汇
- 保持了有意义的语义单元
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 词表文件的结构与内容
词表文件(Vocabulary)本质是一个双向映射表,核心包含两部分内容:
2.1 基础结构示例
python复制{
"<unk>": 0, # 未知词标识
"<s>": 1, # 句子开始
"</s>": 2, # 句子结束
",": 3, # 标点符号
".": 4,
"the": 5, # 高频词
"的": 6, # 中文高频字
"机器": 7, # 子词单元
"学习": 8,
"##ing": 9 #
