文献分享: BGE-M3——打通三种方式的嵌入模型


原文章: BGE M3-Embedding \text{BGE M3-Embedding} BGE M3-Embedding

1.   \textbf{1. } 1. 背景与导论

1.1.   \textbf{1.1. } 1.1. 研究背景

1️⃣嵌入与检索

  1. 嵌入模型:一种深度学习模型,将文本转化为向量,以捕捉文本的意义信息
  2. 检索方法:密集 / \mathcal{/} /多向量 / \mathcal{/} /稀疏(词汇)
    模型嵌入方式相似度计算模型实例
    密集检索整一段编码为单个段落级稠密向量两个向量间的点积计算 BERT \text{BERT} BERT
    多向量检索整一段编码为多个词汇级稠密向量两组向量间的复杂交互 ColBERT \text{ColBERT} ColBERT
    稀疏检索整一段中词的重要性分布(词项权重)词匹配得分 BM25 \text{BM25} BM25

2️⃣当前嵌入模型的局限:通用性不足

局限描述
语言局限性大多数模型针对英语开发,在其他语言上表现差
功能单一性嵌入模型只针对单一检索功能训练
无法处理长文本大多数模型只能处理短文本输入,缘于训练长文档检索器成本太高

1.2.   \textbf{1.2. } 1.2. 本文的研究

1️⃣ M3-Embedding \text{M3-Embedding} M3-Embedding的功能:克服通用性不足的问题

功能描述
多语言支持 100 \text{100} 100多种语言,学习不同语言的共同语义空间,支持语言内 / / /跨语言的检索
多功能能生成三种不同类型的嵌入,以同时支持密集检索 / \mathcal{/} /稀疏检索 / \mathcal{/} /多向量检索
多颗粒度处理不同长度的输入,从细颗粒度的短输入 → \text{→} 最长 8192 \text{8192} 8192 Token \text{Token} Token

2️⃣ M3-Embedding \text{M3-Embedding} M3-Embedding的训练:如何整合三种嵌入方式的不同训练目标

  1. 高效的数据策划:
    • 数据源:无监督数据 / / /监督数据 / / /合成数据
    • 目的:互为补充,应用在不同训练阶段
  2. 一种新的自我蒸馏框架:
    • 结构:<CLS>结构嵌入 → 用于 \xrightarrow{用于} 用于 密集检索,其它 Token \text{Token} Token嵌入 → 用于 \xrightarrow{用于} 用于 稀疏检索和多向量检索
    • 原理:整合不同检索功能产生的相关性分数为教师信号 → 知识蒸馏 \xrightarrow{知识蒸馏} 知识蒸馏 反馈给模型自己,不断增强循环
  3. 优化了批处理策略:实现大批量 + \text{+} +高吞吐的训练,以提高嵌入模型的区分能力

1.3.   \textbf{1.3. } 1.3. 有关工作

1️⃣一般的文本嵌入

  1. 文本嵌入的进展:预训练模型(有效编码将数据的潜在语义),对比学习(负采样和知识蒸馏的运用)
  2. 文本嵌入的趋势:多功能的嵌入模型(统一支持多种场景),如 E5/BGE/SGPT/Contriever...  \text{E5/BGE/SGPT/Contriever... } E5/BGE/SGPT/Contriever... 

2️⃣ IR \text{IR} IR的文本嵌入:密集检索 / \mathcal{/} /多向量检索 / \mathcal{/} /稀疏(词汇)检索

3️⃣多语言的文本嵌入:

  1. 实现多文本嵌入:
    方向(思路)模型
    多语言数据集 MIRACL/mMARCO/MKQA \text{MIRACL/mMARCO/MKQA} MIRACL/mMARCO/MKQA
    多语言编码器(预训练 ) mBERT/mT5/XLM-R \text{mBERT/mT5/XLM-R} mBERT/mT5/XLM-R
    多语言嵌入模型(微调后 ) mDPR/mContriever/mE5 \text{mDPR/mContriever/mE5} mDPR/mContriever/mE5
  2. 当前的挑战:其他语种与英语的固有差距,其它语种语料库稀少

2.   M3-Embedding \textbf{2. M3-Embedding} 2. M3-Embedding

