今天分享的论文解决了我很久以来的一个疑惑,名字叫做:On the Sentence Embeddings from Pre-trained Language Models:
这个论文主要探讨两个问题:
- 为什么Bert做无监督文本匹配效果不好?是因为bert的输出携带的语义信息太少还是我们没有正确的利用挖掘这些语义信息
- 如果说是因为没有正确挖掘利用这些语义信息,那么我们怎么使用无监督的方式,让这种语义信息很容易的被利用
本文主要聊第一点,先说一下结论:
Bert向量空间并不平滑,有些区域不好被定义,也就是说是存在问题的,导致简单的相似性度量不能很好起到度量作用。
简单说就是Bert输出向量语义信息是足够的,但是consine这种简单东西不能很好的度量出来而已。
那么就有大致两个解决办法:转化Bert的输出空间或者使用其他的有用的相似性度量函数。
论文使用的是第一种,对Bert的输出空间做了一个转化,这个不细说,大家去看原论文。
我简单说一下我之前遇到的问题:
Bert出来之后,在下游任务上,横扫各大榜单。
一个最基础的应用是使用【cls】的输出向量微调做文本分类任务;
这样做的前提我们认为因为由于自注意力的存在,【cls】可以看到全局的信息。
但是需要注意的是,上面这句话绝对不代表没有在具体任务微调过的【CLS】向量可以代表整个句子的语义信息。
为什么这么说呢?
我们使用【CLS】向量做无监督的文本匹配,会发现一个非常奇怪的现象。
一般直觉上认为,由于Bert强大的编码能力,应该可以很好的表示语义信息,所以做无监督语义匹配,准确度应该还不错。
但是结果会发现相似度都比较大,没有什么区分度。
更进一步,我们可以对Bert输出,不仅仅是【CLS】向量,可以使用所有Tokens的输出向量做各种操作:max/mean/min Pooling等等吧。
甚至我们可以使用倒数第1/2/3/4或者把最后几层输出联合起来使用。
总之各种骚操作之后,会发现,无监督文本匹配效果依然不好。
究其原因就是👇谈到的词向量的各向异性。
我们来详细说说Bert的向量空间存在的问题。
之前的论文发现Bert的词向量存在各向异性(anisotropic),两个现象
- 词频影响了词向量空间分布
根据词频来区分不同的单词,然后计算不同词频的单词距离原点的距离,发现词频越低,距离原点越远。
我们希望句子的embedding表达可以用来度量句子之间的相似性;但是如果单词的embedding的分布是受词频影响的,那么这种相似性是不能让人信服的。
我举个简单的例子,两句话,A和B:
- A:你喜欢吃苹果吗?
- B:你爱吃苹果吗?
不同的单词是【喜欢】和【爱】。我们假设哈,假设【喜欢】出现的频次足够的高,那么它离原点就足够的近。【爱】出现的频率足够的低,那么它离原点就足够的远。
这样的话,词频信息就误导了我最终句子向量的表达,那么embdding度量相似性就不靠谱了。
- 词频影响词向量空间稀疏性
基于上面的1,论文观察到,词频高的词汇分布的密集,词频低的词汇分布的稀疏。
这一点问题很大,因为如果存在稀疏性,那么在词频低的词汇周围,就会存在很多意义不明的地方。
我们可以直观的想一下,如果分布的很稀疏,那么也就是词与词之前的空间存在大量的不确定性,这些地方是没有明确的语义信息表达的。
如果我们最终所有单词的加和正合适落在这种语义不明确的地方,那么相似性的度量准确度自然很低。
其实还有一个小点我想说一下,就是自己做实验的时候,会发现语义匹配效果不好的体现是因为consine计算出来的相似度基本都大于0.9。
文中解释了为啥效果不好,但是并没有详细说为啥相似度计算出来都很大。(或者是有提到但是我粗心错过了)
针对这一点,我想说一下我自己的感受。
我觉得这两点的结合是根本原因:高频离原点近+高频分布紧密。
怎么说呢?
这句话其实可以这么理解:高频词基本都挤在一块了。
句子大部分还是高频词占主要部分,在计算句子向量sen-emb的的时候,我们的操作是直接相加。
那么计算出来的和当然相似度就很高。
我这个解释不严谨,没啥严格证明,但是我觉得比较容易理解。
简单来说,就是Bert的向量空间存在各向异性(anisotropic):
- 高频离原点近,低频离原点远
- 高频分布紧密,低频分布稀疏
这两个现象的存在导致Bert的语义信息不能很好的表达出来,所以做语义相似度不好。
一个解决办法,就是把Bert的向量空间转换到另一个更加合适的空间,然后再做相似性度量,这就是论文的另一部分,感兴趣的可以去看原论文吧。
为啥相似度都很大,主要是因为高频词都挤在一块了。