前置知识复习
- https://www.cnblogs.com/Allen-rg/p/13958508.html
- word2vec详解:https://zhuanlan.zhihu.com/p/114538417
Word2Vec和GloVe都是用于将词与向量相关联的流行词嵌入模型。
相同点:
- 目标:Word2Vec和GloVe的共同目标是将词汇映射到低维向量空间中,以便在自然语言处理任务中使用。
- 算法:它们都是基于神经网络和统计学习的方法。
不同点:
- 训练方式:Word2Vec使用了两种不同的模型,分别是Skip-gram和CBOW模型;而GloVe使用全局语料库统计信息来计算词向量。
- 上下文信息:Word2Vec模型侧重于局部上下文信息,即根据当前词预测其上下文单词;GloVe模型将全局共现统计信息纳入考量,能够更好地反映词汇间的关系。
- 训练速度:由于GloVe利用了全局信息,它在大规模数据集上的训练速度通常比Word2Vec更快。
word2vec
Skip-gram模型和CBOW(Continuous Bag of Words)模型是Word2Vec中两种主要的词嵌入模型,它们在训练方式和目标上有一些明显的区别。
-
Skip-gram模型(跳字模型):
- 目标:Skip-gram模型的目标是从中心词预测其周围的上下文单词。
- 训练方式:给定一个中心词,Skip-gram模型会尝试预测在一定上下文窗口内可能出现的其他词,通过这种方式来学习单词的向量表示。
- 应用:在小语料库中较为有效,尤其在罕见词上表现更好。
-
CBOW模型(连续词袋模型):
- 目标:CBOW模型的目标是根据上下文单词的信息来预测中心词。
- 训练方式:给定一个上下文窗口内的词汇,CBOW模型会尝试预测这些词汇的中心词,从而学习单词的向量表示。
- 应用:在大语料库上运行更快,尤其在频繁出现的词上表现更好。
Bert的词向量分布
如何解决?
[1] Representation Degeneration Problem in Training Natural Language Generation Models
[2] On the Sentence Embeddings from Pre-trained Language Models
[3] Learning to Remove: Towards Isotropic Pre-trained BERT Embedding
RankCSE
背景:
排序算法
推荐可分为以下四个流程,分别是召回、粗排、精排以及重排:
召回是源头,在某种意义上决定着整个推荐的天花板;
粗排是初筛,一般不会上复杂模型;
精排是整个推荐环节的重中之重,在特征和模型上都会做的比较复杂;
重排,一般是做打散或满足业务运营的特定强插需求,同样不会使用复杂模型;
召回层:召回解决的是从海量候选item中召回千级别的item问题
排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题。LTR有三种主要的方法:PointWise,PairWise,ListWise。ListNet算法就是ListWise方法的一种
- 补充:https://zhuanlan.zhihu.com/p/610333953
pairwise
pointwise方法损失函数计算只与单个document有关,本质上是训练一个分类模型或者回归模型,判断这个document与当前的这个query相关程度,最后的排序结果就是从模型对这些document的预测的分值进行一个排序。对于pointwise方法,给定一个query的document list,对于每个document的预测与其它document是独立的。所以模型输入和对应的标签label形式如下:
输入: 单个document
label: document所属类型或者分值 pointwise方法将排序任务看做对单个文本的回归或者分类任务来做。若文档document的相关性等级有K种,则我们可以建模为一个有K个类别的
0
,
1
,
2
,
.
.
.
,
K
−
1
{0,1,2,..., K-1}
0,1,2,...,K−1的Multi-class分类任务,则
y
i
∈
R
k
y_i \in \R^k
yi∈Rk 一个k维度的one-hot表示, 我们可以用交叉熵loss作为目标损失函数:
L = − ( y i log ( p i ) − ( 1 − y i ) log ( 1 − p i ) ] ) \left.\mathrm{L}=-\left(\mathrm{y}{\mathrm{i}} \log \left(\mathrm{p}{\mathrm{i}}\right)-\left(1-\mathrm{y}{\mathrm{i}}\right) \log \left(1-\mathrm{p}{\mathrm{i}}\right)\right]\right) L=−(yilog(pi)−(1−yi)log(1−pi)])
ListNet
ListNet算法定义了一种Listwise的损失函数,该损失函数表示由我们的模型计算得来的文档排序和真正的文档排序之间的差异,ListNet最小化该损失函数以达到排序的目的
RankCSE训练任务
ConSERT
- https://tech.meituan.com/2021/06/03/acl-2021-consert-bert.html
如何从语言模型中获得Text embedding呢?
a) 将模型最后一层[CLS]位置的向量表征直接作为句向量。
b) 将模型最后一层[CLS]位置的向量表征,再经过MLP层得到的向量。
c) 将模型最后一层所有位置的向量表征,再经过一个Pooling层得到的向量。(大部分情况下采用的是mean pooling,在有些情况下也会使用max pooling等其他方式)
d) 将模型最后一层所有位置的向量表征,再经过一个Pooling层跟MLP层得到的向量。
相关模型:
T5
核心思想:将所有 NLP 任务都转化成 Text-to-Text (文本到文本)任务,用同样的模型,同样的损失函数,同样的训练过程,同样的解码过程来完成所有 NLP 任务
- 那么如何转化?加指令头就行了
自监督预训练的方法主要有三种:
- 语言模型式,就是 GPT-2 那种方式,从左到右预测
- BERT-style 式,就是像 BERT 一样将一部分给破坏掉,然后还原出来(
最佳方式,15 % mask比例
) - Deshuffling (顺序还原)式,就是将文本打乱,然后还原出来
文本一部分进行破坏时的策略:
- Mask 法,如现在大多模型的做法,将被破坏 token 换成特殊符如 [M];
- Span(小段替换)法,可以把它当作是把上面 Mask 法中相邻 [M] 都合成了一个特殊符,每一小段替换一个特殊符,提高计算效率;(
最佳方式,span长度为3
) - Drop 法,没有替换操作,直接随机丢弃一些字符。
sentence-T5
- T5-encoder + mean pooling,经过两阶段的训练得到了sentence-T5
两个阶段采用的都是对比学习
- 第一阶段是在无人工标注的十亿级别的庞大语料上做预训练(无监督对比学习)
- 第二阶段则是在有人工标注的十万级别的高质量NLI语料上作进一步finetune得到(有监督对比学习)
GTR
-
sentence-T5的架构不变,将finetune的数据集从NLI换成检索相关的
-
in-batch sampled softmax loss: 没有hard-negative就加大batch-size
-
bi-directional in-batch sampled softmax loss :正向损失是question和document的配对,反向损失数 document和question的匹配
- 正向损失以query为中心去构建正负样本
- 反向损失以positive document为中心去构建正负样本
BEIR的结论:使用余弦相似度度量训练的模型会偏向于检索出短文档,而使用点积相似度训练的模型会偏向于检索出长文档
But:当模型尺寸变大时,某些数据集的平均召回长度会变长
Instructor Embedding
核心:加入指令数据,正负样本的构造方法
- 加入指令数据四元组
(
x
,
I
x
,
y
,
I
y
)
(x, I_x, y, I_y)
(x,Ix,y,Iy)
I x I_x Ix is “Represent the Wikipedia question for retrieving supporting documents; Input: ,”
I y I_y Iy is “Represent the Wikipedia document for retrieval; Input: .”
相似度的计算:余弦相似度,Embedding是GTR models(T5 based)
- Loss的计算
BGE
自动编码+对比学习
自动编码任务有两个要求:
1)其一是重建任务需要足够难,从而迫使模型去生成高质量的句向量
2)其二是能够充分利用训练数据。
RetroMAE的预备训练方案
- 模型架构:
包括一个以Bert为基底的Encoder + 一个只有一层的Decoder - Encoder端:
训练时,Encoder端以30%的比例对原文本进行mask,最终得到最后一层[CLS]位置的向量表征作为句向量
- Decoder端:
以50%的比例对原文本进行mask,联合Encoder端的句向量,对原本进行重建
- 基于RetroMAE+key word的RetorMAE-2的方案在22年底已经提出,但是目前没有基于此的text embedding模型开源。
- BGE在finetune阶段针对检索任务需要加入特定的Prefix(只在query侧加"Represent this sentence for searching relevant passages:")。
- 猜想:自动编码+有监督对比学习+无监督对比学习,语言模型先在没有pair对的数据上以自动编码的任务做预训练,然后再在没有人工标注的数据上做对比学习,最后再在有人工标注的数据上做进一步finetune。