2.1.   \textbf{2.1. } 2.1. 模型核心: 混合检索方式

2.1.1.   \textbf{2.1.1. } 2.1.1. 三种不同的检索方式

2.1.1.1.   \textbf{2.1.1.1. } 2.1.1.1. 稠密检索

1️⃣分词:保留<cls>标记

  1. 查询: q = q\text{=} q=<q-cls> <q-Token-1> <q-Token-2> ....
  2. 文档: p = p\text{=} p=<p-cls> <p-Token-1> <p-Token-2> ....

2️⃣嵌入:词级嵌入,但重点关注 H [ 0 ] \mathbf{H}_{\mathbf{}}[0] H[0]

  1. 查询: q → Encoder H q q\xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}} qEncoder Hq,其中<q-cls> → Encoder H q [ 0 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}}[0] Encoder Hq[0]<q-Token-1> → Encoder H q [ 1 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}}[1] Encoder Hq[1]
  2. 文档: p → Encoder H p p\xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{p}} pEncoder Hp,其中<p-cls> → Encoder H p [ 0 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{p}}[0] Encoder Hp[0]<p-Token-1> → Encoder H p [ 1 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{p}}[1] Encoder Hp[1]

3️⃣归一化:为方便计算内积

  1. 查询:<q-cls> → Norm Encoder norm ( H q [ 0 ] ) \xrightarrow[\text{Norm}]{\text{Encoder}}\text{norm}\left(\mathbf{H}_q[0]\right) Encoder Normnorm(Hq[0]),作为 q q q的最终嵌入表示
  2. 文档:<p-cls> → Norm Encoder norm ( H p [ 0 ] ) \xrightarrow[\text{Norm}]{\text{Encoder}}\text{norm}\left(\mathbf{H}_p[0]\right) Encoder Normnorm(Hp[0]),作为 p p p的最终嵌入表示

4️⃣相似度: s dense ← 内积 ⟨ e p , e q ⟩ s_{\text{dense}} \xleftarrow{内积} \langle e_p, e_q \rangle sdense内积 ep,eq

2.1.1.2.   \textbf{2.1.1.2. } 2.1.1.2. 词汇(稀疏)检索

1️⃣分词:可以不保留<cls>标记

  1. 查询: q = q\text{=} q=<q-Token-1> <q-Token-2> <q-Token-3> ....
  2. 文档: p = p\text{=} p=<p-Token-1> <p-Token-2> <q-Token-3> ....

2️⃣嵌入:词级嵌入

  1. 查询: q → Encoder H q q\xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}} qEncoder Hq,其中<q-Token-1> → Encoder H q [ 1 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}}[1] Encoder Hq[1]<q-Token-2> → Encoder H q [ 2 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}}[2] Encoder Hq[2]
  2. 文档: p → Encoder H p p\xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{p}} pEncoder Hp,其中<p-Token-1> → Encoder H p [ 1 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{p}}[1] Encoder Hp[1]<q-Token-2> → Encoder H q [ 2 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}}[2] Encoder Hq[2]

3️⃣权值:将所有嵌入映射为 W l e x T H q [ i ] \mathbf{W}_{\mathrm{lex}}^T \mathbf{H}_q[i] WlexTHq[i]标量,注意 Token \text{Token} Token相同时取权值最大值

  1. 查询:<q-Token-i> → Encoder H q [ i ] → ReLU激活函数 W lex 权重矩阵 w q i =ReLU ( W l e x T H q [ i ] ) \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}}[i]\xrightarrow[\text{ReLU}激活函数]{\mathbf{W}_{\text{lex}}权重矩阵}w_{q_i}\text{=}\text{ReLU}\left(\mathbf{W}_{\mathrm{lex}}^T \mathbf{H}_q[i]\right) Encoder Hq[i]Wlex权重矩阵 ReLU激活函数wqi=ReLU(WlexTHq[i])
  2. 文档:<p-Token-i> → Encoder H p [ i ] → ReLU激活函数 W lex 权重矩阵 w p i =ReLU ( W l e x T H p [ i ] ) \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{p}}[i]\xrightarrow[\text{ReLU}激活函数]{\mathbf{W}_{\text{lex}}权重矩阵}w_{p_i}\text{=}\text{ReLU}\left(\mathbf{W}_{\mathrm{lex}}^T \mathbf{H}_p[i]\right) Encoder Hp[i]Wlex权重矩阵 ReLU激活函数wpi=ReLU(WlexTHp[i])

