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=(x1,...,xTx)x=(x_1,...,x_{T_x})x=(x1,...,xTx) 输入encoder模块,然后经过encoder模块的处理,输出上下文向量ccc。最常用的方法是使用RNN网络,如下所示:
ht=f(xt,ht−1)(1)h_t=f(x_t,h_{t-1}) \tag{1}ht=f(xt,ht−1)(1)
c=q({h1,...,hTx})c=q(\{h_1,...,h_{T_x}\})c=q({h1,...,hTx})
其中,ht∈Rnh_t \in R^nht∈Rn是时间ttt的隐藏状态 (hidden state),ccc 可由隐藏状态序列计算得到。这里,fff 和 qqq 都是某些非线性函数。在很多文献中,fff 和 q({h1,...,hT})q(\{h_1,...,h_T\})q({h1,...,hT}) 都是用LSTM网络。
解码器decoder,主要是在已知上下文向量 ccc 和前面预测的文字序列 {y1,...,yt′−1}\{y_1,...,y_{t'-1} \}{y1,...,yt′−1}。也就是说,解码器的翻译功能就是定义了一个概率的计算方法,这个方法是将联合概率分解为条件概率,如下所示:
p(y)=∏t=1Tp(yt∣{y1,...,yt−1,c)(2)p(y)=\prod_{t=1}^Tp(y_t|\{y_1,...,y_{t-1},c)\tag{2}p(y)=t=1∏Tp(yt∣{y1,...,yt−1,c)(2)
在RNN网络中,每个条件概率可以表示为:
p(yt∣{y1,...,yt−1},c)=g(yt−1,st,c)(3)p(y_t|\{y_1,...,y_{t-1}\},c)=g(y_{t-1},s_t,c)\tag{3}p(yt∣{y1,...,yt−1},c)=g(yt−1,st,c)(3)
其中,ggg 是非线性功能的函数,函数的输出是 yty_tyt,sts_tst 是RNN网络的隐藏状态。
对上述的结构作一个总结,就是将数据输入到编码器,编码器会输出上下文向量
4.本文所提方法
4.1 decoder: general description
在本文提出的模型中,(2)式的条件概率可以写成:
p(yi∣y1,...,yi−1,x)=g(yi−1,si,ci)(4)p(y_i|y_1,...,y_{i-1},\bold x)=g(y_{i-1},s_i,c_i)\tag{4}p(yi∣y1,...,yi−1,x)=g(yi−1,si,ci)(4)
sis_isi是时间 iii 里RNN的隐藏状态,可以有下式计算得到:
si=f(si−1,yi−1,ci)s_i=f(s_{i-1},y_{i-1},c_i)si=f(si−1,yi−1,ci)
在本式中,每个目标字符yiy_iyi,其概率都是用上下文向量 cic_ici 计算。
上下文向量 cic_ici 根据编码器输出的标记 (h1,...,hTx)(h_1,...,h_{T_x})(h1,...,hTx) 来计算。每个 hih_ihi 表示整个句子中,第iii个单词中的重要程度。上下文向量cic_ici可以看成是hih_ihi的权重之和,计算方法如下:
ci=∑j=1Tx=αijhj(5)c_i=\sum ^{T_x}_{j=1}=\alpha_{ij}h_j \tag{5}ci=j=1∑Tx=αijhj(5)
hih_ihi的权重参数αij\alpha_{ij}αij 计算方法如下:
αij=exp(eij)∑k=1Txexp(eik)(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)
其中 eij=a(si−1,hj)e_{ij}=a(s_{i-1},h_j)eij=a(si−1,hj) 是对齐模型,其数值大小表示输入位置 jjj 与输出位置 iii 之间的匹配程度。这个值的大小与RNN的隐藏状态 si−1s_{i-1}si−1 和 hjh_jhj 有关。
对齐模型 (alignment model) aaa 可以看成是一个前向的神经网络,与系统的其他模块一起训练,但是我们没有认为对齐是隐藏变量 (latent variable)。对齐模型可以直接计算soft alignment,也就是说loss函数的梯度值可以后向传播,用于训练模型。
计算编码器的标记hhh 的权重和,当做是期望的标记 (虽然可能超过想要的对齐)。假设 αij\alpha_{ij}αij 是输出目标字 yiy_iyi 与输入字 xjx_jxj 对齐的概率。然后,上下文向量 cic_ici 表示其是期望标记 (expected annotation) 的概率是 αij\alpha_{ij}αij。
概率 αij\alpha_{ij}αij 或能量 eije_{ij}eij 表示用 si−1s_{i-1}si−1 计算 sis_isi 和 yiy_iyi 时,hjh_jhj 的重要程序。直观理解,就是解码器的注意力机制。解码器觉得句子哪个部分要注意。因为解码器有注意力机制,所以编码器就不需要将整个句子编码成固定长度的向量。
4.2 Encoder: Bidirectional RNN for Annotation Aequences
如公式(1)中使用的RNN,将输入句子x按顺序读取,从x1x_1x1到xxTx_{x_T}xxT。但是,本文使用双向的RNN (BiRNN)。其主要包括前向和后向的RNN,前向RNNf→\overrightarrow ff
每个字xjx_jxj的标注可以通过连接前向隐藏状态hj→\overrightarrow{h_j}hj
hj=[h→jT;h←jT]Th_j={[\overrightarrow h_j^T;\overleftarrow h_j^T]}^Thj=[hjT;hjT]T
从上式可以看出,hjh_jhj包含前向和后向的字符,并且更关注字符xjx_jxj附近的字符。
下图是本文所提方法的框图。
5 模型的具体方法
5.1 架构选择
第4部分介绍的模型的架构,读者可以用符合条件的模型实现都可获得文中所述的结果。以下将具体介绍本文使用的具体模型,主要包括RNN和对齐模型aaa。
5.1.1 RNN
RNN的激活函数为gated hidden unit,与LSTM类似。这使得它在展开RNN上获取计算路径。其导数的乘积接近1,所以易于反向传播。(当然,这里使用LSTM也有类似的结果)
RNN的sis_isi可以用nnn个gated hidden units来计算,具体如下:
si=f(si−1,yi−1,ci)=(1−zi)∘si−1+zi∘s~is_i=f(s_{i-1},y_{i-1},c_i)=(1-z_i)\circ s_{i-1}+z_i\circ \widetilde s_isi=f(si−1,yi−1,ci)=(1−zi)∘si−1+zi∘s
其中,∘\circ∘表示逐点相乘,ziz_izi表示更新门update gates的输出。更新状态s~i\widetilde s_isi的计算方法如下:
s~i=tanh(We(yi−1+U[ri∘si−1]+Cci))\widetilde s_i={\rm tanh}(W e(y_{i-1}+ U[r_i\circ s_{i-1}]+Cc_i))si=tanh(We(yi−1+U[ri∘si−1]+Cci))
其中,e(yi−1)∈Rme(y_{i-1})\in \mathbb R^me(yi−1)∈Rm是字yi−1y_{i-1}yi−1的mmm维嵌入特征,rir_iri是重置门reset gates的输出。当yiy_iyi是KKK个向量中的一个,e(yi)e(y_i)e(yi)是嵌入矩阵E∈Rm∗kE\in\mathbb R^{m*k}E∈Rm∗k中的一列,本文不考虑偏移bias的影响。
更新门ziz_izi允许每个隐藏状态保持其原来的状态,重置门reset gates rir_iri控制以前的状态有多少信息和哪些信息需要重置。具体计算方法如下:
zi=δ(Wze(yi−1)+Uzsi−1+Czci)z_i=\delta(W_ze(y_{i-1})+U_zs_{i-1}+C_zc_i)zi=δ(Wze(yi−1)+Uzsi−1+Czci)
ri=δ(Wre(yi−1)+Ursi−1+Crci)r_i=\delta(W_re(y_{i-1})+U_rs_{i-1}+C_rc_i)ri=δ(Wre(yi−1)+Ursi−1+Crci)
其中,δ(.)\delta (.)δ(.)是逻辑sigmoid函数。
5.1.2 Alignment Model
alignment model设计时,需要考虑每对句子(长度为TxT_xTx和TyT_yTy),模型需要检测Tx∗TyT_x*T_yTx∗Ty次。为了减少计算量,本文使用单层多层感知机,具体如下所示:
a(si−1,hj)=vaTtanh(Wasi−1+Uahj)a(s_{i-1},h_j)=v_a^T{\rm tanh}(W_as_{i-1}+U_ah_j)a(si−1,hj)=vaTtanh(Wasi−1+Uahj)
其中,Wa∈Rn∗n,Ua∈Rn∗2nW_a\in\mathbb R^{n*n},U_a\in\mathbb R^{n*2n}Wa∈Rn∗n,Ua∈Rn∗2n为权重矩阵。因为UahjU_ah_jUahj不依赖iii,所有本文提前计算好,这样可以减小计算量。
5.2 模型具体细节介绍
5.2.1 编码器
以下的讨论,不考虑偏置项的影响。模型的输入是K分之一的编码字向量,如下所示:
x=x1,...,xTx,xi∈RKx{\rm x}=x_1,...,x_{T_x}, x_i\in\mathbb R^{K_x}x=x1,...,xTx,xi∈RKx
输出是一个包含K分之一编码字向量的句子,如下所示:
y=(y1,...,yTy),yi∈RKy{\rm y}=(y_1,...,y_{T_y}), y_i \in \mathbb R^{K_y}y=(y1,...,yTy),yi∈RKy
其中,KxK_xKx 和 KyK_yKy 分别是原序列和目标序列的大小。TxT_xTx 和 TyT_yTy 表示原序列和目标序列的句子长度。
首先,前向BiLSTM的前向状态计算方法如下:
h→i={(1−z→i)∘h→i−1+z→i∘hi,ifi>00,ifi=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
其中
h→i=tanh(W→E‾xi+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}])hi=tanh(WExi+U[ri∘hi−1])
z→i=δ(W→zE‾xi+U→zh→i−1)\overrightarrow z_i=\delta(\overrightarrow W_z \overline E x_i+\overrightarrow U_z \overrightarrow h_{i-1})zi=δ(WzExi+Uzhi−1)
r→i=δ(W→rE‾xi+U→rh→i−1)\overrightarrow r_i=\delta(\overrightarrow W_r \overline E x_i+\overrightarrow U_r \overrightarrow h_{i-1})ri=δ(WrExi+Urhi−1)
其中,E‾∈Rm∗Kx\overline E\in\mathbb R^{m*K_x}E∈Rm∗Kx 是字嵌入矩阵。W→,W→z,W→r∈Rn∗m\overrightarrow W, \overrightarrow W_z,\overrightarrow W_r\in\mathbb R^{n*m}W,Wz,Wr∈Rn∗m 和 U→,U→z,U→r∈Rn∗n\overrightarrow U,\overrightarrow U_z,\overrightarrow U_r\in\mathbb R^{n*n}U,Uz,Ur∈Rn∗n都是权重矩阵。mmm和nnn分别是字的嵌入维度和隐藏单元的数量。δ(.)\delta(.)δ(.)是逻辑sigmoid函数。
后向状态(h←1,...,h←Tx)(\overleftarrow h_1,...,\overleftarrow h_{T_x})(h1,...,hTx)的计算方法类似。在前向RNN和后向RNN中,网络共享字嵌入矩阵word embedding matrix:E‾\overline EE,但是权重矩阵不共享。
本文将前向和后行的标记连接起来,得到(h1,h2,..,hTX)(h_1,h_2,..,h_{T_X})(h1,h2,..,hTX),如下所示:
hi=[h→ih←i](7)h_i=\left[ \begin{aligned} \overrightarrow h_i \\ \overleftarrow h_i \end{aligned} \right] \tag{7}hi=⎣⎡hihi⎦⎤(7)
5.2.2 解码器
已知编码器标记annotation,解码器的隐藏状态sis_isi计算方法如下:
si=(1−zi)∘si−1+zi∘s~is_i=(1-z_i)\circ s_{i-1}+z_i\circ \tilde s_isi=(1−zi)∘si−1+zi∘s~i
其中
s~i=tanh(WEyi−1+U[ri∘si−1]+Cci)\tilde s_i={\rm tanh}(WEy_{i-1}+U[r_i\circ s_{i-1}]+Cc_i)s~i=tanh(WEyi−1+U[ri∘si−1]+Cci)
zi=δ(WzEyi−1+Uzsi−1+Czci)z_i=\delta(W_zEy_{i-1}+U_zs_{i-1}+C_zc_i)zi=δ(WzEyi−1+Uzsi−1+Czci)
ri=δ(WrEyi−1+Ursi−1+Crci)r_i=\delta(W_rEy_{i-1}+U_rs_{i-1}+C_rc_i)ri=δ(WrEyi−1+Ursi−1+Crci)
其中,EEE是目标语言的字嵌入矩阵,W,Wz,Wr∈Rn∗mW,W_z,W_r\in\mathbb R^{n*m}W,Wz,Wr∈Rn∗m,U,Uz,Ur∈Rn∗nU,U_z,U_r\in \mathbb R^{n*n}U,Uz,Ur∈Rn∗n 和C,Cz,Cr∈Rn∗2nC,C_z,C_r\in\mathbb R^{n*2n}C,Cz,Cr∈Rn∗2n都是权重。mmm和nnn分别是字嵌入的维度和隐藏层的数量。初始的隐藏状态s0s_0s0计算方法如下:
s0=tanh(Wsh←1),Ws∈Rn∗ns_0={\rm tanh}(W_s\overleftarrow h_1), W_s\in \mathbb R^{n*n}s0=tanh(Wsh
上下文向量cic_ici可以通过对齐模型来计算,具体方法如下所示:
ci=∑j=1Txαijhjc_i=\sum_{j=1}^{T_x}\alpha_{ij}h_jci=j=1∑Txαijhj
其中
αij=exp(eij)∑k=1Txexp(eik)\alpha_{ij}=\frac{{\rm exp}(e_{ij})}{\sum_{k=1}^{T_x}{\rm exp}(e_{ik})}αij=∑k=1Txexp(eik)exp(eij)
eij=vaTtanh(Wasi−1+Uahj)e_{ij}=v^T_a{\rm tanh}(W_as_{i-1}+U_ah_j)eij=vaTtanh(Wasi−1+Uahj)
其中,hjh_jhj是原序列的第jjj个标记。va∈Rn′,Wa∈Rn′∗nv_a\in\mathbb R^{n'},W_a\in\mathbb R^{n'*n}va∈Rn′,Wa∈Rn′∗n和Ua∈Rn′∗2nU_a\in\mathbb R^{n'*2n}Ua∈Rn′∗2n都是权重矩阵。如果将cic_ici固定到h→Tx\overrightarrow h_{T_x}hTx时,模型则变成RNN Encoder-Decoder。
一直解码器状态si−1s_{i-1}si−1,上下文向量cic_ici和最后一个字yiy_iyi时,目标字的概率可以定义如下:
p(yi∣si,yi−1,ci)∝exp(yiTWoti)p(y_i|s_i,y_{i-1},c_i)\propto {\rm exp}(y^T_iW_ot_i)p(yi∣si,yi−1,ci)∝exp(yiTWoti)
其中
ti=[max{t~i,2j−1,t~i,2j}]j=1,...,lTt_i={[max\{\tilde t_{i,2j-1},\tilde t_{i,2j} \}]}^T_{j=1,...,l}ti=[max{t~i,2j−1,t~i,2j}]j=1,...,lT
t~i,k\tilde t_{i,k}t~i,k是向量t~i\tilde t_it~i的第kkk个元素,计算方法如下:
t~i=U0si−1+VoEyi−1+Coci\tilde t_i=U_0s_{i-1}+V_oEy_{i-1}+C_oc_it~i=U0si−1+VoEyi−1+Coci
Wo∈RKy∗l,Uo∈R2l∗n,Vo∈R2l∗mW_o\in\mathbb R^{K_y*l},U_o\in\mathbb R^{2l*n},V_o\in\mathbb R^{2l*m}Wo∈RKy∗l,Uo∈R2l∗n,Vo∈R2l∗m和Co∈R2l∗2nC_o\in\mathbb R^{2l*2n}Co∈R2l∗2n都是权重矩阵。
neural machine translation by jointly learning to align and translate相关推荐
- nlp论文-《Neural Machine Translation by Jointly Learning to Align and Translate》-基于联合学习对齐和翻译的神经机器翻译(一)
<Neural Machine Translation by Jointly Learning to Align and Translate>--基于联合学习对齐和翻译的神经机器翻译 作者 ...
- 【论文泛读】4. 机器翻译:Neural Machine Translation by Jointly Learning to Align and Translate
更新进度:■■■■■■■■■■■■■■■■■■■■■■■|100% 理论上一周更一个经典论文 刚刚开始学习,写的不好,有错误麻烦大家留言给我啦 这位博主的笔记短小精炼,爱了爱了:点击跳转 目录 准备 ...
- 《Neural Machine Translation by Jointly Learning to Align and Translate》阅读笔记
个人总结 本文最大贡献是提出了注意力机制,相比于之前 NMT(Neural Machine Translation) 把整个句子压缩成一个固定向量表示的方法,对不同位置的目标单词计算每个输入的不同权重 ...
- [论文阅读]Neural Machine Translation By Jointly Learning to Align and Translate
文章目录 前言 摘要 一.神经机器翻译 1.机器翻译 2.基于RNN的Encoder-Decoder架构 二.文章贡献 三.模型架构 1.译码器:整体概述 2.编码器:用于注释序列的双向RNN 四.实 ...
- nlp论文-《Neural Machine Translation by Jointly Learning to Align and Translate》-基于联合学习对齐和翻译的神经机器翻译(二)
1.论文整体框架 1.1 摘要 神经机器翻译的任务定义: 传统神经机器翻译所用的编码器-解码器模型的缺陷: 本文提出一种能够自动搜索原句中与预测目标词相关的神经机器翻译模型: 所提出的模型的效果: 1 ...
- 论文阅读:《Neural Machine Translation by Jointly Learning to Align and Translate》
https://blog.csdn.net/u011239443/article/details/80521026 论文地址:http://pdfs.semanticscholar.org/071b/ ...
- Netural Machine Translation By Joinly Learning To Align And Translate
参考论文:Netural Machine Translation By Joinly Learning To Align And Translate 这篇论文应该是attention系列论文的鼻祖论文 ...
- 《Reducing Word Omission Errors in Neural Machine Translation:A Contrastive Learning Approach》论文阅读笔记
Reducing Word Omission Errors in Neural Machine Translation:A Contrastive Learning Approach 基本信息 研究目 ...
- 《Effective Approaches to Attention-based Neural Machine Translation》—— 基于注意力机制的有效神经机器翻译方法
目录 <Effective Approaches to Attention-based Neural Machine Translation> 一.论文结构总览 二.论文背景知识 2.1 ...
最新文章
- PyQt、QtDesigner及其它工具包的安装
- SpringMVC(一)——入门案例
- spring mvc后端校验validator
- 7_23 day26 14min面向对象总结
- python模块;opencv安装
- Android蓝牙A2DP连接实现
- python装饰器打印函数执行时间_使用python装饰器计算函数运行时间的实例
- python--下载文件并将文件放到指定文件夹
- STM32+DWM1000开发uwb测距系列教程之一:官方例程简介
- 企业生存与发展的前提是安全
- 城镇化进程中的粮食生产问题
- 全球及中国复合纸板管包装行业研究及十四五规划分析报告
- 微软java虚拟机下载_微软Java虚拟机下载-Microsoft VM(Java虚拟机)5.0.3805最新版 - 维维软件园...
- 手机lbs位置服务盘点
- jsp:jsp包含文件的两种方式
- 小米集团加入开源专利社区 OIN
- 新学期,新气象,新起点,新征程。
- C语言100题打卡—第3题
- 无领导小组讨论面试真题解析(八)—— 是什么影响了利润
- openstack 安装keystone初始化数据库失败