Token 是大语言模型(LLM)处理文本的基础单元,理解它的机制对掌握大模型至关重要。
一、Token 究竟是什么?
在 LLM 中,Token 代表模型可以理解和生成的最小意义单位。它就像是模型世界里的'积木块',通过对这些'积木块'的操作来理解和生成文本。根据标记化方案的不同,Token 可以表示单词、单词的一部分,甚至只表示字符。
例如,英文文本中的'apple'可能是一个 Token,而中文的'苹果'也可能是一个 Token。但有时 Token 并不完全等同于日常理解的单词,比如'playing'可能被拆分为'play'和'ing'两个 Token。为了让模型处理这些 Token,它们会被赋予数值或标识符,并按序列排列输入或输出。简单来说,Token 是原始文本数据和 LLM 可使用的数字表示之间的桥梁。
估算 Token 数量时,可以参考以下经验值:
- 英文中,1 个 Token 约等于 4 个字符。
- 1 个 Token 约等于 3/4 个单词。
- 100 个 Tokens 约等于 75 个单词。
- 1 - 2 个句子约等于 30 个 Tokens。
- 1 个段落约等于 100 个 Tokens。
- 1500 个单词约等于 2048 个 Tokens。
在 OpenAI API 中,max_tokens 参数用于限制生成响应的最大长度。开发者可以使用 tiktokenizer 工具在线查看具体的 Token 划分情况。
二、Token 的特点
以 OpenAI Playground 为例,观察一段文本'Dec 31,1993. Things are getting crazy.'的分词结果。

使用 GPT-3 tokenizer 将相同的单词转换为 Token ID 后,可以看到更细致的划分。

2.1 Token 到数值表示的映射
词汇表负责将每个 Token 映射为唯一的数值 ID,这是 LLM 处理文本数字化的第一步。这种映射允许 LLM 将文本数据作为数字序列进行处理和操作,从而实现高效的计算和建模。
为了捕获 Token 之间的意义和语义关系,LLM 采用 Token 编码技术。这些技术将 Token 转换成称为嵌入的密集数字表示,使 LLM 能够理解和生成连贯且上下文相关的文本。Transformer 架构通过自注意力(self-attention)机制学习 Token 间的依赖关系,生成高质量的嵌入表示。
2.2 Token 级操作:精确地操作文本
Token 级别的操作是对文本数据启用细粒度操作。LLM 可以生成、替换或掩码 Token,以有意义的方式修改文本。这些操作在各种自然语言处理任务中都有应用,例如机器翻译、情感分析和文本摘要等。
2.3 Token 设计的局限性
在将文本发送到 LLM 进行生成之前,会对其进行 tokenization(标记化)。每个模型都以不同的方式执行这一步骤,例如,GPT 模型使用字节对编码(BPE)。Token 会在 tokenizer 的词汇表中分配一个 ID,这是一个将数字与相应的字符串绑定在一起的标识符。
不过,Token 化设计也存在一些局限:
大小写敏感:不同大小写的单词被视为不同的 Token。'hello'是 Token(31373),'Hello'是(15496),而'HELLO'有三个 Token(13909, 3069, 46)。这意味着模型在处理文本时,对于大小写不同的相同单词,会当作不同的单元来处理,可能会增加模型的学习负担。
数字分块不一致:数值'380'在 GPT 中标记为单个 Token。但是'381'表示为两个 Token('38','1')。'382'同样是两个 Token,但'383'是单个 Token。这种数字分块的不一致性或许就是为什么基于 GPT 的模型并不总是擅长数学计算的原因之一,因为模型难以对数字形成统一、准确的理解和处理方式。