4️⃣得分:先过滤得查询 q / p q/p q/p共同 Token \text{Token} Token,再将相同 Token \text{Token} Token的权值相乘相加 s lex ← ∑ t ∈ q ∩ p ( w q t × w p t ) \displaystyle{}s_{\text {lex}} \text{←} \sum_{t \in q \cap p}\left(w_{q_t} \text{×} w_{p_t}\right) slextqp(wqt×wpt)

2.1.1.3.   \textbf{2.1.1.3. } 2.1.1.3. 多向量检索

1️⃣分词:可以不保留<cls>标记

  1. 查询: q = q\text{=} q=<q-Token-1> <q-Token-2> <q-Token-3> ....
  2. 文档: p = p\text{=} p=<p-Token-1> <p-Token-2> <q-Token-3> ....

2️⃣嵌入:词级嵌入

  1. 查询: q → Encoder H q q\xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}} qEncoder Hq,其中<q-Token-1> → Encoder H q [ 1 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}}[1] Encoder Hq[1]<q-Token-2> → Encoder H q [ 2 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}}[2] Encoder Hq[2]
  2. 文档: p → Encoder H p p\xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{p}} pEncoder Hp,其中<p-Token-1> → Encoder H p [ 1 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{p}}[1] Encoder Hp[1]<q-Token-2> → Encoder H q [ 2 ] \xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}}[2] Encoder Hq[2]

3️⃣嵌入后:投影到权值 + \text{+} +归一化

  1. 查询: q → Encoder H q → 权重 W m u l T ( W m u l T H q ) → 归一化 norm ( W m u l T H q ) q\xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{q}}\xrightarrow{权重\mathbf{W}_{\mathrm{mul}}^T}\left(\mathbf{W}_{\mathrm{mul}}^T \mathbf{H}_q\right)\xrightarrow{归一化}\text{norm}\left(\mathbf{W}_{\mathrm{mul}}^T \mathbf{H}_q\right) qEncoder Hq权重WmulT (WmulTHq)归一化 norm(WmulTHq)
  2. 文档: p → Encoder H p → 权重 W m u l T ( W m u l T H p ) → 归一化 norm ( W m u l T H p ) p\xrightarrow{\text{Encoder}}\mathbf{H}_{\mathbf{p}}\xrightarrow{权重\mathbf{W}_{\mathrm{mul}}^T}\left(\mathbf{W}_{\mathrm{mul}}^T \mathbf{H}_p\right)\xrightarrow{归一化}\text{norm}\left(\mathbf{W}_{\mathrm{mul}}^T \mathbf{H}_p\right) pEncoder Hp权重WmulT (WmulTHp)归一化 norm(WmulTHp)

4️⃣得分:就是 ColBERT \text{ColBERT} ColBERT的后期交互, s m u l  ← 1 N ∑ i = 1 N max ⁡ j = 1 M { E q [ i ] × E p T [ j ] } \displaystyle{}s_{m u l} \text{ ←} \frac{1}{N} \sum_{i=1}^N \max _{j=1}^M \left\{E_q[i] \text{×} E_p^T[j]\right\} smul ←N1i=1Nj=1maxM{Eq[i]×EpT[j]}

2.1.1.   \textbf{2.1.1. } 2.1.1. 三种检索方式的整合

1️⃣集成方法

  1. 分立:用三种不同的方法,分别单独就行检索,得到三个检索结果 s dense / s lex / s mul s_{\text {dense}}/s_{\text {lex}}/s_{\text {mul}} sdense/slex/smul
  2. 整合:最终得分 s rank ← w 1 s dense + w 2 s lex + w 3 s mul s_{\text {rank}} \leftarrow w_1 s_{\text {dense}}\text{+}w_2 s_{\text {lex}}\text{+}w_3 s_{\text {mul}} srankw1sdense+w2slex+w3smul,三个系数由不同下游场景确定

