美文网首页
句子相似度计算之sentence embedding_2

句子相似度计算之sentence embedding_2

作者: 第一个读书笔记 | 来源:发表于2023-11-24 18:37 被阅读0次

Ref:

  1. Bert-Flow: https://arxiv.org/pdf/2011.05864.pdf
  2. https://kexue.fm/archives/8069
  3. https://github.com/autoliuweijie/BERT-whitening-pytorch
  4. BERT-whitening: https://arxiv.org/pdf/2103.15316.pdf
  5. SimCSE: https://arxiv.org/pdf/2104.08821.pdf
  6. https://zhuanlan.zhihu.com/p/318061606

自Bert横空出世,工作中的很多业务都是基于Bert向量展开。也曾比较过Bert各层的[CLS],[TOKEN]的文本向量表达。虽然做了一系列的分析,但仍旧缺乏探索研究,一直保持着用[CLS]做下游任务的习惯。最近看了refer的文章,才知道之前做分析比较时遇到的一些小问题,其实可能不是数据的问题,而是模型的问题。

本文从Bert-Flow模型出发,探索BERT句子向量存在问题,从Flow的转换,到Bert-whitening转换,使得向量从各向异性转换到各向同性。再介绍SimCSE,从对比学习的alignment和uniformity,来探讨转换后的句子向量在相似任务上的表现。

1. 为什么用未fine-tuning的BERT提取的向量,进行相似计算效果不好?

很多paper都有提到,提取的未被fine-tuning BERT向量做语义分析,效果不怎么好,甚至不如GloVe。

笔者曾经提取过倒数第一和倒数第二层transformer,pooled_output的[CLS]向量做句子语义分析。
对比avg GloVe向量,pooled_output的向量结果最差。倒一transformer的[CLS]最好。
经过fine_tuning的BERT,取倒数第一层的[CLS]向量做语义分析,经过PCA降维到256后,语义丢失不大,但降维到128后,效果就差很多。

问题来了,为什么在做相似分析时,直接拿BERT句子向量,效果不好呢?

Bert-Flow提出了2个假设:

  1. BERT的句子向量缺乏语义信息;
  2. BERT学到的语义信息很难直接被提取到,那么该如何快捷的提取到包含语义的句子向量呢?

带着这2个问题, Bert-Flow做了具体分析。

语言模型:对序列x = {x_1,...,x_T},上下文c,需要计算:
log\ p(x_{1:T}) = \sum_t^T log\ p(x_t|c_t)
masked 语言模型:对masked的token\tilde x和masked的序列\hat x:
p(\tilde x|\hat x) = \sum_t^T m_t p(x_t|c_t)
c_t = \hat x,当x_t = \tilde x时,m_t = 1,其他时候为0。

