问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

自然语言处理中的深度学习技术:从字词嵌入到LSTM

创作时间:
作者:
@小白创作中心

自然语言处理中的深度学习技术:从字词嵌入到LSTM

引用
1
来源
1.
https://learn.microsoft.com/zh-cn/training/modules/explore-foundation-models-in-model-catalog/3-deep-learning

自然语言处理(NLP)是人工智能领域的重要分支,它让机器能够理解、解释和生成人类语言。近年来,深度学习技术在NLP领域的突破性进展,尤其是字词嵌入和循环神经网络(RNN)的应用,极大地提升了机器翻译、文本分类等任务的性能。本文将深入探讨这些关键技术及其在NLP中的应用。

了解用于自然语言处理 (NLP) 的深度学习技术

统计技术在文本分类等自然语言处理(NLP)任务中表现相对较好。但对于翻译等任务,仍有很大的改进空间。

最近,深度学习技术推动了自然语言处理(NLP)领域在翻译等任务方面的发展。

当你要翻译文本时,不应只将每个字词翻译为另一种语言。你可能还记得多年前的翻译服务,它们翻译的句子过于直白,常常导致有趣的结果。相反,你希望语言模型能够理解文本的含义(或语义),并使用该信息在目标语言中创建语法正确的句子。

了解字词嵌入

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

在字词嵌入之前,NLP 的一个普遍挑战是检测字词之间的语义关系。字词嵌入会表示矢量空间中的字词,以便可以轻松描述和计算字词之间的关系。

字词嵌入是在自我监督学习期间创建的。在训练过程中,模型会分析句子中字词的共现模式,并学习将它们表示为矢量。矢量可在多维空间中用坐标表示字词。然后,可以通过确定相对矢量之间的距离来计算字词之间的距离,并描述字词之间的语义关系。

假设你要使用大量文本数据集训练一个模型。在训练过程中,该模型发现字词“bike”和“car”通常用于相同的字词模式中。除了在相同的文本中发现“bike”和“car”之外,你还可以发现它们都用于描述类似的事物。例如,有人可能会驾驶“bike”或“car”,或者在商店购买“bike”或“car”。

模型了解到,这两个字词通常位于类似的上下文中,于是它会在矢量空间中将bike和car的字词向量绘制得靠近彼此。

假设我们有一个三维矢量空间,其中每个维度对应一个语义特征。在本例中,假设维度表示车辆类型、运输方式、活动等因素。然后,我们可以根据字词的语义关系将假设的矢量分配给字词:

注意
在本示例中,三维平面用于通过简单的术语来描述字词嵌入和矢量空格。矢量空间通常是多维平面,用矢量表示该空间中的位置,类似于二维平面中的坐标。

尽管字词嵌入是检测字词之间的语义关系的一种很好的方法,但它仍然存在问题。例如,具有不同意向的字词(如love和hate)通常会显示为相关,因为它们用于类似的上下文中。另一个问题是,模型对每个字词只使用一个条目,导致具有不同含义的字词(例如bank)会在语义上与大量字词相关。

将记忆添加到 NLP 模型

理解文本不仅仅是理解单独呈现的单个字词。字词的含义可能有所不同,具体取决于它们所处的上下文。换句话说,字词周围的句子会影响字词的含义。

使用 RNN 包含字词的上下文

在深度学习之前,包含字词的上下文是一项过于复杂且成本高昂的任务。在包含上下文方面的第一个突破是循环神经网络(RNN)。

RNN 由多个连续步骤组成。每个步骤可接受一个输入和一个隐藏状态。假设每个步骤中的输入是一个新字词。每个步骤还会生成一个输出。隐藏状态可用作网络的记忆,用于存储上一步的输出并将其作为输入传递给下一步。

假设有一个句子是这样的:

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

要知道下一个词是什么,你需要记住画家的名字。该句子需要补全,因为最后一个词是缺失的。NLP 任务中缺失或掩盖的字词通常用[MASK]表示。通过在句子中使用特殊的[MASK]标记,可以让语言模型知道它需要预测缺失的标记或值是什么。

简化示例句子后,可以为 RNN 提供以下输入:

Vincent was a painter known for [MASK]

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

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

在示例中,隐藏状态包含信息Vincent、is、painter、know。使用 RNN 时,每个标记在隐藏状态下都同等重要,因此在预测输出时它们会得到同等的考量。

RNN 使得在解读字词相对于完整句子的含义时能够包含上下文。但是,随着 RNN 的隐藏状态随每个标记而更新,实际的相关信息(或信号)可能会丢失。

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

当我们读到这句话时,我们知道只有某些字词对于预测最后一个字词是必不可少的。但是,RNN 会包含处于隐藏状态的所有(相关和不相关的)信息。因此,相关信息可能会在隐藏状态下成为弱信号,这意味着它可能会被忽略,因为有太多其他无关的信息在影响着模型。

通过长短期记忆改进 RNN

针对 RNN 的弱信号问题的一个解决方案是一种更新型的 RNN:长短期记忆(LSTM)。LSTM 能够通过维护在每步中更新的隐藏状态来处理序列数据。使用 LSTM 时,模型可以决定要记住的内容和要忘记的内容。这样,可以跳过不相关或不提供重要信息的上下文,并且可以将重要信号保存更长时间。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号