Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mtbookv2
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
NiuTrans
mtbookv2
Commits
508811a4
Commit
508811a4
authored
Sep 16, 2020
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wording (sec 10, enc-dec)
parent
177cc5f6
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
10 行增加
和
10 行删除
+10
-10
Chapter10/chapter10.tex
+10
-10
没有找到文件。
Chapter10/chapter10.tex
查看文件 @
508811a4
...
@@ -76,15 +76,15 @@
...
@@ -76,15 +76,15 @@
\begin{itemize}
\begin{itemize}
\vspace
{
0.3em
}
\vspace
{
0.3em
}
\item
早在2013年,
牛津大学的
Nal Kalchbrenner和Phil Blunsom提出了一个基于编码器-解码器结构的新模型
\upcite
{
kalchbrenner-blunsom-2013-recurrent
}
。该模型用卷积神经网络(CNN)将源语言编码成实数向量,之后用循环神经网络(RNN)将连续向量转换成目标语言。这使得模型不需要进行词对齐、特征提取等工作,就能够自动学习源语言的信息。这也是一种端到端学习的方法。不过,这项工作的实现较复杂,而且方法存在梯度消失/爆炸等问题
\upcite
{
HochreiterThe,BENGIO1994Learning
}
,因此并没有成为后来神经机器翻译的基础框架。
\item
早在2013年,Nal Kalchbrenner和Phil Blunsom提出了一个基于编码器-解码器结构的新模型
\upcite
{
kalchbrenner-blunsom-2013-recurrent
}
。该模型用卷积神经网络(CNN)将源语言编码成实数向量,之后用循环神经网络(RNN)将连续向量转换成目标语言。这使得模型不需要进行词对齐、特征提取等工作,就能够自动学习源语言的信息。这也是一种端到端学习的方法。不过,这项工作的实现较复杂,而且方法存在梯度消失/爆炸等问题
\upcite
{
HochreiterThe,BENGIO1994Learning
}
,因此并没有成为后来神经机器翻译的基础框架。
\vspace
{
0.3em
}
\vspace
{
0.3em
}
\item
2014年,
谷歌的
Ilya Sutskever等人提出了序列到序列(seq2seq)学习的方法,同时将长短记忆结构(LSTM)引入到神经机器翻译中,这个方法解决了梯度爆炸/消失的问题,并且通过遗忘门的设计让网络选择性地记忆信息,缓解了序列中长距离依赖的问题
\upcite
{
NIPS2014
_
5346
}
。但是该模型在进行编码的过程中,将不同长度的源语言句子压缩成了一个固定长度的向量,句子越长,损失的信息越多,同时该模型无法对输入和输出序列之间的对齐进行建模,因此并不能有效的保证翻译质量。
\item
2014年,Ilya Sutskever等人提出了序列到序列(seq2seq)学习的方法,同时将长短记忆结构(LSTM)引入到神经机器翻译中,这个方法解决了梯度爆炸/消失的问题,并且通过遗忘门的设计让网络选择性地记忆信息,缓解了序列中长距离依赖的问题
\upcite
{
NIPS2014
_
5346
}
。但是该模型在进行编码的过程中,将不同长度的源语言句子压缩成了一个固定长度的向量,句子越长,损失的信息越多,同时该模型无法对输入和输出序列之间的对齐进行建模,因此并不能有效的保证翻译质量。
\vspace
{
0.3em
}
\vspace
{
0.3em
}
\item
同年Dzmitry Bahdanau等人首次将注意力机制(Attention Mechanism)应用到机器翻译领域,在机器翻译任务上对翻译和局部翻译单元之间的对应关系同时建模
\upcite
{
bahdanau2014neural
}
。Bahdanau等人工作的意义在于,使用了更加有效的模型来表示源语言的信息,同时使用注意力机制对两种语言不同部分之间的相互联系进行建模。这种方法可以有效地处理长句子的翻译,而且注意力的中间结果具有一定的可解释性
\footnote
{
比如,目标语言和源语言句子不同单词之间的注意力强度能够在一定程度上反应单词之间的互译程度。
}
。然而相比于前人的神经机器翻译模型,注意力模型也引入了额外的成本,计算量较大。
\item
同年Dzmitry Bahdanau等人首次将注意力机制(Attention Mechanism)应用到机器翻译领域,在机器翻译任务上对翻译和局部翻译单元之间的对应关系同时建模
\upcite
{
bahdanau2014neural
}
。Bahdanau等人工作的意义在于,使用了更加有效的模型来表示源语言的信息,同时使用注意力机制对两种语言不同部分之间的相互联系进行建模。这种方法可以有效地处理长句子的翻译,而且注意力的中间结果具有一定的可解释性
\footnote
{
比如,目标语言和源语言句子不同单词之间的注意力强度能够在一定程度上反应单词之间的互译程度。
}
。然而相比于前人的神经机器翻译模型,注意力模型也引入了额外的成本,计算量较大。
\vspace
{
0.3em
}
\vspace
{
0.3em
}
\item
2016年谷歌
发布了基于多层循环神经网络方法的GNMT系统。该系统集成了当时的神经机器翻译技术,并进行了诸多的改进。它的性能显著优于基于短语的机器翻译系统
\upcite
{
Wu2016GooglesNM
}
,引起了研究者的广泛关注。在之后不到一年的时间里,Facebook
采用卷积神经网络(CNN)研发了新的神经机器翻译系统
\upcite
{
DBLP:journals/corr/GehringAGYD17
}
,实现了比基于循环神经网络(RNN)系统更高的翻译水平,并大幅提升翻译速度。
\item
2016年谷歌
公司发布了基于多层循环神经网络方法的GNMT系统。该系统集成了当时的神经机器翻译技术,并进行了诸多的改进。它的性能显著优于基于短语的机器翻译系统
\upcite
{
Wu2016GooglesNM
}
,引起了研究者的广泛关注。在之后不到一年的时间里,脸书公司
采用卷积神经网络(CNN)研发了新的神经机器翻译系统
\upcite
{
DBLP:journals/corr/GehringAGYD17
}
,实现了比基于循环神经网络(RNN)系统更高的翻译水平,并大幅提升翻译速度。
\vspace
{
0.3em
}
\vspace
{
0.3em
}
\item
2017年,
谷歌的
Ashish Vaswani等人提出了新的翻译模型Transformer。其完全抛弃了CNN、RNN等结构,仅仅通过自注意力机制(Self-Attentiion)和前馈神经网络,不需要使用序列对齐的循环框架就展示出强大的性能,并且巧妙的解决了翻译中长距离依赖问题
\upcite
{
NIPS2017
_
7181
}
。Transformer是第一个完全基于注意力机制搭建的模型,不仅训练速度更快,在翻译任务上也获得了更好的结果,一跃成为目前最主流的神经机器翻译框架。
\item
2017年,Ashish Vaswani等人提出了新的翻译模型Transformer。其完全抛弃了CNN、RNN等结构,仅仅通过自注意力机制(Self-Attentiion)和前馈神经网络,不需要使用序列对齐的循环框架就展示出强大的性能,并且巧妙的解决了翻译中长距离依赖问题
\upcite
{
NIPS2017
_
7181
}
。Transformer是第一个完全基于注意力机制搭建的模型,不仅训练速度更快,在翻译任务上也获得了更好的结果,一跃成为目前最主流的神经机器翻译框架。
\vspace
{
0.3em
}
\vspace
{
0.3em
}
\end{itemize}
\end{itemize}
...
@@ -292,7 +292,7 @@ NMT & 21.7 & 18.7 & -13.7 \\
...
@@ -292,7 +292,7 @@ NMT & 21.7 & 18.7 & -13.7 \\
\parinterval
编码器-解码器框架的创新之处在于,将传统基于符号的离散型知识转化为分布式的连续型知识。比如,对于一个句子,它可以由离散的符号所构成的文法规则来生成,也可以直接被表示为一个实数向量记录句子的各个“属性”。这种分布式的实数向量可以不依赖任何离散化的符号系统,简单来说,它就是一个函数,把输入的词串转化为实数向量。更为重要的是,这种分布式表示可以被自动学习。或者从某种意义上说,编码器-解码器框架的作用之一就是学习输入序列的表示。表示结果学习的好与坏很大程度上会影响神经机器翻译系统的性能。
\parinterval
编码器-解码器框架的创新之处在于,将传统基于符号的离散型知识转化为分布式的连续型知识。比如,对于一个句子,它可以由离散的符号所构成的文法规则来生成,也可以直接被表示为一个实数向量记录句子的各个“属性”。这种分布式的实数向量可以不依赖任何离散化的符号系统,简单来说,它就是一个函数,把输入的词串转化为实数向量。更为重要的是,这种分布式表示可以被自动学习。或者从某种意义上说,编码器-解码器框架的作用之一就是学习输入序列的表示。表示结果学习的好与坏很大程度上会影响神经机器翻译系统的性能。
\parinterval
图
\ref
{
fig:10-6
}
形象地
对比了统计机器翻译和神经机器翻译的表示模型的区别。传统的统计机器翻译(a)通过短语或者规则组合来获得更大的翻译片段,直至覆盖整个句子。这本质上是在一个离散的结构空间中不断组合的过程。神经机器翻译(b)与之不同,它并没有所谓的“组合”的过程,整个句子的处理是直接在连续空间上进行计算得到的。这二者的区别也体现了符号系统与神经网络系统的区别。前者更适合处理离散化的结构表示,后者更适合处理连续化的表示。
\parinterval
图
\ref
{
fig:10-6
}
对比了统计机器翻译和神经机器翻译的表示模型的区别。传统的统计机器翻译(a)通过短语或者规则组合来获得更大的翻译片段,直至覆盖整个句子。这本质上是在一个离散的结构空间中不断组合的过程。神经机器翻译(b)与之不同,它并没有所谓的“组合”的过程,整个句子的处理是直接在连续空间上进行计算得到的。这二者的区别也体现了符号系统与神经网络系统的区别。前者更适合处理离散化的结构表示,后者更适合处理连续化的表示。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
...
@@ -303,9 +303,9 @@ NMT & 21.7 & 18.7 & -13.7 \\
...
@@ -303,9 +303,9 @@ NMT & 21.7 & 18.7 & -13.7 \\
\end{figure}
\end{figure}
%----------------------------------------------
%----------------------------------------------
\parinterval
实际上,编码器-解码器模型也并不是表示学习实现的唯一途径。比如,在
第九章提到的神经语言模型实际上也是一种有效的学习句子表示的方法,它所衍生出的预训练模型可以从大规模单语数据上学习句子的表示形式。这种学习会比使用少量的双语数据进行编码端和解码端的学习更加充分。相比机器翻译任务,语言模型相当于一个编码器的学习
\footnote
{
相比神经机器翻译的编码器,神经语言模型会多出一个输出层,这时可以直接把神经语言模型的中间层的输出作为编码器的输出。
}
,可以无缝嵌入到神经机器翻译模型中。不过,值得注意的是,机器翻译的目的是解决双语字符串之间的映射问题,因此它所使用的句子表示是为了更好地进行翻译。从这个角度说,机器翻译中的表示学习又和语言模型中的表示学习有不同。不过,这里不会深入讨论神经语言模型和预训练与神经机器翻译之间的异同,感兴趣的读者可以参看第九章的相关内容
。
\parinterval
实际上,编码器-解码器模型也并不是表示学习实现的唯一途径。比如,在
{
\chapternine
}
提到的神经语言模型实际上也是一种有效的学习句子表示的方法,它所衍生出的预训练模型可以从大规模单语数据上学习句子的表示形式。这种学习会比使用少量的双语数据进行编码端和解码端的学习更加充分。相比机器翻译任务,语言模型相当于一个编码器的学习
\footnote
{
相比神经机器翻译的编码器,神经语言模型会多出一个输出层,这时可以直接把神经语言模型的中间层的输出作为编码器的输出。
}
,可以无缝嵌入到神经机器翻译模型中。不过,值得注意的是,机器翻译的目的是解决双语字符串之间的映射问题,因此它所使用的句子表示是为了更好地进行翻译。从这个角度说,机器翻译中的表示学习又和语言模型中的表示学习有不同。不过,这里不会深入讨论神经语言模型和预训练与神经机器翻译之间的异同,再后续章节会有相关讨论
。
\parinterval
还有一点,在神经机器翻译中,句子的表示形式可以有很多选择。使用单个向量表示一个句子是一种最简单的方法。当然,也可以用矩阵、高阶张量完成表示。甚至,在解码时动态地生成源语言的表示结果。
这部分技术也会在随后的内容中进行介绍。
\parinterval
还有一点,在神经机器翻译中,句子的表示形式可以有很多选择。使用单个向量表示一个句子是一种最简单的方法。当然,也可以用矩阵、高阶张量完成表示。甚至,在解码时动态地生成源语言的表示结果。
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION 10.2.3
% NEW SUB-SECTION 10.2.3
...
@@ -315,13 +315,13 @@ NMT & 21.7 & 18.7 & -13.7 \\
...
@@ -315,13 +315,13 @@ NMT & 21.7 & 18.7 & -13.7 \\
\parinterval
为了对编码器-解码器框架和神经机器翻译的运行过程有一个直观的认识,这里采用标准的循环神经网络作为编码器和解码器的结构演示一个简单的翻译实例。假设系统的输入和输出为:
\parinterval
为了对编码器-解码器框架和神经机器翻译的运行过程有一个直观的认识,这里采用标准的循环神经网络作为编码器和解码器的结构演示一个简单的翻译实例。假设系统的输入和输出为:
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\parinterval
\hspace
{
5em
}
源语言(中文)输入:
\{
“我”,
\
“很”,
\
“好”,
\
“<eos>”
\}
\parinterval
\hspace
{
5em
}
输入(汉语):我
\ \
很
\ \
好
\ \
<eos>
\vspace
{
0.3em
}
\vspace
{
0.3em
}
\parinterval
\hspace
{
5em
}
目标语言(英文)输出:
\{
“I”,
\
“am”,
\
“fine”,
\
“<eos>”
\}
\parinterval
\hspace
{
5em
}
输出(英语):I
\ \
am
\ \
fine
\ \
<eos>
\vspace
{
0.5em
}
\vspace
{
0.5em
}
\noindent
其中,
<eos>(End of Sequence)表示序列的终止,<sos>(Start of Sequence)表示序列的开始。
\noindent
这里令
<eos>(End of Sequence)表示序列的终止,<sos>(Start of Sequence)表示序列的开始。
%----------------------------------------------
%----------------------------------------------
\begin{figure}
[htp]
\begin{figure}
[htp]
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论