资讯详情

深度学习与自然语言处理教程(6) - 神经机器翻译、seq2seq与注意力机制(NLP通关指南·完结)

ShowMeAI研究中心

  • 作者:韩信子@ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/36
  • 本文地址:http://www.showmeai.tech/article-detail/242
  • 声明:所有版权,请联系平台和作者,注明来源

本系列为自然语言处理与深度学习(Natural Language Processing with Deep Learning)》全套学习笔记,相应的课程视频可以在 查看。

ShowMeAI为CS224n课程的所有课件都完成了,并制作成了 GIF动图!点击 查看课件注释和带学解读。获取更多信息的方法见文末。


引言

是斯坦福大学生产的深度学习和自然语言处理专业课程,涵盖核心内容RNN、LSTM、CNN、transformer、bert、前沿内容,如问答、摘要、文本生成、语言模型、阅读理解等。

本笔记对应斯坦福CS224n自然语言处理语言处理知识板块:。首先介绍了序列到序列模型seq2seq以及它在翻译系统中的应用,然后介绍了注意机制,解释了序列解码器和翻译系统的评价,介绍了大词汇库等翻译系统中的一些常见问题,最后介绍了基于字符级别的翻译模型。

内容要点

  • seq2seq
  • 序列到序列模型
  • 注意力机制
  • 神经翻译系统
  • 语音处理

1.Seq2Seq神经翻译系统

(也可以参考本文的相关内容ShowMeAI吴恩达老师课程总结文章深度学习教程 |

到目前为止,我们已经处理了预测单个输出的问题:一个单词 NER 标签,根据前面的单词在句子中预测下一个最有可能的单词,等等。然而,有一种 NLP 任务依赖于序列输出,或者输出是长度变化的序列。

  • :输入一种语言的句子,然后输出另一种语言的句子。
  • :输入陈述或问题并作出回应。
  • :摘要是输入和输出大量文本。

我们将介绍以下部分 该模型是一个用于处理上述问题的深度学习框架。该框架被证明非常有效,并在不到三年的时间内成为机器翻译的标准方法。

1.1 翻译系统发展史简介

过去,翻译系统是基于概率模型构建的:

  • ,告诉我们,源语言最有可能根据翻译概率进行翻译。
  • ,综合评价句子流畅性等最佳翻译结果。

这些组成部分用于构建基于单词或短语的翻译系统。正如你所想,一个基于单词的简单翻译系统将无法捕捉语言之间的排序差异(例如,否定单词移动、句子中主语和动词的位置等)。

基于短语的翻译系统 Seq2Seq 以前很常见。基于短语的翻译系统可以根据短语序列考虑输入和输出,比基于单词的系统更复杂。然而,基于短语的翻译系统仍然难以捕获长途信息。

Seq2Seq 特别是使用带来了很大的优势 LSTM,在观察到整个输入后,现代翻译系统可以生成任何输出序列。它们甚至可以自动专注于输入的特定部分,以帮助生成有用的翻译。

1.2 序列到序列模型

序列到序列,或 Seq2Seq,是一个典型的深度学习模型,在 2014 年被提出用英语-法语翻译。在更高的层次上,Seq2Seq 一个有两个RNN端到端模型的组成

因此,Seq2Seq 模型通常被称为编码器-解码器模型。

接下来,我们将分别讨论这两个网络的细节。

1.3 Seq2Seq 结构 - 编码器

编码器网络的功能是向我们读取输入序列 Seq2Seq 在模型中,然后在序列中生成固定维度的上下文向量 C C C 。为此,编码器使用循环神经网络单元(通常使用) LSTM)每次读取输入单词。单元的最终隐藏状态是 C C C 。然而,很难将任何长度序列压缩到单个固定大小的向量(特别是像翻译这样的困难任务),编码器通常是堆叠的 LSTM 组成:一系列 LSTM每层的输出是下一层的输入序列。LSTM 最后一层的最终隐藏状态是 C C C 。

