MENU

Neural Machine Translation by Jointly Learning to Align and Translate 论文阅读

March 13, 2020 • Read: 6119 • Deep Learning阅读设置

论文下载

这是 2015 年发表在 ICLR 上的论文,也是 NLP 中 Attention 机制的开山之作,Attention 机制是为了解决一般的 RNN Encoder-Decoder 对长句子表现不佳的问题而设计的。从论文题目中我们可以看到,作者希望通过 Attention 机制将输入句子 input 和输出句子 output 进行 "对齐"(SMT 中也有所谓的词对齐模型)。但是,由于不同语言的句法语法结构千差万别,想将源句子与翻译句子严格的对齐是很困难的,所以这里的对齐实际上是软对齐(soft-alignment),也就是不必将源句子显式分割,因而又被形象地称为注意力机制(Attention Mechanism)

近年来,基于神经网络的机器翻译模型经常被用来处理机器翻译任务。与传统基于统计的翻译方法相比,审计网络的机器翻译模型意在构建单个神经网络模型来提升整体翻译的准确率,主要的模型架构基本都是 Seq2Seq 家族的(Seq2Seq 模型论文笔记)。在本论文中,作者认为该模型的瓶颈主要在于中间转换的向量是固定维度的。因此,作者提出了一种新的解码方式,其解码的源头不仅仅包括该向量,它们希望构建一种为当前预测词从输入序列中自动搜寻相关部分的机制(soft-search,也就是注意力机制)。作者运用这种新的机制来搭建升级版的神经翻译模型,取得了卓越的效果,并且也通过定量分析来证明了这种注意力机制的合理性

注意力机制解决的问题

传统的 Encoder-Decoder 结构对于长句子和生词过多的句子效果很不理想,因为随着序列的增长,句子越前面的词信息就会丢失的越厉害,虽然也有很多论文提出了一些 trick,比如将句子倒序输入,或者重复输入两遍,或者使用 LSTM 模型。但这些都治标不治本,对模型性能的提升并不明显,因为在解码时,当前预测词对应的输入词的上下文信息、位置信息等基本都已丢失

并且,性能的瓶颈在于 Encoder 强制将句子中所有信息都压缩在一个定长的向量中,而当句子长度过大时,定长的向量就难以将所有的信息都编码进向量中,因此造成了性能下降。由此,作者提出,在翻译目标词的每一步,应该让 Decoder 自动抽取源句子中那些与目标词信息相关的部分,而忽略不相关的部分,这些部分的信息构成一个上下文向量 (context word) $c_i$,取代传统 Encoder 中的语义表示向量 $h_{T_x}$。也就是说,Encoder 将句子编码成一个向量序列,而不是一个向量,然后再预测翻译单词的每一步选择这些向量的子集作为注意力向量输入到 Decoder 中。这是符合我们直觉的,因为人类在翻译句子时,不会每时每刻都考虑整个句子的含义,而是在翻译特定片段时,重点注意这个片段附近的上下文,而不会注意离我们正在翻译的片段较远的那些片段

Encoder

基本的 RNN Encoder 是将源句子压缩成一个固定维度的向量,那么期间每个词的隐层状态只压缩了前面的词。Bahdanau 等人使用双向 RNN(bidirecitonal RNN,简记为 BiRNN),即一个词的隐层状态不仅压缩了其前面的词的信息,还压缩了后面的词

一个 BiRNN 包含一个前向(forward)和一个后向(backward)RNN。前向 RNN 按照词序列($x_1,x_2,...,x_T$)的顺序依次压缩源句子,并得到一个隐层状态($\overrightarrow {h_1},\overrightarrow {h_2},...,\overrightarrow {h_T}$),类似地,后向 RNN 按照($x_T,x_{T-1},...,x_1$)的顺序依次压缩源句子,得到($\overleftarrow {h_1},\overleftarrow {h_2},...,\overleftarrow {h_T}$)。最后对于词 $x_i$,它的隐层状态通过连接两个 RNN 的结果得到,即 $h_i=[\overrightarrow {h_i^T};\overleftarrow {h_i^T}]^T$,可以看到,$h_i$ 压缩了前向和后向的表示,并且更加关注于词 $x_i$ 周围的词,使得 RNN 能更好地表达当前的输入

Decoder

在预测目标词时,生成对应单词的条件概率定义为:

$$ p(y_i|y_1,\cdots,y_{i-1},\mathbf{x})=g(y_{i-1},z_i,c_i) $$

$g$ 一般是多层非线性神经网络,其中 $z_i$ 为 RNN 在 $i$ 时刻的状态:

$$ z_i=f(z_{i-1},y_{i-1},c_i) $$

可见,与简单的 Encoder-Decoder 结构不同的是,源语言端上下文向量表示由原来的 $c$ 变成了 $c_i$,即针对每一个目标词 $y_i$,都有一个特定的 $c_i$ 与之对应(也就是说如果固定 $c_i=\overrightarrow {h_T}$,那么模型就变为一个 RNN Encoder-Decoder)

上下文向量 $c_i$ 依赖于 Encoder 得到的 $\text {annotations}\ (h_1,...,h_T)$,其中每个 $h_j$ 压缩了源语言端的词并且 "关注于"$x_j$ 周围的词。$c_i$ 可以通过各个 $annotations$ 的加权平均得到:

$$ c_i=\sum_{j=1}^{T_x}\alpha_{ij}h_j $$

其中,从 $h_j$ 到 $c_i$ 的权重 $\alpha_{ij}$ 为:

$$ \begin{aligned} \alpha_{ij}&=\frac{\exp(e_{ij})}{\sum_{k=1}^T\exp(e_ik)}\\ e_{ij}&=a(z_{i-1},h_j)\\ &=v_a^T\tanh(W_az_{i-1}+U_ah_j) \end{aligned} $$

Decoder 中的 a 可以看作是一个对齐模型,用来衡量第 $j$ 个源端词与目标端第 $i$ 个词的匹配程度,这个程度则通过 Decoder 的隐层状态 $z_{i-1}$ 和源端第 $j$ 个 $annotation$ 计算得到。不同于传统的对齐模型:源语言端每个词明确对齐到目标语言端一个或多个词(hard alignment),而该方法计算得到得是一种 soft alignment,可以融入整个 NMT 框架,通过反向传播算法求梯度以及更新参数

将 Attention 机制引入 NMT 中,可以使得 Decoder 更多地关注于源语言端部分词,从而缓解了 Encoder-Decoder 框架中将源语言压缩成固定维度的向量带来的问题

定量分析

作者比较了原始的 RNN Encoder-Decoder 模型(RNNenc)和由 Attention 机制改进的模型(RNNsearch),让这两个模型分别在句子最大长度为 30 和 50 的训练集上训练,在测试集上翻译结果的 BLEU 分数与句子长度的关系如下图所示

可以看到,RNNSearch-50 对长句子已经相当稳健,几乎不受长句子的影响,而对于 RNNsearch-30 来说,当句子长度超过 30 时,分数还是会出现大幅下滑

定性分析

为了从直观上感受 Attention 机制,作者随机抽取了测试集中的几个句子,将他们的注意力权重采用热图的方式展示了出来

对齐模型结果如上图所示,所选的例子是随机从句长 10-20 且不包含 UNK 的结果中采样得到的。横轴对应源语言(English),纵轴对应目标语言(French),对齐权重由灰度值表示:0 - 黑色,1 - 白色

通过上图我们可以清晰地看到在生成目标词时,源句中的哪些词被认为更重要。不难看出,输入句子(英语)与输出句子(法语)的词之间的关系在很大程度上是单调的,即权重矩阵近似于单位矩阵,而对于一些输入与输出语言存在的一些不对称的语法现象Attention 机制能够自动跳过一些单词,调节语法顺序,使得输入输出得到正确的软对齐

比起 SMT 中的硬对齐,软对齐更加灵活,不生硬,同时能自然地处理不同长度地输入和输出,而不是以一种反直觉地方式把一些词映射成 NULL。这也是为什么 Attention 机制能够很好地处理长句子问题,传统的 RNNenc 在翻译长句子时,翻译的后半段往往会漏掉许多细节,偏离句子的原意,而 RNNsearch 在翻译长句子的后半段时,不会遗漏那些重要的信息,因为这些信息是即使计算的,而不像 RNNenc 那样固定不变

总结

虽然神经网络翻译仅仅发展了几年,但其取得的成果已使得统计翻译模型几乎没有了优势,目前看来唯一存在的问题,就是生词问题

Last Modified: August 2, 2021
Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment

已有 1 条评论
  1. 小张 小张

    写得太好了!!