首页 AI科技文章正文

大模型如何认识世界:理解 token 的概念

AI科技 2025年10月21日 06:38 0 aa

原文 | How LLMs See the World

编译 | 段小草 + Gemini 2.5 Pro

对于 LLM 来说,Token 是模型处理文本的基本单位。当你在 ChatGPT 中输入「Hello world!」时,它看到的不是两个单词和一个标点符号,而是可能四个独立的 Token:['Hello', ' world', '!', '\n']

Token 主宰着 LLM 的世界。你向模型发送 Token,按 Token 支付费用,模型读取、理解和操作的都是 Token。

大模型如何认识世界:理解 token 的概念

什么是 Token?

Token 是 LLM 处理文本的基本单位。

不过,Token 并不总是等同于单词。根据所使用的分词方法,一个 Token 可以代表:

  • 一个单独的字符
  • 一个子词(单词的一部分)
  • 一个完整的单词
  • 标点符号
  • 特殊符号
  • 空白字符

例如,句子「I love machine learning!」可能会被分词为 ["I", "love", "machine", "learning", "!"],或者根据分词方法的不同,也可能被分词为 ["I", " love", " machine", " learn", "ing", "!"]

为什么分词很重要

分词之所以非常重要,有以下几个原因:

  1. 词表管理:LLM 的词汇表是有限的(通常在 3 万到 10 万个 Token 之间)。分词使得这些有限的词汇表能够表达一个开放式的语言空间。通过将稀有或复杂的词分解为可复用的子词单元(例如,「extraordinary」→「extra」+「ordinary」),模型避免了为每种语言中的每个可能单词都设置一个单独 Token 的需要。
  2. 处理未知词汇:好的分词策略可以将不熟悉的单词分解为熟悉的子词单元,使模型能够处理它们从未见过的单词。例如,一个从未见过「biocatalyst」这个词的模型,可能仍然能识别出「bio」和「catalyst」作为独立的 Token,并从中提取有用的含义。
  3. 效率:文本序列的长度直接影响计算需求。高效的分词可以减少表示文本所需的 Token 数量。
  4. 模型性能:分词的质量影响着 LLM 理解和生成文本的好坏,特别是对于非英语语言或专业领域。分词不佳的输入会割裂语义或扭曲结构。

LLM 如何读取 Token

文本被分词后,还有一个步骤将这些符号化的 Token 转换为神经网络能够实际处理的东西:数值表示。词汇表中的每个 Token 都被分配一个唯一的整数 ID(称为 Token ID)。例如:

「Hello」→ Token ID 15496

「 world」→ Token ID 995

然后,这些 Token ID 通过一个嵌入层 (embedding layer) 被转换成高维数值向量,称为嵌入 (embeddings)。每个 Token ID 映射到一个由实数组成的密集向量(通常是 512、1024 或更多维度)。例如,Token「Hello」可能会变成一个像 [0.23, -0.45, 0.78, ...] 这样的向量。

这种数值转换是必要的,因为神经网络只能对数字执行数学运算,而不能对文本符号进行运算。嵌入向量捕捉了 Token 之间的语义关系,相似的 Token 在这个高维空间中具有相似的向量表示。这就是模型「理解」 「king」和「queen」相关,或者「run」和「running」共享意义的方式。

常见的分词方法

1. Byte Pair Encoding (BPE)

BPE 是现代 LLM 中使用最广泛的分词方法之一,被 GPT-2、GPT-3 和 GPT-4 等模型所采用。

工作原理:

  • 从一个包含单个字符的基础词汇表开始
  • 统计训练语料库中相邻字符对的频率
  • 迭代地将最频繁的字符对合并成新的 Token
  • 持续这个过程,直到达到期望的词汇表大小

BPE 创建了一个灵活的子词词汇表,能够高效地表示常用词,同时也能分解稀有词。这有助于模型处理拼写错误、复合词和未知术语,而无需诉诸于一个「未知 Token」。

一个关键的变体是 byte-level BPE,它直接处理 UTF-8 字节而不是 Unicode 字符。这确保了任何可能的字符都能被表示(即使是那些在训练期间未见过的字符),从而避免了「未知 Token」问题。

大模型如何认识世界:理解 token 的概念

2. WordPiece

WordPiece 由 Google 推出,用于 BERT、DistilBERT 和 Electra 等模型。

