构建词汇表:分词器算法(通常是BPE)从单个字节或字符开始,迭代合并最频繁的配对。经过32K–128K次合并后,你会得到一个词汇表,其中常见词是单个token(“the”、“and”、“function”),而罕见词则被分割成子词片段(“un”+“common”、“pre”+“process”+“ing”)。特殊token如<BOS>(序列开始)、<EOS>(结束)和<PAD>(填充)则被显式添加。
更大的词汇表能更好地压缩文本(每句更少的token = 更便宜,能容纳更多上下文),但会增加模型的嵌入表大小。一个128K词汇表配合4096维嵌入,仅token表就增加约5亿参数。对于7B模型,这占总参数的7%,只用于将token映射到向量。对于1B模型,这将占50%。这就是为什么较小的模型倾向于使用较小的词汇表。
词汇表的语言覆盖取决于其训练语料库。Llama的早期分词器主要在英语上训练,将中文字符表示为3–4个token,使中文推理比英语贵3–4倍。Llama 3的分词器在更均衡的多语言数据上训练,大幅提升了非英语效率。这是一个可解决的问题,但需要有意识的努力——默认情况下是英语主导的。