语言模型的工作原理是什么?

已完成

在过去的几十年里,自然语言处理(NLP)领域的多项发展促成了大型语言模型(LLM)的实现。 语言模型的开发和可用性导致了与应用程序和系统(例如通过生成式 AI 助手和代理)交互的新方法。

让我们回顾一下语言模型的历史发展,其中包括:

  • 令牌化:使计算机能够 读取
  • Word 嵌入:使计算机能够捕获单词之间的关系。
  • 体系结构开发:(语言模型设计的变化),使他们能够捕获单词上下文。

标记化

正如你预期的那样,计算机很难解码文本,因为它们大多依赖于数字。 为了阅读文本,我们需要将文本转换为数字。

允许计算机更轻松地处理文本的一个重要开发是标记化。 标识符是具有已知含义的字符串,通常代表词语。 标记化是将单词转换为标记,然后将这些标记转换为数字。 词汇切分的统计方法是使用管道:

显示句子标记化管道的屏幕截图。

  1. 首先选择要标记的文本。
  2. 根据规则拆分文本中的字词。 例如,拆分空格所在的单词。
  3. 停止字词删除。 删除几乎没有意义的干扰词,如 thea。 提供了这些单词的字典,以从结构上将其从文本中删除。
  4. 为每个唯一的令牌分配一个数字

标记化使文本可以被标记。 因此,统计技术可用于让计算机在数据中查找模式,而不是应用基于规则的模型。

字嵌入

将深度学习技术应用于 NLP 引入的关键概念之一是 单词嵌入。 Word 嵌入解决了无法定义单词之间的 语义关系 的问题。

在深度学习模型训练过程中创建字嵌入。 在训练期间,模型分析句子中单词的共聚模式,并学习将其表示为 矢量。 向量表示通过 n 维空间中的点(换而言之为线条)的路径。 语义关系通过线条的角度(即路径的方向)的相似性来定义。 由于单词嵌入表示向量空间中的字词,因此可以轻松描述和计算单词之间的关系。

为了创建一个词汇来封装令牌之间的语义关系,我们为其定义上下文向量(称为嵌入)。 矢量是信息的多值数值表示形式,例如 [10, 3, 1] ,其中每个数值元素表示信息的特定属性。 对于语言令牌,令牌矢量的每个元素都表示令牌的一些语义属性。 在语言模型中,矢量元素的具体类别是在训练过程中根据单词共同使用或在相似上下文中出现的频率来确定的。

矢量表示多维空间中的线条,描述沿多个轴的方向和距离(可以通过调用这些振幅和数量级来给数学家朋友留下深刻的印象)。 总的来说,矢量描述路径从原点到终点的方向和距离。

显示单词嵌入的简单示例的屏幕截图。

嵌入空间中的标记元素分别表示令牌的一些语义属性,因此语义上类似的标记应产生具有相似方向的向量,换句话说,它们指向同一方向。 一种称为余弦相似性的技术用于确定两个向量是否具有类似的方向(而不考虑距离),因此表示语义上链接的单词。 例如,“dog”和“puppy”的嵌入向量描述了几乎相同方向的路径,这与“cat”的方向也很相似。 “滑板”的嵌入向量则描述了一段截然不同的旅程方向。

建筑发展

机器学习模型的体系结构或设计描述了其各种组件和流程的结构和组织。 它定义如何处理数据、如何训练和评估模型以及如何生成预测。 语言模型体系结构中的第一个突破之一是 循环神经网络RNN)。

要理解文本,不仅仅是去理解那些单独的字词。 字词的意义可能因所处的上下文而有所不同。 换句话说,单词周围的句子与单词的含义有关。

RNN 可以通过多个顺序步骤来考虑单词的上下文。 每个步骤可接受一个输入和一个隐藏状态。 假设每个步骤中的输入都是一个新单词。 每个步骤还会生成一个输出。 隐藏状态可用作网络的内存,存储上一步的输出,并将其作为输入传递给下一步。

想象一下这样的句子:

Vincent Van Gogh was a painter most known for creating stunning and emotionally expressive artworks, including ...

若要知道接下来出现什么词,你需要记住画家的名字。 句子需要完成,因为最后一个单词仍然 缺少。 在 NLP 任务中,缺少或被遮蔽的单词通常用表示。 通过在句子中使用特殊的 [MASK] 标记,可以让语言模型知道它需要预测缺少的标记或值。

简化示例句子,你可以向 RNN 提供以下输入:Vincent was a painter known for [MASK]

关系图显示了如何将句子中最重要的单词分解为单个标记。

RNN 将每个令牌作为输入,对其进行处理,并使用该令牌的内存更新隐藏状态。 将下一个标记作为新输入进行处理时,将更新上一步中的隐藏状态。

最后,最后一个标记显示为模型的输入,即 [MASK] 标记。 指示缺少信息,模型需要预测其值。 然后,RNN 使用隐藏状态来预测输出应为类似于 Starry Night

图显示了具有多个步骤的递归网络。每个步骤将输入和隐藏状态作为输入并生成输出。

RNN 的挑战

在此示例中,隐藏状态包含信息 #B0、#B1、#B2 和 #B3。 使用 RNN 时,这些标记在隐藏状态下同样重要,因此在预测输出时同样考虑。

RNN 允许在解密单词相对于完整句子的含义时包含上下文。 但是,由于 RNN 的隐藏状态随着每个标记一起更新,因此实际相关的信息或信号可能会丢失。

在提供的示例中,文森特·梵高的名字在句子的开头,而面具位于末尾。 在最后一步,当掩码显示为输入时,隐藏状态可能包含大量与预测掩码输出无关的信息。 由于隐藏状态的大小有限,因此甚至可能会删除相关信息以腾出新的和更新的信息。

当我们阅读此句子时,我们知道只有某些单词对预测最后一个单词至关重要。 但是,RNN 包含隐藏状态中的所有(相关和无关)信息。 因此,相关信息可能会在隐藏状态下成为一个弱信号,这意味着它可能被忽略,因为有过多的其他无关信息在影响模型。

到目前为止,我们介绍了语言模型如何通过 标记化 阅读文本,以及如何通过 单词嵌入来理解单词之间的关系。 我们还探讨了过去的语言模型如何试图捕获字词的上下文。 接下来,了解在当今采用Transformer架构的语言模型中,如何处理以往模型的局限性。