What is Token(词元)?
语言模型处理的基本文本单位——通常是一个单词、子词或字符,映射到模型词汇表中的一个整数 ID。
Definition
Token 是语言模型中文本处理的原子单位。在语言模型处理文本之前,原始字符串必须被转换为一系列 token——从固定词汇表中提取的离散单位。现代 LLM 通常使用子词分词算法,如字节对编码(BPE)或 SentencePiece,根据频率将文本拆分为整词、子词和单个字符的混合。常见词如 "the" 映射到单个 token,而罕见或技术术语则被拆分为多个子词 token。
分词是 LLM 管道中一个关键但经常被忽视的阶段。分词器的词汇表大小(通常为 32,000 到 128,000 个 token)决定了模型文本表示的粒度。更大的词汇表可以更高效地表示文本(每段文本使用更少的 token),但会增加模型嵌入层和输出层的大小。不同的模型使用不同的分词器,这意味着相同的文本在不同模型上会产生不同的 token 序列——这在比较上下文长度或计算成本时很重要。
Token 直接 决定 LLM 的经济性。API 提供商按 token 收费(包括输入和输出),因此模型的分词效率影响每次查询的成本。一个每个词需要 1.3 个 token 的分词器比每个词需要 1.0 个 token 的分词器每个词贵 30%。上下文窗口限制也以 token 为单位衡量,提示消耗的 token 数量决定了为检索上下文或生成输出留下多少空间。
Why It Matters
理解 token 对于有效使用 LLM 至关重要。上下文窗口限制、训练数据规模、推理成本和生成速度都以 token 为单位衡量。一个以词而非 token 来思考的从业者会系统性地错误计算成本、高估可用上下文并误判训练数据需求。
分词还会以微妙的方式影响模型行为。使用非拉丁文字的语言通常分词效率较低,每个语义单位需要更多的 token,这降低了有效上下文长度并增加了多语言应用的成本。代码分词可能特别低效,变量名和语法 token 消耗许多单独的 token。这些分词效率低下直接影响某些用例的可行性。
How It Works
大多数现代 LLM 使用字节对编码(BPE)或其变体。BPE 从单个字节的基础词汇表(256 个条目)开始,在训练语料库中迭代合并最频繁共现的 token 对为新 token。这个过程重复固定次数的合并操作,逐步构建由越来越常见的子词单位组成的词汇表。在推理时,分词器将这些学到的合并规则应用于输入文本进行分词。
每个 token 映射到词汇表中的一个整数 ID。模型的嵌入层将每个 token ID 转换为稠密向 量表示,然后流经 Transformer 层。在输出端,模型为下一个 token 在整个词汇表上生成一个概率分布,概率最高的 token(或根据生成策略采样的 token)被选中并解码回文本。
Example Use Case
一个构建代码助手的团队注意到,他们模型的 4096 token 上下文窗口只能容纳大约 200 行 Python 代码,因为分词器将许多代码元素(变量名、缩进、运算符)拆分为多个 token。他们切换到一个具有代码优化分词器的模型,该模型在 Python 上实现了 1.5 倍更好的分词效率,有效地将可用上下文扩展到 300 行——足以包含准确代码补全所需的周围函数和类。
Key Takeaways
- Token 是 LLM 的基本处理单位,通常是来自固定词汇表的子词或整词。
- 分词效率因语言、领域和分词器算法而异,影响成本和上下文使用。
- 上下文窗口、成本和生成速度都以 token 而非词为单位衡量。
- 大多数现代模型使用 BPE 或 SentencePiece 分词,词汇表大小为 32K-128K 个 token。
- 不同的模型有不同的分词器,使得 token 计数在不同模型之间不可比较。
How Ertas Helps
Ertas Studio 显示训练数据集的 token 计数,并验证训练示例是否在模型的上下文窗口内。Ertas Data Suite 使用分词器感知的处理来确保数据针对目标模型正确分段。
Related Resources
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.