了解 NLP 中的标记化:文本处理初学者指南

已发表: 2024-11-26

标记化是自然语言处理 (NLP) 的一个关键但经常被忽视的组成部分。在本指南中,我们将解释标记化、其用例、优点和缺点,以及为什么它涉及几乎所有大型语言模型 (LLM)。

目录

  • NLP 中的标记化是什么?
  • 标记化的类型
  • 代币化如何运作
  • 代币化应用
  • 代币化的好处
  • 代币化的挑战

NLP 中的标记化是什么?

标记化是一种 NLP 方法,可将文本转换为机器学习 (ML) 模型可以使用的数字格式。当您将提示发送给法学硕士(例如 Anthropic 的 Claude、Google 的 Gemini 或 OpenAI 的 GPT 系列的成员)时,模型不会直接读取您的文本。这些模型只能将数字作为输入,因此必须首先使用分词器将文本转换为数字序列。

分词器对文本进行分词的一种方法是将其分割成单独的单词,并为每个唯一的单词分配一个数字:

“Grammarly 热爱语法、机器学习和写作”可能会变成:

NLP 中的标记化示例

每个单词(及其关联的数字)都是一个标记。 ML 模型可以使用标记序列 - [7,102]、[37]、[564]、[2]、[9,763]、[2]、[231] - 来运行其操作并生成其输出。此输出通常是一个数字,使用与此相同的标记化过程相反的过程将其转换回文本。在实践中,这种逐字标记化作为示例非常好,但在工业中很少使用,原因我们稍后会看到。

最后要注意的一点是标记器具有词汇表——它们可以处理的完整标记集。知道基本英语单词但不知道公司名称的分词器可能在其词汇表中没有“Grammarly”作为标记,从而导致分词失败。

使用 Grammarly 更智能地工作
任何有工作要做的人的人工智能写作伙伴

标记化的类型

一般来说,标记化是将一段文本转换为一系列数字。虽然在单词级别考虑标记化是很自然的,但还有许多其他标记化方法,其中之一 - 子词标记化 - 是行业标准。

单词标记化

单词标记化是我们之前看到的示例,其中文本按每个单词和标点符号进行分割。

NLP 中单词标记化的示例

单词标记化的主要好处是它易于理解和可视化。然而,它有一些缺点:

  • 如果存在标点符号,则将其附加到单词上,就像“写作”一样。
  • 新颖或不常见的单词(例如“Grammarly”)占据了整个标记。

因此,单词标记化可以创建包含数十万个标记的词汇表。大词汇量的问题是它们使训练和推理的效率大大降低——文本和数字之间转换所需的矩阵需要很大。

此外,还会有许多不常用的单词,并且 NLP 模型没有足够的相关训练数据来返回这些不常用单词的准确响应。如果明天发明了一个新单词,那么使用单词标记化的法学硕士将需要重新训练以合并该单词。

子词标记化

子词标记化将文本分割成小于或等于单词的块。每个token没有固定的大小;每个标记(及其长度)由训练过程决定。子词标记化是法学硕士的行业标准。下面是一个由 GPT-4o 标记器完成标记化的示例:

NLP 中子词标记化的示例

在这里,不常见的单词“Grammarly”被分解为三个标记:“Gr”、“amm”和“arly”。同时,其他单词在文本中足够常见,可以形成自己的标记。

子词标记化允许使用更小的词汇表,这意味着更高效、更便宜的训练和推理。子词标记器还可以将罕见或新颖的单词分解为较小的现有标记的组合。由于这些原因,许多 NLP 模型使用子词标记化。

字符标记化

字符标记化将文本分割成单独的字符。我们的示例如下所示:

NLP 中的字符标记化示例

每个独特的角色都成为自己的标记。这实际上需要最少的词汇量,因为字母表中只有 52 个字母(大小写不同)和几个标点符号。由于任何英语单词都必须由这些字符组成,因此字符标记化可以适用于任何新的或罕见的单词。

然而,根据标准的 LLM 基准,字符标记化在实践中的表现不如子词标记化。子词标记“car”比字符标记“c”包含更多的信息,因此 Transformer 中的注意力机制有更多的信息可以运行。

句子标记化

句子标记化将文本中的每个句子转换为自己的标记。我们的例子看起来像:

NLP 中句子标记化的示例