两种语言模型都可以表示为:
p(x|c) = \frac {exp\ h_c^Tw_x}{\sum_{x'} exp\ h_c^Tw_x'}
其中:
h_c:句子embedding
w_x:词embedding

BERT的句子相似计算可以表示为:h_c^T h_{c'},但是h_c^T h_{c'}无法直接从BERT得到。

Yang et al. (2018) 指出:\ h_c^Tw_x \approx log\ p*(x|c) + \lambda c = PMI(x,c) + log p(x) + \lambda c
其中:PMI(x,c) = \frac {p(x,c)}{p(x)p(c)}
从统计角度上来说,就是共现分析。

  1. Higher-order Co-occurrence Statistics as Context-Context Semantic Similarity
    在预训练时,两个句子的语义关系受词影响。如果句子c和c'都有词w,则2句子有相似的语义。当词w在句子c时,归一化后,句子c的embedding和词w的embdding就会不断靠近,和无关词w‘的embdding的距离就会拉远。同理,c'也是这样。从而使得h_ch_c'距离拉近;同样的,具有共现词的h_c'',也会和h_c, h_c'距离更近。
  2. Anisotropic Embedding Space Induces Poor Semantic Similarity
    既然1中说共现词出现的几个句子会有语义相似,那为啥实际应用时,没有fine-tuning的话,效果不好呢?
    Gao et al. (2019) and Wang et al. (2020) 指出,使用maximize likelihood training(前面的p(x|c)的计算)的方式,产出的词向量空间是各向异性。这意味着,词向量在空间中表现为一个窄锥形(narrow cone)。表现为:
    https://zhuanlan.zhihu.com/p/318061606

2.1. 高频词汇空间距离很近:不止是相似词空间距离近,高频词之间的空间距离也很近;
2.2. 低频词空间距离远且稀疏:因为这种稀疏,在向量空间,会有一些'holes',以至于语义表达不够充分。

既然发现了这种问题,那么如何解决呢?

Bert-flow

高斯分布各向同性。那就将服从高斯分布的变量z映射到bert向量u,使得u经过反函数f^{-1},映射到高斯分布上。

Bert-flow 转换

经过转换,投影到高斯空间,使得数据变得更加平滑,具有各向同性。
如下图,原本的句子向量空间不够平滑,分布不够均匀。经过可逆的转换后,使得向量分布具有各向同性,表现为右边的圆形。


Bert-flow 转换

Bert-whitening

但有人提出疑问,经过Bert-flow转换后的句子相似度效果提升,可能不是因为flow好,而是它把原始向量转换成的具有各向同性,是这个各向同性的向量起的作用。
因此,提出Bert-whitening,从数学角度,取转换原始的sentence embedding,使得这个embedding的各个维度相互独立(去相关),并保持各个方向具有相同的方差。
whitening方式,有助于满足这个需求。
操作也很简洁明了:


Bert-whitening, ref [3]

步骤:

  1. line6:首先得到训练集中所有句子的向量,求平均;
  2. line7:计算协方差;
  3. line8:svd降维,到这一步就是PCA的基本思路;
  4. line9:求kernel,w \in R^{embedding_size, embedding_size};
  5. 如果要做降维处理,只需要选择w = w[:,:n_{components}]

对新数据x的转换:

  1. y = (x +bias) \cdot (kernel) = (x-mu) \cdot (w)
  2. normalize(y)

SimCSE

差不多半个月后,SimCSE提出了新的方案。
SimCSE使用了对比学习(Contrastive Learning),将同一条数据进入2次encoder,因为每次的dropout mask不同,因此得到不同的向量,从而增强正例数据。

Contrastive Learning

在一个batch中,对正例数据的loss计算,可以表示为:
l_i = -log \frac {e^{sim(h_i, h_i^+)}/ t}{\sum_j^N e^{sim(h_i, h_j^+)}/ t}
目的:相似的样本距离更近,不相似的样本距离更远。

对比学习的2个特点
Wang and Isola (2020) 提出了对比学习的2个特征:

  1. Alignment:可以理解为2个embedding之间的距离;


    alignment
  2. Uniformity:可以理解为embedding各维度分布是否是均匀的。


    uniformity

如何获得正样本?
CV:裁剪,旋转,扭曲等;
NLP:同义词替换,删除不重要的词,重排序等。
文本是个离散状态,这些增强的方案,从一定程度上可能破坏语义信息,如下图:

NLP增强方案对语义影响
None为使用dropout的增强方式,语义相关性最强;随机的裁剪,删除,替换都会影响语义信息。

SimCSE model

SimCSE模型框架

SimCSE做了2种任务,一个无监督,一个有监督的。

无监督的SimCSE
以Bert为例,在attention和FC阶段都有dropout操作,因此,本文通过同一数据,不同dropout mask得到hidden,来作为正样例。
上图左,输入到一个batch的数据,负样本为其他数据,正样本为经过2次encoder,因为dropout不同,带来的不同的hidden数据。
h_i^z = f_{\theta} (x_i,z),z为random dropout mask
l_i = -log \frac {e^{sim(h_i^{z_i}, h_i^{z_i'})}/ t}{\sum_j^N e^{sim(h_i^{z_i}, h_j^{z_j'})}/ t}

不同dropout概率对相关性分析的影响

当dropout为0.1时,相关性最强。不用dropout和固定dropout为0.1,数据没有增强,效果也最差。

有监督的SimCSE
使用NLI数据集,将label为contradiction的数据视为负样本,entailment的数据视为正样本。
l_i = -log \frac {e^{sim(h_i, h_i^+)}/ t}{\sum_j^N e^{sim(h_i, h_j^+)}/ t + e^{sim(h_i, h_j^-)}/ t }

模型效果对比

STS任务的相关性分析结果 迁移学习的结果对比 各个模型在uniformity和alignment上的表现

结论

Avg Bert存在各向异性的问题,因此uniformity最大;
Bert-Flow 和Bert-whitening主要解决向量各向异性的问题,因此uniformity都比较低,但alignment都偏高;
SimCSE通过对比学习训练模型,因此在uniformity和alignment两个方向上都相对优异。

相关文章

网友评论

      本文标题:句子相似度计算之sentence embedding_2

      本文链接:https://www.haomeiwen.com/subject/kfoseltx.html