2️⃣集成表示: d y ← f n ∗ ( q x , D y ) d^y \leftarrow \mathrm{fn}^*\left(q^x, D^y\right) dyfn(qx,Dy)

参数含义
q x q^x qx由语言 x x x给出的查询 q q q
D y D^y Dy由语言 y y y组成的语料库 D D D
fn ∗ \text{fn}^* fn可以是密集检索 / / /词汇检索 / / /多向量检索中的任何一种函数,或者组合
d y d^y dy由语言 x x x给出的查询 q q q,在由语言 y y y组成的语料库 D D D中,采取 fn ∗ \text{fn}^* fn方式检索,所得的结果

2.2.   \textbf{2.2. } 2.2. 模型训练: 一种新的自蒸馏框架

2.2.1.   \textbf{2.2.1. } 2.2.1. 训练数据: 多样化的数据策划

1️⃣大规模预训练数据:源于无标签语料库的无监督数据,一般为简单清洗后的“标题-正文”结构文本

  1. 普通的:维基百科 /S2ORC/xP3/mC4/CC-News/MTP \text{/S2ORC/xP3/mC4/CC-News/MTP} /S2ORC/xP3/mC4/CC-News/MTP
  2. 特殊的:翻译数据集的平行句子 NLLB/CCMatrix \text{NLLB/CCMatrix} NLLB/CCMatrix,用于学习跨语言的统一嵌入

2️⃣中规模微调数据:源于有标签语料库的监督数据

语种来源
英文 HotpotQA/TriviaQA/NQ/MS MARCO....  \text{HotpotQA/TriviaQA/NQ/MS MARCO.... } HotpotQA/TriviaQA/NQ/MS MARCO.... 
中文 DuReader/mMARCO-ZH/T2-Ranking/CMedQAv2....  \text{DuReader/mMARCO-ZH/T2-Ranking/CMedQAv2.... } DuReader/mMARCO-ZH/T2-Ranking/CMedQAv2.... 
其它 Mr. TyDi/MIRACL \text{Mr. TyDi/MIRACL} Mr. TyDi/MIRACL

3️⃣小规模合成数据:本文额外生成的数据集,称之为 MultiLongDoc \text{MultiLongDoc} MultiLongDoc

  1. 来源:抽取长篇文章的随机段落 → \text{→} ChatGPT \text{ChatGPT} ChatGPT生成段落的对应问题 → \text{→} 将二者整合成文本对
  2. 目的:缓解长文档检索任务的不足

2.3.1.   \textbf{2.3.1. } 2.3.1. 损失函数: L final ← L + L ′ 2 \boldsymbol{\mathcal{L}_{\textbf {final}} \textbf{←} \cfrac{\mathcal{L}+\mathcal{L}^{\prime}}{2}} Lfinal2L+L

1️⃣基础损失函数 L \mathcal{L} L:基于集成学习原理,直接将不同模型的预测结果加权合并

  1. 原始损失: InfoNCE \text{InfoNCE} InfoNCE损失函数 L s ( ⋅ ) = − log ⁡ exp ⁡ ( s ( q , p ∗ ) τ ) ∑ p ∈ { p ∗ , P ′ } exp ⁡ ( s ( q , p ) τ ) \mathcal{L}_{s(\cdot)}=-\log \cfrac{\exp\left(\cfrac{s(q, p^*)}{\tau}\right)}{\displaystyle{}\sum_{p \in\{p^*, P^{\prime}\}} \exp\left(\cfrac{s(q, p)}{\tau}\right)} Ls()=logp{p,P}exp(τs(q,p))exp(τs(q,p))
    参数含义
    p ∗ p^* p查询 q q q的正样本,即与查询最相关的段落或文档
    P ′ P' P查询 q q q的负样本,包含与查询不相关的段落或文档
    s ( q , p ) s(q, p) s(q,p) s ( ⋅ ) s(\cdot) s()查询 q q q和段落 p p p之间的相似度得分,可以通过 s dense / s lex / s mul s_{\text{dense}}/s_{\text{lex}}/s_{\text{mul}} sdense/slex/smul任一个得到
    τ \tau τ温度参数,控制得分的平滑度
  2. L \mathcal{L} L的构成:
    • 得分的线性加权: s inter ← w 1 s dense + w 2 s lex + w 3 s mul s_{\text {inter}} \leftarrow w_1 s_{\text {dense}}\text{+}w_2 s_{\text {lex}}\text{+}w_3 s_{\text {mul}} sinterw1sdense+w2slex+w3smul
    • 损失的线性加权: L ← λ 1 L dense + λ 2 L lex + λ 3 L mul + L inter 4 \mathcal{L} \leftarrow \cfrac{\lambda_1 \mathcal{L}_{\text {dense}}\text{+}\lambda_2 \mathcal{L}_{\text {lex}}\text{+}\lambda_3 \mathcal{L}_{\text {mul}}\text{+}\mathcal{L}_{\text {inter}}}{4} L4λ1Ldense+λ2Llex+λ3Lmul+Linter
  3. 一些思考:
    • 问题:不同检索方法的训练目标相互冲突,对 L dense / L lex / L mul \mathcal{L}_{\text {dense}}/\mathcal{L}_{\text {lex}}/\mathcal{L}_{\text {mul}} Ldense/Llex/Lmul分别优化再加和行不通
    • 解决:通过对 s inter s_{\text{inter}} sinter进行蒸馏,以统一优化目标

