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