Seq2Seq 编码器通常会做一些奇怪的事情:它们反向处理输入序列。其实这样处理是有目的的。通过这样做,编码器看到的最终信息(粗略)对应于模型输出的开始信息;这使得解码器更容易开始输出,解码器更容易产生适当的输出句子。在翻译环境中,我们允许网络在看到输入的前几个单词时进行翻译;一旦前几个单词被正确翻译,就比从头开始更容易建立正确的句子。

下图是显示编码器的例子。这个例子是翻译英语句子 what is your name? 请注意,输入单词是反向读取的。请注意,网络是扩展的,每列是一个时间步骤,每行是一层,因此水平箭头对应于隐藏状态和垂直箭头 LSTM 输入/输出。

? 请注意,输入标记是反向读取的。请注意,网络是扩展的;每列是一个时间步骤,每行是一个单层,因此水平箭头对应于隐藏状态,垂直箭头是LSTM输入/输出。

1.4 Seq2Seq 结构 - 解码器

解码器也是一个 LSTM 但它的使用比编码器网络略复杂。本质上,我们希望它能知道到目前为止生成的单词和输入作为语言模型。为此,我们保持编码器堆叠 LSTM 架构,但我们将使用编码器生成的上下文向量来初始化第一层的隐藏层;然后编码器将使用输入的上下文向量逐字生成输出。

一旦编码器使用其上下文向量设置,我们将输入一个特殊的字符来表示生成输出的开始。在文献中,通常添加到输入结束 \text{} 标记(在输出的结尾也有这样的标记,表示生成输出完成)。然后我们第一个时间步将一层接一层地运行这个三层的 LSTM,将最后一层的输出放到 softmax 函数中生成一个输出单词。然后我们把这个词传递到下一个时间步的第一层,重复上述的流程生成输出单词。这就是我们如何使 LSTM 像语言模型一样起作用。

下图是一个展示解码器的例子。该解码器正在解码 what is your name? 的上下文向量。注意在生成的开始使用了一个特殊的符号 GO,而且解码的生成是按照正常的句子顺序,而不是反向读取的输入。注意输入和输出长度不需要相同。

❐ 此解码器正在解码“what is your name”(参见图1)的上下文向量,将其翻译为法语“comment t’appelles tu?”注意在生成开始时使用的特殊“GO”标记,并且该生成是正向的,而不是反向读取的输入。还要注意的是,输入和输出不需要是相同的长度。

一旦我们有了输出序列,我们就像往常一样使用相同的学习策略。我们对预测序列定义一个交叉熵损失函数,然后用梯度下降算法和反向传播算法来最小化损失函数。同时对编码器和解码器进行训练,使得它们都学习到相同的上下文向量表示。

1.5 复习 & 基础神经翻译系统示例

注意输入和输出的长度之间是没有任何联系的:模型的输入句子可以是任意长度的,模型的输出句子可以是任意长度的。然而,已经知道 Seq2Seq 模型在输入句子很长的情况下效果会变得很差,LSTM 在实际使用中有一系列的限制。

让我们回顾一下 Seq2Seq 模型为了将英语 what is your name? 翻译为法语 comment t’appelles tu 的例子:

  • 首先,我们从四个 one-hot 向量输入开始。这些输入需要或者不需要(对翻译任务,一般需要)用一个稠密的词向量表示。
  • 然后,一个层叠 LSTM 反向读取输入序列,将其编码为一个上下文向量。这个上下文向量是一个向量空间表示,表示“询问某人他们的名字”(输入的英文句子)的意思。
  • 我们运行这个网络的每一层的每一个时间步,对最后一层的输出放到 softmax 函数中计算,并生成我们第一个输出单词。这个单词作为网络下一个时间步的输入,并且以这种方式解码句子comment t’appelles tu的剩余部分。
  • 在反向传播期间,编码器的 LSTM 的权值被更新,使得它能学习到更好的句子向量表示,同时训练解码器的 LSTM 权值,使得它能生成与上下文向量相关的正确语法的句子。