2️⃣蒸馏损失 L ′ \mathcal{L}^{\prime} L:基于自蒸馏的框架

  1. 原始损失:一种改进的交叉熵
    损失损失公式
    L dense ′ \mathcal{L}_{\text{dense}}^{\prime} Ldense − ( Softmax ( s inter ) ) × log ⁡ ( Softmax ( s dense ) ) -\left(\text{Softmax}\left(s_{\text{inter}}\right)\right) \text{×} \log \left(\text{Softmax}\left(s_{\text{dense}}\right)\right) (Softmax(sinter))×log(Softmax(sdense))
    L lex ′ \mathcal{L}_{\text{lex}}^{\prime} Llex − ( Softmax ( s inter ) ) × log ⁡ ( Softmax ( s lex ) ) -\left(\text{Softmax}\left(s_{\text{inter}}\right)\right) \text{×} \log \left(\text{Softmax}\left(s_{\text{lex}}\right)\right) (Softmax(sinter))×log(Softmax(slex))
    L mul ′ \mathcal{L}_{\text{mul}}^{\prime} Lmul − ( Softmax ( s inter ) ) × log ⁡ ( Softmax ( s mul ) ) -\left(\text{Softmax}\left(s_{\text{inter}}\right)\right) \text{×} \log \left(\text{Softmax}\left(s_{\text{mul}}\right)\right) (Softmax(sinter))×log(Softmax(smul))
  2. 蒸馏框架:将综合得分 s inter s_{\text{inter}} sinter作为教师模型,每种方法的得分 s dense / s lex / s mul \mathcal{s}_{\text {dense}}/\mathcal{s}_{\text {lex}}/\mathcal{s}_{\text {mul}} sdense/slex/smul作为学生模型
  3. L ′ \mathcal{L}^{\prime} L的构成: L ′ ← λ 1 ⋅ L dense ′ + λ 2 ⋅ L lex ′ + λ 3 ⋅ L mul ′ 3 \mathcal{L}^{\prime} \leftarrow \cfrac{\lambda_1 \cdot \mathcal{L}_{\text {dense}}^{\prime}\text{+}\lambda_2 \cdot \mathcal{L}_{\text {lex}}^{\prime}\text{+}\lambda_3 \cdot \mathcal{L}_{\text {mul}}^{\prime}}{3} L3λ1Ldense+λ2Llex+λ3Lmul

2.3.2.   \textbf{2.3.2. } 2.3.2. 训练流程: 自我蒸馏的优化

image-20250105191622155image-20250105191656146

1️⃣第一阶段:无监督的预训练,让嵌入模型具备基本智能

  1. 预训练数据:收集的非监督数据
  2. 预训练模型:用 RetroMAE \text{RetroMAE} RetroMAE方法调整过的 XLM-RoBERTa \text{XLM-RoBERTa} XLM-RoBERTa模型
  3. 预训练流程:反复执行稠密检索 → \text{→} 根据检索结果通过对比学习调整参数,不断重复这一过程
    • 稠密检索:即预训练任务,在此处还不涉及其它检索方法
    • 对比学习:即预训练策略,通过区分正负样本对的相似度,学习嵌入的表示方法

