几乎所有大型语言模型(LLM)都有自己独立的词表(Vocabulary)。这是模型设计和训练过程中的核心组件之一。以下是关于词表的关键点:

1. 词表的作用

  • 分词基础:词表定义了模型如何将输入文本拆分成基本单元(如单词、子词、符号等)。
  • 数值化映射:每个词表中的单元对应一个唯一整数(Token ID),模型通过处理这些 ID 进行运算。
  • 模型容量:词表大小直接影响模型的参数量和处理效率。

2. 不同模型的词表差异

  • 语言差异
    • 中文模型(如 ChatGLM、Qwen)包含大量中文字符和常见中文词汇。
    • 多语言模型(如 mBART、NLLB)的词表可能覆盖数十种语言的字符。
  • 训练数据
    • 代码模型(如 CodeLlama)的词表包含编程语言关键词(if, def, {} 等)。
    • 专业领域模型可能包含生物/化学术语(如 AlphaFold 相关的蛋白质序列 token)。
  • 分词算法
    • BPE(Byte Pair Encoding):GPT 系列、RoBERTa。
    • WordPiece:BERT、DistilBERT。
    • Unigram:T5、XLM-R。
    • SentencePiece:LLaMA、Gemini(支持跨语言无空格分词)。

3. 典型模型的词表大小对比

模型 词表大小 特点
GPT-2 50,257 英文为主,含常见符号
BERT 30,522 英文+WordPiece 子词
LLaMA 3 128,256 多语言优化,支持代码
Qwen-1.5 152,064 中英混合,覆盖数学/代码符号
Claude 3 ~200k 强调多语言和长上下文支持

4. 为什么需要自定义词表?

  • 效率优化:避免对常见词(如英文的 the、中文的 )过度拆分。
  • 语言适配:中文/日文等非空格语言需要不同的分词策略。
  • 领域适配:医学/法律模型需保留专业术语的完整性(如 "冠状动脉" 不应被拆解)。
  • 生僻词处理:通过子词组合(如 "Deep" + "##seek" → "Deepseek")解决未登录词问题。

5. 词表如何影响模型行为?

  • 分词结果差异
    • 输入 "ChatGPT is amazing!"
      • GPT-2 可能拆为 ["Chat", "G", "PT", " is", " amazing", "!"]
      • LLaMA 可能拆为 ["Chat", "GPT", " is", " amazing", "!"]
  • 语言偏误:词表以英文为主时,中文/泰文等语言的效率会下降。
  • 信息损失:过小的词表可能导致专有名词被强制拆解(如 "Transformer" → "Trans" + "##former")。

6. 特殊 Token 示例

除了常见词汇,词表还包含功能性 Token:

  • [CLS][SEP] → BERT 用于句子分类/分隔
  • <|im_start|> → ChatML 格式中的对话开始标记
  • <0x04>(EOS)→ 句子结束符
  • → SentencePiece 表示空格

总结:

词表是每个大模型的身份证语言基因,决定了模型如何看待文本。不同模型因目标语言、领域和算法选择差异,会采用完全不同的词表设计。这也是同一段输入在不同模型中表现各异的原因之一!

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