跨语言对比学习

这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

猿辅导在EMNLP2021上的一篇论文Aligning Cross-lingual Sentence Representations with Dual Momentum Contrast提出基于双Momentum网络的对比学习方法。对比学习最近非常火,尤其是以SimCES为首所提出的利用Dropout作为正样本的无监督学习方法。猿辅导的这篇论文和SimCES却不一样,它主要是从网络整体架构入手,基于Momentum网络提出了一种有监督的跨语言句子相似度计算方法

Dual Momentum Contrast

Momentum本意是动量,但是直接翻译过来感觉有些别扭,因此这里就直接用英文表述了。这里简要概述一下Momentum网络结构,如下图所示,它由两个Encoder组成,这两个Encoder网络的结构相同,参数不同

对于图像任务来说, x q x^{q} 代表一张图片, x k x^{k} 代表多张图片集合(包括图片 x q x^q ),其中 x k x^k 中除了 x q x^q 以外的图片,对于 x q x^q 来说都是负样本。 q q x q x^q 经过encoder网络后的向量, k k 为经过Momentum encoder网络后的多个向量

回到原论文,给定一个跨语言平行句子集 { x i , y i } i = 1 n \{x_i,y_i\}_{i=1}^n ,对于每种语言的句子,分别用特定语言的BERT模型去编码,提取最后一行所有token输出均值的 L 2 L_2 正则化作为句向量 h x i , h y i R 768 h_{x_i},h_{y_i}\in \mathbb{R}^{768}

这里有一个很巧妙的点在于,两个经过 L 2 L_2 正则化后的向量 h x i , h x j h_{x_i},h_{x_j} 进行点积的结果,就是这两个向量的余弦相似度,因为 L 2 L_2 正则化帮我们对每个向量除以了分母的平方和

论文设计的网络结构图如下所示,其中 s g sg 表示"stop gradient",即不反向传播; x x y y 是来自两个不同语言的句子

每一种语言的BERT都有一个参数为 θ \boldsymbol{\theta} 的Momentum encoder,可以理解为原BERT的复制,只不过复制的是结构而不是参数,这些Momentum encoder不通过反向传播更新参数,他们的参数更新公式为

θ = m θ + ( 1 m ) θ base (1) \boldsymbol{\theta} = m\boldsymbol{\theta} + (1-m)\boldsymbol{\theta}_{\text{base}}\tag{1}

每种语言都有两个存储队列(Memory queues),用于存储最近几批中由相应Momentum encoder编码的 K K 个向量。在每个优化步骤中,最老的那批向量会被替换为当前batch的向量。Momentum系数 m [ 0 , 1 ] m\in [0,1] ,通常大家设置的值非常接近1(例如0.999)。 K K 一般设置的非常大( > 1 0 5 > 10^5 ),以确保有足够的负样本使模型学习。作者采用InfoNCE Loss作为目标函数

L ( x , y ) = log exp ( h x h y / τ ) i = 0 K exp ( h x h y i / τ ) (2) \mathcal{L}(x,y) = -\log \frac{\exp(\mathbf{h}_x\cdot \mathbf{h}_{y}/\tau)}{\sum_{i=0}^K \exp(\mathbf{h}_x\cdot \mathbf{h}_{y_i}/\tau)}\tag{2}

τ \tau 是一个超参数,至于它的作用可以看我的这篇文章:Contrastive Loss中参数τ的理解。实际上式(2)是一个 K + 1 K+1 的Softmax分类,其中, x x 的平行语料即正样本为 y = y 0 y=y_0 ,所有的负样本 { y i } i = 1 K \{y_i\}_{i=1}^K 都在存储队列中

对称地,我们可以定义 L ( y , x ) \mathcal{L}(y,x) ,因此最终我们的目标是

min   L ( x , y ) + L ( y , x ) (3) \min\ \mathcal{L}(x,y)+\mathcal{L}(y,x)\tag{3}

训练结束后,我们直接丢弃Momentum encoders,只保留两个BERT分别提取两种语言句子的向量

虽然作者提出的方法以及后续实验都是基于跨语言的,但实际上针对同语言也是适用的,例如给定一个同语言的句子对 ( x i , x j ) (x_i,x_j) ,设句子 y j y_j 是由句子 x j x_j 翻译得到的,如果模型训练得比较好,那么对于句子 x j x_j y j y_j 的向量表示应该有

h x j h y j \mathbf{h}_{x_j}\approx \mathbf{h}_{y_j}

两边同时点乘 h x i \mathbf{h}_{x_i}

h x i h x j h x i h y j \mathbf{h}_{x_i}\cdot \mathbf{h}_{x_j}\approx \mathbf{h}_{x_i}\cdot \mathbf{h}_{y_j}

后者是跨语言的句子相似度,这正是我们模型所明确优化的

个人总结

实验效果非常好,大幅超越了BERT-Whitening以及BERT-flow,不过这里我就懒得放结果图了,因为我没有在论文中看到他们的源码地址

猜你喜欢

转载自juejin.im/post/7031716307787579423