有监督学习受限制于数据量。常见的数据增强方法不能生成diverse和faithful的样本。本文提出了一种新的数据增强范式–连续语义增强(CSANMT),它用一个邻接语义区域来增强每个训练实例,该邻接语义区域可以覆盖相同意义下足够多的字面表达变体。
这个工作在WMT14 英 → \rightarrow → {德,法}、NIST 中 → \rightarrow →英方向和许多IWSLT的低资源翻译任务上进行了测试。在现有的数据增强方法中取得了巨大的提高。
CSANMT的方法如下
如果你对NLP尤其是MT很熟悉,可以跳过问题定义。
目标是最大化对数似然。其中 C = { ( x ( n ) , y ( n ) ) } n = 1 N \mathcal{C}=\{(x^{(n)},y^{(n)})\}_{n=1}^N C={(x(n),y(n))}n=1N代表了一个容量大小得为N的训练集, x x x和 y y y是源语言和目标语言的句子。整个训练过程就是最大化他们的期望,让我慢慢说。
J m l e ( Θ ) = E ( x , y ) ∼ C ( l o g P ( y ∣ x ; Θ ) ) \mathcal{J}_{mle}(\Theta)=\mathbb{E}_{(x,y)\sim C}(logP(y|x;\Theta)) Jmle(Θ)=E(x,y)∼C(logP(y∣x;Θ))
其中 Θ \Theta Θ是模型的参数,一个句子的损失就通过每个时间步的损失合在一块。
l o g P ( y ∣ x ; Θ ) = ∑ t = 1 T ′ l o g P ( y t ∣ y < t ; x ; Θ ) logP(y|x;\Theta)=\sum_{t=1}^{T'}logP(y_t|\mathcal{y}_{
训练过程采用的是teacher forcing,也就是哪怕decoder输出了错误的结果,我们也可以直接用正确的[1,t-1]时刻的词替换。上式中的 y t y_t yt就是训练集里t时刻的正确词,每个时间步上decoder都会输出所有词的分布,然后我们取出 y t y_t yt位置的概率,如果其概率越大,那么log就会越大,所以总和就会靠近零(因为P是0-1区间的,最大logP就是0)。所以总体的训练目标就是在每句话上都取得准确位置P尽可能大的结果。
通常情况下我们会说希望可以最小化损失函数,这个也很好办,直接对上面损失函数取负号就行,这就是负对数似然。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7NHYF4Xo-1660959896636)(E:\论文\image-20220801071537215.png)]
和标准transformer相比,这个结构引入了一个semantic encoder,他可以把训练集中的源语言输入x和目标语言输入y转换成实值向量 r x r_x rx和 r y r_y ry,这个semantic encoder应该是个多语种encoder。作者使用语义编码器建立了一个源语言和目标语言通用的语义空间,将离散的句子映射成连续的向量。接下来的描述就有点诡异了,**作者说: 任取训练集中的两句话,都有 r x = r y r_x=r_y rx=ry。这在我理解应该是训练的一个目标,很难保证两个不同的句子映射出来的实值向量一模一样吧。**图中 r x r_x rx和 r y r_y ry所形成的的就是邻接区域(也就是交集) v ( r x , r y ) v(r_x,r_y) v(rx,ry)在这个空间里描述了句子对(x,y)的足够语义变体。
作者通过从邻接语义区域中采样一系列向量R={ r ^ ( 1 ) , r ^ ( 2 ) , r ^ ( 3 ) , . . . r ^ ( k ) \hat{r}^{(1)},\hat{r}^{(2)},\hat{r}^{(3)},...\hat{r}^{(k)} r^(1),r^(2),r^(3),...r^(k)},其中K是决定采样数量的超参数,然后通过一个广播集成网络(broadcasting integration network)把每个样本集成到生成过程中:
o ^ t = W 1 r ^ k + W 2 o t + b \hat{o}_t=W_1\hat{r}^{k}+W_2o_t+b o^t=W1r^k+W2ot+b
其中 o t o_t ot是t位置的decoder自注意力层的输出,等于说加了一层线性变换。那么损失函数极大似然估计自然也会随之变成
J m l e ( Θ ) = E ( x , y ) ∼ C , r ^ ( k ) ∼ R ( l o g P ( y ∣ x , r ^ ( k ) ; Θ ) ) \mathcal{J}_{mle}(\Theta)=\mathbb{E}_{(x,y)\sim C,\hat{r}^{(k)}\sim\mathcal{R}}(logP(y|x,\hat{r}^{(k)};\Theta)) Jmle(Θ)=E(x,y)∼C,r^(k)∼R(logP(y∣x,r^(k);Θ))
接下来我们需要考虑两个问题,第一个是如果优化semantic encoder,从而使得邻接语义区域有意义;第二个是怎么设计采样算法,高效的获取变体向量。
解决问题(1)的方法叫做切向对比学习Tangential Contrastive Learning。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w8qHjW1m-1660959896638)(E:\论文\image-20220818172949184.png)]
我们随便从训练样本里抽出一对 ( x i , y i ) (x_i,y_i) (xi,yi),然后定义 d = ∣ ∣ r x i − r y i ∣ ∣ 2 d=||r_{x_i}-r_{y_i}||_2 d=∣∣rxi−ryi∣∣2,使用d作为半径, r x i r_x{_i} rxi和 r y i r_{y_{i}} ryi分别作为圆心,画出两个封闭圆,这两个封闭圆的并集区域就是我们说的邻接区域。d也是一个松弛变量,和 r x i r_x{_i} rxi或 r y i r_{y_{i}} ryi距离不超过d的向量都可以认为和 ( x i , y i ) (x_i,y_i) (xi,yi)语义等价。
下面这个式子是一个损失函数,他的目的是尽可能增加 xi和yi的相似分数,减小xi 和 x中除了xi的样本和y中除了yi的样本的距离。【这个做法如果看不明白,这篇ICLR2022的论文写的很详细ON LEARNING UNIVERSAL REPRESENTATIONS ACROSS LANGUAGES】
J c t l = E ( x ( i ) , y ( i ) ) ∼ B ( l o g e s ( r x i , r y i ) e s ( r x i , r y i ) + ξ ) \displaystyle{\mathcal{J}_{ctl}=\mathbb{E}_{(x^{(i)},y^{(i)})\sim\mathcal{B}}(log\frac{e^{s(r_{x_i},r_{y_i})}}{e^{s(r_{x_i},r_{y_i})}+\xi})} Jctl=E(x(i),y(i))∼B(loges(rxi,ryi)+ξes(rxi,ryi))
B \mathcal{B} B指的就是训练集中的一个batch,s()是余弦相似度, ξ \xi ξ的定义如下所示:
ξ = ∑ j & j ≠ i ∣ B ∣ ( e s ( r x i , r x i ′ ) + e s ( r y i , r y i ′ ) ) \xi=\sum_{j\&j\ne i}^{|\mathcal{B}|}(e^{s(r_{x_i},r'_{x_i})}+e^{s(r_{y_i},r'_{y_i})}) ξ=j&j=i∑∣B∣(es(rxi,rxi′)+es(ryi,ryi′))
这个定义和ICLR2022那篇论文略有不同了,因为他只拉大了x和y内部的距离,却没有拉开xi和yj的差距。
负样例 x j ′ 和 y j ′ x'_{j}和y'_{j} xj′和yj′的设计如下(要做这个设计的原因是因为如果只是简单的把不对齐的句子拿来拉大距离,这个任务太简单了,利用平滑插值,可以创造出更难的负例,即拉大相似却不等价的样例的距离):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gc3F2RET-1660959896639)(E:\论文\image-20220819104251837.png)]
ICLR那篇比较了 +样例的距离和 -样例的距离,来判断这个负例难不难,比方说如果正例距离都大于负例距离了,那说明这个负例极度相似,很难,这个时候就不需要去处理这个样例,直接保留就好;否则就要平滑差值。ACL这篇公式里没提到这个条件判断,但是文中提到了。我们可以认为 λ \lambda λ越小越难。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VUVCvfvZ-1660959896639)(E:\论文\image-20220819104413650.png)]
两个向量的平滑插值会产生一个在AB线段上移动的新向量点,如果搞不懂数学的朋友(像我)不妨用geogebra拉一下就能看出来。
λ \lambda λ的值是自适应调整的,算出正例之间的距离除以负例之间的距离,然后用这个比值去做 ξ × p a v g + \xi \times p^+_{avg} ξ×pavg+ 次方。
其中 p a v g + = 1 100 ∑ j = − 100 − 1 exp − L s p^+_{avg}=\frac{1}{100}\sum_{j=-100}^{-1} \exp {^{-L_s}} pavg+=1001∑j=−100−1exp−Ls这个式子的意思就是把最后一百个batch的句子ctl loss求个平均对数平均。在预训练过程中,当模型倾向于容易区分正样本时,这意味着负样本已经不具有信息量。这个时候LS会变小, e − L s e^{-L_s} e−Ls就会变大,从而 p a v g p_{avg} pavg也会变大。而且 d + d − \frac{d+}{d-} d−d+会变小,这会使得lambda变小,从而构造更难的样例出来。$\xi $没啥说的,就是个超参,ICLR那篇设置的0.9.
这是一个从邻接区域采样的算法。