理解令牌(Token),这个在大语言模型(LLM)领域无处不在的术语,是掌握现代人工智能的基石。无论你是为API付费,受限于上下文窗口,还是仅仅对背后的运作原理感到好奇,都无法绕开它。本文将深入探讨令牌的本质,解析其工作原理,并阐述它对实际应用的影响,助你真正理解大语言模型。

令牌:语言的乐高积木

可以将大语言模型(LLM)对语言的处理方式想象成用乐高积木搭建城堡。我们不用单个塑料分子(字母),也不用预先建造好的墙壁(句子),而是使用标准的积木块:乐高积木。在LLM的世界里,令牌就是语言的乐高积木。

单独的字母太小,本身没有太多的含义。而完整的单词虽然信息量更大,但会导致词汇量变得异常庞大,比如“run”、“running”、“ran”,以及拼写错误、人名和新的俚语等。令牌则是一种“恰到好处”的解决方案。它们是文本的块,可以是完整的单词,也可以只是单词的一部分。例如,在处理英文文本时,“unbreakable”这个词可能被分解为“un”,“break”,“able”三个令牌。中文的例子可以参考“中华人民共和国”被分解为“中华”,“人民”,“共和国”。

令牌化的技术定义

令牌是一个字符序列,大语言模型将其视为单个单元进行处理和分析。将一段文本分解成这些令牌的过程称为令牌化(Tokenization)。LLM不像我们一样看到单词或句子,它们看到的是一个数字序列,其中每个数字对应于一个特定的令牌

令牌化是LLM理解和处理文本的关键步骤。不同的LLM模型使用不同的令牌化算法,例如Byte-Pair Encoding (BPE) 和 WordPiece。这些算法旨在平衡词汇量大小和模型的表达能力。

例如,对于英文句子:“Tokenization is fascinating.”,LLM 不会简单地按空格拆分。它会使用一种特殊的算法(如Byte-Pair Encoding或WordPiece)进行智能分解。分解后的结果可能如下:

  • “Token” 是一个非常常见的词,它拥有自己的令牌
  • “ization” 是一个常见的后缀,它也拥有自己的令牌
  • “is” 是一个常见的词,它成为一个单独的令牌
  • “fascinating” 可能会被分解成 “fascin” 和 “ating”。
  • 单词前的空格通常包含在令牌中。

因此,文本“Tokenization is fascinating.”可能会变成这样的令牌列表:

[“Token”, “ization”, “ is”, “ fascin”, “ating”, “.”]

每个令牌在模型的词汇表中都有一个唯一的 ID 号。例如:

[21421, 5644, 318, 14594, 822, 13]

这个数字序列才是 LLM 真正处理的内容。

令牌化的工作原理

理解令牌化的过程,需要了解一些常见的算法,例如Byte-Pair Encoding (BPE) 和 WordPiece。

  • Byte-Pair Encoding (BPE):BPE 是一种贪婪算法,它从单个字符开始,迭代地将最常见的字符对合并成新的令牌。例如,如果 “e” 和 “s” 经常一起出现,BPE 可能会将它们合并成 “es”。这个过程一直持续到达到预定义的词汇表大小。BPE 的优点是简单有效,能够处理未登录词(Out-of-Vocabulary words),因为它总是可以将单词分解成已知的子词令牌

  • WordPiece:WordPiece 类似于 BPE,但它使用概率模型来决定哪些字符对应该合并。具体来说,WordPiece 会选择合并能够最大程度提高语言模型似然度的字符对。这使得 WordPiece 能够更好地捕捉语言的统计规律。BERT 模型就使用了 WordPiece 令牌化算法。

以中文为例,假设我们有如下文本:“我喜欢自然语言处理”。BPE 或 WordPiece 可能会首先将每个字作为一个令牌

[“我”, “喜”, “欢”, “自”, “然”, “语”, “言”, “处”, “理”]

然后,如果 “自然” 和 “语言” 经常一起出现,算法可能会将它们合并成新的令牌

[“我”, “喜”, “欢”, “自然”, “语言”, “处”, “理”]

继续迭代,最终可能得到如下的令牌序列:

[“我”, “喜欢”, “自然语言处理”]

采用子词方法的原因

这种子词令牌化方法非常巧妙,原因如下:

  • 管理词汇量大小:模型不需要知道所有存在的单词。它只需要知道常见的单词和常见的子词片段。这使得词汇表保持在可管理的范围内(例如,50,000 到 100,000 个令牌),而不是无限大。GPT 系列模型通常使用大约 50,000 个令牌的词汇表。
  • 处理罕见词:模型可以通过组合已知的令牌来理解和生成它从未见过的单词,例如 “techno-optimism” 可以分解为 [“techno”, “-“, “optim”, “ism”]。对于中文来说,也可以通过组合已知的字或词来理解新的词汇。
  • 效率:它在微小的、无意义的字符级别和巨大的、低效的单词级别之间取得平衡。它有效地捕捉了意义。

