Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation[翻译]

引言

又为大家带来一篇经典论文的翻译,不过由于最近忙于找工作,所以本文只翻译了核心的部分,未完待续,有时间会补全的。

摘要

在本文中,我们提出了一个新的神经网络模型,叫RNN编码器-解码器模型,它包含两个RNN。一个RNN编码符号序列到定长向量,另一个解码该向量到另一个符号序列。编码器和解码器是同时训练的以最大化给定源序列时目标序列的条件概率。在现存的对数线性模型中通过RNN编码器-解码器计算短语对的条件概率作为一个额外的特征,我们发现可以提升统计机器翻译系统的表现。我们定性地展示提出的模型可以学会语义和句法上有意义的语言上的短语表示。

1 简介

深度神经网络已经成功应用到很多领域,像目标识别和语言识别。甚至,最近很多研究表明神经网络也能成功应用到自然语言处理的很多任务中。包括但不限于:语言模型、语义监测和词嵌入抽取。在统计机器翻译领域(SMT),深度神经网络开始展现令人期待的结果。Schwenk总结了一种前馈神经网络成功使用在基于短语的SMT系统框架中。

继续神经网络用于SMT的研究,本文注重于一种全新的神经网络结构,它能作为传统的基于短语的SMT系统的一部分。该网络结构,我们称为RNN编码器-解码器,包含两个RNN分别作为编码器和解码器。编码器映射一个变长源序列到一个定长向量,解码器映射此向量表示到一个变长目标序列。这两个网络是同时训练的,用于在给定源序列时最大化目标序列的条件概率。此外,我们建议使用一个相对复杂的隐藏单元(就是GRU)来提升存储容量和训练的简单性。

在英法翻译任务中评估具有新隐藏单元的RNN编码器-解码器。我们训练模型学习一个英语短语到相应法语短语翻译概率。然后该模型作为一个标准的基于短语的SMT系统的一部分使用,来计算短语表中每个短语对的得分。评估结果得出这种通过RNN编码器-解码器计算短语对得分的方式,提升了翻译结果。

通过比较现有翻译模型和训练好的RNN编码器-解码器对短语计算的得分,这种定性分析表明RNN编码器-解码器更擅长于捕捉短语表中的语言性规律,间接解释了整体翻译性能的量化改进。进一步地分析显示RNN编码器-解码器学习了一种短语的连续空间表示,该种表示保存了短语的语义和句法结构。

2 RNN编码器-解码器

2.1 循环神经网络

循环神经网络(RNN)包含隐藏状态 h h h和可选的输出 y y y,应用在变长序列 x = ( x 1 , ⋯   , x T ) x=(x_1,\cdots,x_T) x=(x1​,⋯,xT​)上。每个时刻 t t t,RNN的隐藏状态 h ⟨ t ⟩ h_{\langle t \rangle} h⟨t⟩​根据下式更新:

h ⟨ t ⟩ = f ( h ⟨ t − 1 ⟩ , x t ) (1) h_{\langle t \rangle} = f(h_{\langle t-1\rangle},x_t) \tag{1} h⟨t⟩​=f(h⟨t−1⟩​,xt​)(1)
其中 f f f是一个非线性激活函数。 f f f可以简单如元素级sigmoid函数或复杂如LSTM单元。
通过训练RNN来预测序列中的下一个符号,RNN能学到一个序列的概率分布。此时,每个时刻 t t t的输出是条件分布 p ( x t ∣ x t − 1 , ⋯   , x 1 ) p(x_t|x_{t-1},\cdots,x_1) p(xt​∣xt−1​,⋯,x1​)。比如,一个多项式分布(1-of-k哑编码)可以通过一个softmax激活函数输出:

p ( x t , j = 1 ∣ x t − 1 , ⋯   , x 1 ) = e x p ( w j h ⟨ t ⟩ ) ∑ j ′ = 1 K e x p ( w j ′ h ⟨ t ⟩ ) (2) p(x_{t,j}=1 | x_{t-1},\cdots,x_1) = \frac{exp(w_jh_{\langle t \rangle})} {\sum_{j^\prime = 1} ^ K exp(wj^\prime h_{\langle t \rangle}) }\tag{2} p(xt,j​=1∣xt−1​,⋯,x1​)=∑j′=1K​exp(wj′h⟨t⟩​)exp(wj​h⟨t⟩​)​(2)
对所有可能的符号 j = 1 , ⋯   , K j=1,\cdots,K j=1,⋯,K,其中 w j w_j wj​是权重矩阵 W W W的某行。通过结合这些概率(相乘),我们可以计算序列 x x x的概率:

