分词器的词典Vocabulary是决定大语言模型如何“看”世界的关键组件。它不仅仅是一个单词列表更是一个包含了各种粒度文本单元及其对应数字编号Token ID的映射表。以下为你详细解析词典的决定因素、构建过程、英汉词典大小对比以及具体内容的举例。 一、 词典内容有哪些因素决定词典的内容并非随机生成而是由以下三个核心因素共同决定的训练数据的分布 (Data Distribution)词典是基于海量的训练语料库生成的。数据中出现频率越高的文本片段不是单词而是高频的文本片段越容易被收录进词典。语言构成如果训练数据主要是英文词典就会包含大量英文词根如果是多语言数据如 Llama 3 或 Qwen词典就会包含多种语言的常用字符和词汇。领域特征如果训练数据包含大量代码如 CodeLlama词典就会包含编程语言的关键字def,class和符号{},如果包含大量数学公式就会收录数学符号。分词算法 (Tokenization Algorithm)不同的算法决定了“切分”的逻辑。BPE (Byte Pair Encoding)倾向于合并高频出现的字符对。WordPieceBERT使用倾向于保留能最大化训练数据似然概率的子词。Unigram从一个大候选集中随机采样并优化倾向于保留概率最高的子词集合。预设的词典大小 (Vocabulary Size)这是一个超参数。开发者会预先设定一个数字如 32,000 或 100,000。太小会导致很多常用词被切碎序列变长推理变慢。太大会导致模型参数增加Embedding层变大且包含大量生僻词造成资源浪费。️ 二、 词典内容是如何构建的构建过程通常是在模型训练之前进行的主要步骤如下以最主流的 BPE 算法为例数据清洗与预处理收集海量文本进行标准化处理如统一大小写、处理特殊符号。初始化将文本拆解为最基础的单元通常是字符或字节。此时词典里只有 a-z, 0-9, 标点符号等。统计与合并 (迭代过程)统计语料库中所有相邻符号对出现的频率。找出频率最高的一对例如e和s经常连在一起。将它们合并成一个新的符号es并加入词典。在语料库中将所有的es替换为es。重复迭代重复上述步骤直到词典中的符号数量达到预设的上限例如 50,000 个。添加特殊 Token最后人工加入具有特定功能的 Token如pad(填充),unk(未知),s(句首),/s(句尾) 等。 三、 英文与中文分词器词典大小对比英文和中文由于语言特性的不同在词典设计上存在显著差异。表格维度英文分词器 (English Tokenizer)中文分词器 (Chinese Tokenizer)典型大小32k ~ 50k(常见)例如GPT-2 (50k), Llama 1/2 (32k)64k ~ 150k(通常更大)例如ChatGLM (~64k), Qwen-1.5 (~152k)设计逻辑英文单词有明确的空格分隔且词形变化丰富时态、复数。子词Subword策略能很好地通过词根词缀如playing覆盖绝大多数单词。中文没有空格且汉字数量庞大常用字 3000总字数数万。为了保持语义完整性并提高编码效率通常需要更大的词典来覆盖常用词和短语。趋势较新的模型如 Llama 3为了支持多语言和代码词典正在变大扩展到 128k。为了处理多语言混合及专业术语中文模型的词典往往包含大量中英混合词条规模普遍较大。 四、 词典内容举例说明词典本质上是一个哈希表Map结构为{Token字符串: Token_ID}。以下是模拟的词典内容示例1. 英文分词器词典示例 (基于 BPE)英文词典的特点是包含大量词根、词缀以及常见的完整单词。表格Token (内容)ID (编号)说明the123高频词通常作为一个整体。ing456常见后缀会被单独提取出来。play789常见词根。playing8521较常见的完整词可能被合并为一个Token。un99常见前缀。happy101词根。unhappy2048如果频率够高会合并否则由unhappy组成。(空格)50空格通常也是一个特殊的Token。199552常见的数字组合。2. 中文分词器词典示例 (基于 Qwen/ChatGLM 风格)中文词典的特点是“字、词、英文、符号”混排。表格Token (内容)ID (编号)说明的100最高频的汉字独立存在。我101常用代词。人工智能5678常用专业名词通常会被合并为一个Token以提高效率。你好888常用问候语。大模型9952领域热词。Python3421词典中通常包含常用的英文单词。A200常用大写英文字母。15中文标点符号。▁6(在某些模型如SentencePiece中) 代表空格或词边界。总结词典是模型训练数据的“压缩快照”。英文词典倾向于通过组合词根词缀来构建单词而中文词典为了效率倾向于直接收录高频的词语和短语因此中文词典通常更大、内容更丰富。