Encoder:逐层运行,每一层的输出是下一层的输入 Decoder:逐时间步运行,每一个时间步的最后一层的输出是下一个时间步的第一层的输入

1.6 双向RNN

之前讨论过句子的依赖不仅仅在一个方向的传播起作用;一个单词可以依赖它前面或者后面的单词。

到目前为止,我们已经讨论过的 Seq2Seq 模型并没有考虑到这一点;在每个时间步,我们只是考虑当前时间步的单词的前面单词的信息(通过 LSTM 的隐藏状态)。

对于 NMT,我们需要能够有效地对任意输入进行编码,而不管与输入之间的依赖关系的方向,因此这才能够让获得的信息不会减少。

双向RNN通过遍历序列的两个方向并连接所得到的输出(神经元输出和最终隐藏状态都进行连接)来解决这个问题:

  • 对于每个 RNN 神经元,我们简单地添加另一个神经元,但是以相反的方向向其放入输入;对应第 t t t 个单词的输出 o t o_t ot​ 是连接了向量 [ o t ( f ) o t ( b ) ] \left[o_{t}^{(f)} \quad o_{t}^{(b)}\right] [ot(f)​ot(b)​] ,其中 o t ( f ) o_{t}^{(f)} ot(f)​ 是词 t t t 在正向的 RNN 的输出, o t ( b ) o_{t}^{(b)} ot(b)​ 是词 t t t 在反向的 RNN 的输出。类似地,最终隐藏状态是 [ h ( f ) h ( b ) ] \left[h^{(f)} \quad h^{(b)}\right] [h(f)h(b)] ,其中 h ( f ) h^{(f)} h(f) 是正向的 RNN 的最终隐藏状态和 h ( b ) h^{(b)} h(b) 是反向的 RNN 的最终隐藏状态。

下图是一个双向 LSTM 解码器的例子。

❐ 单层双向LSTM编码器网络示例。注意,输入被输入到两个不同的LSTM层中,但是方向不同,隐藏状态被连接起来以得到最终的上下文向量。

2.注意力机制

2.1 动机与想法

当你听到句子 the ball is on the field,你不会认为这 6 个单词都一样重要。你首先会注意到单词 ballonfield,因为这些单词你是觉得最“重要”的。

类似的,Bahdanau 等人注意到使用 RNN 的最终状态作为 Seq2Seq 模型的单一“上下文向量”的缺点:一般而言,输入的不同部分具有不同的重要程度。再者,此外,输出的不同部分甚至可以考虑输入的不同部分是“重要”的。例如,在翻译任务中,输出的第一个单词是一般是基于输入的前几个词,输出的最后几个词可能基于输入的几个词。

注意机制利用这一观察结果,为解码器网络提供了在每个解码步骤查看整个输入序列的功能;然后解码器可以在任何时间点决定哪些输入单词是重要的。有很多类型的编码器机制,但是我们将讨论由 Bahdanau 提出的机制。

2.2 Bahdanau 等的神经机器翻译系统

再回顾一下我们的 Seq2Seq 模型是由两部分组成,一个编码器将一个输入句子编码,以及利用解码器所提取的信息生成翻译句子的解码器。基本上,我们的输入句子是一个我们想要翻译的词序列 x 1 , … , x n x_{1}, \ldots, x_{n} x1​,…,xn​ ,我们的翻译过结果(目标句子)是一个词序列 y 1 , … , y m y_{1}, \ldots, y_{m} y1​,…,ym​ 。

1) 编码器

令 ( h 1 , … , h n ) \left(h_{1}, \ldots, h_{n}\right) (h1​,…,hn​) 是输入句子的隐藏向量表示。这些向量是例如 bi-LSTM 的输出,并且捕获句子中每个单词的上下文表示。