p ( x ) = ∏ t = 1 T p ( x t ∣ x t − 1 , ⋯   , x 1 ) (3) p(x) = \prod_{t=1}^T p(x_t|x_{t-1},\cdots,x_1) \tag{3} p(x)=t=1∏T​p(xt​∣xt−1​,⋯,x1​)(3)

从这个学到的分布,可以直接通过在每个时刻迭代地生成一个符号来生成新序列(文本生成)。

2.2 RNN编码器-解码器

在本文中,我们提出了一种新的网络结构,能学会编码一个变长序列到定长向量表示,然后解码给定定长向量表示到一个变长序列。从概率学角度来看,这种新结构是一种通用方法来学习一个变长序列基于另一变长序列的条件分布,即 p ( y 1 , ⋯   , y T ′ ∣ x 1 , ⋯   , x T ) p(y_1,\cdots,y_{T^\prime}|x_1,\cdots,x_T) p(y1​,⋯,yT′​∣x1​,⋯,xT​),这里要注意的是输入序列和输出序列的长度可以不同。

Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation[翻译]

编码器是一个RNN,顺序地读取输入序列 x x x的每个符号。随着读取的进行,RNN的隐藏状态根据公式 ( 1 ) (1) (1)更新。在读完序列终止符(通过一个特殊符号标记)后,RNN的隐藏状态 c c c就是整个输入序列的概括(或者说 c c c编码了整个输入序列的信息)。

解码器是另一个RNN,训练通过给定隐藏状态 h ⟨ t ⟩ h_{\langle t \rangle} h⟨t⟩​预测下一个符号 y t y_t yt​,以生成输出序列。然而,不同于2.1节描述的RNN,解码器RNN的 y t y_t yt​和 h ⟨ t ⟩ h_{\langle t \rangle} h⟨t⟩​都是在给定 y t − 1 y_{t-1} yt−1​和输入序列的概括 c c c条件下得到。因此,在时刻 t t t编码器的隐藏状态计算如下:
h ⟨ t ⟩ = f ( h ⟨ t − 1 ⟩ , y t − 1 , c ) h_{\langle t \rangle} = f(h_{\langle t-1 \rangle},y_{t-1},c) h⟨t⟩​=f(h⟨t−1⟩​,yt−1​,c)
同样,下一个符号的条件分布为:
P ( y t ∣ y t − 1 , y t − 2 , ⋯   , y 1 , c ) = g ( h ⟨ t ⟩ , y t − 1 , c ) P(y_t|y_{t-1},y_{t-2},\cdots,y_1,c) = g(h_{\langle t \rangle},y_{t-1},c) P(yt​∣yt−1​,yt−2​,⋯,y1​,c)=g(h⟨t⟩​,yt−1​,c)

f f f和 g g g为给定的激活函数(后者必须输出有效的概率,比如可以结合softmax函数)。

图1是模型结构展示。

RNN编码器-解码其的两部分(编码器和解码器)是同时训练来最大化以下对数似然条件概率的:
max ⁡ θ 1 N ∑ n = 1 N log ⁡ p θ ( y n ∣ x n ) (4) \max_{\theta} \frac{1}{N} \sum_{n=1} ^ N \log p_{\theta} (y_n|x_n) \tag{4} θmax​N1​n=1∑N​logpθ​(yn​∣xn​)(4)

其中 θ \theta θ是模型参数集合,每个 ( x n , y n ) (x_n,y_n) (xn​,yn​)训练集中的一个(输入序列,输出序列)对。在我们的案例中,从输入到解码器的输出都是可微的,所以我们可以使用基于梯度的算法来设置模型参数。

一旦RNN编码器-解码器训练好后,模型能用于两个方面。一是给定输入序列来生成目标序列,二是用于给提供的输入和输出序列对打分,分数就是公式(3)和(4)计算出来的概率 p θ ( y ∣ x ) p_\theta(y|x) pθ​(y∣x)。