2️⃣第二阶段:使用自知识蒸馏进行微调,嵌入模型被微调以建立三种检索功能

  1. 权重参数: w 1 = 1 , w 2 = 0.3 , w 3 = 1 , λ 1 = 1 , λ 2 = 0.1 , λ 3 = 1 w_1=1, w_2=0.3, w_3=1, \lambda_1=1, \lambda_2=0.1, \lambda_3=1 w1=1,w2=0.3,w3=1,λ1=1,λ2=0.1,λ3=1
    • 由于 W lex \mathbf{W}_{\text{lex}} Wlex是随机初始化的,所以一开始 s lex s_{\text{lex}} slex准确率很低,故有意降低其权重
  2. 微调数据:收集的标注数据 + \text{+} +合成数据
  3. 微调策略: ANCE \text{ANCE} ANCE方法,即通过 ANN \text{ANN} ANN加速寻找正负样本对

2.4.   \textbf{2.4. } 2.4. 训练优化: 高效批处理

1️⃣所面临的问题

  1. 一般模型的训练:一方面保持批足够大(含足够多批内负样本),另一方面对太长的输入直接截断
  2. BGE-M3 \text{BGE-M3} BGE-M3的训练:万万不可直接截断长输入,不然就丧失队长序列的学习能力

2️⃣解决方法:优化的批处理

image-2024874
  1. 分组:训练数据按序列长度分到不同小组(如图中 128/1024/4096... \text{128/1024/4096...} 128/1024/4096...)
  2. 采样:训练实例从同一组中抽取一部分作为训练的 Batch \text{Batch} Batch进入 GPU \text{GPU} GPU,这一过程有如下两种优化
    • 负载平衡:不同 GPU \text{GPU} GPU采样数据时都保持固定随机种子,使得抽到每批数据(句子)长短分布一致
      👉不固定随机种子:
         GPU1: 可能随机抽到很多长序列 -> 负载重(计算慢) -> 执行计算
         GPU2: 可能随机抽到很多短序列 -> 负载重(计算慢) -> 空闲等待
      
    • 填充优化:一批数据进入到 GPU \text{GPU} GPU仍需填充至最长,但由于分组 + + +平衡策略,实际填充数很低
  3. 拆分:对序列长度较长的 Batch \text{Batch} Batch(如图中右边的 4096/8192... \text{4096/8192...} 4096/8192...),再分割成子批
    • 流程(附录 B.3 \text{B.3} B.3):启用梯度检查点 → \text{→} 分子批 → \text{→} 逐个处理子批得到嵌入 → \text{→} 合并得到原始批的嵌入
  4. 广播: GPU \text{GPU} GPU会将自己的嵌入结果广播给其它 GPU \text{GPU} GPU,以扩大批内负样本
    广播前: 
      GPU1处理: [A1, A2, A3]
      GPU2处理: [B1, B2, B3]
    广播后:
      GPU1获得: [A1, A2, A3, B1, B2, B3]
      GPU2获得: [A1, A2, A3, B1, B2, B3]
    

3.   \textbf{3. } 3. 实验验证

3.1.   \textbf{3.1. } 3.1. 实验设置

1️⃣实验配置

  1. 数据集: MIRACL \text{MIRACL} MIRACL(包含 18 \text{18} 18种语言)
  2. 评估指标: nDCG@10 \text{nDCG@10} nDCG@10,其越高表明相关文档被排到了越靠前的位置

