【论文阅读】BGE M3-Embedding:通过自知识蒸馏实现多语言、多功能、多粒度的文本嵌入

BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation

  • Abstract
  • [1 Introduction](#1 Introduction)
  • [2 Related Work](#2 Related Work)
  • [3 M3-Embedding](#3 M3-Embedding)
    • [3.1 Data Curation](#3.1 Data Curation)
    • [3.2 Hybrid Retrieval](#3.2 Hybrid Retrieval)
    • [3.3 Self-Knowledge Distillation](#3.3 Self-Knowledge Distillation)
    • [3.4 Efficient Batching](#3.4 Efficient Batching)
  • [4 Experiment](#4 Experiment)
    • [4.1 Multi-Lingual Retrieval](#4.1 Multi-Lingual Retrieval)
    • [4.2 Cross-Lingual Retrieval](#4.2 Cross-Lingual Retrieval)
    • [4.3 Multilingual Long-Doc Retrieval](#4.3 Multilingual Long-Doc Retrieval)
    • [4.4 Ablation study](#4.4 Ablation study)
  • [5 Conclusion](#5 Conclusion)

Abstract

在本文中,作者介绍了一种称为 M3-Embedding 的新嵌入模型,该模型因其在多语言多功能多粒度上的通用性而与众不同。它为 100 多种工作语言的语义检索提供统一支持。它可以同时完成三种常见的检索功能:密集检索、多向量检索和稀疏检索。此外,它还能够处理不同粒度的输入,从短句子到最多 8192 个token的长文档。 M3-Embedding 的有效训练呈现出一系列技术贡献。尤其,作者提出了一种新的自知识蒸馏方法,其中来自不同检索功能的相关性分数可以整合为teacher信号,以提升训练质量。作者还优化了批处理策略,可以实现大批量和高训练吞吐量,从而提高嵌入的辨别力。在作者的实验中,M3Embedding 展现了卓越的性能,在多语言、跨语言和长文档检索基准上取得了最新的结果。

1 Introduction

嵌入模型是一种自然语言处理领域深度神经网络应用的重要形式。它们在潜在空间中对文本数据进行编码,其中数据的底层语义可以通过输出嵌入来表达 (Reimers and Gurevych, 2019; Ni et al., 2022)。随着预训练语言模型的出现,文本嵌入的质量得到了显著提高,使它们成为信息检索 (IR) 系统的重要组件。基于嵌入的 IR 应用的一种常见形式是密集检索,可以根据嵌入相似度检索与查询相关的答案 (Karpukhin et al., 2020; Xiong et al., 2020; Neelakantan et al., 2022; Wang et al., 2022; Xiao et al., 2023)。此外,嵌入模型还可以应用于其他 IR 任务,例如多向量检索,根据多个嵌入的交互分数计算查询和文档之间的细粒度相关性 (Khattab and Zaharia, 2020),以及稀疏或词汇检索,通过其输出嵌入来估计每个词语的重要性 (Gao et al., 2021a; Lin and Ma, 2021; Dai and Callan, 2020)。

尽管文本嵌入得到了广泛的应用,但现有方法的通用性仍然有限。首先,大多数嵌入模型仅针对英语量身定制,为其他语言留下了很少的可行选择。其次,现有的嵌入模型通常针对一种检索功能进行训练。然而,典型的 IR 系统需要多种检索方法的复合工作流程。第三,由于训练成本过高,训练一个有竞争力的长文档检索器具有挑战性,大多数嵌入模型只能支持短输入。

为了解决上述挑战,作者引入了 M3-Embedding ,它以其在工作语言检索功能输入粒度方面的通用性突破而著称。特别地,M3-Embedding 精通多语言,能够支持100多种世界语言。通过学习不同语言的共同语义空间,可以实现每种语言内的多语言检索和不同语言之间的跨语言检索。此外,它能够生成多样化的嵌入来支持不同的检索功能,不仅是密集检索,还包括稀疏检索和多向量检索。最后,M3-Embedding 能够处理不同的输入粒度,从句子和段落等短输入到最多 8192 个输入token的长文档。

M3-Embedding 的训练面临着重大挑战。在作者的工作中,为优化嵌入质量做出了以下技术贡献。首先,作者提出了一种新的自知识蒸馏 框架,其中多种检索功能可以共同学习并相互加强。在M3-Embedding中,[CLS]嵌入用于密集检索,而来自其他token的嵌入用于稀疏检索和多向量检索。基于集成学习的原理 (B̈uhlmann, 2012),这些异构预测器可以结合为一个更强的预测器。因此,作者将不同检索功能的相关性分数整合为teacher信号,用于通过知识蒸馏来增强学习过程。其次,作者优化了批处理策略 以实现大批量和高训练吞吐量,这大大有助于提高嵌入的辨别力。最后重要一点是,作者进行了广泛且高质量的数据整理。作者的数据集包括三个来源:1) 从大规模多语言语料库中提取的无监督数据,2) 密切相关的监督数据的整合,3) 稀缺训练数据的合成。这三个数据源相互补充,应用于不同的训练阶段,为多功能文本嵌入奠定了坚实的基础。

在作者的实验中,M3-Embedding 展现了显著的通用性。它为各种语言实现了卓越的检索质量,从而在 MIRACL(Zhang et al., 2023c)和 MKQA (Longpre et al., 2021)等受欢迎的多语言和跨语言基准上实现了最先进的性能。它有效地学习了这三种检索功能,这些功能不仅可以单独使用,还可以结合在一起实现更强的检索质量。它还在 8192 个 token 的不同输入粒度上保持了优越的能力,这比现有的方法有明显的优势。

作者的贡献总结如下: 1) 作者提出了 M3-Embedding,它在多语言、多功能和多粒度方面达到了前所未有的通用性。 2) 作者提出了一种新的自知识蒸馏训练框架,并优化了批处理策略以实现高效训练。作者还基于全面的数据整理创建了高质量的训练资源。 3) 作者的模型、代码和数据均公开提供,为文本嵌入的直接使用和未来发展提供了重要资源。

相关工作从三个方面进行了回顾:一般文本嵌入、神经检索的嵌入模型和多语言嵌入。

在过去的几年里,文本嵌入领域取得了实质性进展。一个主要的推动力是预训练语言模型的普及,其中数据的底层语义可以通过如此强大的文本编码器进行有效编码(Reimers and Gurevych, 2019; Karpukhin et al., 2020; Ni et al., 2022)。另外,对比学习的进展是另一个关键因素,尤其负采样的改进(Xiong et al., 2020; Qu et al., 2021)和知识蒸馏的利用(Hofsta ̈tter et al., 2021; Ren et al., 2021; Zhang et al., 2021a)。在这些成熟技术的基础上,学习多功能的嵌入模型变得越来越流行,这些模型能够统一支持各种应用场景。到目前为止,该方向已经出现了许多有影响力的方法,如Contriever (Izacard et al., 2022)、 LLM-Embedder (Zhang et al., 2023a)、 E5 (Wang et al., 2022)、 BGE (Xiao et al., 2023)、 SGPT (Muennighoff, 2022)和 Open Text Embedding (Neelakantan et al., 2022),这些方法显著推动了文本嵌入在一般任务中的使用。

嵌入模型的一个主要应用是神经检索(Lin et al., 2022)。通过衡量文本嵌入的语义关系,可以使用嵌入相似度检索到与输入查询相关的答案。基于嵌入的检索方法最常见的形式是密集检索(Karpukhin et al., 2020),其中文本编码器的输出被聚合 (例如,通过 [CLS] 或均值池化)来计算嵌入相似度。另一种常见的替代方法被称为多向量检索(Khattab and Za haria, 2020; Humeau et al., 2020),它对文本编码器的输出应用细粒度交互来计算嵌入相似度。最后,文本嵌入还可以转换为词语权重,这有助于稀疏或词汇检索(Luan et al., 2021; Dai and Callan, 2020; Lin and Ma, 2021)。通常,以上检索方法是通过不同的嵌入模型实现的。据作者所知,目前还没有方法能够统一所有这些功能。

尽管技术上取得了巨大进步,但大多数现有的文本嵌入仅针对英语,其他语言的发展滞后。为了解决这个问题,已经从多个方向进行了持续的努力。一种是预训练多语言文本编码器的开发,例如 mBERT(Pires et al., 2019)、mT5 (Xue et al., 2021)、XLM-R (Conneau et al., 2020)。另一种是多语言文本嵌入的训练和评估数据的整理,例如 MIRACL (Zhang et al., 2023c)、mMARCO (Bonifacio et al., 2021)、Mr. TyDi (Zhang et al., 2021b) 、MKQA (Longpre et al., 2021)。与此同时,多语言文本嵌入也在不断地由社区开发,例如 mDPR (Zhang et al., 2023b)、mContriever (Izacard et al., 2022)、mE5 (Wang et al., 2022)等。然而,由于与英语模型之间存在显著差距以及不同语言之间的巨大不平衡,当前的进展仍然远远不够。

3 M3-Embedding

M3-Embedding 实现了三方面的多功能性。它支持多种语言,处理不同粒度的输入数据。此外,它统一了文本嵌入的常见检索功能。形式上,给定一个任意语言 x x x 的查询 q q q,它能够从语料库 D y D^{y} Dy 中检索出语言为 y y y 的文档 d d d: d y ← f n ∗ ( q x , D y ) d^{y} \gets fn^{∗}(q^x, D^y) dy←fn∗(qx,Dy)。其中, f n ∗ ( ⋅ ) fn^{∗}(⋅) fn∗(⋅)属于以下任一功能:密集检索、词汇检索或多向量检索; y y y 可以是另一种语言,也可以是与 x x x 相同的语言。

3.1 Data Curation

M3-Embedding 需要大规模且多样化的多语言数据集。在这项工作中,作者从三个来源进行全面的数据收集:来自未标记语料库的无监督数据、来自标记语料库的微调数据以及通过合成的微调数据 (如表 8 所示)。这三种数据源相互补充,并应用于训练过程的不同阶段。尤其,无监督数据 通过在各种多语言语料库中提取丰富的语义结构 (例如标题-正文、标题-摘要、指令-输出等)进行整理,这些语料库包括 Wikipedia、S2ORC (Lo et al., 2020)、xP3 (Muennighoff et al., 2023)、mC4 (Raffel et al., 2020)、CC-News (Hamborg et al., 2017)以及来自 MTP (Xiao et al., 2023)精心整理的数据。为了学习用于跨语言语义匹配的统一嵌入空间,从两个翻译数据集 NLLB (NLLB Team et al., 2022) 和 CCMatrix (Schwenk et al., 2021) 中引入平行句子。对原始数据进行过滤,以去除潜在的不良内容和低相关性样本。总计提供了 12 亿 个文本对,涵盖 194 种语言2655 个跨语言对应关系。

此外,作者还从标记语料库中收集了相对较小但多样化且高质量的微调数据 。对于英语,作者整合了 8 个数据集,包括 HotpotQA (Yang et al., 2018)、TriviaQA (Joshi et al., 2017)、NQ (Kwiatkowski et al., 2019)、MS MARCO (Nguyen et al., 2016)、 COLIEE(Kim et al., 2023)、PubMedQA(Jin et al., 2019)、SQuAD(Rajpurkar et al., 2016)和来自 SimCSE 的 NLI 数据(Gao et al., 2021b)。对于中文,作者整合了 7 个数据集,包括 DuReader (He et al., 2018)、mMARCO-ZH (Bonifacio et al., 2021)、T^2^-Ranking (Xie et al., 2023)、LawGPT(Liu et al., 2023)、CMedQAv2 (Zhang et al., 2018)、NLIzh 和 LeCaRDv2 (Li et al., 2023)。对于其他语言,作者利用了来自 Mr. Tydi (Zhang et al., 2021b) 和 MIRACL (Zhang et al., 2023c)的训练数据。

最后,为了缓解长文档检索任务的不足,作者生成了合成数据,并引入了额外的多语言微调数据 (表示为 MultiLongDoc)。具体来说,作者从 Wikipedia、Wudao (Yuan et al., 2021)和 mC4 数据集中抽取较长的文章,并从中随机选择段落。然后作者使用 GPT-3.5 基于这些段落生成问题。生成的问题和抽取的文章构成了新的文本对,用于微调数据。更多细节见附录 A.2。

3.2 Hybrid Retrieval

M3-Embedding 统一了嵌入模型的常见检索功能,即:密集检索、词汇 (稀疏)检索和多向量检索。其公式表示如下。

Dense Retrieval . 输入查询 q q q 通过文本编码器转换为隐藏状态 H q \mathbf{H_q} Hq。作者使用特殊 token "[CLS]" 归一化的隐藏状态来表示查询: e q = n o r m ( H q [ 0 ] ) e_q = norm(\mathbf{H_q}[0]) eq=norm(Hq[0])。类似地,作者可以得到段落 p p p 的嵌入 e p = n o r m ( H p [ 0 ] ) e_p = norm(\mathbf{H_p}[0]) ep=norm(Hp[0])。因此,查询与段落之间的相关性分数通过两个嵌入 e q e_q eq 和 e p e_p ep 之间的内积来衡量: s d e n s e ← ⟨ e p , e q ⟩ s_{dense} \gets ⟨e_p, e_q⟩ sdense←⟨ep,eq⟩。

Lexical Retrieval . 输出嵌入也用于估计每个词语的重要性,以促进词汇检索。对于查询中的每个词语 t t t (一个词语对应于作者工作中的一个 token),其权重计算为 w q t ← R e l u ( W l e x T H q [ i ] ) w_{q_t} \gets \mathsf{Relu} (\mathbf{W}^{T}{lex} \mathbf{H_q}[i]) wqt←Relu(WlexTHq[i]),其中 W l e x ∈ R d × 1 \mathbf{W}{lex} \in \mathcal{R}^{d\times 1} Wlex∈Rd×1 是将隐藏状态映射到浮点数的矩阵。如果词语 t t t 在查询中出现多次,作者仅保留其最大权重。作者使用相同的方法来计算段落中每个词语的权重。基于估计的词语权重,查询与段落之间的相关性分数通过它们共存词语(表示为 q ∩ p q \cap p q∩p)的联合重要性来计算: s l e x ← ∑ t ∈ q ∩ p ( w q t ∗ w p t ) s_{lex} \gets {\textstyle \sum_{t \in q \cap p}}(w_{q_t} \ast w_{p_t}) slex←∑t∈q∩p(wqt∗wpt)。

Multi-Vector Retrieval . 作为密集检索的扩展,多向量方法利用整个输出嵌入来表示查询和段落: E q = n o r m ( W m u l T H q ) E_q = norm(\mathbf{W}{mul}^{T}\mathbf{H_q}) Eq=norm(WmulTHq), E p = n o r m ( W m u l T H p ) E_p = norm(\mathbf{W}{mul}^{T}\mathbf{H_p}) Ep=norm(WmulTHp),其中 W m u l ∈ R d × d \mathbf{W}{mul} \in \mathbb{R}^{d \times d} Wmul∈Rd×d 是可学习的投影矩阵。沿用 ColBert (Khattab and Zaharia, 2020) 的方法,作者使用后期交互来计算细粒度的相关性分数: s m u l ← 1 N ∑ i = 1 N m a x j = 1 M E q [ i ] ⋅ E p T [ j ] s{mul} \gets \frac{1}{N} {\textstyle \sum_{i=1}^{N}}max_{j=1}^{M}E_q[i]\cdot E_p^{T}[j] smul←N1∑i=1Nmaxj=1MEq[i]⋅EpT[j],其中 N N N 和 M M M 分别是查询和段落的长度。

由于嵌入模型的多功能性,检索过程可以采用混合处理 。首先,候选结果可以通过每种方法单独检索 (由于多向量方法成本较高,此步骤可以省略)。然后,基于综合相关性分数对最终检索结果进行重新排序:
s r a n k ← w 1 ⋅ s d e n s e + w 2 ⋅ s l e x + w 3 ⋅ s m u l (1) s_{rank} \gets w_1 \cdot s_{dense} + w_2 \cdot s_{lex} + w_3 \cdot s_{mul} \tag{1} srank←w1⋅sdense+w2⋅slex+w3⋅smul(1)
其中, w 1 w_1 w1、 w 2 w_2 w2 和 w 3 w_3 w3 的值取决于下游场景。

3.3 Self-Knowledge Distillation

嵌入模型的训练目的是区分正样本与负样本。对于每种检索方法,期望为查询的正样本分配比负样本更高的分数。因此,训练过程是为了最小化 InfoNCE 损失,其一般形式由以下损失函数表示:

L s ( ⋅ ) = − l o g e x p ( s ( q , p ∗ ) / τ ) ∑ p ∈ { p ∗ , P ′ } e x p ( s ( q , p ) / τ ) (2) \mathcal{L}{s(\cdot)} = -log\frac{exp(s(q,p^*)/\tau )}{ {\textstyle \sum{p \in \{p^*,P'\}}} exp(s(q,p)/\tau)}\tag{2} Ls(⋅)=−log∑p∈{p∗,P′}exp(s(q,p)/τ)exp(s(q,p∗)/τ)(2)

其中, p ∗ p^* p∗ 和 P ′ P' P′ 分别表示查询 q q q 的正样本和负样本; s ( ⋅ ) s(\cdot) s(⋅) 是 { s d e n s e ( ⋅ ) 、 s l e x ( ⋅ ) 、 s m u l ( ⋅ ) } \{s_{dense}(\cdot)、s_{lex}(\cdot)、s_{mul}(\cdot)\} {sdense(⋅)、slex(⋅)、smul(⋅)} 中的任意一个函数。

不同检索方法的训练目标可能相互冲突。因此,原生的多目标训练可能不利于嵌入的质量。为了促进多种检索功能的优化,作者提出了在自知识蒸馏的基础上统一训练过程。尤其,基于集成学习的原理 (B̈uhlmann, 2012),考虑到不同检索方法的异构性,可以将其预测集成为更准确的相关性分数。最简单的形式是将不同预测分数的加权和作为集成方式:

s i n t e r ← w 1 ⋅ s d e n s e + w 2 ⋅ s l e x + w 3 ⋅ s m u l (3) s_{inter} \gets w_1 \cdot s_{dense} + w_2 \cdot s_{lex} + w_3 \cdot s_{mul}\tag{3} sinter←w1⋅sdense+w2⋅slex+w3⋅smul(3)

然后作者计算 L d e n s e \mathcal{L}{dense} Ldense、 L l e x \mathcal{L}{lex} Llex、 L m u l \mathcal{L}{mul} Lmul 和 L i n t e r \mathcal{L}{inter} Linter 的加权和作为没有自知识蒸馏的损失:

L ← ( λ 1 ⋅ L d e n s e + λ 2 ⋅ L l e x + λ 3 ⋅ L m u l + L i n t e r ) / 4 (4) \mathcal{L} \gets (\lambda_1 \cdot \mathcal{L}{dense} + \lambda_2 \cdot \mathcal{L}{lex} + \lambda_3 \cdot \mathcal{L}{mul} + \mathcal{L}{inter})/4\tag{4} L←(λ1⋅Ldense+λ2⋅Llex+λ3⋅Lmul+Linter)/4(4)

在以前的研究中,嵌入模型的训练质量可以受益于知识蒸馏,知识蒸馏充分利用了另一个排名模型的细粒度软标签 (Hofst ̈atter et al., 2021)。在这里,作者简单地使用集成分数 s i n t e r s_{inter} sinter 作为 teacher,其中每种检索方法的损失函数修改为:

L ′ ∗ ← − p ( s i n t e r ) ∗ log ⁡ p ( s ∗ ) (5) \mathcal{L'}{*} \gets -p(s{inter}) \ast \log_{}{p(s_{*})}\tag{5} L′∗←−p(sinter)∗logp(s∗)(5)

其中, p ( ⋅ ) p(\cdot) p(⋅)是 softmax 激活函数; s ∗ s_{*} s∗ 是 s d e n s e s_{dense} sdense、 s l e x s_{lex} slex 和 s m u l s_{mul} smul 中的任何一个。作者进一步对修改后的损失函数进行整合和归一化:

L ′ ← ( λ 1 ⋅ L ′ d e n s e + λ 2 ⋅ L ′ l e x + λ 3 ⋅ L ′ m u l ) / 3 (6) \mathcal{L'} \gets (\lambda_1 \cdot \mathcal{L'}{dense} + \lambda_2 \cdot \mathcal{L'}{lex} + \lambda_3 \cdot \mathcal{L'}_{mul})/3\tag{6} L′←(λ1⋅L′dense+λ2⋅L′lex+λ3⋅L′mul)/3(6)

最后,作者通过 L \mathcal{L} L 和 L ′ \mathcal{L'} L′ 的线性组合推导出自知识蒸馏的最终损失函数: L f i n a l ← ( L + L ′ ) / 2 \mathcal{L}_{final} \gets (\mathcal{L} + \mathcal{L'})/2 Lfinal←(L+L′)/2。

训练过程包括多个阶段的工作流程 (见图2)。首先,文本编码器 (由 RetroMAE (Xiao et al., 2022)方法适配的 XLM-RoBERTa(Conneau et al., 2020)模型)在大规模无监督数据上进行预训练,其中只有密集检索以对比学习的基本形式进行训练。第二阶段应用了自知识蒸馏,其中嵌入模型被微调以建立三种检索功能。 W l e x \mathbf{W}{lex} Wlex的随机初始化导致训练开始时 s l e x s{lex} slex精度较差而 L l e x \mathcal{L}_{lex} Llex较高。为了减少这种影响,作者在训练过程中设置 w 1 = 1 w_1 = 1 w1=1, w 2 = 0.3 w_2 = 0.3 w2=0.3, w 3 = 1 w_3 = 1 w3=1, λ 1 = 1 \lambda_1 = 1 λ1=1, λ 2 = 0.1 \lambda_2 = 0.1 λ2=0.1和 λ 3 = 1 \lambda_3 = 1 λ3=1。在这个阶段同时使用了标记数据和合成数据,其中按照 ANCE 方法为每个查询引入硬负样本(Xiong et al., 2020)。 (更多细节见附录B.1)

3.4 Efficient Batching

嵌入模型需要从多样化、大量的多语言数据中学习,以充分捕获不同语言的通用语义。它还需要保持尽可能大的批量大小 (引入大量的批内负样本)以确保文本嵌入的区分性。由于 GPU 内存和计算能力有限,人们通常将输入数据截断为短序列,以实现高吞吐量的训练和更大批量。然而,对于 M3-Embedding 来说,这种常见的做法并不是一个可行的选择,因为它需要从短序列和长序列数据中学习以有效处理不同粒度的输入。在作者的工作中,作者通过优化批处理策略来提高训练效率,从而实现高训练吞吐量和大批量。

特别地,对训练数据进行按序列长度分组的预处理。在生成小批量时,训练实例是从同一组中采样的。由于序列长度相似,它显著减少了序列填充 (见图3,红色标记),并促进了GPU的更有效利用。此外,在对不同GPU的训练数据进行采样时,随机种子始终是固定的,这保证了负载平衡并最小化每个训练步骤的等待时间。此外,在处理长序列训练数据时,小批量会进一步划分为子批量,从而占用更少的内存。作者使用梯度检查点对每个子批次进行迭代编码 (Chen et al., 2016)并收集所有生成的嵌入。这种方法可以显著增加批量大小。例如,当处理长度为8192的文本时,批量大小可以增加20倍以上(更多细节见附录B.3)。最后,将来自不同GPU的嵌入进行广播,允许每个设备在分布式环境中获取所有嵌入,从而显著扩展了内存中的负样本规模。

对于计算量或数据资源严重受限的用户,作者提出了一种更简单的方法,称为 MCLS (Multi-CLS),该方法只需在推理过程中将多个 CLS 标记插入到长文档中,并将所有 CLS 嵌入的平均值作为文档的最终嵌入。尽管方法简单,但在实践中却出奇地有效 (更多细节见附录 B.2)。

4 Experiment

在本节中,作者将探讨 M3-Embedding 在多语言检索、跨语言检索和长文档检索方面的性能。作者还探讨了其技术因素的影响。

4.1 Multi-Lingual Retrieval

作者使用 MIRACL (Zhang et al., 2023c) 评估多语言检索性能,MIRACL包含 18 种语言的即时检索任务。每个任务都由同一语言表示的查询和段落组成。按照官方基准,作者使用 Pyserini(Lin et al., 2021)评估作者的方法,并使用 nDCG@10 作为主要评估指标 (Recall@100 也可以评估和报告,在附录 C.1 中)。具体来说,对于密集方法 (表示为 ++Dense++ ),作者首先使用它来生成语料库的嵌入,然后使用 Faiss 构建密集索引,以搜索前 1000 个候选。对于稀疏方法 (表示为 ++Sparse++ ),作者首先使用它来生成语料库的权重,然后使用 Lucene 构建稀疏索引,以搜索前 1000 个候选。对于多向量方法 (表示为 ++Multi-vec++ ),考虑到其高成本,作者使用它作为重排序器对密集方法中的前200个候选进行重排序。对于密集方法和稀疏方法的混合检索 (表示为 ++Dense+Sparse++ ),作者在等式 (1)中设置 w 1 = 1 w_1 = 1 w1=1, w 2 = 0.3 w_2 = 0.3 w2=0.3 和 w 3 = 0 w_3 = 0 w3=0,以对 Dense 中前 1000 个候选和 Sparse 中前 1000 个候选的并集进行重排序。对于所有三种方法的混合检索 (表示为 ++All++ ),作者在等式 (1)中设置 w 1 = 1 w_1 = 1 w1=1、 w 2 = 0.3 w_2 = 0.3 w2=0.3 和 w 3 = 1 w_3 = 1 w3=1,以对 Dense 中的前 200 个候选进行重排序。

作者在实验中纳入了以下基准方法:词汇检索方法:BM25 (Robertson and Zaragoza, 2009);密集检索方法:mDPR (Zhang et al., 2023b)、mContriever (Izacard et al., 2022)、mE5~large~ (Wang et al., 2022) 和 E5~mistral-7b~ (Wang et al., 2023)。为了使 BM25 和 M3 更具可比性,在实验中,作者对 BM25 使用与 M3 相同的分词器 (即 XLM-Roberta 的分词器)。使用与 XLM-Roberta 中的相同词汇表还可以确保两种方法具有相同的检索延迟。 BM25 使用不同分词器的结果如附录 C.2 所示。作者还与 OpenAI 最近发布的 Text-Embedding-3-Large (简称 OpenAI-3)进行了比较。

根据表 1 的实验结果,作者得出以下结论:首先,M3Embedding 仅凭借其密集检索功能 (Dense)就已经达到了优越的检索性能。它不仅在平均性能上优于其他基线方法,而且在大多数个别语言的测试中保持了一致的经验优势。即使与 E5~mistral-7b~ (它利用更大的 Mistral-7B 模型作为文本编码器并使用英语数据进行专门训练)相比,作者的方法也能够在英语中产生类似的结果,在其他语言中产生明显更高的结果。此外,稀疏检索功能 (Sparse)也通过 M3-Embedding 进行了有效的训练,正如它在所有语言中都优于典型的 BM25 方法。作者还观察到多向量检索的额外改进,它依赖于查询和段落嵌入之间的细粒度交互来计算相关性分数。最后,密集和稀疏方法 (Dense+Sparse)的结合导致了每个单独方法的进一步改进,并且所有三种方法 (All) 的结合带来了最佳性能。

4.2 Cross-Lingual Retrieval

作者使用 MKQA 基准 (Longpre et al., 2021)对跨语言检索性能进行评估,其中包括 25 种非英语语言的查询。对于每个查询,它需要从英语 Wikipedia 语料库中检索包含答案的段落。在作者的实验中,作者利用了 BEIR 提供的经过良好处理的语料库(Thakur et al., 2021)。遵循以前的研究(Izacard et al., 2022),作者以 Recall@100 作为主要指标 (在附录 C.1 中Recall@20 作为辅助指标)。对于 Dense+Sparse 方法和 All 方法,作者设置与 MIRACL 数据集中相同的权重。

实验结果如表 2 所示。与作者在多语言检索中的观察类似,M3-Embedding 继续产生优越的性能,其仅使用密集检索功能 (Dense)便显著超越了其他基准方法。不同检索方法的结合带来了进一步的改进,从而实现了跨语言检索的最佳实证性能。此外,作者还可以观察到一些在此基准中独特的有趣结果。首先,性能差距不像 MIRACL 那么明显,像 E5~mistral-7b~ 这样的竞争基准能够在某些测试语言上产生类似甚至更好的结果。然而,这些基准在许多其他语言,尤其是资源稀缺的语言 (如阿拉伯语、柬埔寨语、希伯来语等)上表现较差。相比之下,M3-Embedding 在所有语言中都保持相对稳定的性能,这在很大程度上归功于其在全面的无监督数据上进行的预训练。其次,尽管 M3-Embedding (Sparse)仍优于 BM25,但与其他方法相比表现较差。这是因为在跨语言检索中,查询和段落以不同语言表示,共存的词语非常有限。

4.3 Multilingual Long-Doc Retrieval

作者使用两个基准评估长序列的检索性能:MLDR (多语言长文档检索),该基准由来自 Wikipedia、Wudao 和 mC4 的多语言文章编制 (见表 7),以及 NarrativeQA (Kocˇisky ́ et al., 2018; G ̈unther et al., 2023),该基准仅适用于英语。除了之前的基线外,作者还引入了 JinaEmbeddingv2 (G̈unther et al., 2023)、OpenAI 的 text-embedding-ada-002 和 text-embedding-3-large,因为它们具有出色的长文档检索能力。对于 Dense+Sparse 方法,作者在等式 (1)中设置 w 1 = 0.2 w_1 = 0.2 w1=0.2, w 2 = 0.8 w_2 = 0.8 w2=0.8 和 w 3 = 0 w_3 = 0 w3=0。对于 All 方法,作者在等式(1)中设置 w 1 = 0.15 w_1 = 0.15 w1=0.15, w 2 = 0.5 w_2 = 0.5 w2=0.5 和 w 3 = 0.35 w_3 = 0.35 w3=0.35。

MLDR 的评估结果如表 3 所示。有趣的是,M3 (Sparse)被证明是一种更有效的长文档检索方法,比密集检索方法提高了约10个点。此外,多向量检索也令人印象深刻,比 M3 (Dense)提高了5.1+个点。最后,不同检索方法的结合导致了 65.0 的显著平均性能。

为了探究 M3-Embedding 在长文档检索方面具有竞争力的原因,作者通过从微调阶段删除长文档数据 (表示为 w.o. long)来进行消融研究。经过这一修改,密集方法 (即Dense-w.o.long)仍然可以优于大多数基线,这表明其经验优势在预训练阶段已经建立。作者还提出了一种简单的策略 MCLS 来解决这种情况 (即没有数据或没有 GPU 资源用于文档检索微调)。实验结果表明,MCLS 无需训练就可以显著提高文档检索的性能 ( 41.2 → 45.0 41.2 \to 45.0 41.2→45.0)。

作者使用 NarrativeQA 进行进一步分析 (见表 4),进行与 MLDR 类似的观察。另外,随着序列长度的增长,作者的方法逐渐扩大其相对于基线方法的优势 (见图5),这反映了其在处理长输入方面的高效性。

4.4 Ablation study

Self-knowledge distillation. 进行消融研究是为了分析自知识蒸馏 (skd)的影响。尤其,作者禁用蒸馏处理并独立训练每种检索方法 (表示为 M3-w.o.skd)。根据作者对 MIRACL 的评估 (见表 5),原始方法 (即 M3-w.skd)在所有设置下 (即密集、稀疏、多向量)都能比消融方法取得更好的性能。值得注意的是,这种影响在稀疏检索中更为明显。这一结果也反映了密集检索方法和稀疏检索方法之间的不兼容。有了skd,就可以很大程度上克服不兼容的问题。 (更详细的结果参见附录 C.1)

Impact of multi-stage training . 作者还探索了不同训练阶段对性能的影响。 Fine-tuning 指的是直接从 XLM-RoBERTA(Conneau et al., 2020) 进行微调; RetroMAE+Fine-tuning 指的是在通过 RetroMAE (Xiao et al., 2022) 预训练的模型上进行微调。同时,RetroMAE+Unsup+Finetuning 在经过 RetroMAE 训练并在无监督数据上进一步预训练的模型上进行微调。结果如表 6 所示。作者可以观察到RetroMAE 可以显着提高检索性能,并且对无监督数据进行预训练可以进一步提高嵌入模型的检索质量。 (更详细的结果参见附录 C.1)

5 Conclusion

在本文中,作者介绍了 M3-Embedding,它在支持多语言检索、处理不同粒度的输入以及统一不同的检索功能方面显著提高了文本嵌入的多功能性。 M3Embedding 提出了三项技术贡献:自知识蒸馏、高效批处理和高质量数据整理。验证实验表明,M3-Embedding 在多语言检索、跨语言检索和多语言长文档检索任务上具有优异的性能。

论文链接:https://arxiv.org/abs/2402.03216

参考资料:

  1. https://github.com/FlagOpen/FlagEmbedding
  2. https://huggingface.co/datasets/shibing624/nli-zh-all
  3. https://huggingface.co/facebook/mcontriever-msmarco
  4. https://platform.openai.com/docs/guides/embeddings
  5. https://platform.openai.com/docs/guides/embeddings
  6. https://huggingface.co/datasets/BeIR/nq
  7. https://www.aclweb.org/portal/content/acl-code-ethics
  8. https://huggingface.co/FacebookAI/xlm-roberta-large
  9. https://github.com/apache/lucene/tree/main/lucene/analysis/common/src/java/org/apache/lucene/analysis
相关推荐
这个男人是小帅14 分钟前
【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本
人工智能·pytorch·python·深度学习·分类
落叶阳光15 分钟前
常见混淆概念理清:从搜索引擎和检索引擎的区别说起
查询·搜索·检索·混淆概念
__基本操作__16 分钟前
边缘提取函数 [OPENCV--2]
人工智能·opencv·计算机视觉
Doctor老王20 分钟前
TR3:Pytorch复现Transformer
人工智能·pytorch·transformer
热爱生活的五柒21 分钟前
pytorch中数据和模型都要部署在cuda上面
人工智能·pytorch·深度学习
HyperAI超神经2 小时前
【TVM 教程】使用 Tensorize 来利用硬件内联函数
人工智能·深度学习·自然语言处理·tvm·计算机技术·编程开发·编译框架
扫地的小何尚4 小时前
NVIDIA RTX 系统上使用 llama.cpp 加速 LLM
人工智能·aigc·llama·gpu·nvidia·cuda·英伟达
埃菲尔铁塔_CV算法6 小时前
深度学习神经网络创新点方向
人工智能·深度学习·神经网络
艾思科蓝-何老师【H8053】7 小时前
【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)
人工智能·信号处理·论文发表·香港中文大学
weixin_452600697 小时前
《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》
人工智能·科技·单片机·嵌入式硬件·新能源充电桩·智能充电枪