AngIE一种句向量模型训练方案

103 阅读2分钟

论文: AnglE-optimized Text Embeddings

Github: github.com/SeanLee97/A…

论文概要:AnglE是一种句向量模型训练方案,本质是一个损失函数,该方法可以支持大部分语言模型,包括Bert或者LLaMA。获得句向量的方式:利用padding得到固定长度的模型输入,输入到语言模型得到句子的隐藏表征,将其作为对应的句向量。

背景: 现存的句向量模型面临的一个通用挑战就是梯度消失,主要是由于优化目标严重依赖余弦函数而导致的。所以提出一种新的训练方案AnglE,在现有基础上,引入一个新的基于复数空间的损失函数angle optimization,新的方案在多个任务上都取得明显提升,登顶MTEB榜单 bd740e1164669f6778dd2e893681233.png

论文策略: 句向量训练目标函数包括三个不同的损失,cosine loss、in-batch negative loss和angle loss, 最后使用加权求和的方式得到最终的损失

1、cosine loss: 余弦相似度损失,优化目标是高度相似的句子对之间的余弦相似度高于低相似度的句子对之间的余弦相似度

ef1e81284eabf49b784599e5b628b75.png

2、In-batch negative loss: 简而言之是batch内做多分类,自己做自己的正样本,batch内其他样本作为负样本,降低句子与其他句子的之间相似度

c27f151f9bab3f1dc89c9acc5959a7b.png  

3、Angle loss: 余弦函数存在相对饱和的区域(梯度接近于0),容易带来梯度消失问题,提出angle difference来度量句子相似度,angle difference对于余弦函数接近于0的区域会有明显不同,从而缓解优化过程中的梯度消失问题。利用复数空间的极坐标信息跟复数本身的除法计算,重新定义句子的相似度度量angle difference。通过优化angle difference,使得高度相似的句子对的angle difference高于那些低相似度的句子对。

向量如何转化成复数形式:   d4510ee44ea7acd30c1b4ff0e2db30f.png

cb824190efc75d515d64199c18de55b.png

最终的Loss:

02f95cf9945213690ad7f25a435abff.png

实验结果:

0afa42a5366afa4b1677c0bff3154ab.png  

部分代码展示

4e8de2cfbe7a233b9b10b66b7d4ad10.png

8669d0cbde6b1ccd405ec6f49c9d5ef.png