例如,考虑一个包含大量专业术语的医学文本。如果使用基于单词的令牌化方法,词汇表可能会变得非常庞大,并且模型可能无法处理未登录词。但是,如果使用子词令牌化方法,模型可以将专业术语分解成已知的子词令牌,从而更好地理解文本。

令牌对你的重要性(实际应用)

理解令牌至关重要,原因有三:

  • 成本:大多数 LLM API(如 OpenAI、Google、Anthropic 提供的 API)按令牌收费,而不是按字或字符收费。这包括你的输入(提示)和模型的输出(响应)。更少的令牌 = 更低的运行成本。 以OpenAI为例,不同模型的令牌单价不同,GPT-4模型比GPT-3.5模型更贵。选择合适的模型,并优化提示词以减少令牌数量,可以有效降低成本。
  • 上下文窗口(模型的“记忆”):每个 LLM 都有一次可以处理的最大令牌数。这被称为“上下文窗口”。例如,GPT-4 的上下文窗口可能是 8,192 或 32,768 个令牌。如果你的对话或文档超过此限制,模型将忘记最早的部分。这意味着,如果你想让模型理解一篇长篇文章,你需要确保文章的令牌数量在模型的上下文窗口限制之内。 如果超过限制,则需要采用一些技巧,例如总结、分段处理等。
  • 模型行为:单词的令牌化方式会微妙地影响模型的输出。对于模型来说,一个作为单个令牌的单词通常比分成多个令牌的单词“更容易”处理。这有时可以解释为什么模型可能会拼错单词或难以处理复杂的、行话繁多的术语。 例如,如果一个罕见的专业术语被分解成多个令牌,模型可能无法准确理解其含义,从而导致生成不准确或不相关的文本。

例如,在使用GPT-3.5模型时,如果提示词中包含大量不常见的英文单词,模型可能会将这些单词分解成多个令牌,从而增加成本。此外,模型也可能无法准确理解这些单词的含义,导致生成质量下降。

一个好的经验法则

对于英文文本,一个非常有用的常见近似值是:

1 个令牌 ≈ ¾ 个单词

100 个令牌 ≈ 75 个单词

对于中文文本,由于中文的特性,一个令牌通常对应一个字或一个词语。因此,中文的令牌数量通常比英文少。

你可以使用在线工具,例如 OpenAI 的 令牌化工具,准确地查看你的文本将如何被特定模型转换成令牌

优化令牌使用,提升 LLM 应用效率

理解令牌机制后,我们可以采取一些策略来优化令牌的使用,从而提高 LLM 应用的效率和降低成本:

  1. 精简提示词:仔细审查你的提示词,去除不必要的词语和信息,只保留关键内容。例如,使用简洁明了的指令,避免冗长的描述。
  2. 使用高效的提示技巧:采用一些高级的提示技巧,例如思维链(Chain-of-Thought),可以在不增加令牌数量的情况下,提高模型的推理能力。
  3. 控制生成长度:通过设置 max_tokens 参数,限制模型生成的文本长度,避免浪费令牌
  4. 选择合适的模型:根据实际需求选择合适的模型。对于简单的任务,可以选择较小的模型,以降低成本。
  5. 使用缓存机制:对于重复的提示词,可以使用缓存机制,避免重复计算令牌
  6. 使用向量数据库: 如果你的上下文信息非常多,可以提前将信息存储到向量数据库中,使用时检索相关信息,从而减少令牌使用量。

未来发展趋势

随着大语言模型的不断发展,令牌化技术也在不断演进。未来的发展趋势可能包括:

  • 更高效的令牌化算法:研究人员正在探索新的令牌化算法,以进一步压缩文本,减少令牌数量。
  • 自适应令牌化:根据不同的任务和数据集,自动调整令牌化策略。
  • 多语言支持:开发能够更好地处理多种语言的令牌化方法。
  • 无损压缩令牌化: 在保证模型效果不下降的前提下,对令牌进行压缩,进一步减少令牌数量。

总而言之,令牌是大语言模型运作的基石。理解令牌的本质、工作原理和实际应用,对于充分利用 LLM 的强大能力至关重要。 通过优化令牌使用,我们可以提高 LLM 应用的效率,降低成本,并最终推动人工智能技术的进步。 掌握令牌,就是掌握通往 AI 未来的钥匙。