当前位置:   article > 正文

句向量 Sentence Embedding

sentence embedding

句向量 Sentence Embedding

摘要

本文主要对句向量的发展和relate work介绍一下,可以看作一个简单的综述内容,句向量在NLP中有着很重要的作用,同时在许多NLP实际任务中会类似得到word embedding一样得到中间产物句向量 sentence embedding。下面将从最开始的dec2vec,以及word embedding组合的到的句向量分析,到sentence bert,以及bert-flow,bert-whitening,到最近的对比学习得到的句向量 SimCSE(EMNLP 2021,SimSCD(ACL 2022) 进行分析比较,

句向量概念类似于词向量,就是把句子语义投影到一个n维向量空间上。

句向量应用场景

我们研究任何东西都会有motivation,不会为了论文而研究,句向量的应用场景一般有语义检索,文本聚类,文本分类,除了这些直接的应用场景外,在其他NLP任务中,中间产物句向量的好坏,很大程度会影响任务结果的好坏,比如seq2seq任务中的中间语义向量c,长文本NLP任务对多个句向量再进行attention,选择重要句子,对把握整篇长文本NLU和NLG也很重要。

句向量经典论文方法

bert时代

在ngram,word2vec,glove构造出word embedding后,那sentence embedding就可以之间表现为多个word embedding的累加,平均等操作处理。但由于其对word在sentence中的位置没有清晰表示,导致sentence embedding效果较差。

tf-idf

使用tf-idf权重对特征词进行加权表示句子向量

doc2vec

类似word2vec,可以分为PV-DM和PV-DBDW两种方式

  • PV-DM 使用初始化CLS向量和滑动窗口中其他词预测其中一个token,然后根据预测出的token,使用average embedding来更新句向量CLS,不断迭代,在inference时,不更新word embedding和softmax的weight,只通过迭代来获得句向量CLS
  • PV-DBDW仅使用初始化句向量随机预测段落中一个token,然后更新句向量,不断迭代更新CLS。

doc2vec目前在gensim中集成

简单示例代码链接 zhangxs131/sentence_embedding (github.com)

bert时代

bert为首的MLM,LM等基于词的预训练模型,主要得到更好上下文的语义表示,但由于预训练策略针对填词和预测词的,故对生成句子向量,会有各向异性等问题。

CLS向量

bert模型中直接使用每个词都attention到的CLS向量表示,即可用于表示句子向量,也是目前一般中最常用的方法。

pooling

对bert中word embedding进行池化,联结得到句向量。

sentence-bert

sentence-bert就是简单修改bert,不同长度的文本获得同一长度的句向量,通过对比实验,对比CLS-pooling,average-pooling,max-pooling,然后基于bert在三个训练目

  • 使用u,v,|u-v|进行softmax分类
  • 直接对u,v句向量进行求cos相似度
  • 增加锚定句a,三个句子作为输入,正例距离近,反例距离远的训练目标

最后才bert,roberta基础上实验,在STS数据集上mean-pooling效果好些

句向量后处理
bert向量表示存在的问题
  • 各向异性

针对bert得到向量表达具有各向异性的问题(向量分布不均匀,充斥在一个狭窄锥形空间内),因此直接使用bert encode得到句子表示进行cos或dot是无法很好衡量出两个句子相似度的,因为bert向量不是基于一个标准正交基得到的。

  • 分布不均匀,低频词稀疏,高频词紧密

在bert得到向量的锥形区域内,高频词在头部,低频词在尾部,高频词和低频词之间的语义相似度计算困难,影响向量对句子的表达。


bert-flow

针对上述问题,打算将setence embedding向量,进行变换transfrom,使得向量分布形成高斯分布,即在bert后加一个后处理过程,通过训练得到这一transform过程模型

在这里插入图片描述

bert-whitening

与bert-flow类似,考虑针对sentence embedding进行向量转换,直接进行一个白化操作,来矫正向量空间分布。

为了达到与bert-flow相同效果,我们知道正态分布均值为0,协方差矩阵为单位阵,那么我们执行变换

在这里插入图片描述

也就是白化操作。

其中均值 在这里插入图片描述

协方差矩阵 :

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

根据协方差矩阵得到变换矩阵W,简化了flow模型,并提高了效果。

SimCSE

SimCSE作为21年EMNLP的一篇论文,很有借鉴加载,主要思路是模型中dropout作为一个embedding扰动器,来实现数据增强,两个带有dropout相同encoder后得到的嵌入表示作为正样本对来进行对比学习,为后面Rdropout等灵活使用dropout的模型提供灵感。

SCD

SCD: Self-Contrastive Decorrelation for Sentence Embeddings, 这是ACL22的一篇论文,在我上一篇博客中主要进行了讲解。作者主要思路使用dropout rate高的向量表示来构造负样本对,同时结合类似bert-flow,bert-whitening进行去相关的后处理操作,这两个目标联合构成的损失函数作为训练目标,达到了不错的效果。

总结

目前句向量表示,为了达到各向同性而进行的向量变换,和为了解决对比训练过程正负样本对问题,而继续努力,未来工作希望有更多发展。

参考

你可能不需要BERT-flow:一个线性变换媲美BERT-flow - 科学空间|Scientific Spaces

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/616682
推荐阅读
相关标签
  

闽ICP备14008679号