什么是分词器

半兽人 发表于: 2025-03-25   最后更新时间: 2025-03-25 11:25:32  
{{totalSubscript}} 订阅, 19 游览

分词器(Tokenizer) 是一种将文本拆分为 token(标记) 的工具。在自然语言处理(NLP)和大语言模型(LLM)中,分词器负责把输入文本转换成 模型可以理解的最小单元,通常是单词、子词或字符。


为什么需要分词器?

计算机无法直接理解人类语言,它只能处理数字。所以在训练和使用 AI 模型时,我们需要:

  1. 把文本拆成 token(比如单词、子词或字符)。
  2. 给每个 token 编号(token ID)。
  3. 输入模型,让它进行计算

比如,GPT-4 这样的模型不会直接处理"今天天气很好"这样的文本,而是会先经过分词器转换成 token ID,例如:

"今天"12034  
"天气"8942  
"很"104  
"好"67

然后模型就可以用这些 token ID 进行计算


分词器的类型

不同的 NLP 任务和模型会使用不同的分词方法,常见的分词器包括:

1. 空格分词(Whitespace Tokenization)

最简单的方法,按照空格拆分单词。例如:

"The weather is nice today."

会变成:

["The", "weather", "is", "nice", "today", "."]

适用于 英文 这样的有空格的语言,但 对中文无效(因为中文没有空格)。


2. 规则分词(Rule-based Tokenization)

使用词典或规则进行分词,适用于中文。例如:

"我喜欢自然语言处理"

可以拆成:

["我", "喜欢", "自然语言处理"]

但问题是:

  • 规则太死板,遇到 新词(比如 "大模型")可能无法正确分词。

3. 子词分词(Subword Tokenization)

现代 NLP 模型(如 GPT-4、BERT)通常使用 子词分词,它会:

  • 保留常见的词(如 "weather")。
  • 拆分不常见的词(如 "unhappiness" → ["un", "happiness"])。
  • 减少词汇量,提高泛化能力

常见的子词分词算法:

  1. BPE(Byte Pair Encoding):GPT-4、GPT-3、CLIP 使用的分词方式。
  2. WordPiece:BERT、ALBERT、DistilBERT 使用的分词方式。
  3. Unigram Language Model:T5、SentencePiece 使用的分词方式。

GPT-4 使用的分词器(BPE)

GPT-4 和 GPT-3.5 使用 BPE(Byte Pair Encoding) 分词器,它的特点是:

  • 可以处理多种语言(包括英文、中文、日文等)。
  • 会把罕见单词拆成多个子词,但高频单词不会拆。
  • 对中文的处理方式 是以「子词」为单位,不会按单个字符拆分。

示例

以 OpenAI 的 tiktoken 分词器为例:

import tiktoken

enc = tiktoken.get_encoding("cl100k_base")  # GPT-4 使用的分词器
text = "今天天气很好"
tokens = enc.encode(text)

print(tokens)  # 输出 token ID
print(enc.decode(tokens))  # 还能还原回去

可能会输出:

[12034, 8942, 104, 67]

模型内部只处理这些 token ID,而不是原始文本。


总结

  1. 分词器 负责把文本转换成 token,让模型能理解。
  2. 不同的分词方法 适用于不同的语言(空格、规则、子词等)。
  3. GPT-4 使用 BPE 分词器,能高效处理多种语言。

分词器在线测试

阿里通义千问:https://dashscope.console.aliyun.com/tokenizer

更新于 2025-03-25
在线,1小时前登录

查看LLM更多相关的文章或提一个关于LLM的问题,也可以与我们一起分享文章