好处是每个令牌都包含大量信息。然而,也有几个缺点。组合单词来写句子的方法有无数种。因此,词汇量也需要是无限的。

此外,每个句子本身都非常罕见,因为即使具有相同的含义,即使是微小的差异(例如“as well”而不是“and”)也会意味着不同的标记。训练和推理将是一场噩梦。句子标记化用于专门的用例,例如句子情感分析,但除此之外,这种情况很少见。

代币化权衡:效率与性能

为模型选择正确的标记化粒度实际上是效率和性能之间的复杂关系。对于非常大的标记(例如,在句子级别),词汇量会变得很大。由于保存所有这些标记的矩阵巨大,模型的训练效率会下降。由于没有足够的训练数据来让所有独特的标记有效地学习关系,因此性能直线下降。

另一方面,使用小标记,词汇量就会变小。训练变得高效,但性能可能会直线下降,因为每个令牌没有包含足够的信息供模型学习令牌之间的关系。

子词标记化就在中间。每个 token 都有足够的信息供模型学习关系,但词汇量并没有太大而导致训练效率低下。

代币化如何运作

标记化围绕标记器的训练和使用。分词器将文本转换为标记,然后将标记转换回文本。我们将在这里讨论子词分词器,因为它们是最流行的类型。

子词分词器必须经过训练才能有效地分割文本。

NLP 中子词标记化的示例

为什么“Grammarly”被分成“Gr”、“amm”和“arly”?难道“Gram”、“mar”和“ly”也可以吗?对于人眼来说,它绝对可以,但是分词器可能已经学会了最有效的表示,但它的想法不同。用于学习这种表示的常见训练算法(尽管在 GPT-4o 中未使用)是字节对编码 (BPE)。我们将在下一节中解释 BPE。

分词器训练

要训​​练一个好的分词器,您需要大量的文本语料库来训练。在此语料库上运行 BPE 的工作原理如下:

  1. 将语料库中的所有文本拆分为单个字符。将它们设置为词汇表中的起始标记。
  2. 将文本中两个最频繁相邻的标记合并为一个新标记,并将其添加到词汇表中(不删除旧标记 - 这很重要)。
  3. 重复此过程,直到没有剩余的频繁出现的相邻标记对,或者已达到最大词汇量。

举个例子,假设我们的整个训练语料库由文本“abc abcd”组成:

  1. 文本将被拆分为 [“a”, “b”, “c”, “ ”, “a”, “b”, “c”, “d”]。请注意,该列表中的第四个条目是空格字符。我们的词汇表将是[“a”,“b”,“c”,“ ”,“d”]。
  2. “a”和“b”在文本中最常相邻出现(与“b”和“c”并列,但“a”和“b”按字母顺序获胜)。因此,我们将它们组合成一个标记“ab”。词汇表现在看起来像 [“a”、“b”、“c”、“ ”、“d”、“ab”],更新后的文本(应用了“ab”标记合并)看起来像 [“ab” 、“c”、“ ”、“ab”、“c”、“d”]。
  3. 现在,“ab”和“c”在文本中最常一起出现。我们将它们合并到令牌“abc”中。词汇表看起来像 [“a”, “b”, “c”, “ ”, “d”, “ab”, “abc”],更新后的文本看起来像 [“abc”, “ ”, “abc” ”,“d”]。
  4. 我们在这里结束该过程,因为每个相邻的令牌对现在只出现一次。进一步合并标记会使生成的模型在其他文本上表现更差。在实践中,词汇量限制是限制因素。

通过我们的新词汇集,我们可以在文本和标记之间进行映射。即使我们以前没有见过的文本,比如“cab”,也可以被标记化,因为我们没有丢弃单字符标记。我们还可以通过简单地查看词汇表中标记的位置来返回标记编号。

良好的分词器训练需要极大量的数据和大量的计算——这超出了大多数公司的承受能力。公司通过跳过自己的标记器的培训来解决这个问题。相反,他们只是使用预先训练的分词器(例如上面链接的 GPT-4o 分词器)来节省时间和金钱,同时将模型性能的损失降至最低(如果有的话)。

使用分词器

因此,我们使用 BPE 在海量语料库上训练了这个子词分词器。现在,我们如何在新的文本中使用它?

