type
status
date
slug
summary
tags
category
icon
password

写在前面

论文主要卖点:最全面的 embedding 模型 。具体来说:
  1. 多语言:100 多中语言,还能跨语言召回
  1. 多功能:支持稠密、稀疏、多向量,三个方向的召回
  1. 多粒度:句子维度、段落维度、doc 维度,最高支持 8192 个 token 的上下文
notion image
论文主要贡献点:
  1. 开源 E3-embedding
  1. 给了一个新颖的 self-knowledge 蒸馏的方式
 
我的评价:感觉最核心的部分是 dense, sparse, multi-vec 三个的结合,数据方面感觉大家都差不多,论文里面也不会把 “我的数据处理的更好” 作为卖点,不过不得不说 bge 系列的开源做的真的很全面,论文里面有很多别的开源模型没有的细节。

一、数据

notion image

1. 预训练 - 无监督数据

主要包括 title-body, title-abstract, instruction-output , 翻译对(为了加强跨语言能力)。
 

2. 微调数据 - 监督数据

  1. 开源的打标数据
  1. 合成数据:从 Wikipedia, Wudao, mC4 随机抽样一些段落出来,然后让 gpt-3.5 生成段落对于的问题。这里合成数据说是更多为了扩展长文本能力的。 prompt 如下:
    1. notion image
  1. 给了一个更高效的 batching 的策略
 

二、训练方式

M3 是融合了稠密、离散、多向量召回的训练方式

1. Dense retrieval

就是取 CLS 对应向量作为句子的 embedding
notion image
notion image
notion image
query 和 passage 的相似度一般就是余弦相似度。

2. Lexical retrieval

离散召回模式中,query 和 passage 的相似度计算是先把 q 和 p 中每个 token 的 embedding 用一个 d ✖️ 1 的向量转换为一个标量,然后计算两者笛卡尔交叉积的和,就代表两者的相似度
notion image
notion image
 

3. Multi-Vector Retrieval

多向量召回的相似度计算逻辑是:
  1. 用一个 d ✖️ d 的矩阵把每个 token 的 embedding 转换一下,并且做个 norm
    1. notion image
  1. query 的每个 token 都和 passage token 做内积(等同于余弦相似度),然后取最大的相似度作为 query token 的和 passage 整个句子的相似度,然后 query 句子 和 passage 句子的相似度就取每个 token 的平均值
    1. notion image
 
最后融合得到最终相似度
notion image

4. Self-Knowledge Distillation

首先考虑对比学习,上面 dense, Lexical, Multi-Vector 三个计算出来的相似度,都可以放到 InfoNCE loss 里面做对比学习
notion image
当然把还可以把三个相似度融合之后放到 InfoNCE loss 里面,就可以得到四个 loss 了:
notion image
那么模型蒸馏是怎么做的呢?一种方式是拿另外更大更强的模型的结果作为 teacher 放到交叉熵 loss 里面,那么在本论文里面就直接拿 作为 teacher,loss 就是:
notion image
notion image
最终 loss 把对比学习的 loss 和蒸馏的 loss 做一个融合:
notion image
至于其中的系数设置:
notion image
可以看到 lex 对应的系数都是偏小的,是因为这部分 loss 初始化的时候都很高,所以减少它的 loss 避免模型过多学习。
所以这里的自知识蒸馏就是让三个相似度能和平均值差不多(这里平均值不严谨,因为系数大小不一样,但就这个意思吧。)
 

三、一些消融实验

1、自知识蒸馏

notion image
有这一项 loss 大概能提一个点
 

2、多阶段训练

notion image
效果还是挺明显的