2.3 适应性地记忆和遗忘的隐藏单元

除了一个新颖的模型结构,我们也提出了一种新的隐藏单元(公式(1)中的 f f f),启发于LSTM单元但更易于实现和计算。图2是该隐藏单元的图形化描述。

Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation[翻译]

先看第 j j j个隐藏单元的激活值是如何计算的。首先,重置门(reset gate) r j r_j rj​计算如下:
r j = σ ( [ W r x ] j + [ U r h ⟨ t − 1 ⟩ ] j ) (5) r_j = \sigma \left(\left[W_rx\right]_j + \left[U_r h_{\langle t-1 \rangle} \right]_j \right) \tag{5} rj​=σ([Wr​x]j​+[Ur​h⟨t−1⟩​]j​)(5)

其中 σ \sigma σ是sigmoid函数, [ . ] j [.]_j [.]j​表示向量的第 j j j个元素, x x x和 h t − 1 h_{t-1} ht−1​分别是输入和前一个隐藏状态。 W r W_r Wr​和 U r U_r Ur​是学到的权重矩阵。

类似地,更新门(update gate) z j z_j zj​计算于:
z j = σ ( [ W z x ] j + [ U z h ⟨ t − 1 ⟩ ] j ) (6) z_j = \sigma \left(\left[W_zx\right]_j + \left[U_z h_{\langle t-1 \rangle} \right]_j \right) \tag{6} zj​=σ([Wz​x]j​+[Uz​h⟨t−1⟩​]j​)(6)
(除了权重矩阵不同)

隐藏单元实际的激活值 h j h_j hj​计算于:
h j ⟨ t ⟩ = z j h j ⟨ t − 1 ⟩ + ( 1 − z j ) h ∼ j ⟨ t ⟩ (7) h^{\langle t \rangle}_j = z_j h^{\langle t-1 \rangle}_j +(1-z_j) {\stackrel{\sim}{h}}^{\langle t \rangle}_j \tag{7} hj⟨t⟩​=zj​hj⟨t−1⟩​+(1−zj​)h∼​j⟨t⟩​(7)
其中
h ∼ j ⟨ t ⟩ = ϕ ( [ W x ] j + [ U ( r ⊙ h ⟨ t − 1 ⟩ ) ] j ) (8) {\stackrel{\sim}{h}}^{\langle t \rangle}_j = \phi \left(\left[Wx\right]_j + \left[U(r \odot h_{\langle t-1 \rangle}) \right]_j \right) \tag{8} h∼​j⟨t⟩​=ϕ([Wx]j​+[U(r⊙h⟨t−1⟩​)]j​)(8)

在该公式中,当重置门近于0,当前隐藏状态强制忽略前一个隐藏状态,并用当前的输入重置。这可以有效地让隐藏状态抛弃任何将来发现的不相关的信息。从而是表示更紧凑。

另一方面,更新门控制前一个隐藏状态的多少信息会传递到当前隐藏状态。这类似于LSTM的记忆单元,可以让RNN记住长期信息。此外,这可以被认为是leaky-integration单元的一个适应性地变种。

因为每个隐藏单元有分开的重置和更新门,所以每个隐藏单元将学习捕获到不同时间范围的依赖。这些学习捕获短期依赖的单元倾向于使重置门频繁地激活,但学习长期依赖的单元几乎总是激活更新门。

在我们的初步实现中,我们发现使用带有门结构的单元很重要。否则无法用 t a n h tanh tanh得到有意义的结果。

统计机器翻译

在常用的统计机器翻译系统中,系统(解码器)的目标是找到一个翻译 f f f,在给定源语句e$下能最大化

p ( f ∣ e ) ∝ p ( e ∣ f ) p ( f ) p(f|e) \varpropto p(e|f)p(f) p(f∣e)∝p(e∣f)p(f)

其中式子右边的第一项( p ( e ∣ f ) p(e|f) p(e∣f))称为翻译模型,后者( p ( f ) p(f) p(f))称为语言模型。实际中,然而,大多数SMT系统建模 log ⁡ p ( f ∣ e ) \log p(f|e) logp(f∣e)为具有额外特征和相应权重的对数线性模型:

log ⁡ p ( f ∣ e ) = ∑ n = 1 N w n f n ( f , e ) + log ⁡ Z ( e ) (9) \log p(f|e) = \sum_{n=1}^N w_n f_n(f,e) + \log Z(e) \tag{9} logp(f∣e)=n=1∑N​wn​fn​(f,e)+logZ(e)(9)

其中 f n f_n fn​和 w n w_n wn​分别是第 n n n个特征和权重。 Z ( e ) Z(e) Z(e)是一个不依赖于权重的归一化常数。权重常被优化以最大化验证集上的BLEU得分。

在基于短语的SMT框架中,翻译模型 log ⁡ p ( e ∣ f ) \log p(e|f) logp(e∣f)分解为源语句和目标语句中匹配短语的翻译概率。这些概率又被看成是对数线性模型(见公式 ( 9 ) (9) (9))中额外的特征,并且通过最大化BLEU得分来加权。

自从Bengio等人提出了神经网络语言模型,神经网络已经广泛用于SMT系统。在很多情况下,神经网络被用于对翻译假设(n-best lists)重新打分。然而近来,越来越多学者关注于训练神经网络通过使用源句子的表示作为额外输入,来对翻译的句子(或短语对)进行打分。

3.1 用RNN编码器-解码器进行短语对评分

当调整SMT的解码器时,我们建议在短语对表上训练RNN编码器-解码器(见2.2节),并用它的得分(其实就是概率)作为公式 ( 9 ) (9) (9)中的对数线性模型的额外特征。

当训练RNN编码器-解码器时,我们忽略原始语料库中每个短语对(归一化)的频率。这个措施为了:(1)减少从大短语表中根据归一化的频率随机选择短语对的计算消耗,(2)确保RNN编码器-解码器不是简单地学习根据短语频次来对它们进行排序。这样做的一个根本原因是,短语表中现有的翻译概率已经反映了短语对在原始语料库中的频率。RNN编码器-解码器具有固定的容量(capacity),我们试着确保模型的大多数容量集中于学习语言规律,比如,区分合理和不合理的翻译或学习合理翻译的多样性(概率集中区)。

一旦RNN编码器-解码器训练好后,我们为现有短语表中的每个短语对增加一个新的得分。这使新得分进入现有调整算法时只需要最小的额外计算消耗。

正如Schwenk指出的,可以用RNN编码器-解码器完全替代现有的短语表。在这种情况下,给定一个源短语时,RNN编码器-解码器需要生成(良好的)目标短语列表。然而这需要重复运行昂贵的采样程序。在本文中,因此我们只考虑为短语表中的短语对重新打分。

3.2 相关方法:机器翻译中的神经网络

在介绍实验结果之前,我们讨论一些提出在SMT中使用神经网络的近期工作。Schwenk提出了一个相似的打分短语对方法。但他用了具有固定输入和输出大小的前馈神经网络而不是基于RNN的神经网络。当它具体地用于为SMT系统短语打分时,短语的最大长度通常选得很小。然而,随着短语长度的增加或因为我们应用其他变长序列数据到神经网络,此时神经网络能处理变长输入和输出就很重要了。而RNN编码器-解码器正好可以应用这些场景。

与Devlin等人提出的应用前馈神经网络对翻译模型进行建模的思想类似,然而,通过一次预测目标短语中的一个单词,他们获得了重大提升。但是他们的方法仍然需要输入提前确定短语的最大长度。

尽管Zou et al提出的不完全是神经网络,他们提出了学习单词/短语的双语嵌入。他们用学到的嵌入去计算短语对的距离,作为SMT系统中短语对的额外分数。

Chandar等人训练一个前馈神经网络来学习如何匹配输入短语的词袋(bag-of-words)表示到输出短语。这与RNN编码器-解码器和Schwenk提出的模型很类似,除了他们输入的短语表示是词袋。Gao等人提出了一个类似的使用词袋作为短语表示的途径。Socher等人提出了类似的使用了两个循环神经网络的编码器-解码器模型,但是他们的模型受限于单语设置,比如,该模型重构了一个输入短语。最近,Auli等人提出了另一个使用一个RNN的编码器-解码器模型,其中解码器基于源语句或目标语句表示。

上一篇:统计学习概念


下一篇:RocketMQ入门到入土(五)消息持久化存储源码解析