我们应用在分词器训练过程中确定的合并规则。我们首先将输入文本拆分为字符。然后,我们按照与训练中相同的顺序进行令牌合并。

为了说明这一点,我们将使用稍微不同的输入文本“dc abc”:

  1. 我们将其拆分为字符 [“d”, “c”, “ ”, “a”, “b”, “c”]。
  2. 我们在训练中进行的第一次合并是“ab”,所以我们在这里这样做:[“d”,“c”,“ ”,“ab”,“c”]。
  3. 我们做的第二次合并是“abc”,所以我们这样做:[“d”,“c”,“ ”,“abc”]。
  4. 这些是我们拥有的唯一合并规则,因此我们完成了标记化,并且可以返回标记 ID。

如果我们有一堆令牌 ID,并且想要将其转换为文本,我们可以简单地查找列表中的每个令牌 ID 并返回其关联的文本。法学硕士这样做是为了将他们使用的嵌入(通过查看周围标记来捕获标记含义的数字向量)转回人类可读的文本。

代币化应用

标记化始终是所有 NLP 的第一步。将文本转换为机器学习模型(和计算机)可以使用的形式需要标记化。

LLM 中的代币化

标记化通常是每个 LLM 调用的第一个和最后一个部分。首先将文本转换为标记,然后将标记转换为嵌入以捕获每个标记的含义并传递到模型的主要部分(转换器块)。变压器块运行后,嵌入将转换回令牌。最后,刚刚返回的令牌被添加到输入中并传回模型,再次重复该过程。法学硕士使用子词标记化来平衡性能和效率。

搜索引擎中的标记化

搜索引擎对用户查询进行标记以使其标准化并更好地理解用户意图。搜索引擎标记化可能涉及将文本拆分为单词、删除填充词(例如“the”或“and”)、将大写字母转换为小写字母以及处理连字符等字符。这里通常不需要子词标记化,因为性能和效率不太依赖于词汇量。

机器翻译中的标记化

机器翻译标记化很有趣,因为输入和输出语言不同。因此,将有两个分词器,每种语言一个。子词标记化通常效果最好,因为它平衡了模型效率和模型性能之间的权衡。但有些语言,例如中文,没有比单词更小的语言成分。在那里,需要单词标记化。

代币化的好处

标记化是任何 NLP 模型的必备条件。良好的标记化可以让 ML 模型有效地处理文本并很好地处理新单词。

标记化让模型可以处理文本

在内部,机器学习模型仅适用于数字。机器学习模型背后的算法完全依赖于计算,而计算本身也需要数字来进行计算。因此,必须先将文本转换为数字,然后机器学习模型才能使用它们。标记化后,可以在数字上运行注意力或嵌入等技术。

标记化推广到新的和稀有的文本

或者更准确地说,良好的标记化可以推广到新的和稀有的文本。通过子词和字符标记化,新文本可以分解为现有标记的序列。因此,将一篇包含乱码的文章粘贴到 ChatGPT 中不会导致它崩溃(尽管它也可能不会给出非常连贯的响应)。良好的泛化还允许模型根据子标记中的关系来学习稀有词之间的关系。

代币化的挑战

标记化取决于训练语料库和算法,因此结果可能会有所不同。这会影响法学硕士的推理能力及其输入和输出长度。

标记化影响法学硕士的推理能力

经常困扰法学硕士的一个简单问题是计算“草莓”一词中字母“r”的出现次数。该模型会错误地表示有两个,但实际上答案是三个。此错误可能部分是由于标记化造成的。子词分词器将“草莓”拆分为“st”、“raw”和“berry”。因此,模型可能无法将中间标记中的一个“r”连接到最后一个标记中的两个“r”。选择的标记化算法直接影响单词的标记化方式以及每个标记与其他标记的关系。

标记化影响 LLM 输入和输出长度

LLM 大多建立在 Transformer 架构之上,该架构依赖于注意力机制来将每个 token 置于上下文中。然而,随着代币数量的增加,注意力所需的时间呈二次方增加。因此,具有 4 个标记的文本将需要 16 个时间单位,而具有 8 个标记的文本将需要 64 个时间单位。这将法学硕士的输入和输出限制为数十万个代币。使用较小的标记,这确实会限制您可以输入模型的文本量,从而减少您可以使用它执行的任务数量。