分词器(Tokenizer) 是一种将文本拆分为 token(标记) 的工具。在自然语言处理(NLP)和大语言模型(LLM)中,分词器负责把输入文本转换成 模型可以理解的最小单元,通常是单词、子词或字符。
计算机无法直接理解人类语言,它只能处理数字。所以在训练和使用 AI 模型时,我们需要:
比如,GPT-4 这样的模型不会直接处理"今天天气很好"这样的文本,而是会先经过分词器转换成 token ID,例如:
"今天" → 12034
"天气" → 8942
"很" → 104
"好" → 67
然后模型就可以用这些 token ID 进行计算。
不同的 NLP 任务和模型会使用不同的分词方法,常见的分词器包括:
最简单的方法,按照空格拆分单词。例如:
"The weather is nice today."
会变成:
["The", "weather", "is", "nice", "today", "."]
适用于 英文 这样的有空格的语言,但 对中文无效(因为中文没有空格)。
使用词典或规则进行分词,适用于中文。例如:
"我喜欢自然语言处理"
可以拆成:
["我", "喜欢", "自然语言处理"]
但问题是:
现代 NLP 模型(如 GPT-4、BERT)通常使用 子词分词,它会:
常见的子词分词算法:
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,而不是原始文本。