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
5e027d60
Commit
5e027d60
authored
Nov 26, 2020
by
xiaotong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wording (sec 14, futher reading)
parent
1852c559
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
11 行增加
和
9 行删除
+11
-9
Chapter14/chapter14.tex
+11
-9
没有找到文件。
Chapter14/chapter14.tex
查看文件 @
5e027d60
...
...
@@ -58,7 +58,7 @@
\vspace
{
0.5em
}
\item
搜索模块,它会利用预测结果,对当前的翻译假设进行打分,并根据模型得分对翻译假设进行排序和剪枝。
\vspace
{
0.5em
}
\end{itemize}
\end{itemize}
\parinterval
预测模块是由模型决定的,而搜索模块可以与模型无关。也就是说,不同的模型可以共享同一个搜索模块完成推断。比如,对于基于循环神经网络的模型,预测模块需要读入前一个状态的信息和前一个位置的译文单词,然后预测当前位置单词的概率;对于Transformer,预测模块需要对前面的所有位置做注意力运算,之后预测当前位置的单词概率。不过,这两个模型都可以使用同一个搜索模块。图
\ref
{
fig:14-1
}
给出了这种架构的示意图。
...
...
@@ -411,7 +411,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
\subsection
{
自回归VS非自回归
}
\subsection
{
自回归VS非自回归
}
\parinterval
目前主流的神经机器翻译的推断是一种
{
\small\sffamily\bfseries
{
自回归翻译
}}
\index
{
自回归翻译
}
(Autoregressive Translation)
\index
{
Autoregressive Translation
}
过程。所谓自回归是一种描述时间序列生成的方式。对于目标序列
$
\seq
{
y
}
=
\{
y
_
1
,
\dots
,y
_
n
\}
$
,自回归模型假设
$
j
$
时刻状态
$
y
_
j
$
的生成依赖于之前的状态
$
\{
y
_
1
,
\dots
,y
_{
j
-
1
}
\}
$
,而且
$
y
_
j
$
与
$
\{
y
_
1
,
\dots
,y
_{
j
-
1
}
\}
$
构成线性关系,那么生成
$
y
_
j
$
就是自回归的序列生成过程。神经机器翻译借用了这个概念,但是并不要求线性模型。对于输入的源语言序列
$
\seq
{
x
}
=
\{
x
_
1
,
\dots
,x
_
m
\}
$
,用自回归翻译模型生成译文序列
$
\seq
{
y
}
=
\{
y
_
1
,
\dots
,y
_
n
\}
$
的概率可以被定义为:
...
...
@@ -564,7 +564,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
%----------------------------------------------------------------------
\begin{figure}
[htp]
\centering
\input
{}
%
\input{}
\caption
{
引入重排序模块的非自回归模型
}
\label
{
fig:14-22
}
\end{figure}
...
...
@@ -593,7 +593,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\parinterval
另一种方法借鉴了BERT的思想
\upcite
{
devlin2019bert
}
,提出了一种新的解码方法:Mask-Predict
\upcite
{
Ghazvininejad2019MaskPredictPD
}
。
\parinterval
类似于BERT的[CLS],该方法在源语句子的最前面加上了一个特殊符号[LENGTH]作为输入,用来预测目标句的长度
$
n
$
。之后,将特殊符[MASK](与BERT中的[MASK]有相似的含义)复制
$
n
$
次作为解码器的输入,然后用非自回归的方式生成目标端所有的词。这样生成的翻译可能是比较差的,因此可以将第一次生成出的这些词中不确定(即生成概率比较低)的一些词再“擦”掉,依据目标端剩余的单词以及源语言句子重新进行预测,不断迭代,直到满足停止条件为止。图
\ref
{
fig:14-19
}
给出了一个示例。
\parinterval
类似于BERT的[CLS],该方法在源语句子的最前面加上了一个特殊符号[LENGTH]作为输入,用来预测目标句的长度
$
n
$
。之后,将特殊符[MASK](与BERT中的[MASK]有相似的含义)复制
$
n
$
次作为解码器的输入,然后用非自回归的方式生成目标端所有的词。这样生成的翻译可能是比较差的,因此可以将第一次生成出的这些词中不确定(即生成概率比较低)的一些词再“擦”掉,依据目标端剩余的单词以及源语言句子重新进行预测,不断迭代,直到满足停止条件为止。图
\ref
{
fig:14-19
}
给出了一个示例。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -704,7 +704,7 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
%----------------------------------------------------------------------
\parinterval
有了lattice 这样的结构,多模型融合又有了新的思路。首先,可以将多个模型的译文融合为lattice。注意,这个lattice 会包含这些模型无法生成的完整译文句子。之后,用一个更强的模型在lattice 上搜索最优的结果。这个过程有可能找到一些“新”的译文,即结果可能是从多个模型的结果中重组而来的。lattice 上的搜索模型可以基于多模型的融合,也可以使用一个简单的模型,这里需要考虑的是将神经机器翻译模型适应到lattice 上进行推断
\upcite
{
DBLP:conf/aaai/SuTXJSL17
}
。其过程基本与原始的模型推断没有区别,只是需要把模型预测的结果附着到lattice 中的每条边上,再进行推断。
\parinterval
图
\ref
{
fig:14-11
}
对比了不同模型集成方法的区别。从系统开发的角度看,假设选择和模型预测融合的复杂度较低,适合快速原型,而且性能稳定。译文重组需要更多的模块,系统调试的复杂度较高,但是由于看到了更大的搜索空间,因此系统性能提升的潜力较大
\footnote
{
一般来说lattice 上的Oracle 要比
n
best译文上的Oracle 的质量高。
}
。
\parinterval
图
\ref
{
fig:14-11
}
对比了不同模型集成方法的区别。从系统开发的角度看,假设选择和模型预测融合的复杂度较低,适合快速原型,而且性能稳定。译文重组需要更多的模块,系统调试的复杂度较高,但是由于看到了更大的搜索空间,因此系统性能提升的潜力较大
\footnote
{
一般来说lattice 上的Oracle 要比
$
n
$
-
best译文上的Oracle 的质量高。
}
。
%----------------------------------------------------------------------
\begin{figure}
[htp]
...
...
@@ -721,17 +721,19 @@ b &=& \omega_{\textrm{high}}\cdot |\seq{x}| \label{eq:14-4}
\section
{
小结与扩展阅读
}
\parinterval
推断系统(或解码系统)是神经机器翻译的重要组成。在神经机器翻译研究中,单独就推断问题进行的讨论并不多见。更多的工作是将其与实践结合,常见于开源系统、评测比赛中。但是,从应用的角度看,研发高效、小巧的推断系统是机器翻译能够被大规模使用的前置条件。本章也从神经机器翻译推断的基本问题出发,重点探讨了推断系统的效率问题、非自回归翻译、多模型集成等问题。但是,由于推断问题涉及方向十分广泛,因此本章也无法对其进行全面覆盖。有若干研究方向值得关注:
\begin{itemize}
\vspace
{
0.5em
}
\item
机器翻译系统中的推断也借用了
{
\small\sffamily\bfseries
{
统计推断
}}
\index
{
统计推断
}
(Statistical Inference)
\index
{
Statistical Inference
}
的概念。传统意义上讲,这类方法都是在利用样本数据去推测总体的趋势和特征。因此,从统计学的角度也有很多不同的思路。例如,贝叶斯学习等方法就在自然语言处理中得到广泛应用
\upcite
{
Held2013AppliedSI,Silvey2018StatisticalI
}
。其中比较有代表性的是
{
\small\sffamily\bfseries
{
变分方法
}}
\index
{
变分方法
}
(Variational Methods)
\index
{
Variational Methods
}
。这类方法通过引入新的隐含变量来对样本的分布进行建模,某种意义上说它是在描述“分布的分布”,因此这种方法对事物的统计规律描述的会更加细致
\upcite
{
Beal2003VariationalAF
}
。这类方法也被成功的用于统计机器翻译
\upcite
{
Li2009VariationalDF,xiao2011language,
}
和神经机器翻译
\upcite
{
Bastings2019ModelingLS,Shah2018GenerativeNM,Su2018VariationalRN,Zhang2016VariationalNM
}
。
\vspace
{
0.5em
}
\item
更加高效的网络结构是神经机器翻译模型的一大发展趋势,目前主要工作集中在结构化剪枝、减少模型的冗余计算、低秩分解。结构化剪枝中的代表性工作是LayerDrop
\upcite
{
DBLP:conf/iclr/FanGJ20,DBLP:conf/emnlp/WangXZ20,DBLP:journals/corr/abs-2002-02925
}
,这类方法在训练时随机选择层,在推断时根据输入来选择模型中的部分层进行计算,而跳过其余层,达到加速和减少参数量的目的。有关减少冗余计算的研究主要集中在改进注意力机制上,本章正文中已经有所介绍。低秩分解则针对词向量或者注意力的映射矩阵进行改进,例如词频自适应表示
\upcite
{
DBLP:conf/iclr/BaevskiA19
}
,词频越高则对应的向量维度越大,反之则越小,或者层数越高注意力映射矩阵维度越小
\upcite
{
DBLP:journals/corr/abs-2006-04768,DBLP:journals/corr/abs-1911-12385,DBLP:journals/corr/abs-1906-09777,DBLP:conf/nips/YangLSL19
}
。在实践中比较有效的是较深的编码器与较浅的解码器结合的方式,极端情况下解码器仅使用1层即可取得与多层
相媲美的翻译精度,而极大地提升翻译效率
\upcite
{
DBLP:journals/corr/abs-2006-10369,DBLP:conf/aclnmt/HuLLLLWXZ20,DBLP:journals/corr/abs-2010-02416
}
。
\item
推断系统也可以受益于更加高效的网络结构。这方面工作集中在结构化剪枝、减少模型的冗余计算、低秩分解等方向。结构化剪枝中的代表性工作是LayerDrop
\upcite
{
DBLP:conf/iclr/FanGJ20,DBLP:conf/emnlp/WangXZ20,DBLP:journals/corr/abs-2002-02925
}
,这类方法在训练时随机选择层,在推断时根据输入来选择模型中的部分层进行计算,而跳过其余层,达到加速和减少参数量的目的。有关减少冗余计算的研究主要集中在改进注意力机制上,本章正文中已经有所介绍。低秩分解则针对词向量或者注意力的映射矩阵进行改进,例如词频自适应表示
\upcite
{
DBLP:conf/iclr/BaevskiA19
}
,词频越高则对应的向量维度越大,反之则越小,或者层数越高注意力映射矩阵维度越小
\upcite
{
DBLP:journals/corr/abs-2006-04768,DBLP:journals/corr/abs-1911-12385,DBLP:journals/corr/abs-1906-09777,DBLP:conf/nips/YangLSL19
}
。在实践中比较有效的是较深的编码器与较浅的解码器结合的方式,极端情况下解码器仅使用1层神经网络即可取得与多层神经网络
相媲美的翻译精度,而极大地提升翻译效率
\upcite
{
DBLP:journals/corr/abs-2006-10369,DBLP:conf/aclnmt/HuLLLLWXZ20,DBLP:journals/corr/abs-2010-02416
}
。
\vspace
{
0.5em
}
\item
机器翻译
实际部署时,对存储的消耗也是需要考虑的因素。因此如何让模型变得更小也是研发人员所关注的方向。当前的模型压缩方法主要可以分为几类:剪枝、量化、知识蒸馏和轻量方法,其中轻量方法主要是更轻量模型结构的设计,这类方法已经在上文进行了介绍。剪枝主要包括权重大小剪枝
\upcite
{
Han2015LearningBW,Lee2019SNIPSN,Frankle2019TheLT,Brix2020SuccessfullyAT
}
、注意力头剪枝
\upcite
{
Michel2019AreSH,DBLP:journals/corr/abs-1905-09418
}
、网络层
\upcite
{
Liu2019RethinkingTV
}
以及其他部分的剪枝等
\upcite
{
Liu2017LearningEC
}
,还有一些方法也通过在训练期间采用正则化的方式来提升剪枝能力
\upcite
{
DBLP:conf/iclr/FanGJ20
}
。量化方法主要通过截断浮点数来减少模型的存储大小,使其仅使用几个比特便能存储整个模型,虽然会导致舍入误差,但压缩效果显著
\upcite
{
DBLP:journals/corr/abs-1906-00532,Cheong2019transformersZ,Banner2018ScalableMF,Hubara2017QuantizedNN
}
。知识蒸馏又名知识精炼,一些方法还将BERT 蒸馏成如LSTMS
等其他各种推断速度更快的架构
\upcite
{
DBLP:journals/corr/HintonVD15,Munim2019SequencelevelKD,Tang2019DistillingTK
}
。另外还有一些其他方法不仅在输出上,还在权重矩阵和隐藏的激活层上对“教师模型”知识进行更深入的挖掘
\upcite
{
Jiao2020TinyBERTDB
}
。
\item
机器翻译
推断系统实际部署时,对存储的消耗也是需要考虑的因素。因此如何让模型变得更小也是研发人员所关注的方向。当前的模型压缩方法主要可以分为几类:剪枝、量化、知识蒸馏和轻量方法,其中轻量方法主要是更轻量模型结构的设计,这类方法已经在上文进行了介绍。剪枝主要包括权重大小剪枝
\upcite
{
Han2015LearningBW,Lee2019SNIPSN,Frankle2019TheLT,Brix2020SuccessfullyAT
}
、面向多头注意力的剪枝
\upcite
{
Michel2019AreSH,DBLP:journals/corr/abs-1905-09418
}
、网络层以及其他部分的剪枝等
\upcite
{
Liu2017LearningEC,Liu2019RethinkingTV
}
,还有一些方法也通过在训练期间采用正则化的方式来提升剪枝能力
\upcite
{
DBLP:conf/iclr/FanGJ20
}
。量化方法主要通过截断浮点数来减少模型的存储大小,使其仅使用几个比特位的数字表示方法便能存储整个模型,虽然会导致舍入误差,但压缩效果显著
\upcite
{
DBLP:journals/corr/abs-1906-00532,Cheong2019transformersZ,Banner2018ScalableMF,Hubara2017QuantizedNN
}
。知识蒸馏又名知识精炼,一些方法还将Transformer模型蒸馏成如LSTMs
等其他各种推断速度更快的架构
\upcite
{
DBLP:journals/corr/HintonVD15,Munim2019SequencelevelKD,Tang2019DistillingTK
}
。另外还有一些其他方法不仅在输出上,还在权重矩阵和隐藏的激活层上对“教师模型”知识进行更深入的挖掘
\upcite
{
Jiao2020TinyBERTDB
}
。
\vspace
{
0.5em
}
\item
目前的翻译模型使用交叉熵损失作为优化函数,这在自回归模型上取得了非常优秀的性能。交叉熵是一个严格的损失函数,预测时不在位置的单词都会受到惩罚,即使是编辑距离很小的输出序列。回归模型会避免这种惩罚,因为单词是根据句子前一个词来生成的,而非自回归模型无法获知这个信息。为此,一些研究工作通过改进损失函数来提高非自回归模型的性能。一种做法
提出了对齐交叉熵函数
\upcite
{
Ghazvininejad2020AlignedCE
}
,其基于标签序列和目标词分布预测序列之间的对齐来计算交叉熵损失,采用动态规划的方法寻找单调对齐使交叉熵损失最小化。另一种做法提出了一种基于
$
n
$
元词袋的训练目标
\upcite
{
Shao2020MinimizingTB
}
,希望能最小化模型与参考译文间
$
n
$
元词袋的差异。该训练目标在
$
n
$
元组
的层面上评估预测结果,因此能够建模序列依赖关系。
\item
目前的翻译模型使用交叉熵损失作为优化函数,这在自回归模型上取得了非常优秀的性能。交叉熵是一个严格的损失函数,预测时不在位置的单词都会受到惩罚,即使是编辑距离很小的输出序列。回归模型会避免这种惩罚,因为单词是根据句子前一个词来生成的,而非自回归模型无法获知这个信息。为此,一些研究工作通过改进损失函数来提高非自回归模型的性能。一种做法
使用对齐交叉熵函数
\upcite
{
Ghazvininejad2020AlignedCE
}
,其基于标签序列和目标词分布预测序列之间的对齐来计算交叉熵损失,采用动态规划的方法寻找单调对齐使交叉熵损失最小化。也可以使用基于
$
n
$
-gram的训练目标
\upcite
{
Shao2020MinimizingTB
}
,希望能最小化模型与参考译文间
$
n
$
-gram的差异。该训练目标在
$
n
$
-gram
的层面上评估预测结果,因此能够建模序列依赖关系。
\vspace
{
0.5em
}
\item
自回归模型预测目标句时,当前词的生成是以之前已生成的词作为条件的,已生成词提供了较强的目标端上下文信息。然而,非自回归模型并行地生成所有词,因此不存在这样的信息。与自回归模型相比,非自回归模型的解码器需要在信息更少的情况下执行翻译任务。因此很多做法通过给非自回归模型的解码器端引入更多的信息,来降低模型的搜索空间。一些研究工作
\upcite
{
Ma2019FlowSeqNC
}
通过将条件随机场引入非自回归模型中来对结构依赖进行建模;
另外一种引入了一个词嵌入转换矩阵来将源端的词嵌入转换为目标端的词嵌入来增强解码端的输入
\upcite
{
Guo2019NonAutoregressiveNM
}
;还有一种引入了一种轻量级的重排序模块来显式的建模重排序信息,以指导非自回归模型的解码
\upcite
{
Ran2019GuidingNN
}
。
\item
自回归模型预测目标句时,当前词的生成是以之前已生成的词作为条件的,已生成词提供了较强的目标端上下文信息。然而,非自回归模型并行地生成所有词,因此不存在这样的信息。与自回归模型相比,非自回归模型的解码器需要在信息更少的情况下执行翻译任务。因此很多做法通过给非自回归模型的解码器端引入更多的信息,来降低模型的搜索空间。一些研究工作
\upcite
{
Ma2019FlowSeqNC
}
通过将条件随机场引入非自回归模型中来对结构依赖进行建模;
也有工作引入了一个词嵌入转换矩阵来将源端的词嵌入转换为目标端的词嵌入来增强解码端的输入
\upcite
{
Guo2019NonAutoregressiveNM
}
;此外,也有研究者提出了轻量级的重排序模块来显式的建模重排序信息,以指导非自回归模型的解码
\upcite
{
Ran2019GuidingNN
}
。
\vspace
{
0.5em
}
\end{itemize}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论