Commit 013010c4 by xiaotong

wording (sec 13)

parent 9ec3b0bc
......@@ -23,15 +23,13 @@
\chapter{神经机器翻译模型推断}
\parinterval 对神经网络进行训练是神经机器翻译的基础问题之一。通常,训练过程对机器翻译系统性能的好坏起到关键性作用。因此,对模型训练方法的研究也机器翻译领域的重要研究方向,其中的很多发现对其它自然语言处理任务也有很好的借鉴意义。
\parinterval 神经机器翻译的模型训练面临着一些挑战,例如:
\parinterval 对模型训练方法的研究是机器翻译领域的重要研究方向,其中的很多发现对其它自然语言处理任务也有很好的借鉴意义。神经机器翻译的模型训练面临着一些挑战,例如:
\begin{itemize}
\vspace{0.5em}
\item 如何对大容量模型进行有效的训练?例如,避免过拟合问题,并让模型更加健壮,同时有效地处理更大的词汇表
\item 如何对大容量模型进行有效的训练?例如,避免过拟合问题,并让模型更加健壮,同时有效地处理更大的词汇表
\vspace{0.5em}
\item 如何设计更好的模型训练策略?例如,在训练中更好地利用机器翻译评价指标,同时选择对翻译更有价值的样本进行参数更新
\item 如何设计更好的模型训练策略?例如,在训练中更好地利用机器翻译评价指标,同时选择对翻译更有价值的样本进行参数更新
\vspace{0.5em}
\item 如何让模型学习到的“知识”在模型之间迁移?例如,把一个“强”模型的能力迁移到一个“弱”模型上,而这种能力可能是无法通过直接训练“弱”模型得到的。
\vspace{0.5em}
......@@ -46,7 +44,7 @@
\sectionnewpage
\section{开放词表}
\parinterval 从模型训练的角度看,我们通常希望尽可能使用更多的单词。因为更大的词表可以覆盖更多的语言现象,同时使得系统对不同语言现象有更强的区分能力。但是,人类表达语言的方式是十分多样的,这也体现在单词的构成上,甚至我们都无法想象数据中存在的不同单词的数量。即便使用分词策略,在WMT、CCMT等评测数据上,英语词表大小都会在100万以上。当然,这里面也包括很多的数字和字母的混合,还有一些组合词。不过,如果不加限制,机器翻译所面对的词表将会很“大”。这也会导致模型参数量变大,模型训练变得极为困难。更严重的问题是,测试数据中的一些单词根本就没有在训练数据中出现过,这时会出现集外词(Out-of-Vocabulary,OOV)翻译问题,即系统无法对未见单词进行翻译。在神经机器翻译中,通常会考虑使用更小的翻译单元来缓解以上问题,因为小颗粒度的单元可以有效缓解数据稀疏问题。
\parinterval 对于神经机器翻译而言,我们通常希望使用更大的词表完成模型训练。因为大词表可以覆盖更多的语言现象,使模型有更强的区分能力。但是,人类表达语言的方式是十分多样的,这也体现在单词的构成上,甚至我们都无法想象数据中存在的不同单词的数量。比如,在WMT、CCMT等评测数据上,英语词表大小都会在100万以上。当然,这里面也包括很多的数字和字母的混合,还有一些组合词。不过,如果不加限制,机器翻译所面对的词表将会很“大”。这也会导致模型参数量变大,模型训练变得极为困难。更严重的问题是,测试数据中的一些单词根本就没有在训练数据中出现过,这时会出现集外词翻译问题(或OOV问题),即系统无法对未见单词进行翻译。在神经机器翻译中,通常会考虑使用更小的翻译单元来缓解以上问题,因为小颗粒度的单元可以有效缓解数据稀疏问题。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -54,7 +52,7 @@
\subsection{大词表和集外词问题}
\parinterval 首先来具体看一看神经机器翻译的大词表问题。神经机器翻译模型训练和推断都依赖于源语言和目标语言的词表。在建模中,词表中的每一个单词都会被转换为分布式(向量)表示,即词嵌入。这些向量会作为模型的输入(见{\chapterten}。如果每个单词都对应一个向量,那么单词的各种变形(时态、语态等)都会导致词表增大,同时增加词嵌入表示的难度。图\ref{fig:13-1}展示了一些英语单词的时态语态变化。
\parinterval 首先来具体看一看神经机器翻译的大词表问题。神经机器翻译模型训练和推断都依赖于源语言和目标语言的词表(见{\chapterten})。在建模中,词表中的每一个单词都会被转换为分布式(向量)表示,即词嵌入。如果每个单词都对应一个向量,那么单词的各种变形(时态、语态等)都会导致词表增大,同时增加词嵌入表示的难度。图\ref{fig:13-1}展示了一些英语单词的时态语态变化。
%----------------------------------------------
\begin{figure}[htp]
......@@ -69,9 +67,9 @@
\begin{itemize}
\vspace{0.5em}
\item 数据稀疏。很多不常见的低频词包含在词表中,而这些低频词的分布式表示很难得到充分学习;
\item 数据稀疏。很多不常见的低频词包含在词表中,而这些低频词的词嵌入很难得到充分学习。
\vspace{0.5em}
\item 词向量矩阵的增大。这会增加计算和存储的负担
\item 参数及计算量的增大。大词表会增加词嵌入矩阵的大小,同时也会显著增加输出层中线性变换和Softmax的计算量
\vspace{0.5em}
\end{itemize}
......@@ -118,7 +116,7 @@
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\subsection{双字节编码(BPE)}
\subsection{双字节编码}
\parinterval 字节对编码或双字节编码(BPE)是一种常用的子词词表构建方法。BPE方法最早用于数据压缩,该方法将数据中常见的连续字符串替换为一个不存在的字符,之后通过构建一个替换关系的对应表,对压缩后的数据进行还原\upcite{Gage1994ANA}。机器翻译借用了这种思想,把子词切分看作是学习对自然语言句子进行压缩编码表示的问题\upcite{DBLP:conf/acl/SennrichHB16a}。其目的是,保证编码后的结果(即子词切分)占用的字节尽可能少。这样,子词单元会尽可能被不同单词复用,同时又不会因为使用过小的单元造成子词切分序列过长。使用BPE算法构建符号合并表可以分为如下几个步骤:
......@@ -143,7 +141,7 @@
%----------------------------------------------
\end{itemize}
\parinterval\ref{fig:7-9}给出了BPE算法执行的实例。其中预先设定的合并表的大小为10。在得到了符号合并表后,便需要对用字符表示的单词进行合并,得到以子词形式表示的文本。首先,将单词切分为以字符表示的符号序列,并在尾部加上终结符。然后按照符号合并表的顺序依次遍历,如果存在相同的2-gram符号组合,则对其进行合并,直至遍历结束。图1.4给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词,如图\ref{fig:7-10}
\parinterval\ref{fig:7-9}给出了BPE算法执行的实例。其中预先设定的合并表的大小为10。在得到了符号合并表后,便需要对用字符表示的单词进行合并,得到以子词形式表示的文本。首先,将单词切分为以字符表示的符号序列,并在尾部加上终结符。然后按照符号合并表的顺序依次遍历,如果存在相同的2-gram符号组合,则对其进行合并,直至遍历结束。图1.4给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词。
%----------------------------------------------
\begin{figure}[htp]
......@@ -156,9 +154,9 @@
\parinterval 由于模型的输出也是子词序列,因此需要对最终得到的翻译结果进行子词还原,即将子词形式表达的单元重新组合为原本的单词。这一步操作也十分简单,只需要不断的将每个子词向后合并,直至遇到表示单词边界的结束符<e>,便得到了一个完整的单词。
\parinterval 使用BPE方法的策略有很多。不仅可以单独对源语言和目标语言句子进行子词的切分,也可以联合源语言和目标语言,共同进行子词切分,被称作Joint-BPE\upcite{DBLP:conf/acl/SennrichHB16a}。单语BPE比较简单直接,而Joint-BPE则可以增加两种语言子词切分的一致性。对于相似语系中的语言,如英语和德语,常使用Joint-BPE的方法联合构建词表。而对于汉语和英语这些差异比较大的语种,则需要独立的进行子词切分。使用子词表示句子的方法可以有效的平衡词汇量,增大对未见单词的覆盖度。像英译德、汉译英任务,使用16k或者32k的子词词表大小便能取得很好的效果。
\parinterval 使用BPE方法的策略有很多。不仅可以单独对源语言和目标语言句子进行子词的切分,也可以联合源语言和目标语言,共同进行子词切分,被称作{\small\bfnew{双字节联合编码}}\index{双字节联合编码}(Joint-BPE\index{Joint-BPE}\upcite{DBLP:conf/acl/SennrichHB16a}。 单语BPE比较简单直接,而Joint-BPE则可以增加两种语言子词切分的一致性。对于相似语系中的语言,如英语和德语,常使用Joint-BPE 的方法联合构建词表。而对于汉语和英语这些差异比较大的语种,则需要独立的进行子词切分。使用子词表示句子的方法可以有效的平衡词汇量,增大对未见单词的覆盖度。像英译德、汉译英任务,使用16k或者32k 的子词词表大小便能取得很好的效果。
\parinterval BPE还有很多变种方法。在进行子词切分时,BPE从最长的子词开始进行切分。这个启发性规则可以保证切分结果的唯一性,实际上,在对一个单词用同一个子词词表切分时,可能存在多种切分方式,如hello,可以被切分为“hell”和“o”,也可以分割为“h”和“ello”。这种切分的多样性可以用来提高神经机器翻译系统的健壮性\upcite{DBLP:conf/acl/Kudo18}。而在T5等预训练模型中\upcite{DBLP:journals/jmlr/RaffelSRLNMZLL20},则使用了基于字符级别的BPE。此外,尽管BPE被命名为字节对编码,但是改方法在实现上一般处理的是Unicode编码,而不是字节。因此在预训练模型GPT2中,也探索了字节级别的BPE,这种方法在机器翻译、自动问答等任务中取得了很好的效果\upcite{radford2019language}
\parinterval BPE还有很多变种方法。在进行子词切分时,BPE从最长的子词开始进行切分。这个启发性规则可以保证切分结果的唯一性,实际上,在对一个单词用同一个子词词表切分时,可能存在多种切分方式,如hello,可以被切分为“hell”和“o”,也可以分割为“h”和“ello”。这种切分的多样性可以用来提高神经机器翻译系统的健壮性\upcite{DBLP:conf/acl/Kudo18}。而在T5等预训练模型中\upcite{DBLP:journals/jmlr/RaffelSRLNMZLL20},则使用了基于字符级别的BPE。此外,尽管BPE被命名为字节对编码,但是在实践中该方法一般处理的是Unicode编码,而不是字节。因此在预训练模型GPT2 中,也探索了字节级别的BPE,这种方法在机器翻译、自动问答等任务中取得了很好的效果\upcite{radford2019language}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -170,15 +168,15 @@
\parinterval 目前比较主流的子词切分方法都是作用于分词后的序列,对一些没有明显词边界且资源稀缺的语种并不友好。相比之下,Sentence Piece可以作用于未经过分词处理的输入序列\upcite{kudo2018sentencepiece},同时囊括了双字节编码和语言模型的子词切分方法,更加灵活易用。
\parinterval 通过上述子词切分方法,可以缓解集外词问题,允许模型利用到一些词法上的信息。然而主流的BPE子词切分方法中,每个单词都对应一种唯一的子词切分方式,因此输入的数据经过子词切分后的序列表示也是唯一的。在给定词表的情况下,每句话仍然存在多种切分方式。而经过现有BPE处理后的序列,模型只能接收到单一的表示,可能会阻止模型更好地学习词的组成,不能充分利用单词中的形态学特征。此外,针对切分错误的输入数据表现不够健壮,常常会导致整句话的翻译效果极差。为此,研究人员提出一些规范化方法\upcite{DBLP:conf/acl/Kudo18,provilkov2020bpe}
\parinterval 不过在以BPE为代表的子词切分方法中,每个单词都对应一种唯一的子词切分方式,因此输入的数据经过子词切分后的序列表示也是唯一的。一旦切分出现错误,整句话的翻译效果可能会变得很差。为此,研究人员提出一些规范化方法\upcite{DBLP:conf/acl/Kudo18,provilkov2020bpe}
\begin{itemize}
\vspace{0.5em}
\item 子词规范化方法\upcite{DBLP:conf/acl/Kudo18}。其思想是在训练过程中扰乱确定的子词边界,根据1-gram Language Model(ULM)采样出多种子词切分候选。通过最大化整个句子的概率为目标构建词表。在实现上,与上述基于Word Piece的方法略有不同,这里不做详细介绍
\item 子词规范化方法\upcite{DBLP:conf/acl/Kudo18}。其思想是在训练过程中扰乱确定的子词边界,根据1-gram语言模型采样出多种子词切分候选。通过最大化整个句子的概率为目标构建词表
\vspace{0.5em}
\item BPE-Dropout\upcite{provilkov2020bpe}。在训练时,通过在合并过程中按照一定概率$p$(介于0与1之间)随机丢弃一些可行的合并操作,从而产生不同的子词切分结果,进而增强模型健壮性。而在推断阶段,将$p$设置为0,等同于标准的BPE。总的来说,上述方法相当于在子词的粒度上对输入的序列进行扰动,进而达到增加训练健壮性的目的。
\vspace{0.5em}
\item DPE\upcite{he2020dynamic}。引入了混合字符-子词的切分方式,将句子的子词分割方式看作一种隐含变量,该结构能够利用动态规划精确地区分潜在的子字片段的边界。解码端的输入是基于字符表示的目标语序列,推断时将每个时间步的输出映射到预先设定好的子词词表之上,得到当前最可能得子词结果。若当前子词长度为$m$,则接下来的$m$个时间步的输入为该子词,并在$m$个时间步后得到下一个切分的子词
\item DPE\upcite{he2020dynamic}。引入了混合字符-子词的切分方式,将句子的子词分割方式看作一种隐含变量。机器翻译解码端的输入是基于字符表示的目标语言序列,推断时将每个时间步的输出映射到预先设定好的子词词表之上,得到当前最可能得子词结果
\vspace{0.5em}
\end{itemize}
......@@ -197,7 +195,7 @@ y &=& f(x)
\noindent 反问题是指:当观测到$y$时,能否求出$x$。反问题对应了很多实际问题,比如,可以把$y$看作经过美化的图片,$x$看作原始的图片,反问题就对应了图片还原。机器翻译的训练也是一种反问题,因为可以把$y$看作是正确的译文,$x$看作是输入句子或者模型参数\footnote{在训练中,如果把源语言句子看作是不变的量,这时函数$f(\cdot)$的输入只有模型参数。}
\parinterval 理想的情况下,我们希望反问题的解是{\small\bfnew{适定的}}\index{适定的}(Well-posed)\index{Well-posed}。所谓适定解,需要满足三个条件:解是存在的、解是唯一的、解是稳定的(即$y$微小的变化会导致$x$微小的变化,也被称作解连续)。所有不存在唯一稳定解的问题都被称作{\small\bfnew{不适定问题}}\index{不适定问题}(Ill-posed Problem)\index{Ill-posed Problem}。对于机器学习问题,解的存在性比较容易理解。解的唯一性大多由问题决定。比如,如果把描述问题的函数$f(\cdot)$看作一个$n\times n$矩阵$\mathbf{A}$$x$$y$都看作是$n$维向量。那么$x$不唯一的原因在于$\mathbf{A}$不满秩(非奇异矩阵)。不过,存在性和唯一性并不会对机器学习方法造成太大困扰,因为在实践中往往会找到近似的解。
\parinterval 理想的情况下,我们希望反问题的解是{\small\bfnew{适定的}}\index{适定的}(Well-posed)\index{Well-posed}。所谓适定解,需要满足三个条件:解是存在的、解是唯一的、解是稳定的(即$y$微小的变化会导致$x$微小的变化,也被称作解连续)。所有不存在唯一稳定解的问题都被称作{\small\bfnew{不适定问题}}\index{不适定问题}(Ill-posed Problem)\index{Ill-posed Problem}。对于机器学习问题,解的存在性比较容易理解。解的唯一性大多由问题决定。比如,如果把描述问题的函数$f(\cdot)$看作一个$n\times n$矩阵$\mathbi{A}$$x$$y$都看作是$n$维向量。那么$x$不唯一的原因在于$\mathbi{A}$不满秩(非奇异矩阵)。不过,存在性和唯一性并不会对机器学习方法造成太大困扰,因为在实践中往往会找到近似的解。
\parinterval 但是,解的稳定性却给神经机器翻译带来了很大的挑战。因为神经机器翻译模型非常复杂,里面存在大量的矩阵乘法和非线性变换。这导致$f(\cdot)$往往是不稳定的,也就是说,神经机器翻译中输出$y$的微小变化会导致输入$x$的巨大变化。比如,在系统研发中经常会发现,即使训练样本发生很小的变化,模型训练得到的参数都会有非常明显的区别。不仅如此,在神经机器翻译模型中,参数的解的稳定性还存在两方面问题:
......@@ -222,13 +220,13 @@ y &=& f(x)
\parinterval 正则化的一种实现是在训练目标中引入一个正则项。在神经机器翻译中,引入正则项的训练目标为:
\begin{eqnarray}
\widehat{\mathbf{w}} &=& \argmax_{\mathbf{w}}L(\mathbf{w}) + \lambda R(\mathbf{w})
\widehat{\mathbi{w}} &=& \argmax_{\mathbi{w}}L(\mathbi{w}) + \lambda R(\mathbi{w})
\label{eq:13-2}
\end{eqnarray}
\noindent 其中,$\mathbf{w}$是模型参数,$L(\mathbf{w})$是损失函数,$R(\mathbf{w})$是正则项,$\lambda$是正则项的系数,用于控制正则化对训练影响的程度。$R(\mathbf{w})$通常也可以被看作是一种先验,因为在数据不充分且存在噪声的情况下,可以根据一些先验知识让模型偏向正确的方向一些,而不是一味地根据受噪声影响的不准确的$L(\mathbf{w})$进行优化。相应的,引入正则化后的模型可以获得更好的{\small\bfnew{泛化}}\index{泛化}(Generalization)\index{Generalization}能力,即模型在新的未见数据上表现会更好。
\noindent 其中,$\mathbi{w}$是模型参数,$L(\mathbi{w})$是损失函数,$R(\mathbi{w})$是正则项,$\lambda$是正则项的系数,用于控制正则化对训练影响的程度。$R(\mathbi{w})$通常也可以被看作是一种先验,因为在数据不充分且存在噪声的情况下,可以根据一些先验知识让模型偏向正确的方向一些,而不是一味地根据受噪声影响的不准确的$L(\mathbi{w})$进行优化。相应的,引入正则化后的模型可以获得更好的{\small\bfnew{泛化}}\index{泛化}(Generalization)\index{Generalization}能力,即模型在新的未见数据上表现会更好。
\parinterval 实践中已经证明,正则化方法有助于像神经机器翻译这样复杂的模型获得稳定的模型参数。甚至有些情况下,如果不引入正则化,训练得到的翻译模型根本无法使用。
\parinterval 实践中已经证明,正则化方法有助于像神经机器翻译这样复杂的模型获得稳定的模型参数。甚至有些情况下,如果不引入正则化,训练得到的翻译模型根本无法使用。此外,正则化方法不仅可以用于提高模型的泛化能力,也可以作为干预模型学习的一种手段,比如,可以将一些先验知识作为正则项约束机器翻译的模型学习。类似的手段在本书后续的内容中也会得到使用。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -236,23 +234,23 @@ y &=& f(x)
\subsection{L1/L2正则化}
\parinterval L1/L2正则化是常用的正则化方法。它们分别对应正则项是L1和L2范数的情况。具体来说,L1正则化是指
\parinterval L1/L2正则化是常用的正则化方法,虽然这种方法并不仅针对机器翻译模型。L1/L2正则化分别对应正则项是L1和L2范数的情况。具体来说,L1正则化是指
\begin{eqnarray}
R(\mathbf{w}) & = & \big| |\mathbf{w}| {\big|}_1 \\
R(\mathbi{w}) & = & \big| |\mathbi{w}| {\big|}_1 \\
& = &\sum_{w_i}|w_i| \nonumber
\label{eq:13-3}
\end{eqnarray}
\parinterval L2正则化是指
\begin{eqnarray}
R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
R(\mathbi{w}) & = & (\big| |\mathbi{w}| {\big|}_2)^2 \\
& = &\sum_{w_i}{w_i}^2 \nonumber
\label{eq:13-4}
\end{eqnarray}
\parinterval 从几何的角度看,L1和L2正则项都是有物理意义的。二者都可以被看作是空间上的一个区域,比如,在二维平面上,L1范数表示一个以0点为中心的矩形,L2范数表示一个以0点为中心的圆。此时,$L(\mathbf{w})$$R(\mathbf{w})$叠加在一起构成了一个新的区域,优化问题可以被看作是在这个新的区域上进行优化。由于L1和L2正则项都是在0点(坐标原点)附近形成的区域,因此优化的过程可以确保参数不会偏离0点太多。也就是说,L1和L2正则项引入了一个先验:模型的解不应该离0点太远。而L1和L2正则项实际上是在度量这个距离。
\parinterval 从几何的角度看,L1和L2正则项都是有物理意义的。二者都可以被看作是空间上的一个区域,比如,在二维平面上,L1范数表示一个以0点为中心的矩形,L2范数表示一个以0点为中心的圆。此时,$L(\mathbi{w})$$R(\mathbi{w})$叠加在一起构成了一个新的区域,优化问题可以被看作是在这个新的区域上进行优化。由于L1和L2正则项都是在0点(坐标原点)附近形成的区域,因此优化的过程可以确保参数不会偏离0点太多。也就是说,L1和L2正则项引入了一个先验:模型的解不应该离0点太远。而L1和L2正则项实际上是在度量这个距离。
\parinterval 那为什么要用L1和L2正则项惩罚离0点远的解呢?这还要从模型复杂度谈起。实际上,对于神经机器翻译这样的模型来说,模型的容量是足够的。所谓容量可以被简单的理解为独立参数的个数 \footnote{简单理解,模型的容量是指神经网络的参数量,即神经元之间连接权重的个数。另一种定义是把容量看作神经网络所能表示的假设空间大小\upcite{DBLP:journals/nature/LeCunBH15},也就是神经网络能表示的不同函数所构成的空间。}。也就是说,理论上存在一种模型可以完美的描述问题。但是,从目标函数拟合的角度来看,如果一个模型可以拟合很复杂的目标函数,那模型所表示的函数形态也会很复杂。这往往体现在模型中参数的值“偏大”。比如,用一个多项式函数拟合一些空间中的点,如果希望拟合得很好,各个项的系数往往是非零的。而且为了对每个点进行拟合,通常需要多项式中的某些项具有较大的系数,以期望函数在局部有较大的斜率。显然,这样的模型是很复杂的。模型的复杂度可以用函数中的参数(比如多项式中各项的系数)的“值”进行度量,这也体现在模型参数的范数上。
\parinterval 那为什么要用L1和L2正则项惩罚离0点远的解呢?这还要从模型复杂度谈起。实际上,对于神经机器翻译这样的模型来说,模型的容量是足够的。所谓容量可以被简单的理解为独立参数的个数 \footnote{另一种定义是把容量看作神经网络所能表示的假设空间大小\upcite{DBLP:journals/nature/LeCunBH15},也就是神经网络能表示的不同函数所构成的空间。}。也就是说,理论上存在一种模型可以完美的描述问题。但是,从目标函数拟合的角度来看,如果一个模型可以拟合很复杂的目标函数,那模型所表示的函数形态也会很复杂。这往往体现在模型中参数的值“偏大”。比如,用一个多项式函数拟合一些空间中的点,如果希望拟合得很好,各个项的系数往往是非零的。而且为了对每个点进行拟合,通常需要多项式中的某些项具有较大的系数,以期望函数在局部有较大的斜率。显然,这样的模型是很复杂的。模型的复杂度可以用函数中的参数(比如多项式中各项的系数)的“值”进行度量,这也体现在模型参数的范数上。
\parinterval 因此,L1和L2正则项的目的是防止模型为了匹配少数(噪声)样本而导致模型的参数过大。反过来说,L1和L2正则项会鼓励那些参数值在0点附近的情况。从实践的角度看,这种方法可以很好的对统计模型的训练进行校正,得到泛化能力更强的模型。
......@@ -262,15 +260,15 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\subsection{标签平滑}
\parinterval 神经机器翻译在每个目标语位置$j$会输出一个分布$\tilde{\mathbf{y}}_j$,这个分布描述了每个目标语言单词出现的可能性。在训练时,每个目标语言位置上的答案是一个单词,也就对应了One-hot分布${\mathbf{y}}_j$,它仅仅在正确答案那一维为1,其它维均为0。模型训练可以被看作是一个调整模型参数让$\tilde{\mathbf{y}}_j$逼近${\mathbf{y}}_j$的过程。但是,${\mathbf{y}}_j$的每一个维度是一个非0即1的目标,这样也就无法考虑类别之间的相关性。具体来说,除非模型在答案那一维输出1,否则都会得到惩罚。即使模型把一部分概率分配给与答案相近的单词(比如同义词),这个相近的单词仍被视为完全错误的预测。
\parinterval 神经机器翻译在每个目标语言位置$j$会输出一个分布$\tilde{\mathbf{y}}_j$,这个分布描述了每个目标语言单词出现的可能性。在训练时,每个目标语言位置上的答案是一个单词,也就对应了One-hot 分布${\mathbf{y}}_j$,它仅仅在正确答案那一维为1,其它维均为0。模型训练可以被看作是一个调整模型参数让$\tilde{\mathbf{y}}_j$逼近${\mathbf{y}}_j$的过程。但是,${\mathbf{y}}_j$的每一个维度是一个非0即1的目标,这样也就无法考虑类别之间的相关性。具体来说,除非模型在答案那一维输出1,否则都会得到惩罚。即使模型把一部分概率分配给与答案相近的单词(比如同义词),这个相近的单词仍被视为完全错误的预测。
\parinterval 标签平滑的思想很简单\upcite{Szegedy_2016_CVPR}:答案所对应的单词不应该“独享”所有的概率,其它单词应该有机会作为答案。这个观点与{\chaptertwo}中语言模型的平滑非常类似。在复杂模型的参数估计中,往往需要给未见或者低频事件分配一些概率,以保证模型具有更好的泛化能力。具体实现时,标签平滑使用了一个额外的分布$\mathbf{q}$,它是在词汇表$V$ 上的一个均匀分布,即$\mathbf{q}(k)=\frac{1}{|V|}$,其中$\mathbf{q}(k)$表示分布的第$k$维。然后,答案分布被重新定义为${\mathbf{y}}_j$$\mathbf{q}$的线性插值:
\parinterval 标签平滑的思想很简单\upcite{Szegedy_2016_CVPR}:答案所对应的单词不应该“独享”所有的概率,其它单词应该有机会作为答案。这个观点与{\chaptertwo}中语言模型的平滑非常类似。在复杂模型的参数估计中,往往需要给未见或者低频事件分配一些概率,以保证模型具有更好的泛化能力。具体实现时,标签平滑使用了一个额外的分布$\mathbf{q}$,它是在词汇表$V$ 上的一个均匀分布,即$\mathbf{q}(k)=\frac{1}{|V|}$,其中$\mathbf{q}(k)$表示分布的第$k$维。然后,标准答案的分布被重新定义为${\mathbf{y}}_j$$\mathbf{q}$的线性插值:
\begin{eqnarray}
\mathbf{y}_{j}^{ls} &=& (1-\alpha) \cdot {\mathbf{y}}_j + \alpha \cdot \mathbf{q}
\label{eq:13-5}
\end{eqnarray}
\noindent 这里,$\alpha$表示一个系数,用于控制分布$\mathbf{q}$的重要性。$\mathbf{y}_{j}^{ls}$会被作为最终的答案分布用于模型的训练。
\noindent 这里,$\alpha$表示一个系数,用于控制分布$\mathbf{q}$的重要性。
\parinterval 标签平滑实际上定义了一种“软”标签,使得所有标签都可以分到一些概率。一方面可以缓解数据中噪声的影响,另一方面目标分布会更合理(显然,真实的分布不应该是One-hot分布)。图\ref{fig:13-12}展示了标签平滑前后的损失函数计算结果的对比。
......@@ -283,7 +281,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\end{figure}
%----------------------------------------------
\parinterval 标签平滑也可以被看作是对损失函数的一种调整,并引入了额外的先验知识(即与$\mathbf{q}$相关的部分)。只不过这种先验知识并不是通过线性插值的方式与原始损失函数进行融合(公式\ref{eq:13-2}
\parinterval 标签平滑也可以被看作是对损失函数的一种调整,并引入了额外的先验知识(即与$\mathbf{q}$相关的部分)。只不过这种先验知识并不是通过公式\eqref{eq:13-2}所示的线性插值方式与原始损失函数进行融合
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -306,7 +304,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\end{figure}
%----------------------------------------------
\parinterval 具体实现时,可以设置一个参数$p \in (0,1)$。在每次参数更新所使用的前向和反向计算中,每个神经元都以概率$p$停止工作。相当于每层神经网络会有以$p$为比例的神经元被“屏蔽”掉。每一次参数更新中会随机屏蔽不同的神经元,图\ref{fig:13-14}给出了Dropout方法和传统方法计算方式的对比。其中,$x_{i}^{l}$代表第$l+1$层神经网络的第$i$个输入,$w_{i}^{l}$为输入所对应的权重,$b^{l}$表示第$l+1$层神经网络输入的偏置,$z_{i}^{l+1}$表示第$l+1$层神经网络的线性运算的结果,$f$表示激活函数,$r_{j}^{l}$的值服从于概率$1-p$的伯努利分布。
\parinterval 具体实现时,可以设置一个参数$p \in (0,1)$。在每次参数更新所使用的前向和反向计算中,每个神经元都以概率$p$停止工作。相当于每层神经网络会有以$p$为比例的神经元被“屏蔽”掉。每一次参数更新中会随机屏蔽不同的神经元,图\ref{fig:13-14}给出了Dropout方法和传统方法计算方式的对比。其中,$x_{i}^{l}$代表第$l+1$层神经网络的第$i$个输入,$w_{i}^{l}$为输入所对应的权重,$b^{l}$表示第$l+1$层神经网络输入的偏置,$z_{i}^{l+1}$表示第$l+1$层神经网络的线性运算的结果,$f(\cdot)$表示激活函数,$r_{j}^{l}$的值服从于参数$1-p$的伯努利分布。
%----------------------------------------------
\begin{figure}[htp]
......@@ -321,7 +319,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\parinterval Dropout方法的另一种解释是,训练中屏蔽掉一些神经元相当于从原始的神经网络中抽取出了一个子网络。这样,每次训练都在一个随机生成的子网络上进行,而不同子网络之间的参数是共享的。在推断时,则把所有的子网络集成到一起。这种思想也有一些{\small\bfnew{集成学习}}\index{集成学习}(Ensemble Learning)\index{Ensemble Learning}的味道。只不过Dropout中子模型(或子网络)是在指数级空间中采样出来的。由于Dropout可以很好的缓解复杂神经模型的过拟合问题,因此也成为了大多数神经机器翻译系统的标配。
\parinterval 随时网络层数的增多,相互适应也会出现在不同层之间。因此Dropout方法也可以用于对多层神经网络中的层进行屏蔽,即Layer Dropout。特别是对于深层神经网络,Layer Dropout也是一种防止过拟合的方法。关于Layer Dropout的内容在{\chapterfifteen}还会有详细讨论。
\parinterval 随时网络层数的增多,相互适应也会出现在不同层之间。因此Dropout方法也可以用于对多层神经网络中的层进行屏蔽,即Layer Dropout。特别是对于深层神经网络,Layer Dropout也是一种有效的防止过拟合的方法。关于Layer Dropout的内容在{\chapterfifteen}还会有详细讨论。
%----------------------------------------------------------------------------------------
% NEW SECTION
......@@ -342,7 +340,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\end{figure}
%----------------------------------------------
\parinterval 决定神经网络模型健壮性的因素主要包括训练数据、网络结构、正则化方法等。仅仅从网络结构设计和训练算法优化的角度来改善健壮性一般是较为困难的,因为如果输入数据是“干净”的,模型就会学习如何在这样的数据上进行预测。无论模型的能力是强还是弱,当推断时的输入数据出现扰动的时候,模型可能无法适应这种它从未见过的新数据。因此,一种简单直接的方法是从训练样本出发,让模型在学习的过程中能对样本中的扰动进行处理,进而在推断时更加健壮。具体来说,可以在训练过程中构造有噪声的样本,即基于{\small\bfnew{对抗样本}}\index{对抗样本}(Adversarial Examples)\index{Adversarial Examples}进行{\small\bfnew{对抗训练}}\index{对抗训练}(Adversarial Training)\index{Adversarial Training}
\parinterval 决定神经网络模型健壮性的因素主要包括训练数据、模型结构、正则化方法等。仅仅从模型的角度来改善健壮性一般是较为困难的,因为如果输入数据是“干净”的,模型就会学习如何在这样的数据上进行预测。无论模型的能力是强还是弱,当推断时的输入数据出现扰动的时候,模型可能无法适应这种它从未见过的新数据。因此,一种简单直接的方法是从训练样本出发,让模型在学习的过程中能对样本中的扰动进行处理,进而在推断时更加健壮。具体来说,可以在训练过程中构造有噪声的样本,即基于{\small\bfnew{对抗样本}}\index{对抗样本}(Adversarial Examples)\index{Adversarial Examples}进行{\small\bfnew{对抗训练}}\index{对抗训练}(Adversarial Training)\index{Adversarial Training}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -358,15 +356,15 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\label{eq:13-6}\\
\funp{C}(\mathbi{x}') &\neq& \mathbi{y}
\label{eq:13-7}\\
\textrm{s.t.} \quad \funp{R}(\mathbi{x},\mathbi{x}') &<& \varepsilon
\textrm{s.t.} \quad \Psi(\mathbi{x},\mathbi{x}') &<& \varepsilon
\label{eq:13-8}
\end{eqnarray}
\noindent 其中,$(\mathbi{x}',\mathbi{y})$为输入中含有扰动的对抗样本,函数$\funp{C}(\cdot)$为模型。公式\eqref{eq:13-8}$\funp{R}(\mathbi{x},\mathbi{x}')$表示扰动后的输入$\mathbi{x}'$和原输入$\mathbi{x}$之间的距离,$\varepsilon$表示扰动的受限范围。当模型对包含噪声的数据容易给出较差的结果时,往往意味着该模型的抗干扰能力差,因此可以利用对抗样本检测现有模型的健壮性\upcite{DBLP:conf/emnlp/JiaL17}。同时,采用类似数据增强的方式将对抗样本混合至训练数据中,能够帮助模型学习到更普适的特征使模型得到稳定的输出,这种方式也被称为对抗训练\upcite{DBLP:journals/corr/GoodfellowSS14,DBLP:conf/emnlp/BekoulisDDD18,DBLP:conf/naacl/YasunagaKR18}
\noindent 其中,$(\mathbi{x}',\mathbi{y})$为输入中含有扰动的对抗样本,函数$\funp{C}(\cdot)$为模型。公式\eqref{eq:13-8}$\Psi(\mathbi{x},\mathbi{x}')$表示扰动后的输入$\mathbi{x}'$和原输入$\mathbi{x}$之间的距离,$\varepsilon$表示扰动的受限范围。当模型对包含噪声的数据容易给出较差的结果时,往往意味着该模型的抗干扰能力差,因此可以利用对抗样本检测现有模型的健壮性\upcite{DBLP:conf/emnlp/JiaL17}。同时,采用类似数据增强的方式将对抗样本混合至训练数据中,能够模型得到稳定的预测能力,这种方式也被称为对抗训练\upcite{DBLP:journals/corr/GoodfellowSS14,DBLP:conf/emnlp/BekoulisDDD18,DBLP:conf/naacl/YasunagaKR18}
\parinterval 通过对抗样本训练来提升模型健壮性的首要问题是:如何生成对抗样本。通过当前模型$\funp{C}$和样本$(\mathbi{x},\mathbi{y})$,生成对抗样本的过程,被称为{\small\bfnew{对抗攻击}}\index{对抗攻击}(Adversarial Attack)\index{Adversarial Attack}。对抗攻击可以被分为两种,分别是黑盒攻击和白盒攻击。在白盒攻击中,攻击算法可以访问模型的完整信息,包括模型结构、网络参数、损失函数、激活函数、输入和输出数据等。而黑盒攻击不需要知道神经网络的详细信息,仅仅通过访问模型的输入和输出就可以达到攻击目的,{\red 因此通常依赖启发式方法来生成对抗样本(Adversarial Examples for Evaluating Reading Comprehension Systems)}。由于神经网络对模型内部的参数干预度有限,其本身便是一个黑盒模型,并且黑盒攻击只需要在输入部分引入攻击信号,因此在神经网络的相关应用中黑盒攻击方法更加实用。
\parinterval 通过对抗样本训练来提升模型健壮性的首要问题是:如何生成对抗样本。通过当前模型$\funp{C}$和样本$(\mathbi{x},\mathbi{y})$,生成对抗样本的过程被称为{\small\bfnew{对抗攻击}}\index{对抗攻击}(Adversarial Attack)\index{Adversarial Attack}。对抗攻击可以被分为黑盒攻击和白盒攻击。在白盒攻击中,攻击算法可以访问模型的完整信息,包括模型结构、网络参数、损失函数、激活函数、输入和输出数据等。而黑盒攻击不需要知道神经网络的详细信息,仅仅通过访问模型的输入和输出就可以达到攻击的目的,{\red 因此通常依赖启发式方法来生成对抗样本(Adversarial Examples for Evaluating Reading Comprehension Systems)}。由于神经网络对模型内部的参数干预度有限,其本身便是一个黑盒模型,并且黑盒攻击只需要在输入部分引入攻击信号,因此在神经网络的相关应用中黑盒攻击方法更加实用。
\parinterval 在神经机器翻译中,输入所包含的细小的扰动会使模型变得脆弱\upcite{DBLP:conf/iclr/BelinkovB18}。由于图像和文本数据之间存在着一定的差异,对计算机而言,以像素值等表示的图像数据本身就是连续的\upcite{DBLP:conf/naacl/MichelLNP19},而文本中的一个个单词本身离散的,因此图像中的对抗攻击方法难以直接应用于自然语言处理领域。简单替换这些离散的单词,可能会生成语法错误或者语义错误的句子。简单替换产生的扰动过大,模型很容易判别。即使对词嵌入等连续表示的部分进行扰动,也会产生无法与词嵌入空间中的任何词匹配的向量\upcite{Gong2018AdversarialTW}。针对这些问题,下面着重介绍神经机器翻译任务中如何有效生成和使用对抗样本。
\parinterval 在神经机器翻译中,输入所包含的细小的扰动会使模型变得脆弱\upcite{DBLP:conf/iclr/BelinkovB18}。由于图像和文本数据之间存在着一定的差异,对计算机而言,以像素值等表示的图像数据本身就是连续的\upcite{DBLP:conf/naacl/MichelLNP19},而文本中的一个个单词本身离散的,因此图像中的对抗攻击方法难以直接应用于自然语言处理任务。简单替换这些离散的单词,可能会生成语法错误或者语义错误的句子。而且,简单替换单词产生的扰动过大,模型很容易判别。即使对词嵌入等连续表示的部分进行扰动,也会产生无法与词嵌入空间中的任何词匹配的向量\upcite{Gong2018AdversarialTW}。针对这些问题,下面着重介绍神经机器翻译任务中如何有效生成、使用对抗样本。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -374,9 +372,9 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\subsection{基于黑盒攻击的方法}
\parinterval 一个好的对抗样本应该具有这种性质:对文本做最少的修改,并最大程度地保留原文的语义。一种简单的实现方式是对文本加噪声。这里,噪声可以分为自然噪声和人工噪声\upcite{DBLP:conf/iclr/BelinkovB18}。自然噪声一般是指人为的在语料库中收集自然出现的错误,如输入错误、拼写错误等。人为噪声是通过多种方式来处理文本,例如,可以通过固定的规则或是使用噪声生成器,在干净的数据中以一定的概率引入不同类型的噪声,如:拼写、表情符号、语法错误等\upcite{DBLP:conf/naacl/VaibhavSSN19,DBLP:conf/naacl/AnastasopoulosL19,DBLP:conf/acl/SinghGR18};此外,也可以在文本中加入人为设计过的毫无意义的单词序列。
\parinterval 一个好的对抗样本应该具有这种性质:对文本做最少的修改,并最大程度地保留原文的语义。一种简单的实现方式是对文本加噪声。这里,噪声可以分为自然噪声和人工噪声\upcite{DBLP:conf/iclr/BelinkovB18}。自然噪声一般是指人为的在语料库中收集自然出现的错误,如输入错误、拼写错误等。人为噪声是通过人工设计的自动方法修改文本,例如,可以通过固定的规则或是使用噪声生成器,在干净的数据中以一定的概率引入拼写错误、语法错误等\upcite{DBLP:conf/naacl/VaibhavSSN19,DBLP:conf/naacl/AnastasopoulosL19,DBLP:conf/acl/SinghGR18};此外,也可以在文本中加入人为设计过的毫无意义的单词序列。
\parinterval 除了单纯的在文本中引入各种扰动外,还可以通过文本编辑的方式,在不改变语义的情况下尽可能修改文本,从而构建对抗样本\upcite{DBLP:journals/corr/SamantaM17,DBLP:conf/ijcai/0002LSBLS18}。文本的编辑方式主要包括交换,插入,替换和删除操作。表\ref{fig:13-20}给出了一些通过文本编辑的方式来生成对抗样本的例子。
\parinterval 除了单纯的在文本中引入各种扰动外,还可以通过文本编辑的方式,在不改变语义的情况下尽可能修改文本,从而构建对抗样本\upcite{DBLP:journals/corr/SamantaM17,DBLP:conf/ijcai/0002LSBLS18}。文本的编辑方式主要包括交换,插入,替换和删除操作。表\ref{tab:13-2}给出了一些通过文本编辑的方式来生成对抗样本的例子。
%----------------------------------------------
\begin{figure}[htp]
......@@ -390,7 +388,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
%----------------------------------------------
\begin{table}[htp]{
\begin{center}
\caption{对抗样本实例{\red 换成这个行吗?}}
\caption{对抗样本实例{\red 换成这个行吗?}{\color{blue} 可以,最好和李北确认}} \label{tab:13-2}
\begin{tabular}{l | l }
\rule{0pt}{15pt} 原始输入 & We are looking forward to the school holiday as soon as possible \\
\hline
......@@ -399,15 +397,14 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\rule{0pt}{15pt} 插入操作 & We are {\red extraordinary} looking forward to the school holiday as soon as possible \\
\end{tabular}
\end{center}
\label{tab:13-2}
}\end{table}
%-------------------------------------------
\parinterval 形式上,可以利用如FGSM\upcite{DBLP:journals/corr/GoodfellowSS14}等算法,验证文本中每一个单词对语义的贡献度,同时为每一个单词构建一个候选池,包括该单词的近义词,拼写错误词,同音词等。对于贡献度较低的词,如语气词,副词等,可以使用插入、删除操作进行扰动。对于文本序列中其他的单词,可以在候选池中选择相应的单词并进行替换。其中,交换操作可以是基于词级别的,比如交换序列中的单词,也可以是基于字符级别的,比如交换单词中的字符\upcite{DBLP:conf/coling/EbrahimiLD18}。重复的进行上述的编辑操作,直至编辑出的文本可以误导模型做出错误的判断。
\parinterval 形式上,可以利用如FGSM等算法\upcite{DBLP:journals/corr/GoodfellowSS14},验证文本中每一个单词的贡献度,同时为每一个单词构建一个候选池,包括该单词的近义词、拼写错误词、同音词等。对于贡献度较低的词,如语气词、副词等,可以使用插入、删除操作进行扰动。对于文本序列中其他的单词,可以在候选池中选择相应的单词并进行替换。其中,交换操作可以是基于词级别的,比如交换序列中的单词,也可以是基于字符级别的,比如交换单词中的字符\upcite{DBLP:conf/coling/EbrahimiLD18}。重复的进行上述的编辑操作,直至编辑出的文本可以误导模型做出错误的判断。
\parinterval基于语义的方法中,除了通过不同的算法修改输入以外,也可以通过神经网络模型增加扰动。例如,在机器翻译中常用的回译技术,也是生成对抗样本的一种有效方式。回译就是,通过反向模型将目标语言翻译成源语言,并将翻译得到的双语数据用于模型训练。除了翻译模型,语言模型也可以用于生成对抗样本。{\chapterfive}已经介绍过,语言模型可以用于检测句子的流畅度,它根据上文预测当前位置可能出现的单词。因此,此时可以使用语言模型预测出当前位置最可能出现的多个单词,并用这些词替换序列中原本的单词。在机器翻译任务中,可以通过与神经机器翻译系统联合训练,共享词向量矩阵的方式得到语言模型。{\red (Soft contextual data augmentation for neural machine translation)}
\parinterval机器翻译,中常用的回译技术也是生成对抗样本的一种有效方式。回译就是,通过反向模型将目标语言翻译成源语言,并将翻译得到的双语数据用于模型训练。除了翻译模型,语言模型也可以用于生成对抗样本。{\chaptertwo}已经介绍过,语言模型可以用于检测句子的流畅度,它根据上文预测当前位置可能出现的单词。因此,此时可以使用语言模型预测出当前位置最可能出现的多个单词,并用这些词替换序列中原本的单词。在机器翻译任务中,可以通过与神经机器翻译系统联合训练,共享词向量矩阵的方式得到语言模型。{\red (Soft contextual data augmentation for neural machine translation)}
\parinterval 此外,{\small\bfnew{生成对抗网络}}\index{生成对抗网络}(Generative Adversarial Networks\index{Generative Adversarial Networks}, GANs)也可以被用来生成对抗样本\upcite{DBLP:conf/iclr/ZhaoDS18}。与回译方法类似,基于GAN的方法将原始的输入映射为潜在分布$\funp{P}$,并在其中搜索出服从相同分布的文本构成对抗样本。一些研究也对这种方法进行了优化\upcite{DBLP:conf/iclr/ZhaoDS18},在稠密的向量空间中进行搜索,也就是说在定义$\funp{P}$的基础稠密向量空间中找到对抗性表示$\mathbi{z}'$,然后利用生成模型将其映射回$\mathbi{x}'$,使最终生成的对抗样本在语义上接近原始输入。{\red(既然GAN不是主流,可以考虑把这部分放到拓展阅读中)}
\parinterval 此外,{\small\bfnew{生成对抗网络}}\index{生成对抗网络}(Generative Adversarial Networks\index{Generative Adversarial Networks}, GANs)也可以被用来生成对抗样本\upcite{DBLP:conf/iclr/ZhaoDS18}。与回译方法类似,基于GAN的方法将原始的输入映射为潜在分布$\funp{P}$,并在其中搜索出服从相同分布的文本构成对抗样本。一些研究也对这种方法进行了优化\upcite{DBLP:conf/iclr/ZhaoDS18},在稠密的向量空间中进行搜索,也就是说在定义$\funp{P}$的基础稠密向量空间中找到对抗性表示$\mathbi{z}'$,然后利用生成模型将其映射回$\mathbi{x}'$,使最终生成的对抗样本在语义上接近原始输入。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -419,7 +416,7 @@ R(\mathbf{w}) & = & (\big| |\mathbf{w}| {\big|}_2)^2 \\
\begin{itemize}
\vspace{0.5em}
\item 与利用词向量的余弦相似度选择当前词的近义词,并对当前词进行替换类似,可以在每一个词的词嵌入表示上,累加一个服从正太分布的变量,之后将其作为模型的最终输入。同时,可以在训练目标中增加额外的训练目标。比如,迫使模型在接收到被扰动的输入后,编码端能够生成与正常输入类似的表示,解码端输出正确的翻译结果\upcite{DBLP:conf/acl/LiuTMCZ18}
\item 可以在每一个词的词嵌入表示上,累加一个服从正太分布的变量,之后将其作为模型的最终输入。同时,可以在训练目标中增加额外的训练目标。比如,迫使模型在接收到被扰动的输入后,编码端能够生成与正常输入类似的表示,解码端输出正确的翻译结果\upcite{DBLP:conf/acl/LiuTMCZ18}
\vspace{0.5em}
\item 除了引入标准的噪声外,还可以根据模型所存在的具体问题,构建不同的扰动。例如,针对输入中包含同音字错误导致的模型输出误差较大的问题,可以将单词的发音转换为一个包含$n$个发音单元的发音序列,如音素,音节等。并训练相应的嵌入矩阵将每一个发音单元转换为对应的向量表示。对发音序列中发音单元的嵌入表示进行平均后,得到当前单词的发音表示。最后将词嵌入与单词的发音表示进行加权求和,并将结果作为模型的输入\upcite{DBLP:conf/acl/LiuMHXH19}。通过这种方式可以提高模型对同音异形词的健壮性,得到更准确的翻译结果。此外除了在词嵌入层增加扰动,例如,在端到端模型中的编码端输出中引入额外的噪声,能起到与在层输入中增加扰动相类似的效果,增强了模型训练的健壮性\upcite{DBLP:conf/acl/LiLWJXZLL20}
\vspace{0.5em}
......@@ -860,7 +857,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
%----------------------------------------------
\begin{table}[htp]{
\begin{center}
\caption{一个含有噪声的汉英翻译实例}
\caption{一个含有噪声的汉英翻译实例} \label{tab:13-4}
\begin{tabular}{l | l}
\rule{0pt}{15pt} 汉语 & 公车\ \ \ 哪里? \\
\hline
......@@ -868,7 +865,6 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\tilde{\seq{y}} | \seq{x})
\rule{0pt}{15pt} 英语 & Where is the bus stop? For bus 81 \\
\end{tabular}
\end{center}
\label{tab:13-4}
}\end{table}
%-------------------------------------------
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论