2️⃣检索实现

  1. 单独的:
    检索方式目的索引构建检索任务
    Dense \text{Dense} Dense生成语料库嵌入 Faiss \text{Faiss} Faiss检索 Top-1000 \text{Top-1000} Top-1000
    Sparse \text{Sparse} Sparse生成语料库权重 Lucene \text{Lucene} Lucene检索 Top-1000 \text{Top-1000} Top-1000
  2. 整合的:
    检索方式检索内容重排依据(任务 1&2 \textbf{1\&2} 1&2)重排依据(任务 3 \textbf{3} 3)
    D+S \text{D+S} D+S并合各自 Top-1000 \text{Top-1000} Top-1000 s dense + 0.3 s lex s_{\text {dense}}\text{+}0.3s_{\text {lex}} sdense+0.3slex 0.2 s dense + 0.8 s lex 0.2s_{\text {dense}}\text{+}0.8s_{\text {lex}} 0.2sdense+0.8slex
    Multi-vec \text{Multi-vec} Multi-vec Dense \text{Dense} Dense Top-200 \text{Top-200} Top-200 s mul s_{\text {mul}} smul s mul s_{\text {mul}} smul
    All \text{All} All Dense \text{Dense} Dense Top-200 \text{Top-200} Top-200 s dense + 0.3 s lex + s mul s_{\text {dense}}\text{+}0.3 s_{\text {lex}}\text{+}s_{\text {mul}} sdense+0.3slex+smul 0.15 s dense + 0.5 s lex + 0.35 s mul 0.15s_{\text {dense}}\text{+}0.5 s_{\text {lex}}\text{+}0.35s_{\text {mul}} 0.15sdense+0.5slex+0.35smul

3.2.   \textbf{3.2. } 3.2. 实验结果

3.2.1.   \textbf{3.2.1. } 3.2.1. 在不同任务上

1️⃣任务 1 1 1:多语言检索

  1. 基准:词汇检索( BM25 \text{BM25} BM25),密集检索( mDPR/mCont./mE5/E5-7b \text{mDPR/mCont./mE5/E5-7b} mDPR/mCont./mE5/E5-7b),其它( Text-Emb.-L3 \text{Text-Emb.-L3} Text-Emb.-L3)
  2. 结果: Dense \text{Dense} Dense(性能最优 + \text{+} +在语言以外语言提升更大), Sparse \text{Sparse} Sparse(碾压 BM25 \text{BM25} BM25), ALL \text{ALL} ALL(效果最佳)

2️⃣任务 2 2 2:跨语言检索

  1. 数据:采用 MKQA \text{MKQA} MKQA基准数据集,用非英语检索英文维基百科
  2. 结果: Dense \text{Dense} Dense就已超过基准,从 Dense+Sparse \text{Dense+Sparse} Dense+Sparse ALL \text{ALL} ALL性能进一步提升
    • Sparse \text{Sparse} Sparse的性能不行:源于 Spaese \text{Spaese} Spaese主要基于词分布,而跨语言背景下,共同词汇有限
    • 在小语种上表现优异:归功于广泛的无监督训练

3️⃣任务 3 3 3:长文档检索

  1. 数据: MLDR \text{MLDR} MLDR(多语言长文档), NarrativeQA \text{NarrativeQA} NarrativeQA(英语长文档), JinaEmbeddingv2 \text{JinaEmbeddingv2} JinaEmbeddingv2(额外基准)
  2. 结果:在 MLDR \text{MLDR} MLDR上, Sparse/MutiVec \text{Sparse/MutiVec} Sparse/MutiVec效果突出,但还是 ALL \text{ALL} ALL得分最高
  3. 消融:去除长文档的限制, Dense \text{Dense} Dense依旧超越很多基准

3.2.2.   \textbf{3.2.2. } 3.2.2. 消融实验

1️⃣实验 1 1 1:自我知识蒸馏的消融

  1. 消融方式:禁用自知识蒸馏,每种检索方式独立训练,然后再整合
  2. 实验结果:所有自蒸馏的 Dense/Sparse/MultiVec \text{Dense/Sparse/MultiVec} Dense/Sparse/MultiVec效果,都比消融整合模型好

2️⃣实验 2 2 2:多阶段训练的消融

  1. 消融方式:
    模型 XLM-RoBERTa \textbf{XLM-RoBERTa} XLM-RoBERTa模型 RetroMAE \textbf{RetroMAE} RetroMAE调整无监督数据预训练
    1 \text{1} 1
    2 \text{2} 2
    3 \text{3} 3
  2. 结果: RetroMAE \text{RetroMAE} RetroMAE显著提高了检索性能,无监督训练进一步提高了嵌入模型的质量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值