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
65e18fa0
Commit
65e18fa0
authored
Dec 23, 2020
by
单韦乔
Browse files
Options
Browse Files
Download
Plain Diff
合并分支 'shanweiqiao' 到 'caorunzhe'
13章解决冲突 查看合并请求
!675
parents
588847ec
aa3ab42e
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
52 行增加
和
74 行删除
+52
-74
Chapter13/chapter13.tex
+52
-74
没有找到文件。
Chapter13/chapter13.tex
查看文件 @
65e18fa0
...
...
@@ -23,9 +23,9 @@
\chapter
{
神经机器翻译模型推断
}
\parinterval
神经机器翻译的一个关键步骤是对神经网络进行训练。也就是,在双语平行数据上优化训练目标函数,使模型参数自动调整到一个“最佳”状态,从而可以对新的句子进行翻译。通常,训练过程对模型性能的好坏起到关键性作用。因此,对模型训练方法的研究也机器翻译领域的重要研究方向,其中的很多发现也对其它自然语言处理任务
有很好的借鉴意义。
\parinterval
对神经网络进行训练是神经机器翻译的基础问题之一。通常,训练过程对机器翻译系统性能的好坏起到关键性作用。因此,对模型训练方法的研究也机器翻译领域的重要研究方向,其中的很多发现对其它自然语言处理任务也
有很好的借鉴意义。
\parinterval
神经机器翻译模型训练面临着一些挑战,例如:
\parinterval
神经机器翻译
的
模型训练面临着一些挑战,例如:
\begin{itemize}
\vspace
{
0.5em
}
...
...
@@ -46,26 +46,26 @@
\sectionnewpage
\section
{
开放词表
}
\parinterval
人类表达语言的方式是十分多样的,这也体现在单词的构成上,甚至我们都无法想象数据中存在的不同单词的数量。即便使用分词策略,在WMT、CCMT等评测数据上,英文词表大小都会在100万以上。当然,这里面也包括很多的数字和字母的混合,还有一些组合词。不过,如果不加限制,机器翻译所面对的词表将会很“大”。这也会导致系统速度变慢,模型变大。更严重的问题是,测试数据中的一些单词根本就没有在训练数据中出现过,这时会出现OOV翻译问题,即系统无法对未见单词进行翻译。在神经机器翻译中,通常会考虑使用更小的翻译单元来缓解以上
问题。
\parinterval
从模型训练的角度看,我们通常希望尽可能使用更多的单词。因为更大的词表可以覆盖更多的语言现象,同时使得系统对不同语言现象有更强的区分能力。但是,人类表达语言的方式是十分多样的,这也体现在单词的构成上,甚至我们都无法想象数据中存在的不同单词的数量。即便使用分词策略,在WMT、CCMT等评测数据上,英语词表大小都会在100万以上。当然,这里面也包括很多的数字和字母的混合,还有一些组合词。不过,如果不加限制,机器翻译所面对的词表将会很“大”。这也会导致模型变大,模型训练变得极为困难。更严重的问题是,测试数据中的一些单词根本就没有在训练数据中出现过,这时会出现集外词(Out-of-Vocabulary,OOV)翻译问题,即系统无法对未见单词进行翻译。在神经机器翻译中,通常会考虑使用更小的翻译单元来缓解以上问题,因为小颗粒度的单元不容易出现数据稀疏
问题。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\subsection
{
大词表和
OOV
问题
}
\subsection
{
大词表和
集外词
问题
}
\parinterval
首先来具体看一看神经机器翻译的大词表问题。神经机器翻译模型训练和
解码都依赖于源语言和目标语言的词表。在建模中,词表中的每一个单词都会被转换为分布式(向量)表示,即词嵌入。这些向量会作为模型的输入(见
{
\chapterten
}
)。如果每个单词都对应一个向量,那么单词的各种变形(时态、语态等)都会导致词表和相应的向量数量的增加
。图
\ref
{
fig:13-1
}
展示了一些英语单词的时态语态变化。
\parinterval
首先来具体看一看神经机器翻译的大词表问题。神经机器翻译模型训练和
推断都依赖于源语言和目标语言的词表。在建模中,词表中的每一个单词都会被转换为分布式(向量)表示,即词嵌入。这些向量会作为模型的输入(见
{
\chapterten
}
)。如果每个单词都对应一个向量,那么单词的各种变形(时态、语态等)都会导致词表增大,同时增加词嵌入表示的难度
。图
\ref
{
fig:13-1
}
展示了一些英语单词的时态语态变化。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-word-change
}
\caption
{
单词时态、语态、单复数的变化
}
\caption
{
英语
单词时态、语态、单复数的变化
}
\label
{
fig:13-1
}
\end{figure}
%----------------------------------------------
\parinterval
如果要覆盖更多的翻译现象,词表会不断膨胀,并带来
下述
两个问题:
\parinterval
如果要覆盖更多的翻译现象,词表会不断膨胀,并带来两个问题:
\begin{itemize}
\vspace
{
0.5em
}
...
...
@@ -75,7 +75,7 @@
\vspace
{
0.5em
}
\end{itemize}
\parinterval
理想情况下,机器翻译应该是一个
{
\small\bfnew
{
开放词表
}}
\index
{
开放词表
}
(Open
-Vocabulary)
\index
{
Open-Vocabulary
}
的翻译任务。也就是,无论测试数据中包含什么样的词,机器翻译系统都应该能够正常翻译。但是,现实的情况是即使不断扩充词表,也不可能覆盖所有可能的单词,即OOV问题,或被称作集外词问题。这个问题在使用受限词表时会更加严重,因为低频词和未见过的词都会被看作OOV单词。这时会将这些单词用<UNK>代替。通常,数据中<UNK>的数量会直接影响翻译性能,过多的<UNK>会造成欠翻译、结构混乱等问题。因此神经机器翻译需要额外的机制解决大词表和OOV
问题。
\parinterval
理想情况下,机器翻译应该是一个
{
\small\bfnew
{
开放词表
}}
\index
{
开放词表
}
(Open
Vocabulary)
\index
{
Open Vocabulary
}
的翻译任务。也就是,无论测试数据中包含什么样的词,机器翻译系统都应该能够正常翻译。但是,现实的情况是即使不断扩充词表,也不可能覆盖所有可能的单词。这个问题在使用受限词表时会更加严重,因为低频词和未见过的词都会被看作集外词。这时会将这些单词用<UNK>代替。通常,数据中<UNK>的数量会直接影响翻译性能,过多的<UNK>会造成欠翻译、结构混乱等问题。因此神经机器翻译需要额外的机制解决大词表和集外词
问题。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -83,13 +83,13 @@
\subsection
{
子词
}
\parinterval
一种解决开放词表翻译问题的方法是改造输出层结构
\upcite
{
garcia-martinez2016factored,DBLP:conf/acl/JeanCMB15
}
,比如,替换原始的Softmax层,用更加高效的神经网络结构进行超大规模词表上的预测。不过,
由于模型结构和训练方法的调整使得系统开发与调试的工作量增加,因此使用这类方法时往往需要对系统进行修改,并且这类方法仍然无法解决OOV
问题,因此在实用系统中并不常用。
\parinterval
一种解决开放词表翻译问题的方法是改造输出层结构
\upcite
{
garcia-martinez2016factored,DBLP:conf/acl/JeanCMB15
}
,比如,替换原始的Softmax层,用更加高效的神经网络结构进行超大规模词表上的预测。不过,
模型结构和训练方法的调整使得系统开发与调试的工作量增加,并且这类方法仍然无法解决集外词
问题,因此在实用系统中并不常用。
\parinterval
另一种思路是不改变机器翻译系统,而是从数据处理的角度来缓解
OOV问题。既然使用单词会带来数据稀疏问题,那么自然会想到使用更小的单元。比如,把字符作为最小的翻译单元
\footnote
{
中文里的字符可以被看作是汉字。
}
\ \dash
\
也就是基于字符的翻译模型
\upcite
{
DBLP:journals/tacl/LeeCH17
}
。以英文为例,只需要构造一个包含26个英文
字母、数字和一些特殊符号的字符表,便可以表示所有的单词。
\parinterval
另一种思路是不改变机器翻译系统,而是从数据处理的角度来缓解
集外词问题。既然使用单词会带来数据稀疏问题,那么自然会想到使用更小的单元。比如,把字符作为最小的翻译单元
\footnote
{
汉语里的字符可以被看作是汉字。
}
\ \dash
\
也就是基于字符的翻译模型
\upcite
{
DBLP:journals/tacl/LeeCH17
}
。以英语为例,只需要构造一个包含26个英语
字母、数字和一些特殊符号的字符表,便可以表示所有的单词。
\parinterval
但是字符级翻译也面临着新的问题
\ \dash\
使用字符增加了系统捕捉不同语言单元之间搭配的难度。假设平均一个单词由5个字符组成,系统所处理的序列长度便增大5倍。这使得具有独立意义的不同语言单元需要跨越更远的距离才能产生联系。此外,基于字符的方法也破坏了单词中天然存在的构词规律,或者说破坏了单词内字符的局部依赖。比如,英
文
单词“telephone”中的“tele”和“phone”都是有具体意义的词缀,但是如果把它们打散为字符就失去了这些含义。
\parinterval
但是字符级翻译也面临着新的问题
\ \dash\
使用字符增加了系统捕捉不同语言单元之间搭配的难度。假设平均一个单词由5个字符组成,系统所处理的序列长度便增大5倍。这使得具有独立意义的不同语言单元需要跨越更远的距离才能产生联系。此外,基于字符的方法也破坏了单词中天然存在的构词规律,或者说破坏了单词内字符的局部依赖。比如,英
语
单词“telephone”中的“tele”和“phone”都是有具体意义的词缀,但是如果把它们打散为字符就失去了这些含义。
\parinterval
那么有没有一种方式能够兼顾基于单词和基于字符方法的优点呢?常用的手段包括两种,一种是采用字词融合的方式构建词表,将未知单词转换为字符的序列并通过特殊的标记将其与普通的单词区分开来
\upcite
{
luong2016acl
_
hybrid
}
。而另一种方式是将单词切分为
{
\small\bfnew
{
子词
}}
\index
{
子词
}
(Sub-word)
\index
{
Sub-word
}
,它是介于单词和字符中间的一种语言单元表示形式。比如,将英
文单词“doing”切分为“do”+“ing”。对于形态学丰富的语言来说,子词体现了一种具有独立意义的构词基本单元。比如,如图
\ref
{
fig:13-2
}
,子词“do”,
和“new”在可以用于组成其他不同形态的单词。
\parinterval
那么有没有一种方式能够兼顾基于单词和基于字符方法的优点呢?常用的手段包括两种,一种是采用字词融合的方式构建词表,将未知单词转换为字符的序列并通过特殊的标记将其与普通的单词区分开来
\upcite
{
luong2016acl
_
hybrid
}
。而另一种方式是将单词切分为
{
\small\bfnew
{
子词
}}
\index
{
子词
}
(Sub-word)
\index
{
Sub-word
}
,它是介于单词和字符中间的一种语言单元表示形式。比如,将英
语单词“doing”切分为“do”+“ing”。对于形态学丰富的语言来说,子词体现了一种具有独立意义的构词基本单元。比如,如图
\ref
{
fig:13-2
}
,子词“do”
和“new”在可以用于组成其他不同形态的单词。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -126,9 +126,9 @@
\vspace
{
0.5em
}
\item
对每个句子进行分词;
\vspace
{
0.5em
}
\item
将分词后的每个单词进行进一步切分,划分为字符序列。同时,在每个单词结尾添加结束符<e>用于标记单词的边界。之后,统计该单词在数据中出现的次数。例如单词low在数据中出现了5次,可以将其记为`l o w <e>:'5。
\item
将分词后的每个单词进行进一步切分,划分为字符序列。同时,在每个单词结尾添加结束符<e>用于标记单词的边界。之后,统计该单词在数据中出现的次数。例如单词low在数据中出现了5次,可以将其记为`l o w <e>:'5
(
{
\color
{
red
}
什么时候用单引号,什么时候用双引号
}
)
。
\vspace
{
0.5em
}
\item
对得到的字符集合进行统计,统计每个单词中2-gram符号出现的频次
\footnote
{
发生合并前,一个字符便是一个符号
}
。之后,选择最高频的2-gram符号,将其合并为新的符号,即新的子词。例如“A”和“B”连续出现的频次最高,则以“AB”替换所有单词内连续出现的“A”和“B”并将其加入子词词表。这样,“AB”会被作为一个整体,在之后的过程中可以与其他符号进一步合并。需要注意的是替换和合并不会跨越单词的边界,即只对单个单词进行替换和合并。
\item
对得到的字符集合进行统计,统计每个单词中2-gram符号出现的频次
\footnote
{
发生合并前,一个字符便是一个符号
}
。之后,选择最高频的2-gram符号,将其合并为新的符号,即新的子词。例如“A”和“B”连续出现的频次最高,则以“AB”替换所有单词内连续出现的“A”和“B”并将其加入子词词表。这样,“AB”会被作为一个整体,在之后的过程中可以与其他符号进一步合并。需要注意的是
,
替换和合并不会跨越单词的边界,即只对单个单词进行替换和合并。
\vspace
{
0.5em
}
\item
不断重复上一步骤,直到子词词表大小达到预定的大小或者下一个最高频的2-gram字符的频次为1。子词词表大小是BPE的唯一的参数,它用来控制上述子词合并的规模。
\vspace
{
0.5em
}
...
...
@@ -143,9 +143,7 @@
%----------------------------------------------
\end{itemize}
\parinterval
图
\ref
{
fig:7-9
}
给出了BPE算法执行的实例。其中预先设定的合并表的大小为10
\parinterval
在得到了符号合并表后,便需要对用字符表示的单词进行合并,得到以子词形式表示的文本。首先,将单词切分为以字符表示的符号序列,并在尾部加上终结符。然后按照符号合并表的顺序依次遍历,如果存在相同的2-gram符号组合,则对其进行合并,直至遍历结束。图1.4给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词,如图
\ref
{
fig:7-10
}
。
{
\red
{
图有问题
}}
\parinterval
图
\ref
{
fig:7-9
}
给出了BPE算法执行的实例。其中预先设定的合并表的大小为10。在得到了符号合并表后,便需要对用字符表示的单词进行合并,得到以子词形式表示的文本。首先,将单词切分为以字符表示的符号序列,并在尾部加上终结符。然后按照符号合并表的顺序依次遍历,如果存在相同的2-gram符号组合,则对其进行合并,直至遍历结束。图1.4给出了一个使用字符合并表对单词进行子词切分的实例。红色单元为每次合并后得到的新符号,直至无法合并,或遍历结束,得到最终的合并结果。其中每一个单元为一个子词,如图
\ref
{
fig:7-10
}
。
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -158,9 +156,9 @@
\parinterval
由于模型的输出也是子词序列,因此需要对最终得到的翻译结果进行子词还原,即将子词形式表达的单元重新组合为原本的单词。这一步操作也十分简单,只需要不断的将每个子词向后合并,直至遇到表示单词边界的结束符<e>,便得到了一个完整的单词。
\parinterval
使用BPE方法的策略有很多。不仅可以单独对源语言和目标语言
进行子词的切分,也可以联合源语言和目标语言,共同进行子词切分,被称作Joint-BPE
\upcite
{
DBLP:conf/acl/SennrichHB16a
}
。单语BPE比较简单直接,而Joint-BPE则可以增加两种语言子词切分的一致性。对于相似语系中的语言,如英语和德语,常使用Joint-BPE的方法联合构建词表。而对于中英
这些差异比较大的语种,则需要独立的进行子词切分。使用子词表示句子的方法可以有效的平衡词汇量,增大对未见单词的覆盖度。像英译德、汉译英任务,使用16k或者32k的子词词表大小便能取得很好的效果。
\parinterval
使用BPE方法的策略有很多。不仅可以单独对源语言和目标语言
句子进行子词的切分,也可以联合源语言和目标语言,共同进行子词切分,被称作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
}
。
{
\red
而在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
}
。
{
\red
而在T5等预训练模型中
\upcite
{
DBLP:journals/jmlr/RaffelSRLNMZLL20
}
,则使用了基于字符级别的BPE。此外,尽管BPE被命名为字节对编码,实际上一般处理的是Unicode编码,而不是字节。在预训练模型GPT2中,也探索了字节级别的BPE,在机器翻译、自动
问答等任务中取得了很好的效果
\upcite
{
radford2019language
}}
。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -170,17 +168,17 @@
\parinterval
与基于统计的BPE算法不同,基于Word Piece的子词切分方法则是利用语言模型进行子词词表的构造
\upcite
{
DBLP:conf/icassp/SchusterN12
}
。本质上,基于语言模型的方法和基于BPE的方法的思路是一样的,即通过合并字符和子词不断生成新的子词。它们的区别仅在于合并子词的方式不同。
{
\red
基于BPE的方法选择出现频次最高的连续字符2-gram合并为新的子词
}
,而基于语言模型的方法则是根据语言模型输出的概率选择要合并哪些子词。具体来说,基于Word Piece的方法首先将句子切割为字符表示的形式
\upcite
{
DBLP:conf/icassp/SchusterN12
}
,并利用该数据训练一个1-gram语言模型,记为
$
\textrm
{
log
}
\funp
{
P
}
(
\cdot
)
$
。假设两个相邻的子词单元
$
a
$
和
$
b
$
被合并为新的子词
$
c
$
,则整个句子的语言模型得分的变化为
$
\triangle
=
\textrm
{
log
}
\funp
{
P
}
(
c
)-
\textrm
{
log
}
\funp
{
P
}
(
a
)-
\textrm
{
log
}
\funp
{
P
}
(
b
)
$
。这样,可以不断的选择使
$
\triangle
$
最大的两个子词单元进行合并,直到达到预设的词表大小或者句子概率的增量低于某个阈值。
\parinterval
目前比较主流的子词切分方法都是作用于分词后的序列,对一些没有明显词边界且资源稀缺的语种并不友好。相比之下,SentencePiece可以作用于未经过分词处理的输入序列
\upcite
{
kudo2018sentencepiece
}
,同时囊括了双字节编码和语言模型的子词切分方法,更加灵活易用。
\parinterval
目前比较主流的子词切分方法都是作用于分词后的序列,对一些没有明显词边界且资源稀缺的语种并不友好。相比之下,Sentence
Piece可以作用于未经过分词处理的输入序列
\upcite
{
kudo2018sentencepiece
}
,同时囊括了双字节编码和语言模型的子词切分方法,更加灵活易用。
\parinterval
通过上述子词切分方法,可以缓解
OOV的问题,允许模型利用到一些词法上的信息。然而主流的BPE子词切分方法中,每个单词都对应一种唯一的子词切分方式,因此输入的数据经过子词切分后的序列表示也是唯一的。在给定词表的情况下,每句话仍然存在多种切分方式。而经过现有BPE处理后的序列,模型只能接收到单一的表示,可能会阻止模型更好地学习词的组成,不能充分利用单词中的形态学特征。此外,针对切分错误的输入数据表现不够鲁棒,常常会导致整句话的翻译效果极差。为此,研究人员提出一些正则
化方法
\upcite
{
DBLP:conf/acl/Kudo18,provilkov2020bpe
}
。
\parinterval
通过上述子词切分方法,可以缓解
集外词问题,允许模型利用到一些词法上的信息。然而主流的BPE子词切分方法中,每个单词都对应一种唯一的子词切分方式,因此输入的数据经过子词切分后的序列表示也是唯一的。在给定词表的情况下,每句话仍然存在多种切分方式。而经过现有BPE处理后的序列,模型只能接收到单一的表示,可能会阻止模型更好地学习词的组成,不能充分利用单词中的形态学特征。此外,针对切分错误的输入数据表现不够健壮,常常会导致整句话的翻译效果极差。为此,研究人员提出一些规范
化方法
\upcite
{
DBLP:conf/acl/Kudo18,provilkov2020bpe
}
。
\begin{itemize}
\vspace
{
0.5em
}
\item
子词
正则
化方法
\upcite
{
DBLP:conf/acl/Kudo18
}
。其思想是在训练过程中扰乱确定的子词边界,根据1-gram Language Model
{
\red
(ULM)
}
采样出多种子词切分候选。通过最大化整个句子的概率为目标构建词表。在实现上,与上述基于Word Piece的方法略有不同,这里不做详细介绍。
\item
子词
规范
化方法
\upcite
{
DBLP:conf/acl/Kudo18
}
。其思想是在训练过程中扰乱确定的子词边界,根据1-gram Language Model
{
\red
(ULM)
}
采样出多种子词切分候选。通过最大化整个句子的概率为目标构建词表。在实现上,与上述基于Word Piece的方法略有不同,这里不做详细介绍。
\vspace
{
0.5em
}
\item
BPE-Dropout
\upcite
{
provilkov2020bpe
}
。在训练时,通过在合并过程中按照一定概率
$
p
${
\red
(这个p能不能改成P)
}
(介于0与1之间)随机丢弃一些可行的合并操作,从而产生不同的子词切分结果,进而增强模型健壮性。而在推断阶段,将p设置为0,等同于标准的BPE。总的来说,上述方法相当于在子词的粒度上对输入的序列进行扰动,进而达到鲁棒性训练的目的。在之后的小节中同样会针对鲁棒性训练进行详细介绍
。
\item
BPE-Dropout
\upcite
{
provilkov2020bpe
}
。在训练时,通过在合并过程中按照一定概率
$
p
${
\red
(这个p能不能改成P)
}
{
\color
{
blue
}
改成P是不是和概率函数的符号就混淆了?
}
(介于0与1之间)随机丢弃一些可行的合并操作,从而产生不同的子词切分结果,进而增强模型健壮性。而在推断阶段,将
$
p
$
设置为0,等同于标准的BPE。总的来说,上述方法相当于在子词的粒度上对输入的序列进行扰动,进而达到增加训练健壮性的目的
。
\vspace
{
0.5em
}
\item
DPE
\upcite
{
he2020dynamic
}
。引入了混合字符-子词的切分方式,将句子的子词分割方式看作一种
潜变量,该结构能够利用
{
\small\bfnew
{
动态规划
}}
\index
{
动态规划
}
(Dynamic Programming)
\index
{
Dynamic Programming
}
的思想精确地将潜在的子字片段边缘化
。解码端的输入是基于字符表示的目标语序列,推断时将每个时间步的输出映射到预先设定好的子词词表之上,得到当前最可能得子词结果。若当前子词长度为
$
m
$
,则接下来的
$
m
$
个时间步的输入为该子词,并在
$
m
$
个时间步后得到下一个切分的子词。
\item
DPE
\upcite
{
he2020dynamic
}
。引入了混合字符-子词的切分方式,将句子的子词分割方式看作一种
隐含变量,该结构能够利用动态规划精确地将潜在的子字片段边缘化(
{
\color
{
red
}
啥叫边缘化???
}
)
。解码端的输入是基于字符表示的目标语序列,推断时将每个时间步的输出映射到预先设定好的子词词表之上,得到当前最可能得子词结果。若当前子词长度为
$
m
$
,则接下来的
$
m
$
个时间步的输入为该子词,并在
$
m
$
个时间步后得到下一个切分的子词。
\vspace
{
0.5em
}
\end{itemize}
...
...
@@ -191,13 +189,13 @@
\sectionnewpage
\section
{
正则化
}
\label
{
subsection-13.2
}
\parinterval
{
\small\bfnew
{
正则化
}}
\index
{
正则化
}
(Regularization)
\index
{
Regularization
}
是机器学习中的经典技术,通常用于缓解
{
\small\bfnew
{
过拟合问题
}}
\index
{
过拟合问题
}
(The Overfitting Problem)
\index
{
Overfitting Problem
}
。正则化的概念源自线性代数和代数几何。在实践中,它更多的是指对
{
\small\bfnew
{
反问题
}}
\index
{
反问题
}
(The Inverse Problem)
\index
{
Inverse Problem
}
的一种求解方式。假设输入
$
x
$
和输出
$
y
$
之间存在一种映射
$
f
$
\parinterval
{
\small\bfnew
{
正则化
}}
\index
{
正则化
}
(Regularization)
\index
{
Regularization
}
是机器学习中的经典技术,通常用于缓解
过拟合问题
。正则化的概念源自线性代数和代数几何。在实践中,它更多的是指对
{
\small\bfnew
{
反问题
}}
\index
{
反问题
}
(The Inverse Problem)
\index
{
Inverse Problem
}
的一种求解方式。假设输入
$
x
$
和输出
$
y
$
之间存在一种映射
$
f
$
\begin{eqnarray}
y
&
=
&
f(x)
\label
{
eq:13-1
}
\end{eqnarray}
\noindent
反问题是指:当观测到
$
y
$
时,能否求出
$
x
$
。反问题对应了很多实际问题,比如,可以把
$
y
$
看作经过美化的图片,
$
x
$
看作原始的图片,反问题就对应了图片还原。机器翻译的训练也是一种反问题,因为可以把
$
y
$
看作是正确的译文,
$
x
$
看作是输入句子或者模型参数
\footnote
{
在训练中,如果把源语言句子看作是不变的量,这时
$
f
$
的输入只有模型参数。
}
。
\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
}$
不满秩(非奇异矩阵)。不过,存在性和唯一性并不会对机器学习方法造成太大困扰,因为在实践中往往会找到近似的解。
...
...
@@ -228,7 +226,7 @@ y &=& f(x)
\label
{
eq:13-2
}
\end{eqnarray}
\noindent
其中,
$
L
(
\mathbf
{
w
}
)
$
是损失函数,
$
R
(
\mathbf
{
w
}
)
$
是正则项,
$
\lambda
$
是正则项的系数,用于控制正则化对训练影响的程度。
$
R
(
\mathbf
{
w
}
)
$
通常也可以被看作是一种先验,因为在数据不充分且存在噪声的情况下,可以根据一些先验知识让模型偏向正确的方向一些,而不是一味地根据受噪声影响的不准确的
$
L
(
\mathbf
{
w
}
)
$
进行优化。相应的,引入正则化后的模型可以获得更好的
{
\small\bfnew
{
泛化
}}
\index
{
泛化
}
(Generalization)
\index
{
Generalization
}
能力,即模型在新的未见数据上表现会更好。
\noindent
其中,
$
\mathbf
{
w
}$
是模型参数,
$
L
(
\mathbf
{
w
}
)
$
是损失函数,
$
R
(
\mathbf
{
w
}
)
$
是正则项,
$
\lambda
$
是正则项的系数,用于控制正则化对训练影响的程度。
$
R
(
\mathbf
{
w
}
)
$
通常也可以被看作是一种先验,因为在数据不充分且存在噪声的情况下,可以根据一些先验知识让模型偏向正确的方向一些,而不是一味地根据受噪声影响的不准确的
$
L
(
\mathbf
{
w
}
)
$
进行优化。相应的,引入正则化后的模型可以获得更好的
{
\small\bfnew
{
泛化
}}
\index
{
泛化
}
(Generalization)
\index
{
Generalization
}
能力,即模型在新的未见数据上表现会更好。
\parinterval
实践中已经证明,正则化方法有助于像神经机器翻译这样复杂的模型获得稳定的模型参数。甚至有些情况下,如果不引入正则化,训练得到的翻译模型根本无法使用。
...
...
@@ -272,7 +270,7 @@ y_{j}^{ls} &=& (1-\alpha) \cdot \tilde{y}_j + \alpha \cdot q
\label
{
eq:13-5
}
\end{eqnarray}
\noindent
这里
$
\alpha
$
表示一个系数,用于控制分布
$
q
$
的重要性。
$
y
_{
j
}^{
ls
}$
会被作为最终的答案分布用于模型的训练。
\noindent
这里
,
$
\alpha
$
表示一个系数,用于控制分布
$
q
$
的重要性。
$
y
_{
j
}^{
ls
}$
会被作为最终的答案分布用于模型的训练。
\parinterval
标签平滑实际上定义了一种“软”标签,使得所有标签都可以分到一些概率。一方面可以缓解数据中噪声的影响,另一方面目标分布会更合理(显然,真实的分布不应该是One-hot分布)。图
\ref
{
fig:13-12
}
展示了标签平滑前后的损失函数计算结果的对比。
...
...
@@ -293,9 +291,9 @@ y_{j}^{ls} &=& (1-\alpha) \cdot \tilde{y}_j + \alpha \cdot q
\subsection
{
Dropout
}
\parinterval
神经机器翻译模型是一种典型的多层神经网络模型。每一层
网络都包含若干神经元,负责接收前一层所有神经元的输出,并进行诸如乘法、加法等变换,并有选择的使用非线性的激活函数,最终得到当前层每个神经元的输出。从模型最终预测的角度看,每个神经元都在参与最终的预测。理想的情况下,我们希望每个神经元都能相互独立的做出“贡献”。这样的模型会更加健壮,因为即使一部分神经元不能正常工作,其它神经元仍然可以独立做出合理的预测。但是,随着每一层神经元数量的增加以及网络结构的复杂化,研究者发现
神经元之间会出现
{
\small\bfnew
{
相互适应
}}
\index
{
相互适应
}
(Co-Adaptation)
\index
{
Co-Adaptation
}
的现象。所谓相互适应是指,一个神经元对输出的贡献与同一层其它神经元的行为是相关的,也就是说这个神经元已经适应到它周围的“环境”中。
\parinterval
神经机器翻译模型是一种典型的多层神经网络模型。每一层
都包含若干神经元,负责接收前一层所有神经元的输出,并进行诸如乘法、加法等变换,并有选择的使用非线性的激活函数,最终得到当前层每个神经元的输出。从模型最终预测的角度看,每个神经元都在参与最终的预测。理想的情况下,我们希望每个神经元都能相互独立的做出“贡献”。这样的模型会更加健壮,因为即使一部分神经元不能正常工作,其它神经元仍然可以独立做出合理的预测。但是,随着每一层神经元数量的增加以及网络结构的复杂化,
神经元之间会出现
{
\small\bfnew
{
相互适应
}}
\index
{
相互适应
}
(Co-Adaptation)
\index
{
Co-Adaptation
}
的现象。所谓相互适应是指,一个神经元对输出的贡献与同一层其它神经元的行为是相关的,也就是说这个神经元已经适应到它周围的“环境”中。
\parinterval
相互适应的好处在于神经网络可以处理更加复杂的问题,因为联合使用两个神经元要比单独使用每个神经元的表示能力强。这也类似于传统机器学习任务中往往会设计一些高阶特征,比如自然语言序列标注中对
bi-gram和tri
-gram的使用。不过另一方面,相互适应会导致模型变得更加“脆弱”。因为相互适应的神经元可以更好的描述训练数据中的现象,但是在测试数据上,由于很多现象是未见的,细微的扰动会导致神经元无法适应。具体体现出来就是过拟合问题。
\parinterval
相互适应的好处在于神经网络可以处理更加复杂的问题,因为联合使用两个神经元要比单独使用每个神经元的表示能力强。这也类似于传统机器学习任务中往往会设计一些高阶特征,比如自然语言序列标注中对
2-gram和3
-gram的使用。不过另一方面,相互适应会导致模型变得更加“脆弱”。因为相互适应的神经元可以更好的描述训练数据中的现象,但是在测试数据上,由于很多现象是未见的,细微的扰动会导致神经元无法适应。具体体现出来就是过拟合问题。
\parinterval
Dropout是解决这个问题的一种常用方法
\upcite
{
DBLP:journals/corr/abs-1207-0580
}
。方法很简单,在训练时随机让一部分神经元停止工作,这样每次参数更新中每个神经元周围的环境都在变化,它就不会过分适应到环境中。图
\ref
{
fig:13-13
}
中给出了某一次参数训练中使用Dropout之前和之后的状态对比。
...
...
@@ -323,24 +321,7 @@ y_{j}^{ls} &=& (1-\alpha) \cdot \tilde{y}_j + \alpha \cdot q
\parinterval
Dropout方法的另一种解释是,训练中屏蔽掉一些神经元相当于从原始的神经网络中抽取出了一个子网络。这样,每次训练都在一个随机生成的子网络上进行,而不同子网络之间的参数是共享的。在推断时,则把所有的子网络集成到一起。这种思想也有一些
{
\small\bfnew
{
集成学习
}}
\index
{
集成学习
}
(Ensemble Learning)
\index
{
Ensemble Learning
}
的味道。只不过Dropout中子模型(或子网络)是在指数级空间中采样出来的。由于Dropout可以很好的缓解复杂神经模型的过拟合问题,因此也成为了大多数神经机器翻译系统的标配。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
%----------------------------------------------------------------------------------------
\subsection
{
Layer Dropout
}
\parinterval
随时网络层数的增多,相互适应也会出现在不同层之间。特别是在引入残差网络之后,不同层的输出可以进行线性组合,因此不同层之间的相互影响会更加直接。对于这个问题,也可以使用Dropout的思想对不同层进行屏蔽。比如,可以使用一个开关来控制一个层能否发挥作用,这个开关以概率
$
p
$
被随机关闭,即该层有为
$
p
$
的可能性不工作。图
\ref
{
fig:13-15
}
展示了Transformer多层网络引入Layer Dropout 前后的情况。可以看到,使用Layer Dropout后,开关M会被随机打开或者关闭,以达到屏蔽某一层计算的目的。由于使用了残差网络,关闭每一层相当于“跳过”这一层网络,因此Layer Dropout并不会影响神经网络中数据流的传递。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\input
{
./Chapter13/Figures/figure-norm
}
\caption
{
标准Transformer网络(a) vs 引入Layer Dropout后的Transformer网络(b)
}
\label
{
fig:13-15
}
\end{figure}
%----------------------------------------------
\parinterval
Layer Dropout可以被理解为在一个深网络(即原始网络)中随机采样出一个由若干层网络构成的“浅”网络。不同“浅”网络所对应的同一层的模型参数是共享的。这也达到了对指数级子网络高效训练的目的。需要注意的是,在推断阶段,每层的输出需要乘以
$
1
-
p
$
,确保训练时每层输出的期望和解码是一致的。Layer Dropout可以非常有效的缓解深层网路中的过拟合问题。在
\ref
{
subsection-13.2
}
节还会看到Layer Dropout可以成功地帮助我们训练Deep Transformer模型。
\parinterval
随时网络层数的增多,相互适应也会出现在不同层之间。因此Dropout方法也可以用于对多层神经网络中的层进行屏蔽,即Layer Dropout。特别是对于深层神经网络,Layer Dropout也是一种防止过拟合的方法。关于Layer Dropout的内容在
{
\chapterfifteen
}
还会有详细讨论。
%----------------------------------------------------------------------------------------
% NEW SECTION
...
...
@@ -349,18 +330,18 @@ y_{j}^{ls} &=& (1-\alpha) \cdot \tilde{y}_j + \alpha \cdot q
\sectionnewpage
\section
{
对抗样本训练
}
\parinterval
同其它基于神经网络的方法一样,提高
{
\small\bfnew
{
鲁棒性
}}
\index
{
鲁棒性
}
(Robustness)
\index
{
Robustness
}
也是神经机器翻译研发中需要关注的。比如,大容量模型可以很好的拟合训练数据,但是当测试样本与训练样本差异较大时,会导致很糟糕的翻译结果
\upcite
{
JMLR:v15:srivastava14a,DBLP:conf/amta/MullerRS20
}
。另一方面,实践中也发现,有些情况下即使输入中有微小的扰动,神经网络模型的输出也会产生巨大变化。或者说,神经网络模型在输入样本上容易受到
{
\small\bfnew
{
攻击
}}
\index
{
攻击
}
(Attack)
\index
{
Attack
}
\upcite
{
DBLP:conf/sp/Carlini017,DBLP:conf/cvpr/Moosavi-Dezfooli16,DBLP:conf/acl/ChengJM19
}
。图
\ref
{
fig:13-19
}
展示了一个神经机器翻译系统的翻译结果,可以看到,把输入句子中的单词“他”换成“她”会得到完全不同的译文。这时神经机器翻译系统就存在鲁棒
性问题。
\parinterval
同其它基于神经网络的方法一样,提高
{
\small\bfnew
{
健壮性
}}
\index
{
健壮性
}
(Robustness)
\index
{
Robustness
}
也是神经机器翻译研发中需要关注的。比如,大容量模型可以很好的拟合训练数据,但是当测试样本与训练样本差异较大时,会导致很糟糕的翻译结果
\upcite
{
JMLR:v15:srivastava14a,DBLP:conf/amta/MullerRS20
}
。另一方面,实践中也发现,有些情况下即使输入中有微小的扰动,神经网络模型的输出也会产生巨大变化。或者说,神经网络模型在输入样本上容易受到
{
\small\bfnew
{
攻击
}}
\index
{
攻击
}
(Attack)
\index
{
Attack
}
\upcite
{
DBLP:conf/sp/Carlini017,DBLP:conf/cvpr/Moosavi-Dezfooli16,DBLP:conf/acl/ChengJM19
}
。图
\ref
{
fig:13-19
}
展示了一个神经机器翻译系统的翻译结果,可以看到,把输入句子中的单词“他”换成“她”会得到完全不同的译文。这时神经机器翻译系统就存在健壮
性问题。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\includegraphics
[scale=0.5]
{
./Chapter13/Figures/figure-example-of-neural-machine-translation.png
}
\caption
{
神经机器翻译实例
}
\caption
{
神经机器翻译实例
(
{
\color
{
red
}
如果是别人论文中的例子,我们可以造一个,小牛翻译在线应该可以试出一些例子!
}
)
}
\label
{
fig:13-19
}
\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
...
...
@@ -368,7 +349,7 @@ y_{j}^{ls} &=& (1-\alpha) \cdot \tilde{y}_j + \alpha \cdot q
\subsection
{
对抗样本及对抗攻击
}
\parinterval
在图像识别领域,研究人员就发现,对于输入图像的细小扰动,如像素变化等,会使模型以高置信度给出错误的预测
\upcite
{
DBLP:conf/cvpr/NguyenYC15,DBLP:journals/corr/SzegedyZSBEGF13,DBLP:journals/corr/GoodfellowSS14
}
,但是这种扰动并不会
影响人类的判断。也就是说,样本中的微小变化“欺骗”了图像识别系统,但是“欺骗”不了人类。这种现象背后的原因有很多,例如,一种可能的原因是:系统并没有理解图像,而是在拟合数据,因此拟合能力越强,反而对数据中的微小变化更加敏感。从统计学习的角度看,既然新的数据中可能会有扰动,那更好的学习方式就是在训练中显性地把这种扰动建模出来,让模型对输入的细微变化更加鲁棒
。
\parinterval
在图像识别领域,研究人员就发现,对于输入图像的细小扰动,如像素变化等,会使模型以高置信度给出错误的预测
\upcite
{
DBLP:conf/cvpr/NguyenYC15,DBLP:journals/corr/SzegedyZSBEGF13,DBLP:journals/corr/GoodfellowSS14
}
,但是这种扰动并不会
造成人类的错误判断。也就是说,样本中的微小变化“欺骗”了图像识别系统,但是“欺骗”不了人类。这种现象背后的原因有很多,一种可能的原因是:系统并没有理解图像,而是在拟合数据,因此拟合能力越强,反而对数据中的微小变化更加敏感。从统计学习的角度看,既然新的数据中可能会有扰动,那更好的学习方式就是在训练中显性地把这种扰动建模出来,让模型对输入的细微变化表现得更加健壮
。
\parinterval
这种对原样本上增加一些难以察觉的扰动从而使模型的到错误判断的样本,被称为对抗样本。对于输入
$
\mathbi
{
x
}$
和输出
$
\mathbi
{
y
}$
,对抗样本形式上可以被描述为:
\begin{eqnarray}
...
...
@@ -380,11 +361,11 @@ y_{j}^{ls} &=& (1-\alpha) \cdot \tilde{y}_j + \alpha \cdot q
\label
{
eq:13-8
}
\end{eqnarray}
\noindent
其中,
$
(
\mathbi
{
x
}
,
\mathbi
{
y
}
)
$
为原样本,
$
(
\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
}
)
$
为原样本,
$
(
\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
}
。
\parinterval
通过对抗样本训练来提升模型
鲁棒性的首要问题是:如何生成对抗样本。通过当前模型
$
\funp
{
C
}$
,和样本
$
(
\mathbi
{
x
}
,
\mathbi
{
y
}
)
$
,生成对抗样本的过程,被称为
{
\small\bfnew
{
对抗攻击
}}
\index
{
对抗攻击
}
(Adversarial Attack)
\index
{
Adversarial Attack
}
。对抗攻击可以被分为两种,分别是黑盒攻击和白盒攻击。在白盒攻击中,攻击算法可以访问模型的完整信息,包括模型结构、网络参数、损失函数、激活函数、输入和输出数据等。而黑盒攻击不需要知道神经网络的详细信息,仅仅通过访问模型的输入和输出就可以达到攻击目的,
{
\red
因此通常依赖启发式方法来生成对抗样本
}
。由于神经网络本身便是一个黑盒模型,研究人员对模型内部的参数干预度有限,因此黑盒攻击在许多实际应用中更加实用
。
\parinterval
通过对抗样本训练来提升模型
健壮性的首要问题是:如何生成对抗样本。通过当前模型
$
\funp
{
C
}$
和样本
$
(
\mathbi
{
x
}
,
\mathbi
{
y
}
)
$
,生成对抗样本的过程,被称为
{
\small\bfnew
{
对抗攻击
}}
\index
{
对抗攻击
}
(Adversarial Attack)
\index
{
Adversarial Attack
}
。对抗攻击可以被分为两种,分别是黑盒攻击和白盒攻击。在白盒攻击中,攻击算法可以访问模型的完整信息,包括模型结构、网络参数、损失函数、激活函数、输入和输出数据等。而黑盒攻击不需要知道神经网络的详细信息,仅仅通过访问模型的输入和输出就可以达到攻击目的,
{
\red
因此通常依赖启发式方法来生成对抗样本
}
。由于神经网络本身便是一个黑盒模型,因此对模型内部的参数干预度有限,因此黑盒攻击在许多实际应用中更加实用(
{
\color
{
red
}
为啥干预度有限就更加实用?
}
)
。
\parinterval
在神经机器翻译中,输入所包含的细小的扰动会使模型变得脆弱
\upcite
{
DBLP:conf/iclr/BelinkovB18
}
。由于图像和文本数据之间存在着一定的差异,以像素值等表示的图像数据是连续的
\upcite
{
DBLP:conf/naacl/MichelLNP19
}{
\red
(如何理解连续?)
}
,而文本中的一个个单词本身离散的,因此图像中的对抗攻击方法难以直接应用于自然语言处理领域。简单替换这些离散的单词,可能会生成语法错误或者语义错误的句子。
由于简单替换产生的扰动过大,模型很容易判别,因此无法涵盖原始问题
。即使对词嵌入等连续表示的部分进行扰动,也会产生无法与词嵌入空间中的任何词匹配的向量
\upcite
{
Gong2018AdversarialTW
}
。针对这些问题,下面着重介绍神经机器翻译任务中如何有效生成和使用对抗样本。
\parinterval
在神经机器翻译中,输入所包含的细小的扰动会使模型变得脆弱
\upcite
{
DBLP:conf/iclr/BelinkovB18
}
。由于图像和文本数据之间存在着一定的差异,以像素值等表示的图像数据是连续的
\upcite
{
DBLP:conf/naacl/MichelLNP19
}{
\red
(如何理解连续?)
}
,而文本中的一个个单词本身离散的,因此图像中的对抗攻击方法难以直接应用于自然语言处理领域。简单替换这些离散的单词,可能会生成语法错误或者语义错误的句子。
简单替换产生的扰动过大,模型很容易判别
。即使对词嵌入等连续表示的部分进行扰动,也会产生无法与词嵌入空间中的任何词匹配的向量
\upcite
{
Gong2018AdversarialTW
}
。针对这些问题,下面着重介绍神经机器翻译任务中如何有效生成和使用对抗样本。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -392,24 +373,24 @@ y_{j}^{ls} &=& (1-\alpha) \cdot \tilde{y}_j + \alpha \cdot q
\subsection
{
基于黑盒攻击的方法
}
\parinterval
一个好的对抗样本应该具有这种性质:对文本做最少的修改,并最大程度地保留原文的语义。一种简单的实现方式是对文本加噪声。这里,噪声可以分为自然噪声和人工噪声
\upcite
{
DBLP:conf/iclr/BelinkovB18
}
。自然噪声一般是指人为的在语料库中收集自然出现的错误,如输入错误、拼写错误等
,或构建可用的词汇替换表,以及在文本中加入噪声。人为噪声是通过多种方式来处理文本,例如,可以通过固定的规则或是使用噪声生成器,在干净的数据中以一定的概率引入不同类型的噪声,如:拼写、表情符号、语法错误等
\upcite
{
DBLP:conf/naacl/VaibhavSSN19,DBLP:conf/naacl/AnastasopoulosL19,DBLP:conf/acl/SinghGR18
}
;此外,也可以在文本中加入人为设计过的毫无意义的单词序列,以此来分散模型的注意。或者是通过不同的算法来确定插入的位置和内容,这种方式常用于阅读理解任务中
\upcite
{
DBLP:conf/emnlp/JiaL17
}{
\red
(改的对不对)
}
。
\parinterval
一个好的对抗样本应该具有这种性质:对文本做最少的修改,并最大程度地保留原文的语义。一种简单的实现方式是对文本加噪声。这里,噪声可以分为自然噪声和人工噪声
\upcite
{
DBLP:conf/iclr/BelinkovB18
}
。自然噪声一般是指人为的在语料库中收集自然出现的错误,如输入错误、拼写错误等
。人为噪声是通过多种方式来处理文本,例如,可以通过固定的规则或是使用噪声生成器,在干净的数据中以一定的概率引入不同类型的噪声,如:拼写、表情符号、语法错误等
\upcite
{
DBLP:conf/naacl/VaibhavSSN19,DBLP:conf/naacl/AnastasopoulosL19,DBLP:conf/acl/SinghGR18
}
;此外,也可以在文本中加入人为设计过的毫无意义的单词序列,以此来分散模型的注意(
{
\color
{
red
}
啥是分散模型的注意?
}
)
。
\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
{
fig:13-20
}
给出了一些通过上述方式生成的对抗样本。
%----------------------------------------------
\begin{figure}
[htp]
\centering
\includegraphics
[scale=0.5]
{
./Chapter13/Figures/figure-true-case-of-adversarial-examples.jpg
}
\caption
{
对抗样本实例
{
\red
(需要让读者真实的感受一下)
}}
\caption
{
对抗样本实例
{
\red
(需要让读者真实的感受一下
,还是以前的问题,例子是我们自己的还是找的?
)
}}
\label
{
fig:13-20
}
\end{figure}
%----------------------------------------------
\parinterval
{
\red
形式上,可以利用FGSM
\upcite
{
DBLP:journals/corr/GoodfellowSS14
}
等算法,验证文本中每一个单词对语义的贡献度,同时为每一个单词构建候选池,包括单词的近义词,拼写错误词,同音词等。对于贡献度较低的词,如语气词,副词等,可以使用插入、删除操作进行扰动。对于文本序列中其他的单词,可以在候选池中选择相应的单词进行替换。其中,交换操作可以是基于词级别的,比如交换序列中的单词,也可以是基于字符级别的,比如交换单词中的字符
\upcite
{
DBLP:conf/coling/EbrahimiLD18
}
。重复的进行不同的编辑操作,直至误导模型做出错误的判断。
}
\parinterval
在基于语义的方法中,除了通过不同的算法修改输入以外,也可以通过神经网络模型增加扰动。例如,在机器翻译中常用的回译技术,也是生成对抗样本的一种有效方式。回译就是,通过反向模型将目标语言翻译成源语言,并将翻译得到的双语数据
再次应用于神经机器翻译系统的
训练。除了翻译模型,语言模型也可以用于生成对抗样本。
{
\red
前面
}
已经介绍过,语言模型可以用于检测句子的流畅度,它根据上文预测当前位置可能出现的单词。因此,此时可以使用语言模型预测出当前位置最可能出现的多个单词,并用这些词替换序列中原本的单词。在机器翻译任务中,可以通过与神经机器翻译系统联合训练,共享词向量矩阵的方式得到语言模型。
{
\red
(引用)
}
\parinterval
在基于语义的方法中,除了通过不同的算法修改输入以外,也可以通过神经网络模型增加扰动。例如,在机器翻译中常用的回译技术,也是生成对抗样本的一种有效方式。回译就是,通过反向模型将目标语言翻译成源语言,并将翻译得到的双语数据
用于模型
训练。除了翻译模型,语言模型也可以用于生成对抗样本。
{
\red
前面
}
已经介绍过,语言模型可以用于检测句子的流畅度,它根据上文预测当前位置可能出现的单词。因此,此时可以使用语言模型预测出当前位置最可能出现的多个单词,并用这些词替换序列中原本的单词。在机器翻译任务中,可以通过与神经机器翻译系统联合训练,共享词向量矩阵的方式得到语言模型。
{
\red
(引用)
}
\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
}
,在稠密的向量空间
$
z
$
中进行搜索,也就是说在定义
$
\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
}
'
$
,使最终生成的对抗样本在语义上接近原始输入。
{
\red
(既然GAN不是主流,可以考虑把这部分放到拓展阅读中)
}
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -417,13 +398,13 @@ y_{j}^{ls} &=& (1-\alpha) \cdot \tilde{y}_j + \alpha \cdot q
\subsection
{
基于白盒攻击的方法
}
\parinterval
除了在
离散的词汇级别增加扰动以外,还可以在模型内部增加扰动。这里简单介绍一下利用白盒攻击方法增加模型鲁棒
性的方法:
\parinterval
除了在
单词级别增加扰动以外,还可以在模型内部增加扰动。这里简单介绍一下利用白盒攻击方法增加模型健壮
性的方法:
\begin{itemize}
\vspace
{
0.5em
}
\item
与利用词向量的余弦相似度选择当前词的近义词,并对当前词进行替换类似,可以在每一个词的词嵌入表示上,累加一个服从正太分布的变量,之后将其作为模型的最终输入。同时,可以在训练目标中增加额外的训练目标。比如,迫使模型在接收到被扰动的输入后,编码端能够生成与正常输入类似的表示,解码端输出正确的翻译结果
\upcite
{
DBLP:conf/acl/LiuTMCZ18
}
。
\vspace
{
0.5em
}
\item
除了引入标准的噪声外,还可以根据模型所存在的具体问题,构建不同的扰动。例如,针对输入中包含同音字错误导致的模型输出误差较大的问题,可以将单词的发音转换为一个包含
$
n
$
个发音单元的发音序列,如音素,音节等。并训练相应的嵌入矩阵将每一个发音单元转换为对应的向量表示。对发音序列中发音单元的嵌入表示进行平均后,得到当前单词的发音表示。最后将词嵌入与单词的发音表示进行加权求和,并将结果作为模型的输入
\upcite
{
DBLP:conf/acl/LiuMHXH19
}
。通过这种方式可以提高模型对同音异形词的
鲁棒性,得到更准确的翻译结果。此外除了在词嵌入层增加扰动,同样有研究人员证明了,在端到端模型中的编码端输出中引入额外的噪声,能起到与在层输入中增加扰动相类似的效果,增强了模型训练的鲁棒
性
\upcite
{
DBLP:conf/acl/LiLWJXZLL20
}
。
\item
除了引入标准的噪声外,还可以根据模型所存在的具体问题,构建不同的扰动。例如,针对输入中包含同音字错误导致的模型输出误差较大的问题,可以将单词的发音转换为一个包含
$
n
$
个发音单元的发音序列,如音素,音节等。并训练相应的嵌入矩阵将每一个发音单元转换为对应的向量表示。对发音序列中发音单元的嵌入表示进行平均后,得到当前单词的发音表示。最后将词嵌入与单词的发音表示进行加权求和,并将结果作为模型的输入
\upcite
{
DBLP:conf/acl/LiuMHXH19
}
。通过这种方式可以提高模型对同音异形词的
健壮性,得到更准确的翻译结果。此外除了在词嵌入层增加扰动,例如,在端到端模型中的编码端输出中引入额外的噪声,能起到与在层输入中增加扰动相类似的效果,增强了模型训练的健壮
性
\upcite
{
DBLP:conf/acl/LiLWJXZLL20
}
。
\vspace
{
0.5em
}
\item
此外还可以使用基于梯度的方法来生成对抗样本。例如,可以利用替换词与原始单词词向量之间的差值,以及候选词的梯度之间的相似度来生成对抗样本
\upcite
{
DBLP:conf/acl/ChengJM19
}
,具体的计算方式如下:
{
\red
下面的是sin还是sim,而且文字中是正弦把?下面三角是不是delta
}
\begin{eqnarray}
...
...
@@ -433,21 +414,19 @@ y_{j}^{ls} &=& (1-\alpha) \cdot \tilde{y}_j + \alpha \cdot q
\label
{
eq:13-10
}
\end{eqnarray}
\noindent
其中,
$
\mathbi
{
x
}_
i
$
为输入中第
$
i
$
个词,
$
\mathbi
{
g
}_{
\mathbi
{
x
}_
i
}$
为对应的梯度向量,
$
\funp
{
e
}
(
\cdot
)
$
用于获取词向量,
$
\textrm
{
sim
}
(
\cdot
,
\cdot
)
$
用于评估两个向量之间
的余弦距离
{
\red
(很多符号没有解释,
$
∇
_
(
e
(
x
_
i
))
$
是什么?等等)
}
,
$
\nu
_{
\mathbi
{
x
}}$
为源语的词表。但是,由于对词表中所有单词进行枚举时,计算成本较大。因此利用语言模型选择最可能的
$
n
$
个词作为候选,进而缩减匹配范围,并从中采样出源语词进行替换是一种更有效地方式。同时,为了保护模型不受解码器预测误差的影响,此时需要对模型目标端的输入做出同样的调整。与在源语端操作不同的地方时,此时会将公式
\eqref
{
eq:13-10
}
中的损失替换为
$
-
\log
\funp
{
P
}
(
\mathbi
{
y
}
|
\mathbi
{
x
}
'
)
$
。同时,在如何利用语言模型选择候选和采样方面,也做出了相应的调整。在进行对抗性训练时,在原有的训练损失上增加了三个额外的损失,最终的训练目标为:
\noindent
其中,
$
\mathbi
{
x
}_
i
$
为输入中第
$
i
$
个词,
$
\mathbi
{
g
}_{
\mathbi
{
x
}_
i
}$
为对应的梯度向量,
$
\funp
{
e
}
(
\cdot
)
$
用于获取词向量,
$
\textrm
{
sim
}
(
\cdot
,
\cdot
)
$
用于评估两个向量之间
距离的函数
{
\red
(很多符号没有解释,
$
∇
_
(
e
(
x
_
i
))
$
是什么?等等)
}
,
$
\nu
_{
\mathbi
{
x
}}$
为源语的词表(
{
\color
{
red
}
词表一般用大V
}
)。但是,由于对词表中所有单词进行枚举时,计算成本较大。因此利用语言模型选择最可能的
$
n
$
个词作为候选,进而缩减匹配范围,并从中采样出源语词进行替换是一种更有效地方式。同时,为了保护模型不受解码器预测误差的影响,此时需要对模型目标端的输入做出同样的调整。与在源语端操作不同的地方时,此时会将公式
\eqref
{
eq:13-10
}
中的损失替换为
$
-
\log
\funp
{
P
}
(
\mathbi
{
y
}
|
\mathbi
{
x
}
'
)
$
。同时,在如何利用语言模型选择候选和采样方面,也做出了相应的调整。在进行对抗性训练时,在原有的训练损失上增加了三个额外的损失,最终的训练目标为:
\begin{eqnarray}
Loss(
\theta
_{
\textrm
{
mt
}}
,
\theta
_{
\textrm
{
lm
}}^{
\mathbi
{
x
}}
,
\theta
_{
\textrm
{
lm
}}^{
\mathbi
{
y
}}
)
&
=
&
Loss
_{
\textrm
{
clean
}}
(
\theta
_{
\textrm
{
mt
}}
) + Loss
_{
\textrm
{
lm
}}
(
\theta
_{
\textrm
{
lm
}}^{
\mathbi
{
x
}}
) +
\nonumber
\\
&
&
Loss
_{
\textrm
{
robust
}}
(
\theta
_{
\textrm
{
mt
}}
) + Loss
_{
\textrm
{
lm
}}
(
\theta
_{
\textrm
{
lm
}}^{
\mathbi
{
y
}}
)
\label
{
eq:13-11
}
\end{eqnarray}
\noindent
其中
$
Loss
_{
\textrm
{
clean
}}
(
\theta
_{
\textrm
{
mt
}}
)
$
为正常情况下的损失,
$
Loss
_{
\textrm
{
lm
}}
(
\theta
_{
\textrm
{
lm
}}^{
\mathbi
{
x
}}
)
$
和
$
Loss
_{
\textrm
{
lm
}}
(
\theta
_{
\textrm
{
lm
}}^{
\mathbi
{
y
}}
)
$
为生成对抗样本所用到的源语言与目标语言的模型的损失,
$
Loss
_{
\textrm
{
robust
}}
(
\theta
_{
\textrm
{
mt
}}
)
$
是使用修改后得到的对抗样本作为输入,并以原始的目标语作为答案时计算得到的损失,其
具体形式如下:
\noindent
其中
,
$
Loss
_{
\textrm
{
clean
}}
(
\theta
_{
\textrm
{
mt
}}
)
$
为正常情况下的损失,
$
Loss
_{
\textrm
{
lm
}}
(
\theta
_{
\textrm
{
lm
}}^{
\mathbi
{
x
}}
)
$
和
$
Loss
_{
\textrm
{
lm
}}
(
\theta
_{
\textrm
{
lm
}}^{
\mathbi
{
y
}}
)
$
为生成对抗样本所用到的源语言与目标语言的模型的损失,
$
Loss
_{
\textrm
{
robust
}}
(
\theta
_{
\textrm
{
mt
}}
)
$
是使用修改后得到的对抗样本作为输入,并以原始的目标语作为答案时计算得到的损失。令有
$
N
$
个样本,则损失函数的
具体形式如下:
\begin{eqnarray}
Loss
_{
\textrm
{
robust
}}
(
\theta
_{
\textrm
{
mt
}}
)
&
=
&
\frac
{
1
}{
\textrm
{
S
}}
\sum
_{
(
\mathbi
{
x
}
,
\mathbi
{
y
}
\in
\textrm
{
S
}
)
}
-
\log
\funp
{
P
}
(
\mathbi
{
y
}
|
\mathbi
{
x
}
',
\mathbi
{
z
}
';
\theta
_{
\textrm
{
mt
}}
)
Loss
_{
\textrm
{
robust
}}
(
\theta
_{
\textrm
{
mt
}}
)
&
=
&
\frac
{
1
}{
N
}
\sum
_{
(
\mathbi
{
x
}
,
\mathbi
{
y
}
)
}
-
\log
\funp
{
P
}
(
\mathbi
{
y
}
|
\mathbi
{
x
}
',
\mathbi
{
z
}
';
\theta
_{
\textrm
{
mt
}}
)
\label
{
eq:13-11
}
\end{eqnarray}
\noindent
这里
$
\textrm
{
S
}$
代表整体的语料库。
\vspace
{
0.5em
}
\end{itemize}
\parinterval
无论是黑盒方法还是白盒方法,本质上都是通过增加噪声使得模型训练更加健壮。类似的思想在很多机器学习方法中都有体现,比如,最大熵模型中使用高斯噪声就是常用的增加模型健壮性的手段之一
\upcite
{
chen1999gaussian
}{
\red
这篇文章再找一下
}
。而在深度学习时代下,对抗训练将问题定义为:有意识地构造出系统容易出错的样本,并使用这种样本训练系统,以此增加系统的抗干扰能力。
...
...
@@ -620,7 +599,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\subsubsection
{
1. 领域适应中的数据选择
}
\parinterval
由于机器翻译模型是使用平行语料训练的,因此,语料的质量、数量以及领域对翻译效果都有很大的影响。有研究工作表明,无论是使用统计机器翻译还是神经机器翻译技术,翻译模型对于训练语料的领域都很敏感
\upcite
{
DBLP:journals/mt/EetemadiLTR15,britz2017effective
}
。因为每个领域都有自己独特的属性,比如语言风格、句子结构、专业术语等,例如“bank”这个英
文
单词,在金融领域通常被翻译为“银行”,而在计算机领域,一般被解释为“库”、“存储体”等。使用通用领域数据训练出来的模型,在特定领域上的翻译效果往往不理想,这本质上是数据分布不同导致的。面对这种问题,一种解决办法是用特定领域的数据来训练模型。然而,特定领域数据往往比较稀缺,直接使用这种数据训练容易造成模型欠拟合。
\parinterval
由于机器翻译模型是使用平行语料训练的,因此,语料的质量、数量以及领域对翻译效果都有很大的影响。有研究工作表明,无论是使用统计机器翻译还是神经机器翻译技术,翻译模型对于训练语料的领域都很敏感
\upcite
{
DBLP:journals/mt/EetemadiLTR15,britz2017effective
}
。因为每个领域都有自己独特的属性,比如语言风格、句子结构、专业术语等,例如“bank”这个英
语
单词,在金融领域通常被翻译为“银行”,而在计算机领域,一般被解释为“库”、“存储体”等。使用通用领域数据训练出来的模型,在特定领域上的翻译效果往往不理想,这本质上是数据分布不同导致的。面对这种问题,一种解决办法是用特定领域的数据来训练模型。然而,特定领域数据往往比较稀缺,直接使用这种数据训练容易造成模型欠拟合。
\parinterval
那么,一种很自然的想法是:能不能利用通用领域数据来帮助数据稀少的领域呢?这个研究方向被称为机器翻译的领域适应
{
\red
(16.5领域适应)
}
,其中资源丰富的领域被称为
{
\small\bfnew
{
源领域
}}
\index
{
源领域
}
(Source Domain)
\index
{
Source Domain
}
,资源稀缺的领域被称为
{
\small\bfnew
{
目标领域
}}
\index
{
目标领域
}
(Target Domain)
\index
{
Target Domain
}
。领域适应主要有基于模型和基于数据两类方法,基于数据的方法主要关注如何充分有效地利用训练样本,数据选择就是其中一种简单有效的方法,它的学习策略是:在训练过程中,动态或静态的从源领域语料中选取部分数据,比如一些额外的、与目标领域数据相关的数据,并把这些数据用于模型的训练。这样做的好处在于:
...
...
@@ -662,11 +641,11 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\subsubsection
{
2. 数据降噪
}
\parinterval
除了领域差异,
{
\red
训练集偏差(之前都没有提到)
}
的另外一种常见表现形式是标签噪声。由于机器翻译的训练数据大多是从网页上爬取的数据,这不可避免的会引入噪声。这类噪声一般体现为如下问题,比如句子未对齐、多种语言单词混合、单词丢失等,
{
\red
相关研究表明神经机器翻译对于噪声数据很敏感(好像之前提到过)
}
,当噪声过多时就会使得模型的性能显著下降
\upcite
{
DBLP:conf/aclnmt/KhayrallahK18
}
,因此无论是从模型
鲁棒
性还是
{
\red
训练效率出发
}
,数据降噪都是很有意义的。事实上,数据降噪从统计机器翻译时代就已经有许多相关工作
\upcite
{
DBLP:conf/coling/FormigaF12,DBLP:conf/acl/CuiZLLZ13,DBLP:phd/dnb/Mediani17
}
,2018年WMT也开放了关于平行语料过滤的任务,这说明数据降噪工作正在逐步引起人们的注意。
\parinterval
除了领域差异,
{
\red
训练集偏差(之前都没有提到)
}
的另外一种常见表现形式是标签噪声。由于机器翻译的训练数据大多是从网页上爬取的数据,这不可避免的会引入噪声。这类噪声一般体现为如下问题,比如句子未对齐、多种语言单词混合、单词丢失等,
{
\red
相关研究表明神经机器翻译对于噪声数据很敏感(好像之前提到过)
}
,当噪声过多时就会使得模型的性能显著下降
\upcite
{
DBLP:conf/aclnmt/KhayrallahK18
}
,因此无论是从模型
健壮
性还是
{
\red
训练效率出发
}
,数据降噪都是很有意义的。事实上,数据降噪从统计机器翻译时代就已经有许多相关工作
\upcite
{
DBLP:conf/coling/FormigaF12,DBLP:conf/acl/CuiZLLZ13,DBLP:phd/dnb/Mediani17
}
,2018年WMT也开放了关于平行语料过滤的任务,这说明数据降噪工作正在逐步引起人们的注意。
\parinterval
由于含有噪声的翻译数据通常都具有较为明显的特征,因此可以用一些启发式的特征来进行综合评分
\upcite
{
rarrick2011mt,taghipour2011parallel,Xu2017ZipporahAF
}
,例如:句子长度比、词对齐率、最长连续未对齐序列长度等;也可以将该问题转化为文本分类,或跨语言文本蕴含任务来
{
\red
进行筛选
}
\upcite
{
DBLP:conf/aclnmt/CarpuatVN17,DBLP:conf/naacl/VyasNC18
}
;此外,从某种意义上来说,数据降噪其实也可以算是一种
{
\red
领域数据选择
}
,因为它的目标是选择可信度高的样本,因此我们可以人工构建一个可信度高的小型数据集,然后利用该数据集和通用数据集之间的差异性
{
\red
进行选择
}
\upcite
{
DBLP:conf/wmt/WangWHNC18
}
。
\parinterval
{
\red
早期的工作大多在关注过滤的方法,对于噪声数据中模型的
鲁棒性训练和噪声样本的利用探讨较少
}
。事实上,噪声是有强度的,有些噪声数据对于模型可能是有价值的,而且它们的价值可能会随着模型的状态而改变
\upcite
{
DBLP:conf/wmt/WangWHNC18
}
。一个例子如图
\ref
{
fig:13-51
}
所示
{
\red
(画图的时候zh-gloss那行不要了,zh翻译为中文)
}
\parinterval
{
\red
早期的工作大多在关注过滤的方法,对于噪声数据中模型的
健壮性训练和噪声样本的利用探讨较少
}
。事实上,噪声是有强度的,有些噪声数据对于模型可能是有价值的,而且它们的价值可能会随着模型的状态而改变
\upcite
{
DBLP:conf/wmt/WangWHNC18
}
。一个例子如图
\ref
{
fig:13-51
}
所示
{
\red
(画图的时候zh-gloss那行不要了,zh翻译为中文)
}
,
%----------------------------------------------
\begin{figure}
[htp]
...
...
@@ -677,8 +656,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\end{figure}
%-------------------------------------------
\parinterval
图中的中文句子中缺少了一部分翻译,但这两个句子都很流利,简单的基于长度或双语词典的方法可以很容易地对其进行过滤,但直观地看,这条训练数据对于训练NMT模型仍然有用,特别是在数据稀缺的情况下,因为中文句子和英文句子的前半部分仍然是翻译对。这表明了噪声数据的微妙之处,它不是一个简单的二元分类问题:一些训练样本可能部分有用,而它们的有用性也可能随着训练的进展而改变。因此简单的过滤并不一种很好的办法,一种合理的学习策略应该是既可以合理的利用这些数据,又不让其对模型产生负面影响。直觉上,这是一个动态的过程,当模型能力较弱时(比如在训练初期),这些数据就能对模型起到正面作用,反之亦然。受课程学习(Curriculum Learning,更详细内容见下节)、微调(fine-tune)等启发,研究学者们也提出了类似的学习策略,它的主要思想是:在训练过程中对批量数据的噪声水平进退火(anneal),使得模型在越来越干净的批量数据上进行训练
\upcite
{
DBLP:conf/wmt/WangWHNC18,DBLP:conf/acl/WangCC19
}
。从宏观上看,整个训练过程其实是一个持续微调的过程,这和微调的思想基本一致。这种学习策略一方面充分利用了训练数据,一方面又避免了噪声数据对模型的负面影响,因此取得了不错的效果。
\parinterval
图中的汉语句子中缺少了一部分翻译,但这两个句子都很流利,简单的基于长度或双语词典的方法可以很容易地对其进行过滤,但直观地看,这条训练数据对于训练NMT模型仍然有用,特别是在数据稀缺的情况下,因为汉语句子和英语句子的前半部分仍然是翻译对。这表明了噪声数据的微妙之处,它不是一个简单的二元分类问题:一些训练样本可能部分有用,而它们的有用性也可能随着训练的进展而改变。因此简单的过滤并不一种很好的办法,一种合理的学习策略应该是既可以合理的利用这些数据,又不让其对模型产生负面影响。直觉上,这是一个动态的过程,当模型能力较弱时(比如在训练初期),这些数据就能对模型起到正面作用,反之亦然。受课程学习(Curriculum Learning,更详细内容见下节)、微调(fine-tune)等启发,研究学者们也提出了类似的学习策略,它的主要思想是:在训练过程中对批量数据的噪声水平进退火(anneal),使得模型在越来越干净的批量数据上进行训练
\upcite
{
DBLP:conf/wmt/WangWHNC18,DBLP:conf/acl/WangCC19
}
。从宏观上看,整个训练过程其实是一个持续微调的过程,这和微调的思想基本一致。这种学习策略一方面充分利用了训练数据,一方面又避免了噪声数据对模型的负面影响,因此取得了不错的效果。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
%----------------------------------------------------------------------------------------
...
...
@@ -783,7 +761,7 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\parinterval
尽管预定义的方法简单有效,但存在的一个最大限制是,预定义的难度评估器和训练规划在训练过程中都是固定的,不够灵活,这可能会导致数据块的划分不合理,而且在一定程度上也忽略了当前模型的反馈,因此研究人员也提出了自动的方法,这种方法会根据模型的反馈来动态调整样本的难度或调度策略,模型的反馈可以是模型的不确定性
\upcite
{
DBLP:conf/acl/ZhouYWWC20
}
、模型的能力
\upcite
{
DBLP:conf/naacl/PlataniosSNPM19,DBLP:conf/coling/XuHJFWHJXZ20
}
等,然后将模型的反馈和训练的轮次或者是数据的采样相挂钩,从而达到控制的目的,根据这种思想,还有直接利用强化学习的方法
\upcite
{
DBLP:conf/aaai/ZhaoWNW20
}
,这些方法在一定程度上使得整个训练过程和模型的状态相匹配,使得样本的选择过渡得更加平滑,因此在实践中取得了不错的效果。
\parinterval
从广义上说,大多数课程学习方法都是遵循由易到难的原则,然而在实践过程中人们逐渐赋予了课程学习更多的内涵,课程学习的含义早已超越了最原始的定义。一方面,课程学习可以与许多任务相结合,此时,评估准则并不一定总是样本的困难度,这取决于具体的任务,比如在多任务学习中
\upcite
{
DBLP:conf/cvpr/PentinaSL15,DBLP:conf/iccvw/SarafianosGNK17
}
(multi-task learning),指的任务的难易程度或相关性;在领域适应任务中
\upcite
{
DBLP:conf/naacl/ZhangSKMCD19
}
,指的是数据与领域的相似性;在噪声数据场景中,指的是样本的可信度
\upcite
{
DBLP:conf/acl/WangCC19
}
。另一方面,在一些任务或数据中,由易到难并不总是有效,有时困难优先反而会取得更好的效果
\upcite
{
zhang2018empirical
}{
\red
Curriculum learning with deep convolutional neural networks
}
,实际上这和我们的直觉不太符合,一种合理的解释是课程学习更适合标签噪声、离群值较多或者是目标任务困难的场景,能提高模型的
鲁棒
性和收敛速度,而困难优先则更适合数据集干净的场景,能使随机梯度下降(stochastic gradient descent,SGD)更快更稳定
\upcite
{
DBLP:conf/nips/ChangLM17
}
。课程学习不断丰富的内涵使得它有了越来越广泛的应用。
\parinterval
从广义上说,大多数课程学习方法都是遵循由易到难的原则,然而在实践过程中人们逐渐赋予了课程学习更多的内涵,课程学习的含义早已超越了最原始的定义。一方面,课程学习可以与许多任务相结合,此时,评估准则并不一定总是样本的困难度,这取决于具体的任务,比如在多任务学习中
\upcite
{
DBLP:conf/cvpr/PentinaSL15,DBLP:conf/iccvw/SarafianosGNK17
}
(multi-task learning),指的任务的难易程度或相关性;在领域适应任务中
\upcite
{
DBLP:conf/naacl/ZhangSKMCD19
}
,指的是数据与领域的相似性;在噪声数据场景中,指的是样本的可信度
\upcite
{
DBLP:conf/acl/WangCC19
}
。另一方面,在一些任务或数据中,由易到难并不总是有效,有时困难优先反而会取得更好的效果
\upcite
{
zhang2018empirical
}{
\red
Curriculum learning with deep convolutional neural networks
}
,实际上这和我们的直觉不太符合,一种合理的解释是课程学习更适合标签噪声、离群值较多或者是目标任务困难的场景,能提高模型的
健壮
性和收敛速度,而困难优先则更适合数据集干净的场景,能使随机梯度下降(stochastic gradient descent,SGD)更快更稳定
\upcite
{
DBLP:conf/nips/ChangLM17
}
。课程学习不断丰富的内涵使得它有了越来越广泛的应用。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
...
...
@@ -814,6 +792,6 @@ L_{\textrm{seq}} = - \textrm{logP}_{\textrm{s}}(\hat{\mathbf{y}} | \mathbf{x})
\sectionnewpage
\section
{
小结及深入阅读
}
\parinterval
对抗样本除了用于提高模型的
鲁棒性之外,还有很多其他的应用场景。其中最主要的便是用于评估模型。通过构建由对抗样本构造的数据集,可以验证模型对于不同类型噪声鲁棒性
\upcite
{
DBLP:conf/emnlp/MichelN18
}
。正是由于对抗样本在检测和提高模型鲁棒性具有明显的效果,因此很多的研究人员在针对不同的任务提出了很多有效的方法。但是在生成对抗样本时常常要注意或考虑很多问题,比如扰动是否足够细微,在人类难以察觉的同时做到欺骗模型的目的,对抗样本在不同的模型结构或数据集上是否具有足够的泛化能力。生成的方法是否足够高效等等。
\parinterval
对抗样本除了用于提高模型的
健壮性之外,还有很多其他的应用场景。其中最主要的便是用于评估模型。通过构建由对抗样本构造的数据集,可以验证模型对于不同类型噪声健壮性
\upcite
{
DBLP:conf/emnlp/MichelN18
}
。正是由于对抗样本在检测和提高模型健壮性具有明显的效果,因此很多的研究人员在针对不同的任务提出了很多有效的方法。但是在生成对抗样本时常常要注意或考虑很多问题,比如扰动是否足够细微,在人类难以察觉的同时做到欺骗模型的目的,对抗样本在不同的模型结构或数据集上是否具有足够的泛化能力。生成的方法是否足够高效等等。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论