文献分享: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 (\cfrac{s(q, p^*)}{\tau})}{\displaystyle{}\sum_{p \in\{p^*, P^{\prime}\}} \exp (\cfrac{s(q, p)}{\tau})} 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显著提高了检索性能,无监督训练进一步提高了嵌入模型的质量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毛泽东思想概论

马克思主义中国化时代化的内涵&#xff1f; 马克思主义中国化时代化的科学内涵集中体现为三个“就是”&#xff1a;①解决中国问题&#xff1a;就是运用马克思主义的立场、观点、方法&#xff0c;观察时代、把握时代、引领时代&#xff0c;解决中国革命、建设、改革中的实际问…

Hadoop•FinalShell连接VMware免密登录

听说这是目录哦 FinalShell连接VMware&#x1f324;️解决重连失效FinalShell的使用 免密登录⛈️能量站&#x1f61a; FinalShell连接VMware&#x1f324;️ 保持虚拟机的开机状态&#xff0c;打开FinalShell&#xff0c;如果虚拟机关机或者挂起&#xff0c;连接就会断开。 …

一个在ios当中采用ObjectC和opencv来显示图片的实例

前言 在ios中采用ObjectC编程利用opencv来显示一张图片&#xff0c;并简单绘图。听上去似乎不难&#xff0c;但是实际操作下来&#xff0c;却不是非常的容易的。本文较为详细的描述了这个过程&#xff0c;供后续参考。 一、创建ios工程 1.1、选择ios工程类型 1.2、选择接口模…

《Rust权威指南》学习笔记(五)

高级特性 1.在Rust中&#xff0c;unsafe是一种允许绕过Rust的安全性保证的机制&#xff0c;用于执行一些Rust默认情况下不允许的操作。unsafe存在的原因是&#xff1a;unsafe 允许执行某些可能被 Rust 的安全性检查阻止的操作&#xff0c;从而可以进行性能优化&#xff0c;如手…

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现

目录 1 三种多头编码&#xff08;MHE&#xff09;实现1.1 多头乘积&#xff08;MHP&#xff09;1.2 多头级联&#xff08;MHC&#xff09;1.3 多头采样&#xff08;MHS&#xff09;1.4 标签分解策略 论文&#xff1a;Multi-Head Encoding for Extreme Label Classification 作者…

行为模式1.模板方法模式

行为型模式 模板方法模式&#xff08;Template Method Pattern&#xff09;命令模式&#xff08;Command Pattern&#xff09;迭代器模式&#xff08;Iterator Pattern&#xff09;观察者模式&#xff08;Observer Pattern&#xff09;中介者模式&#xff08;Mediator Pattern…

PHP语言的计算机基础

计算机基础与PHP语言入门 在当今信息技术高速发展的时代&#xff0c;计算机已经成为我们日常生活中不可或缺的重要工具。学习计算机基础知识&#xff0c;不仅能增强我们对信息技术的理解&#xff0c;还会为我们后续学习编程语言打下良好的基础。本文将以PHP语言为切入点&#…

docker中使用Dockerfile设置Volume挂载点

关于在docker中如何使用Volume&#xff0c;可以参考文章&#xff1a; docker中使用Volume完成数据共享-CSDN博客 如果想在生成docker镜像的时候设置好挂载点&#xff0c;而不是在运行镜像生成容器时生成。 下面以自建一个tomcat镜像为例&#xff0c;演示如何在生成镜像时设置…

在Mac电脑上搭建Gradle

1. 检查是否已安装Homebrew 打开终端&#xff0c;输入以下命令检查Homebrew是否已安装&#xff1a; brew -v如果显示版本号&#xff0c;则表示已安装。如果未安装&#xff0c;请运行以下命令安装Homebrew&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubus…

springboot548二手物品交易boot代码(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统二手物品交易信息管理难度大&#xff0c;容错率低&#x…

仿生的群体智能算法总结之三(十种)

群体智能算法是一类通过模拟自然界中的群体行为来解决复杂优化问题的方法。以下是30种常见的群体智能算法,本文汇总第21-30种。接上文 : 编号 算法名称(英文) 算法名称(中文) 年份 作者 1 Ant Colony Optimization (ACO) 蚁群优化算法 1991 Marco Dorigo 2 Particle Swar…

通往O1开源之路

“Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective”由复旦大学和上海人工智能实验室的研究者撰写。该论文从强化学习视角出发&#xff0c;深入分析了实现类似OpenAI o1模型性能的路线图&#xff0c;聚焦于策略初始化、奖…

AF3 AtomAttentionEncoder类的init_pair_repr方法解读

AlphaFold3 的 AtomAttentionEncoder 类中,init_pair_repr 方法方法负责为原子之间的关系计算成对表示(pair representation),这是原子转变器(atom transformer)模型的关键组成部分,直接影响对蛋白质/分子相互作用的建模。 init_pair_repr源代码: def init_pair_repr(…

DS复习提纲模版

数组的插入删除 int SeqList::list_insert(int i, int item) { //插入if (i < 1 || i > size 1 || size > maxsize) {return 0; // Invalid index or list is full}for (int j size-1; j > i-1; j--) { // Shift elements to the rightlist[j1] list[j];}li…

SD下载、安装、使用、卸载-Stable Diffusion整合包v4.10发布!

目录 前言概述 SD安装1、安装软件2、启动3、配置4、运行5、测试 导入SD模型【决定画风】常用模型下载安装模型 SD卸载SD文生图提示词提示词使用技巧提示词的高级使用技巧强调关键词 前言 我向来不喜欢搞一些没有用的概念&#xff0c;所以直接整理可能用到的东西。 sd简单的说…

C# _ 数字分隔符的使用

总目录 一、数字分隔符是什么&#xff1f; _ 用作数字分隔符。可以将数字分隔符用于所有类型&#xff08;二进制&#xff0c;十进制&#xff0c;十六进制&#xff09;的数字文本。数字分隔符 _ 在编译时是被编译器忽略的&#xff0c;因此在语义上对数字结果没有任何影响。 二…

工程师了解的Lua语言

1、关于lua语言 lua语言是用于嵌入式领域当中的一门脚本语言&#xff0c;其实在大学期间&#xff0c;我也没有接触过这门语言&#xff0c;但是在未来的发展之路当中&#xff0c;需要用到这门语言&#xff0c;所以在我的知识库当中添加这门语言知识是必要而且重要的&#xff0c;…

Mac iTerm2集成DeepSeek AI

1. 去deepseek官网申请api key&#xff0c;DeepSeek 2. 安装iTerm2 AI Plugin插件&#xff0c;https://iterm2.com/ai-plugin.html&#xff0c;插件解压后直接放到和iTerms相同的位置&#xff0c;默认就在/Applications 下 3. 配置iTerm2 4. 重启iTerm2,使用快捷键呼出AI对话…

1.2.1 归并排序

归并排序原理 1&#xff09; 整体就是一个简单递归&#xff0c; 左边排好序、 右边排好序、 让其整体有序 2&#xff09; 让其整体有序的过程里用了外排序方法 3&#xff09; 利用master公式来求解时间复杂度 4&#xff09; 归并排序的实质 时间复杂度O(N*logN)&#xff0c;额…

MySQL数据库笔记——多版本并发控制MVCC

大家好&#xff0c;这里是Good Note&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;本文详细介绍MySQL的并发控制&#xff1a;多版本并发控制MVCC。 文章目录 背景介绍数据库并发控制——锁机制悲观锁和乐观锁悲观锁乐观锁 数据库并发控制——MVCC 的引入MVCC 和锁机…