Token
现代大型语言模型(LLMs)通常基于 transformer 架构,该架构处理一系列被称为“令牌”(tokens)的单元。令牌是模型用于分解输入和生成输出的基本元素。在本节中,我们将讨论令牌是什么以及语言模型如何使用它们。
什么是令牌?
令牌是语言模型读取、处理和生成的基本单位。这些单位的定义方式因模型提供商而异,但通常它们可以表示
- 一个完整的词(例如,“apple”),
- 一个词的一部分(例如,“app”),
- 或其他语言组成部分,如标点符号或空格。
模型对输入进行分词(tokenizes)的方式取决于其分词器算法,该算法将输入转换为令牌。同样,模型的输出也以令牌流的形式出现,然后被解码回人类可读的文本。
令牌在语言模型中如何工作
语言模型使用令牌的原因与其理解和预测语言的方式密切相关。语言模型不直接处理字符或整个句子,而是关注代表有意义语言单位的令牌。过程如下:
-
输入分词:当你向模型提供提示(例如,“LangChain is cool!”)时,分词器算法会将文本拆分成令牌。例如,这个句子可以被分词为
["Lang", "Chain", " is", " cool", "!"]
。请注意,令牌边界并不总是与单词边界对齐。 -
处理:这些模型背后的 transformer 架构按顺序处理令牌,以预测句子中的下一个令牌。它通过分析令牌之间的关系,从输入中捕获上下文和意义来实现这一点。
-
输出生成:模型逐个生成新的令牌。这些输出令牌随后被解码回人类可读的文本。
使用令牌而不是原始字符使模型能够专注于具有语言学意义的单位,这有助于它更有效地捕获语法、结构和上下文。
令牌不一定限于文本
尽管令牌最常用于表示文本,但它们不一定限于文本数据。令牌也可以作为多模态数据的抽象表示,例如
- 图像,
- 音频,
- 视频,
- 以及其他类型的数据。
截至撰写本文时,几乎没有模型支持多模态输出,并且只有少数模型可以处理多模态输入(例如,文本与图像或音频的组合)。然而,随着人工智能的不断发展,我们预计多模态将变得更加普遍。这将使模型能够处理和生成更广泛的媒体,显著扩展了令牌所能表示的范围以及模型如何与不同类型的数据进行交互。
原则上,任何可以表示为令牌序列的数据都可以以类似的方式建模。例如,由一系列核苷酸(A、T、C、G)组成的DNA 序列可以被分词并建模,以捕获模式、进行预测或生成序列。这种灵活性使得基于 transformer 的模型能够处理各种类型的序列数据,进一步拓宽了它们在各个领域的潜在应用,包括生物信息学、信号处理以及其他涉及结构化或非结构化序列的领域。
请参阅多模态部分,获取有关多模态输入和输出的更多信息。
为什么不使用字符?
使用令牌而不是单个字符可以使模型更高效,并更好地理解上下文和语法。令牌代表有意义的单位,例如整个单词或单词的一部分,这使得模型能够比处理原始字符更有效地捕获语言结构。令牌级的处理还减少了模型需要处理的单位数量,从而实现更快的计算。
相比之下,字符级的处理需要处理更长的输入序列,使得模型更难学习关系和上下文。令牌使模型能够专注于语言学意义,使它们在生成响应时更准确和高效。
令牌如何对应文本
请参阅 OpenAI 的这篇文章,了解有关令牌如何计数以及如何对应文本的更多详细信息。
根据 OpenAI 的文章,英语文本的近似令牌计数如下:
- 1 个令牌 ≈ 4 个英文字符
- 1 个令牌 ≈ ¾ 个单词
- 100 个令牌 ≈ 75 个单词