查看原文
其他

【综述专栏】Bert向量表示不能直接用于相似度问题的分析

在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。

来源:知乎—青空栀浅

地址:https://zhuanlan.zhihu.com/p/374230720

对于Bert输出的向量直接用于相似度计算的问题上,往往表现是较差的。本文主要分析一下导致该问题的原因以及目前的一些处理方法。


01

预训练语言模型和语义相关性的联系
假设一个文本  的编码为  ,为什么文本表示的点积(cosine)可以代表文本的语义相似度?
对于语言模型而言,都可以归结为在建模单词  和上下文  的条件分布:
而对于一个充分训练的语言模型而言:
其中的  是词的频率,  是与上下文  相关的term。    ,表示词与上下文的共现,其中  越大其共现的概率越大,也就是统计意义上的语义相似度。
所以我们看  ,语言模型的目标就是最大化token与上下文的共现概率,在该目标下,  与  的表示会不断的拉近,如果同一个  存在于另一个上下文  中,那么在训练中  与  的表示也会不断拉近。
通过上述分析我们可以得出Bert的预训练过程和语义相似度的计算目标是十分接近的,训练得到的句向量包含了文本间的语义相似度的信息,原则上是可以通过点积(cosine)来进行相似度计算的。

02

Bert模型的向量表示存在的问题
1.Bert的词向量在空间中的分布并不均匀
Bert的词向量在空间中的分布呈现锥形,作者发现高频的词都靠近原点。(所有词的均值),而低频词远离原点,这会导致即使一个高频词与一个低频词的语义等价,但是词频的差异也会带来巨大的差异,从而词向量的距离不能很好的表达词间的语义相关性。(下图来自 
@李rumor https://zhuanlan.zhihu.com/p/318061606)。
2. 高频词分布紧凑,低频词的分布稀疏
分布稀疏会导致区间的语义不完整(poorly defined),低频词表示训练的不充分,而句向量仅仅是词向量的平均池化,所以计算出来的相似度存在问题。


03

解决方法
主要介绍三篇paper的解决办法:
1. Bert-flow
其做法为在Bert后面接一个flow模型,flow模型的训练是无监督的,并且Bert的参数是不参与训练的,只有flow的参数被优化,而训练的目标则为最大化预先计算好的Bert的句向量的似然函数。
关于flow模型,本质为学习一个可逆的映射  ,将高斯分布的变量  映射到Bert的编码  ,这样的话  就可以把  均匀的映射到高斯分布上了,这时候我们最大化从高斯分布中产生Bert的词向量的概率,就可以将这个映射表示出来。
2. Bert-whitening
作者 @苏剑林 苏神首先分析了 余弦相似度 的假定:余弦相似度的计算为两个向量的内积除以各自的模长,而该式子的局限性为仅在 标准正交基 下成立。
其次 针对flow模型而言 ,flow模型由于必须保证逆变换的容易计算,就会导致每一层的非线性变换的能力较弱,为了保证充分的拟合能力,模型就需要堆得很深,计算量很大,但是Bert-flow中的flow模型却很小。
根据上述的问题得出:
Bert本身得出的sentence embeddings是包含句子信息的,余弦相似本本身是具有鲜明的几何意义,如果这组基是标准正交基,那么对应的向量应该表现出“各向同性”来,在使用余弦相似度来进行句子相似度的计算时候,其效果本身并不理想,那问题可能就是bert生成的向量并非为标准正交基下的向量。
flow模型是一个向量变换模型,它可以将输入数据的分布转化为标准正态分布,而显然标准正态分布是“各向同性”的,所以BERT-flow就选择了flow模型。
解决方式也很简单-白化(whitening)
whitening一般包含两个目的:
1.去除特征间的相关性 -----> 独立
2.使得所有特征具有相同的均值和方差 -----> 同分布
对于标准的高斯分布,其均值为0,协方差矩阵为单位阵,则可以将句向量的均值变换为0,协方差矩阵变为单位阵,然后进行显式求解,具体步骤参考:
https://spaces.ac.cn/archives/8069
3. SimCSE
作者通过引入对比学习的方式来对Bert向量的表示空间进行规整,进而来达到向量空间分布均匀的目的。
对于每个句子生成两个view,分别对其进行编码得到  和  ,我们对上下两批表示两两计算cosine相似度,得到NxN的矩阵,每一行的对角线位置代表  和  的相似度,其余代表  和  个负例的相似度。对每一行做softmax分类,采用交叉熵损失作为loss,就得到对比学习的损失了:
使用对比损失最关键的问题就是构建正样本的方式,,对于图片,裁剪、翻转、扭曲都不影响图像语义理解,而结构高度离散的自然语言则很难构造语义一致的正样本,常用的同义词替换 删除不重要的词,语序重排均为离散操作,容易引入负面噪声,性能提升有限。本文的作者也是提出了一个简单粗暴且有效的方式 dropout通过改变dropout生成正样本的方法可以看作是数据增强的最小形式,因为原样本和生成的正样本的语义是完全一致的无监督SimCSE是从维基百科上挑了100万个句子进行训练的,相当于一种自监督的方式进行训练,所以可以通过大量的数据进行模型的预训练。
针对表示空间评价的两个指标:
Alignment计算  与  的平均距离。
Uniformity:计算向量总体的分布均匀程度
我们希望这两个指标都尽可能低,也就是一方面希望正样本要挨得足够近,另一方面语义向量要尽可能地均匀分布在超球面上,因为均匀分布信息熵最高,分布越均匀则保留的信息越多,“拉近正样本,推开负样本”实际上就是在优化这两个指标。
最后作者测试了现有模型的alignment和uniformity,可以发现性能更优的模型通常有着更好的alignment和uniformity,BERT虽然有很好的alignment,但uniformity太差,而基于后处理的BERT-flow和BERT-whitening又恰恰走向了另一个极端,SimCSE则是对这两个指标的一个很好的平衡,加入监督训练后,SimCSE的两个指标会同时提升。
Reference:

On the Sentence Embeddings from Pre-trained Language Models

https://arxiv.org/pdf/2011.05864.pdf

Bert-whitening

https://arxiv.org/pdf/2103.15316.pdf

SimCSE

https://arxiv.org/pdf/2104.08821.pdf
https://spaces.ac.cn/archives/8069

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“综述专栏”历史文章


更多综述专栏文章,

请点击文章底部“阅读原文”查看



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存