2) 解码器

我们想使用以下形式的递归公式计算解码器的隐藏状态 s i s_i si​

s i = f ( s i − 1 , y i − 1 , c i ) s_{i}=f\left(s_{i-1}, y_{i-1}, c_{i}\right) si​=f(si−1​,yi−1​,ci​)

其中 s i − 1 s_{i-1} si−1​ 是前面的隐藏向量, y i − 1 y_{i-1} yi−1​ 是前面时间步生成的单词,和 c i c_i ci​ 是从原始句子捕获与解码器的时间步 i i i 相关的上下文的上下文向量。

上下文向量 c i c_i ci​ 捕获对第 i i i 个解码时间步的相关信息(与标准的的 Seq2Seq 模型只有一个上下文向量不同)。对每个原始句子的隐藏向量 h j h_j hj​ ,计算分数

e i , j = a ( s i − 1 , h j ) e_{i, j}=a\left(s_{i-1}, h_{j}\right) ei,j​=a(si−1​,hj​)

其中 a a a 是在 R \mathbb{R} R 中具有值的任意函数,例如是一个单层的全连接神经网络。然后,我们得到一系列标量值 e i , 1 , … , e i , n e_{i, 1}, \ldots, e_{i, n} ei,1​,…,ei,n​ 。然后,使用 softmax 层对这些分数进行归一化,得到向量 α i = ( α i , 1 , … , α i , n ) \alpha_{i}=\left(\alpha_{i, 1}, \ldots, \alpha_{i, n}\right) αi​=(αi,1​,…,αi,n​)

α i , j = exp ⁡ ( e i , j ) ∑ k = 1 n exp ⁡ ( e i , k ) \alpha_{i, j}=\frac{\exp (e_{i, j})} {\sum_{k=1}^{n} \exp (e_{i, k})} αi,j​=∑k=1n​exp(ei,k​)exp(ei,j​)​

向量 α i \alpha_i αi​ 称为注意力向量

然后,计算原始句子的隐藏向量与注意力向量的加权平均值作为上下向量 c i c_i ci​

c i = ∑ j = 1 n α i , j h j c_{i}=\sum_{j=1}^{n} \alpha_{i, j} h_{j} ci​=j=1∑n​αi,j​hj​

利用注意向量提取上下文向量并捕获相关上下文

直观上看,该向量从原始句子的解码器的第 i i i 个时间步中捕获相关的上下文信息。

2.3 与机器翻译“对齐”的关联

基于注意力的模型为输出的每个时间步分配对输入的不同部分的显着性(“重要性”)。在翻译任务中,注意力可以认为是“对齐”。Bahdanau 等人认为在解码的时间步 i i i 中的注意力分数 α i j \alpha_{ij} αij​ 表示源句子中的单词对齐目标句子中的单词 i i i。注意到这一点,我们可以使用注意力分数来构建一个对齐表——这个表是将源句子中的单词映射到目标句子中的相应单词——基于从我们从 Seq2Seq NMT 系统中学习到的编码器和解码器。

下图是一个

2.4 长句上的效果表现

基于注意力模型的主要优点是能够有效地翻译长句。当句子的输入长度变大时,模型如果只使用最终隐藏状态表示而不使用注意机制,这会丢失信息和降低准确度。注意力机制是一个聪明的方式来解决这个问题,并且现在很多实验也证实了确实如此。

下图是长句子在不同的 NMT 模型中的表现:

3.其他方法

3.1 Luong et al. 等的神经机器翻译系统

Luong 等人在论文 《Effective Approaches to Attention-based Neural Machine Translation》 提出了一个注意力机制模型的变体,是由两个不同的注意力机制组成。

1) 全局注意力

我们运行简单的 Seq2Seq NMT。我们称编码器的隐藏状态 h 1 , … , h n h_{1}, \ldots, h_{n} h1​,

标签: sub连接器78pyt一体化液位变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台