LLM基础-什么是Token?
LLM基础-什么是Token?
概述
Token 是大语言模型(LLM, Large Language Model)中最基本的输入单元,它是语言被模型“理解”的方式。不同于人类可以直接看懂一段自然语言文本,LLM 只能处理数字,而这些数字就是由 token 转换而来的。
通过本文你将了解:
- 什么是 token,它和文字的关系是什么?
- 为什么 LLM 不直接处理文字,而是需要 token?
- tokenizer 是做什么的,它的原理是什么?
- 常见的 tokenizer 类型和编码方式有哪些?
理解 token 是高效使用 LLM 的关键,无论你是要写 prompt、构建聊天机器人、做嵌入检索,还是进行微调训练,都离不开 token。
大模型如何接收输入
我们平常使用大模型,比如 ChatGPT、Deepseek等,都是通过输入一段文字(也就是“提示词”,Prompt)与模型进行交互,看似模型直接把这段文字作为输入,并处理了这段文本。但真实的处理流程情况并非如此。
模型内部并不会直接接收自然语言文本,而是接收经过token转换器编码后的 token 序列。
为什么需要这个转换过程?
- 神经网络只能处理数字。
- 文本需要映射成固定的向量才能进入模型计算。
- 使用 token 可以让模型更好地压缩、理解和预测语言结构。
输入流程图
这个过程不仅用于模型输入,也用于模型输出。Transformer生成的是一个个 token,它们最终会通过一个Tokenizer解码器再被转换回自然语言。
什么是 Token?
Token 是自然语言中被token转换器(Tokenizer)切分处理的最小单元。它可以是:
- 一个字符(例如:“你”)
- 一个单词(例如:“dog”)
- 一个词的一部分(例如:“play” + “ing”)
举例说明:
文本 | Token 序列 | Token 数量 |
---|---|---|
Hello | [“Hello”] → [15496] | 1 |
playing | [“play”, “ing”] → [1223, 342] | 2 |
我喜欢你 | [“我”, “喜欢”, “你”] | 3 |
Let’s go! | [“Let”, “'”, “s”, " go", “!”] | 5 |
注意:token 是模型所识别的基础单元,并不一定等同于自然语言中的“词”或“字”。
为什么要这么分?
这样的切分方式有助于:
- 减少词表大小,节省模型参数量。
- 提升对罕见词、新词、拼写错误的泛化能力。
- 对多语言尤其有效,尤其像中文、日文、韩文等语言没有天然空格分词的情况。
Token 是整数序列
神经网络不理解文本,只能处理数字。因此,token 需要被编码为整数,再被嵌入成向量,供模型处理。
示例流程:
文本输入:
"你好,世界"
Tokenizer 切分:
["你", "好", ",", "世界"]
编码为整数 ID:
[9234, 8721, 13, 45012]
这些整数再被转换成向量(通过嵌入层),输入给 Transformer 模型进行计算。
为什么是整数?
因为神经网络的嵌入层(Embedding Layer)就是通过“整数索引”去查一个巨大的向量表:
embedding[token_id] → 向量
所以 token 最终表现为一串整数 ID,是大模型能够理解语言的桥梁。
Tokenizer(Token 转换器)
Tokenizer 是完成文本和 token 之间转换的关键工具。
它的作用分为两部分:
- **编码(Encode):**将原始自然语言转为 token 数组。
- **解码(Decode):**将 token 数组转换回文本。
一个优秀的 tokenizer 应该具备以下特点:
- 高效:转换速度快,节省内存
- 可压缩:长文本能切分成较少 token
- 泛化性强:对未知单词也能合理切分
举个实际例子(使用 Tiktoken):
python复制编辑from transformers import GPT2Tokenizertokenizer = GPT2Tokenizer.from_pretrained("gpt2")
text = "I love AI"
token_ids = tokenizer.encode(text)
print(token_ids) # 输出:[40, 502, 1332]
常见的 Token 编码算法
不同的模型和任务,会使用不同的 tokenizer 和编码方式,主要包括以下几种:
1. BPE(Byte Pair Encoding)
- 原理:通过统计频繁出现的字节对,逐步合并成较大的单元。
- 应用:GPT 系列(如 GPT-2/3/4)。
- 特点:压缩效率高,适合多语言场景。
2. WordPiece
- 原理:将词拆解成词根 + 后缀,用于解决罕见词问题。
- 应用:BERT、RoBERTa。
- 特点:词表更小,训练更稳定。
3. SentencePiece
- 原理:不依赖空格分词,基于字符级建模。
- 应用:T5、XLNet、ALBERT。
- 特点:适用于无空格语言,如中文、日文。
4. Tiktoken(OpenAI 专用)
- 特点:优化 GPT 使用场景,速度极快,token 估算准确。
- 提供工具支持编码、解码和 token 计数。
Token 使用中的常见问题
1. Token 限制
每个大模型都有上下文 token 限制:
模型 | 最大上下文长度 |
---|---|
GPT-3.5 | 4096 tokens |
GPT-4 (8K) | 8192 tokens |
GPT-4 (32K) | 32768 tokens |
Claude 2 | 100,000+ tokens |
当我们提供的输入 + 模型生成的输出 token 总和超过限制,就会导致:
- 截断输入
- 报错
- 输出不完整
总结
- Token 是语言模型理解语言的基本单位,实质上是一个整数序列。
- Tokenizer 是桥梁,负责把文本编码成模型可识别的 token,或将生成结果解码回文本。
- 理解 token 的本质和机制,有助于更合理地设计提示词、避免上下文超限、评估模型成本。
- 不同的 tokenizer 编码算法适用于不同的模型架构和语言类型。