令牌与分词

F5
概念 · AI 基础

令牌与分词:文本为何变成数字。

语言模型从不直接看到字母或单词。它看到的是整数。这一转换步骤——分词——在解释下列现象之前一直是隐形的:账单比预期高、上下文窗口填满得比你数的还快、模型在拼写上出奇地差,或者一个聊天机器人对非英语用户的成本是三倍。本篇让这一隐藏层显形,使其后果不再令人意外。

STEP 1

为什么模型不能直接使用文本。

神经网络在数字上做算术。它无法把字母"h"乘以一个权重。所以任何文本到达模型之前都要经过一个分词器:一段固定的代码,把文本切成称为令牌的片段,并把每个映射为一个整数 ID。模型自始至终只看到那串整数;生成时它输出整数,分词器再把它们映射回文本。

那个显而易见的想法——一个词一个令牌——由于充分的理由被放弃了。词级词汇表无法表示它从未见过的词(新俚语、拼写错误、产品名、代码标识符),而且为覆盖所有语言会大到不可行。另一个极端——一个字符一个令牌——会让序列长得离谱,并迫使模型从零重新学拼写。现代系统居于两者之间,使用子词令牌。

STEP 2

子词令牌:实用的折中。

主流方法(通常是字节对编码,"BPE")通过扫描一个巨大语料库、反复合并相邻出现频率最高的片段来构建词汇表。频繁的字符串赢得自己专属的令牌;稀有的字符串被切成更小、可复用的部分。结果大致如下:

"Hello"            -> 1 token
"Hello world"      -> 2 tokens   ( Hello | world )
"tokenization"     -> 2-3 tokens ( token | ization )
"antidisestablish" -> several pieces
"GPT"              -> often 1 token (very frequent string)
"   "  (3 spaces)  -> real tokens (whitespace is not free)
"日本語"            -> ~3 tokens (about one per character)
"naïve" / curly "  -> more tokens than the plain-ASCII form

由此得出三条持久的经验法则。第一,一个令牌大约是典型英文的 3 到 4 个字符——平均约四分之三个单词——所以令牌数接近但永远不等于单词数。第二,常见英文和常见代码分词起来非常高效,因为它们在分词器的训练语料中很频繁。第三,对那个语料而言任何稀有的东西——非英语文字、带变音的字母、emoji、不常见符号——都会被打碎成许多小令牌。

分词是确定性的,但无法用肉眼预测。相同输入,每次都是相同令牌——然而边界遵循语料统计,而非语法。你无法靠看就可靠地猜出令牌数;必须运行分词器。服务商的分词器演示工具允许你粘贴文本并看到带颜色的边界。

STEP 3

为什么这控制着成本与上下文。

关于使用 LLM 的两个最实用的事实,都是分词的直接后果。

你按令牌计费,而非按词或字符。API 定价以每百万输入令牌和每百万输出令牌报价。你的真实成本是一个你无法目测的分词器输出计数——而且它是不对称的。因为一段英文大约每个令牌 0.75 个单词,但同样的内容在许多其他语言里要花两到四倍的令牌,一个完全相同的聊天机器人对非英语用户每轮的成本可能高 2-4 倍,同时也更快耗尽它的上下文预算。紧凑的格式(更少空格、更少样板)确实更便宜,因为空白符和标点也是真实的令牌。

上下文窗口以令牌为单位衡量。"200K 上下文窗口"意味着输入加输出共 200,000 个令牌,不是 200,000 个单词,也不是 200,000 个字符。用单词来估它会高估;对非英语或代码密集的文本不实测就估,会把你带偏。当一份长文档莫名其妙装不下时,解释几乎总是:它的令牌数远高于它的单词数。

STEP 4

可追溯到令牌的那些失败模式。

若干令人费解的行为在分词里有同一个根源,认出这一特征能省下数小时的误诊:

  • 拼写和数字符差。问模型"strawberry"里有几个"r",它可能会答错。它从未看到那些字母——它看到的是几个子词令牌。字符级任务与模型实际操作的表示是对着干的。
  • 输出在词中间被截断。一段回复在奇怪的地方戛然而止,通常是撞上了 max_tokens 上限,而非内容边界。这个上限以令牌计,所以一个用单词看起来很慷慨的预算可能比预期更早耗尽,尤其是非英语文本。
  • 对看似相同的输入行为不一致。一个用普通引号能工作的提示词,换成"智能"弯引号可能表现不同,因为这两个字符分词结果不同——而且模型在训练中见到 ASCII 形式的次数多得多。对人类看起来相同的输入,对模型可能是不同的序列。

那个最高杠杆的单一习惯:当提示词在成本、长度或古怪边缘情况上出问题时,先看它的分词,再改别的任何东西。令牌是模型操作的真正单元;用单词或字符去推理文本,是在推理一个模型从未看到的层。