neural machine translation by jointly learning to align and translate

1.论文出处

Dzmitry Bahdanau, KyungHyun Cho, Yoshua Bengio, “neural machine translation by jointly learning to align and translate”, 3rd International Conference on Learning Representations, ICLR 2015

下面说下为什么看这个论文吧,其实这个是看LAS的论文,感觉理解没那么透彻,所以才来看这个论文的,理论是一样的,但是这里写得比较通俗易懂。下面直接进入技术的介绍啦。

2.本文所提方法的背景

在语音识别 (speech recognition) 或基于神经网络的机器翻译 (neural machine translation) 领域,常用的是encoder-decoder系列方法,编码器encoder将源句子编码成一个固定长度的向量,解码器decoder用于将固定长度的向量翻译成所需向量。但是,模型在处理长句子时,性能不佳。所以,本文提出一种新的模型,这种模型可以搜索句子中与输出有关的部分,是encoder-decoder模型的一种扩展,能学习对齐和翻译 (learn to align and translate jointly)。

3.Encoder-Decoder基础知识介绍

在encoder-decoder框架中,将输入序列的特征 x = ( x 1 , . . . , x T x ) x=(x_1,...,x_{T_x}) x=(x1,...,xTx) 输入encoder模块,然后经过encoder模块的处理,输出上下文向量 c c c。最常用的方法是使用RNN网络,如下所示:
h t = f ( x t , h t − 1 ) (1) h_t=f(x_t,h_{t-1}) \tag{1} ht=f(xt,ht1)(1)
c = q ( { h 1 , . . . , h T x } ) c=q(\{h_1,...,h_{T_x}\}) c=q({h1,...,hTx})
其中, h t ∈ R n h_t \in R^n htRn是时间 t t t的隐藏状态 (hidden state), c c c 可由隐藏状态序列计算得到。这里, f f f q q q 都是某些非线性函数。在很多文献中, f f f q ( { h 1 , . . . , h T } ) q(\{h_1,...,h_T\}) q({h1,...,hT}) 都是用LSTM网络。
解码器decoder,主要是在已知上下文向量 c c c 和前面预测的文字序列 { y 1 , . . . , y t ′ − 1 } \{y_1,...,y_{t'-1} \} {y1,...,yt1}。也就是说,解码器的翻译功能就是定义了一个概率的计算方法,这个方法是将联合概率分解为条件概率,如下所示:
p ( y ) = ∏ t = 1 T p ( y t ∣ { y 1 , . . . , y t − 1 , c ) (2) p(y)=\prod_{t=1}^Tp(y_t|\{y_1,...,y_{t-1},c)\tag{2} p(y)=t=1Tp(yt{y1,...,yt1,c)(2)
在RNN网络中,每个条件概率可以表示为:
p ( y t ∣ { y 1 , . . . , y t − 1 } , c ) = g ( y t − 1 , s t , c ) (3) p(y_t|\{y_1,...,y_{t-1}\},c)=g(y_{t-1},s_t,c)\tag{3} p(yt{y1,...,yt1},c)=g(yt1,st,c)(3)
其中, g g g 是非线性功能的函数,函数的输出是 y t y_t yt s t s_t st 是RNN网络的隐藏状态。
对上述的结构作一个总结,就是将数据输入到编码器,编码器会输出上下文向量

4.本文所提方法

4.1 decoder: general description

在本文提出的模型中,(2)式的条件概率可以写成:
p ( y i ∣ y 1 , . . . , y i − 1 , x ) = g ( y i − 1 , s i , c i ) (4) p(y_i|y_1,...,y_{i-1},\bold x)=g(y_{i-1},s_i,c_i)\tag{4} p(yiy1,...,yi1,x)=g(yi1,si,ci)(4)
s i s_i si是时间 i i i 里RNN的隐藏状态,可以有下式计算得到:
s i = f ( s i − 1 , y i − 1 , c i ) s_i=f(s_{i-1},y_{i-1},c_i) si=f(si1,yi1,ci)
在本式中,每个目标字符 y i y_i yi,其概率都是用上下文向量 c i c_i ci 计算。
上下文向量 c i c_i ci 根据编码器输出的标记 ( h 1 , . . . , h T x ) (h_1,...,h_{T_x}) (h1,...,hTx) 来计算。每个 h i h_i hi 表示整个句子中,第 i i i个单词中的重要程度。上下文向量 c i c_i ci可以看成是 h i h_i hi的权重之和,计算方法如下:
c i = ∑ j = 1 T x = α i j h j (5) c_i=\sum ^{T_x}_{j=1}=\alpha_{ij}h_j \tag{5} ci=j=1Tx=αijhj(5)
h i h_i hi的权重参数 α i j \alpha_{ij} αij 计算方法如下:
α i j = e x p ( e i j ) ∑ k = 1 T x e x p ( e i k ) (6) \alpha_{ij}=\frac{{\rm{exp}}(e_{ij})}{\sum_{k=1}^{T_x}{\rm{exp}}(e_{ik})}\tag{6} αij=k=1Txexp(eik)exp(eij)(6)
其中 e i j = a ( s i − 1 , h j ) e_{ij}=a(s_{i-1},h_j) eij=a(si1,hj) 是对齐模型,其数值大小表示输入位置 j j j 与输出位置 i i i 之间的匹配程度。这个值的大小与RNN的隐藏状态 s i − 1 s_{i-1} si1 h j h_j hj 有关。
对齐模型 (alignment model) a a a 可以看成是一个前向的神经网络,与系统的其他模块一起训练,但是我们没有认为对齐是隐藏变量 (latent variable)。对齐模型可以直接计算soft alignment,也就是说loss函数的梯度值可以后向传播,用于训练模型。
计算编码器的标记 h h h 的权重和,当做是期望的标记 (虽然可能超过想要的对齐)。假设 α i j \alpha_{ij} αij 是输出目标字 y i y_i yi 与输入字 x j x_j xj 对齐的概率。然后,上下文向量 c i c_i ci 表示其是期望标记 (expected annotation) 的概率是 α i j \alpha_{ij} αij
概率 α i j \alpha_{ij} αij 或能量 e i j e_{ij} eij 表示用 s i − 1 s_{i-1} si1 计算 s i s_i si y i y_i yi 时, h j h_j hj 的重要程序。直观理解,就是解码器的注意力机制。解码器觉得句子哪个部分要注意。因为解码器有注意力机制,所以编码器就不需要将整个句子编码成固定长度的向量。

4.2 Encoder: Bidirectional RNN for Annotation Aequences

如公式(1)中使用的RNN,将输入句子x按顺序读取,从 x 1 x_1 x1 x x T x_{x_T} xxT。但是,本文使用双向的RNN (BiRNN)。其主要包括前向和后向的RNN,前向RNN f → \overrightarrow f f 按照从 x 1 x_1 x1 x T x x_{T_x} xTx的顺序读取输入序列,并计算隐藏状态( h 1 → , . . . , h t x → \overrightarrow {h_1},...,\overrightarrow{h_{t_x}} h1 ,...,htx )。反向RNN f ← \overleftarrow f f 以相反的顺序读取输入序列,即从 x T x x_{T_x} xTx x 1 x_1 x1,计算出反向隐藏状态序列( h 1 ← , . . . , h T x ← \overleftarrow {h_1},...,\overleftarrow{h_{T_x}} h1 ,...,hTx )。

每个字 x j x_j xj的标注可以通过连接前向隐藏状态 h j → \overrightarrow{h_j} hj 和反向隐藏状态 h j ← \overleftarrow{h_j} hj 得到,可表示如下:
h j = [ h → j T ; h ← j T ] T h_j={[\overrightarrow h_j^T;\overleftarrow h_j^T]}^T hj=[h jT;h jT]T
从上式可以看出, h j h_j hj包含前向和后向的字符,并且更关注字符 x j x_j xj附近的字符。
下图是本文所提方法的框图。

neural machine translation by jointly learning to align and translate_第1张图片

5 模型的具体方法

5.1 架构选择

第4部分介绍的模型的架构,读者可以用符合条件的模型实现都可获得文中所述的结果。以下将具体介绍本文使用的具体模型,主要包括RNN和对齐模型 a a a

5.1.1 RNN

RNN的激活函数为gated hidden unit,与LSTM类似。这使得它在展开RNN上获取计算路径。其导数的乘积接近1,所以易于反向传播。(当然,这里使用LSTM也有类似的结果)
RNN的 s i s_i si可以用 n n n个gated hidden units来计算,具体如下:
s i = f ( s i − 1 , y i − 1 , c i ) = ( 1 − z i ) ∘ s i − 1 + z i ∘ s ~ i s_i=f(s_{i-1},y_{i-1},c_i)=(1-z_i)\circ s_{i-1}+z_i\circ \widetilde s_i si=f(si1,yi1,ci)=(1zi)si1+zis i
其中, ∘ \circ 表示逐点相乘, z i z_i zi表示更新门update gates的输出。更新状态 s ~ i \widetilde s_i s i的计算方法如下:
s ~ i = t a n h ( W e ( y i − 1 + U [ r i ∘ s i − 1 ] + C c i ) ) \widetilde s_i={\rm tanh}(W e(y_{i-1}+ U[r_i\circ s_{i-1}]+Cc_i)) s i=tanh(We(yi1+U[risi1]+Cci))
其中, e ( y i − 1 ) ∈ R m e(y_{i-1})\in \mathbb R^m e(yi1)Rm是字 y i − 1 y_{i-1} yi1 m m m维嵌入特征, r i r_i ri是重置门reset gates的输出。当 y i y_i yi K K K个向量中的一个, e ( y i ) e(y_i) e(yi)是嵌入矩阵 E ∈ R m ∗ k E\in\mathbb R^{m*k} ERmk中的一列,本文不考虑偏移bias的影响。
更新门 z i z_i zi允许每个隐藏状态保持其原来的状态,重置门reset gates r i r_i ri控制以前的状态有多少信息和哪些信息需要重置。具体计算方法如下:
z i = δ ( W z e ( y i − 1 ) + U z s i − 1 + C z c i ) z_i=\delta(W_ze(y_{i-1})+U_zs_{i-1}+C_zc_i) zi=δ(Wze(yi1)+Uzsi1+Czci)
r i = δ ( W r e ( y i − 1 ) + U r s i − 1 + C r c i ) r_i=\delta(W_re(y_{i-1})+U_rs_{i-1}+C_rc_i) ri=δ(Wre(yi1)+Ursi1+Crci)
其中, δ ( . ) \delta (.) δ(.)是逻辑sigmoid函数。

5.1.2 Alignment Model

alignment model设计时,需要考虑每对句子(长度为 T x T_x Tx T y T_y Ty),模型需要检测 T x ∗ T y T_x*T_y TxTy次。为了减少计算量,本文使用单层多层感知机,具体如下所示:
a ( s i − 1 , h j ) = v a T t a n h ( W a s i − 1 + U a h j ) a(s_{i-1},h_j)=v_a^T{\rm tanh}(W_as_{i-1}+U_ah_j) a(si1,hj)=vaTtanh(Wasi1+Uahj)
其中, W a ∈ R n ∗ n , U a ∈ R n ∗ 2 n W_a\in\mathbb R^{n*n},U_a\in\mathbb R^{n*2n} WaRnn,UaRn2n为权重矩阵。因为 U a h j U_ah_j Uahj不依赖 i i i,所有本文提前计算好,这样可以减小计算量。

5.2 模型具体细节介绍

5.2.1 编码器

以下的讨论,不考虑偏置项的影响。模型的输入是K分之一的编码字向量,如下所示:
x = x 1 , . . . , x T x , x i ∈ R K x {\rm x}=x_1,...,x_{T_x}, x_i\in\mathbb R^{K_x} x=x1,...,xTx,xiRKx
输出是一个包含K分之一编码字向量的句子,如下所示:
y = ( y 1 , . . . , y T y ) , y i ∈ R K y {\rm y}=(y_1,...,y_{T_y}), y_i \in \mathbb R^{K_y} y=(y1,...,yTy),yiRKy
其中, K x K_x Kx K y K_y Ky 分别是原序列和目标序列的大小。 T x T_x Tx T y T_y Ty 表示原序列和目标序列的句子长度。
首先,前向BiLSTM的前向状态计算方法如下:
h → i = { ( 1 − z → i ) ∘ h → i − 1 + z → i ∘ h i , i f i > 0 0 , i f i = 0 \overrightarrow h_i =\left \{ \begin{aligned} (1-\overrightarrow z_i)\circ\overrightarrow h_{i-1}+\overrightarrow z_i \circ h_i, {\rm if} i>0 \\ 0, {\rm if} i=0 \end{aligned} \right. h i=(1z i)h i1+z ihi,ifi>00,ifi=0
其中
h → i = t a n h ( W → E ‾ x i + U → [ r → i ∘ h → i − 1 ] ) \overrightarrow h_i={\rm tanh}(\overrightarrow W \overline E x_i+\overrightarrow U[\overrightarrow r_i \circ \overrightarrow h_{i-1}]) h i=tanh(W Exi+U [r ih i1])
z → i = δ ( W → z E ‾ x i + U → z h → i − 1 ) \overrightarrow z_i=\delta(\overrightarrow W_z \overline E x_i+\overrightarrow U_z \overrightarrow h_{i-1}) z i=δ(W zExi+U zh i1)
r → i = δ ( W → r E ‾ x i + U → r h → i − 1 ) \overrightarrow r_i=\delta(\overrightarrow W_r \overline E x_i+\overrightarrow U_r \overrightarrow h_{i-1}) r i=δ(W rExi+U rh i1)
其中, E ‾ ∈ R m ∗ K x \overline E\in\mathbb R^{m*K_x} ERmKx 是字嵌入矩阵。 W → , W → z , W → r ∈ R n ∗ m \overrightarrow W, \overrightarrow W_z,\overrightarrow W_r\in\mathbb R^{n*m} W ,W z,W rRnm U → , U → z , U → r ∈ R n ∗ n \overrightarrow U,\overrightarrow U_z,\overrightarrow U_r\in\mathbb R^{n*n} U ,U z,U rRnn都是权重矩阵。 m m m n n n分别是字的嵌入维度和隐藏单元的数量。 δ ( . ) \delta(.) δ(.)是逻辑sigmoid函数。
后向状态 ( h ← 1 , . . . , h ← T x ) (\overleftarrow h_1,...,\overleftarrow h_{T_x}) (h 1,...,h Tx)的计算方法类似。在前向RNN和后向RNN中,网络共享字嵌入矩阵word embedding matrix: E ‾ \overline E E,但是权重矩阵不共享。
本文将前向和后行的标记连接起来,得到 ( h 1 , h 2 , . . , h T X ) (h_1,h_2,..,h_{T_X}) (h1,h2,..,hTX),如下所示:
h i = [ h → i h ← i ] (7) h_i=\left[ \begin{aligned} \overrightarrow h_i \\ \overleftarrow h_i \end{aligned} \right] \tag{7} hi=h ih i(7)

5.2.2 解码器

已知编码器标记annotation,解码器的隐藏状态 s i s_i si计算方法如下:
s i = ( 1 − z i ) ∘ s i − 1 + z i ∘ s ~ i s_i=(1-z_i)\circ s_{i-1}+z_i\circ \tilde s_i si=(1zi)si1+zis~i
其中
s ~ i = t a n h ( W E y i − 1 + U [ r i ∘ s i − 1 ] + C c i ) \tilde s_i={\rm tanh}(WEy_{i-1}+U[r_i\circ s_{i-1}]+Cc_i) s~i=tanh(WEyi1+U[risi1]+Cci)
z i = δ ( W z E y i − 1 + U z s i − 1 + C z c i ) z_i=\delta(W_zEy_{i-1}+U_zs_{i-1}+C_zc_i) zi=δ(WzEyi1+Uzsi1+Czci)
r i = δ ( W r E y i − 1 + U r s i − 1 + C r c i ) r_i=\delta(W_rEy_{i-1}+U_rs_{i-1}+C_rc_i) ri=δ(WrEyi1+Ursi1+Crci)
其中, E E E是目标语言的字嵌入矩阵, W , W z , W r ∈ R n ∗ m W,W_z,W_r\in\mathbb R^{n*m} W,Wz,WrRnm U , U z , U r ∈ R n ∗ n U,U_z,U_r\in \mathbb R^{n*n} U,Uz,UrRnn C , C z , C r ∈ R n ∗ 2 n C,C_z,C_r\in\mathbb R^{n*2n} C,Cz,CrRn2n都是权重。 m m m n n n分别是字嵌入的维度和隐藏层的数量。初始的隐藏状态 s 0 s_0 s0计算方法如下:
s 0 = t a n h ( W s h ← 1 ) , W s ∈ R n ∗ n s_0={\rm tanh}(W_s\overleftarrow h_1), W_s\in \mathbb R^{n*n} s0=tanh(Wsh 1),WsRnn
上下文向量 c i c_i ci可以通过对齐模型来计算,具体方法如下所示:
c i = ∑ j = 1 T x α i j h j c_i=\sum_{j=1}^{T_x}\alpha_{ij}h_j ci=j=1Txαijhj
其中
α i j = e x p ( e i j ) ∑ k = 1 T x e x p ( e i k ) \alpha_{ij}=\frac{{\rm exp}(e_{ij})}{\sum_{k=1}^{T_x}{\rm exp}(e_{ik})} αij=k=1Txexp(eik)exp(eij)
e i j = v a T t a n h ( W a s i − 1 + U a h j ) e_{ij}=v^T_a{\rm tanh}(W_as_{i-1}+U_ah_j) eij=vaTtanh(Wasi1+Uahj)
其中, h j h_j hj是原序列的第 j j j个标记。 v a ∈ R n ′ , W a ∈ R n ′ ∗ n v_a\in\mathbb R^{n'},W_a\in\mathbb R^{n'*n} vaRn,WaRnn U a ∈ R n ′ ∗ 2 n U_a\in\mathbb R^{n'*2n} UaRn2n都是权重矩阵。如果将 c i c_i ci固定到 h → T x \overrightarrow h_{T_x} h Tx时,模型则变成RNN Encoder-Decoder。
一直解码器状态 s i − 1 s_{i-1} si1,上下文向量 c i c_i ci和最后一个字 y i y_i yi时,目标字的概率可以定义如下:
p ( y i ∣ s i , y i − 1 , c i ) ∝ e x p ( y i T W o t i ) p(y_i|s_i,y_{i-1},c_i)\propto {\rm exp}(y^T_iW_ot_i) p(yisi,yi1,ci)exp(yiTWoti)
其中
t i = [ m a x { t ~ i , 2 j − 1 , t ~ i , 2 j } ] j = 1 , . . . , l T t_i={[max\{\tilde t_{i,2j-1},\tilde t_{i,2j} \}]}^T_{j=1,...,l} ti=[max{t~i,2j1,t~i,2j}]j=1,...,lT
t ~ i , k \tilde t_{i,k} t~i,k是向量 t ~ i \tilde t_i t~i的第 k k k个元素,计算方法如下:
t ~ i = U 0 s i − 1 + V o E y i − 1 + C o c i \tilde t_i=U_0s_{i-1}+V_oEy_{i-1}+C_oc_i t~i=U0si1+VoEyi1+Coci
W o ∈ R K y ∗ l , U o ∈ R 2 l ∗ n , V o ∈ R 2 l ∗ m W_o\in\mathbb R^{K_y*l},U_o\in\mathbb R^{2l*n},V_o\in\mathbb R^{2l*m} WoRKyl,UoR2ln,VoR2lm C o ∈ R 2 l ∗ 2 n C_o\in\mathbb R^{2l*2n} CoR2l2n都是权重矩阵。

你可能感兴趣的:(语音识别,语音识别)