工作原理:

  • 与 BPE 类似,它从一个字符级别的词汇表开始
  • 但它不是纯粹根据频率进行合并,而是选择那些能够最大化训练数据似然性的字符对
  • 它使用一个特殊的前缀(通常是「##」)来标记不以单词开头的子词 Token

例如,在 WordPiece 中,「unhappy」可能会被分词为 ["un", "##happy"]

3. SentencePiece

SentencePiece 是 Google 开发的一种分词器,它直接对原始文本进行操作,无需特定语言的预分词。它被用于 T5、XLNet 和 ALBERT 等模型。

工作原理:

  • 将输入文本视为原始的 Unicode 字符流,包括空格
  • 空格被保留为一个特殊符号(通常是「 」)
  • 可以实现 BPE 或 Unigram 语言模型算法
  • 消除了对特定语言预分词的需求
  • 对于没有明确单词边界的语言(如日语或中文)尤其有效

例如,短语「Hello world」可能会被分词为 ["Hello", "world"],其中 ▁ 表示一个单词边界。

4. Unigram

Unigram 通常与 SentencePiece 一起使用,它采用一种概率性的方法,而不是基于合并的方法。

工作原理:

  • 从一个包含大量可能的子词候选的大词汇表开始
  • 迭代地移除那些对模型表示训练数据能力影响最小的 Token
  • 使用一个概率模型来找到单词最可能的分段方式

与通过合并来构建词汇表的 BPE 或 WordPiece 不同,Unigram 的工作方式更像雕刻,从一个大的整体开始,然后进行修剪。这使得它能保留更广泛的分词选项,并在推理时具有更大的灵活性。

大模型如何认识世界:理解 token 的概念

Token 和上下文窗口

LLM 有一个有限的「上下文窗口 (context window)」,这是它们一次可以处理的最大 Token 数量。这个限制直接影响:

  • 输入长度:模型在生成回应前可以考虑多少文本。
  • 输出长度:在一次补全中可以生成多少内容。
  • 连贯性:在较长的对话或文档中,模型维持主题一致性的能力。

像 GPT-2 这样的早期模型被限制在约 1,024 个 Token。GPT-3 将其增加到 2,048。如今,前沿模型的限制达到了 100 万以上,例如 Gemini 2.5 Pro。

关于分词需要了解什么

Token 计数

理解 Token 计数对于以下方面很重要:

  • 估算 API 成本(许多 LLM API 按 Token 收费)
  • 保持在上下文窗口限制内
  • 优化提示词设计

对于英文文本,一个粗略的估算(这会有变化!):

  • 1 个 Token ≈ 4 个字符
  • 1 个 Token ≈ 0.75 个单词
  • 100 个 Token ≈ 75 个单词,或约 1 个段落

分词的特性

分词可能导致一些意想不到的行为:

  1. 非英语语言:许多 LLM 对非英语文本的分词效率较低,每个单词使用的 Token 比英语多。
  2. 特殊字符:不寻常的字符、表情符号或特定格式可能会消耗比预期更多的 Token。例如,像「」这样的单个 emoji 表情符号可能会消耗多个 Token,具体取决于分词器,这可能会扭曲含义或意外地增加 Token 使用量。
  3. 数字和代码:一些分词器处理数字和编程代码的方式不符合直觉,会将它们分解成多个 Token。这种碎片化使得模型难以进行数值推理或生成准确的代码,因为逻辑或数学单元没有被作为一个整体保留下来。

分词如何影响 LLM 的性能

大语言模型中的许多挑战和怪癖并非源于模型本身,而是源于文本的分词方式。以下是分词如何影响不同性能领域:

  • 拼写和错别字:当用户拼错一个单词时,分词器通常会将其分解为不熟悉或罕见的 Token 组合。由于模型是从频繁的 Token 序列中学习模式的,不熟悉的 Token 会干扰其理解或纠正输入的能力。
  • 跨语言性能:主要为英语设计的分词器倾向于将其他语言——特别是那些具有不同文字或形态的语言——的单词分解成更多的 Token。这导致更高的 Token 数量、更差的上下文压缩能力,以及在非英语文本中流畅度和准确性的降低。
  • 数值和数学推理:数字经常被分割成多个 Token(例如,「123.45」可能变成 ["123", ".", "45"])。这扰乱了数值理解和算术运算,因为模型并不总是将数字视为原子单元,而是看作一连串的部分。
  • 代码生成和理解:编程语言依赖于精确的语法和结构。如果分词器不一致地分割运算符、标识符或缩进,就会妨碍模型正确生成或解释代码的能力。良好对齐的代码分词可以提高模型在补全、格式化和错误检测方面的准确性。

臭名昭著的 3.11 vs 3.9 问题

大语言模型常常在看似简单的数值比较上失败,比如「3.11 和 3.9 哪个更大?」。分词为了解数字在底层是如何被处理的提供了线索。

让我们看看这两个数字:3.11 和 3.9。当被分词时,它们被分解成独立的组件。为简单起见,假设「3.11」被分成诸如「3」、「.」和「11」之类的 Token,而「3.9」则被分成「3」、「.」和「9」。对于语言模型来说,这些不是数值,而是符号片段。模型不是将 3.11 与 3.9 作为浮点数值进行比较。它是在根据这些 Token 在其训练数据中出现的统计可能性进行模式匹配,以预测接下来应该出现什么文本。

如今的模型有多种方式可以正确回答这些问题:

  • 它们可能纯粹通过随机性答对。由于 LLM 本质上是非确定性的,有时答案是对的,有时是错的。
  • LLM 可以通过特定的 SFT 训练数据进行训练,或者在比较像这类流行的「测试」时有系统提示词指令。这类似于硬编码正确答案。
  • 今天的 LLM 通常不是孤立的。它们可以访问帮助它们进行数学、数据分析和网络搜索的工具。这些工具允许模型正确地比较这些离散的数字。
  • 有时,提示词的框架和上下文确实很重要。例如,暗示进行定量推理的提示词可能比通用的、不明确的提示词表现得更好。
大模型如何认识世界:理解 token 的概念

结论

分词是 LLM 在将文本转换为数字之前,将其分解为可处理单元的方式。像「Hello world!」这样的文本会变成 ['Hello', ' world', '!'] 这样的 Token,然后被转换为神经网络可以理解的数值向量。常见的方法包括 BPE(被 GPT 模型使用)、WordPiece(BERT)和 SentencePiece(T5)。

分词直接影响成本(你按 Token 付费)、上下文限制(模型只能处理这么多 Token)和性能表现。它解释了为什么 LLM 不擅长数学运算(数字被拆分)、为什么非英语文本效率较低(需要更多 Token),以及为什么模型在「3.11 vs 3.9」的比较中失败(它们看到的是零散的符号,而不是数字)。

理解分词机制能帮助你编写更好的提示词、估算 API 成本、排查问题,并理解现代 AI 的能力和根本局限。它让你更深入地洞察现代 AI 的能力与局限,因为这是 LLM 认识世界上一切事物的核心视角。

发表评论

长征号 Copyright © 2013-2024 长征号. All Rights Reserved.  sitemap