论文名:BGE M3-Embedding: Multi-Lingual, Multi-Functionality,
Multi-Granularity Text Embeddings Through Self-Knowledge Distillation
Abstract
本文提出了一种新的嵌入模型,称为M3嵌入,以其在多语言、多功能和多粒度方面的多功能性而著称。它可以支持100多种工作语言,在多语言和跨语言检索任务中具有最先进的性能。它可以同时执行嵌入模型的三种常见检索功能:密集检索、多向量检索和稀疏检索,为真实世界的IR应用提供了统一的模型基础。它能够处理不同粒度的输入,从短句到多达8192个token的长文档。M3-Embedding的有效训练包括以下技术贡献。我们提出了一种新的自我知识提取方法,其中来自不同检索功能的相关性得分可以被整合为教师信号,以提高训练质量。我们还优化了批处理策略,实现了大批量和高训练吞吐量,以确保嵌入的区分度。据我们所知,M3-Embedding是第一个实现如此强大的通用性的嵌入模型。
1. Introduction
嵌入模型是DNN在自然语言处理中应用的一种关键形式。他们对潜在空间中的文本数据进行编码,在潜在空间中,数据的底层语义可以通过输出嵌入来表达。随着预训练语言模型的出现,文本嵌入的质量得到了显著提高,使其成为信息检索(IR)的必要组成部分。基于嵌入的IR的一种常见形式是密集检索,可以基于嵌入的相似性来检索查询的相关答案。除此之外,嵌入模型还可以应用于其他IR任务,例如多向量检索,其中基于多个嵌入的交互得分来计算query和doc之间的细粒度相关性,以及稀疏或词汇检索,其中每一项的重要性通过其输出嵌入来估计。
尽管文本嵌入已经广泛流行,但是现在的方法在多功能性方面仍然有限。首先,大多数嵌入模型仅针对英语量身定制,几乎没有为其他语言留下可行的选择。其次,现有的嵌入模型通常针对单一的检索功能进行训练。然而,典型的IR系统是需要多种检索方法的复合工作流。第三,由于巨大的训练成本,训练具有竞争力的长文档检索器有一定难度,大多数嵌入模型只能支持短文本输入。
为了解决上述问题,我们引入了M3-Embedding,以其在工作语言、检索功能和输入粒度方面的多功能性上的突破而闻名。特别是M3 Embedding精通多语言,能够支持100多种世界语言。通过学习不同语言的共同语义空间,可以实现每种语言内的多语言检索和不同语言之间的跨语言检索。此外,它能够生成多功能嵌入,以支持不同的检索功能,不仅是密集检索,还包括稀疏检索和多向量检索。最后,M3-Embedding还学会了处理不同粒度的输入,包含了从句子到段落,最多能处理长达8192个token的长文档。
这种多功能性对embedding模型的有效训练提出了巨大挑战。在我们的工作中,为优化训练质量做出了以下技术贡献。首先,我们提出了一种新的自知识提取(self-knowledge distillation)框架,其中多种检索功能可以联合学习并相互增强。在M3-Embedding中,[CLS]的embedding被用于进行稠密检索,其他token的embeddings被用于稀疏检索和多向量检索。基于集成学习(ensemble learning)的原则,可以将这种异构预测器组合为更强的预测器。因此,我们将来自不同检索函数的相关性得分整合为教师信号(teacher signal),用于通过知识提取来增强学习过程。其次,我们优化了批处理策略,以实现大批量和高训练吞吐量,这在很大程度上有助于嵌入的区分性。最后,我们执行全面和高质量的数据管理。我们的数据由三个来源组成:1)从海量多语言语料库中提取无监督数据,2) 密切相关的监督数据的集成, 3)稀缺训练数据的合成。这三种数据源相互补充,并应用于训练过程的不同阶段,为多功能文本嵌入奠定了基础。
2. Related Work
从一般文本嵌入、神经检索嵌入模型、多语言嵌入三个方面综述了相关工作。
在过去几年中,文本嵌入领域取得了实质性进展。一个主要的驱动力是预训练语言模型的流行,在这种语言模型中,数据的底层语义可以通过这种强大的文本编码器进行有效编码。此外,对比学习方法的进展是另一个关键因素,尤其是负采样方法的改进和知识提取方法的开发。除了这些成熟的技术之外,学习通用的嵌入模型变得越来越流行,这些模型能够统一支持各种应用场景。到目前为止,在这个方向上已经有许多有影响力的方法,比如Contriever,LLM-Embedder,E5,BGE,SGPT以及Open Text Embedding,这些模型显著提高了文本嵌入在一般任务中的使用。
embedding模型的一个主要应用就是神经检索(neural retrieval)。通过测量与文本嵌入的语义关系,可以基于嵌入相似性重新检索输入查询的相关答案。最常见的基于embedding的检索形式是稠密检索(dense retrieval),其中文本的编码器输出被聚合(通过[CLS]或者mean-pooling)用于计算embedding的相似度。另一种常见的替代方法是多向量检索,它对文本编码器的输出应用细粒度交互来计算嵌入相似性。最后,文本嵌入也可以转换为术语权重,这有助于稀疏检索(parse retrieval)或词汇检索(lexical retrieval)。通常,上述检索方法是通过不同的嵌入模型来实现的。据我们所知,没有一种现有的方法能够统一所有这些功能。
尽管技术进步很大,但大多数现有的文本嵌入仅针对英语开发,而在其他语言上的能力落后于英语。为了缓解这个问题,我们从多个方向不断努力。一个是开发预训练的多语言文本编码器,如mBERT,XLM-R。另一个是管理多语言文本嵌入的训练和评估数据,例如MIRACL,Mr.TyDi,MKQA。同时,多语言文本嵌入是从社区中不断开发的,例如mDPR,mContriever ,mE5等。然而,考虑到与英语模型的显著差距以及不同语言之间的巨大不平衡,目前的进展仍然远远不够。
3. M3-Embedding
M3嵌入式实现三重通用性。它支持多种语言,并可以处理不同粒度的输入数据。此外,它还统一了文本嵌入的常见检索功能。形式上,给定任意语言 x x x 中的查询 q q q,它能够从 y y y 语言的语料库 D y D^y Dy 中检索文档 d d d,写成数学表达式: D y : d y ← f n ∗ ( q x , D y ) D^y:d^y \gets{fn}^*(q^x, D^y) Dy:dy←fn∗(qx,Dy)。这里的 f n ∗ ( ⋅ ) fn^*(\cdot) fn∗(⋅) 可以表示稠密检索,稀疏/文本检索或者多向量检索; y y y 可以是另一种语言,或者是和 x x x 相同的语言。简单来说就是可以用中文在英文语料库里面检索到相关的文档(举个例子)。
3.1 Data Curation(数据整理)
M3-Embedding的训练需要一个大规模的、多样化的多语言数据集。在这项工作中,我们从三个来源进行全面的数据收集:来自未标记语料库的无监督数据、来自标记语料库的微调数据和通过合成的微调数据(如Table 1所示)。
这三个数据源相互补充,适用于训练过程的不同阶段。特别地,通过在包括Wikipedia,S2ORC ,xP3,mC4和CC-News在内的各种多语言语料库中提取丰富的语义结构,例如标题-正文、标题-摘要、指令-输出等,来策划无监督数据。此外,还直接纳入了MTP精心策划的数据。为了学习跨语言语义匹配的统一嵌入空间,从两个翻译数据集NLLB和CCMtrix中引入了平行语句。对原始数据进行过滤以去除潜在的不良内容和低相关性样本。它总共带来了194种语言的12亿个文本对,包括了2655种跨语言的文本对 。
此外,我们从标记语料库中收集了相对较小但多样化的高质量微调数据。对于英语,我们整合了SimCSE收集的八个数据集,包括HotpotQA,TriviaQA,NQ,MS MARCO,COLIEE,PubMedQA,SQuAD和NLI。对于中文,我们整合了七个数据集,包括DuReader,mMARCO-ZH , T 2 − R a n k i n g T^2-Ranking T2−Ranking , L a w G P T 1 LawGPT^1 LawGPT1, C M e d Q A v 2 CMedQAv2 CMedQAv2, N L I z h 2 NLIzh^2 NLIzh2 以及 L e C a R D v 2 LeCaRDv2 LeCaRDv2。对于其他语言,我们从Mr.Tydi和MIRACL中获取训练数据。
最后,我们生成合成数据来缓解长文档检索任务的不足,并引入额外的多语言微调数据(也称为MultiLongDoc)。具体来说,我们从Wiki和MC4数据集中抽取长篇文章,并从中随机选择段落。然后,我们使用GPT-3.5根据这些段落生成问题。生成的问题和解析的文章构成了对微调数据的新文本对。详细规范见附录A.2。
3.2 混合检索
M3-Embedding统一了嵌入模型的所有三种常见检索功能,即稠密检索、词汇(稀疏)检索和多向量检索。
-
稠密检索 :输入的query q q q通过一个文本编码器转换成隐藏状态 H q H_q Hq。我们使用特殊token "[CLS]" 的归一化隐藏状态来表示这个query: e q = n o r m ( H q [ 0 ] ) e_q=norm(H_q[0]) eq=norm(Hq[0])。相似的,我们可以以这种方式获取段落(passage)的embedding, e p = n o r m ( H P [ 0 ] ) e_p=norm(H_P[0]) ep=norm(HP[0])。因此,query和passage的相关性分数可以用 e q e_q eq 和 e p e_p ep 两个embeddings的内积来衡量:
s d e n s e ← < e p , e q > s_{dense}\gets <e_p, e_q> sdense←<ep,eq> -
文本检索(稀疏检索) :输出 embeddings 还用于估计每个term的重要性,以便于词汇检索。对于查询中的每个 term t t t(一个 term 对应于我们工作中的一个token),term 权重计算为:
ω q t ← R e l u ( W l e x T H q [ i ] ) \omega_{q_t} \gets Relu(W^T_{lex}H_q[i]) ωqt←Relu(WlexTHq[i])其中 W l e x ∈ R d × 1 W_{lex} \in R^{d\times1} Wlex∈Rd×1 是将隐藏状态映射到一个浮点数的矩阵。如果一个term t t t 在查询中多次出现,我们只保留其最大权重。我们用同样的方法计算文章中每一个 term 的权重。基于估计的 term 权重,通过 query 和 passage 中共现 term 的联合重要性来计算 query 和 passage 之间的相关性得分: s l e x ← ∑ t ∈ q ∩ p ( ω q t ∗ ω p t ) s_{lex}\gets \sum_{t \in q\cap p}(\omega_{q_t} * \omega_{p_t} ) slex←∑t∈q∩p(ωqt∗ωpt) 。
-
多向量检索: 作为稠密检索的扩展,多向量方法利用整个输出 embeddings 来表示 query 和 passage: E q = n o r m ( W m u l T H q ) E_q=norm(W^T_{mul}H_q) Eq=norm(WmulTHq), E P = n o r m ( W m u l T H p ) E_P = norm(W^T_{mul}H_p) EP=norm(WmulTHp),其中 W m u l ∈ R d × d W_{mul} \in R^{d \times d} Wmul∈Rd×d 是可学习的项目矩阵。我们使用迟交互方法(late-interaction)来计算细粒度的相关性得分:
s m u l ← 1 N ∑ j = 1 M E q [ i ] ⋅ E p T [ j ] s_{mul} \gets \frac{1}{N}\sum^{M}_{j=1}E_q[i]\cdot E^T_p[j] smul←N1∑j=1MEq[i]⋅EpT[j]
N N N 和 M M M 是query和passage的长度。
由于 embedding 模型的多功能性,检索过程可以在混合过程中进行。首先,每个方法都可以单独检索候选结果(多向量方法由于成本高昂,可以免除这一步骤)。然后,基于综合相关性得分对最终检索结果进行重新排序:
s r a n k ← s d e n s e + s l e x + s m u l s_{rank}\gets s_{dense} + s_{lex} + s_{mul} srank←sdense+slex+smul
3.3 自知识提取(Self-Knowledge Distillation)
训练 embedding 模型以区分正样本和负样本。对于每一种检索方法,与负样本相比,query 的正样本的得分都会更高。因此,进行训练过程是为了最大限度地减少信息损失,其一般形式由以下损失函数表示:
L = − l o g e x p ( s ( q , p ∗ ) / τ ) ∑ p ∈ { P ∗ , P ′ } e x p ( s ( q , p ) / τ ) L = -log\frac{exp(s(q, p^*)/\tau)}{\sum_{p\in\{P^*, P'\}}exp(s(q,p)/\tau)} L=−log∑p∈{P∗,P′}exp(s(q,p)/τ)exp(s(q,p∗)/τ)
其中, p ∗ p* p∗ 和 P ′ P' P′ 表示在 query 中进行采样的正样本和负样本; 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(⋅)} 中的任意一个式子。
不同检索方法的训练目标可能相互冲突。因此,原生的多目标训练可能不利于嵌入的质量。为了便于优化多个检索功能,我们建议在自知识提取的基础上统一训练过程。特别是根据基于集成学习的原理,鉴于不同检索方法的异质性,它们的预测可以作为更准确的相关性得分进行整合。在最简单的形式中,积分可以只是不同预测分数的总和:
s i n t e r ← s d e n s e + s l e x + s m u l s_{inter} \gets s_{dense} + s_{lex} + s_{mul} sinter←sdense+slex+smul
在以前的研究中,embedding 模型的训练质量可以受益于知识提取,它利用了来自另一个排序模型的细粒度软标签。在这里,我们简单地使用综合得分作为教师,其中每种检索方法的损失函数修改为:
L ∗ ′ ← − p ( s i n t e r ) ∗ l o g p ( s ∗ ) L'{*}\gets -p(s{inter})*logp(s_{*}) L∗′←−p(sinter)∗logp(s∗)
(这里可以参考交叉熵损失函数)
这里, 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 ′ ← ( L d e n s e ′ + L l e x ′ + L m u l ′ ) / 3 L' \gets(L'{dense}+L'{lex}+L'_{mul})/3 L′←(Ldense′+Llex′+Lmul′)/3
最后,我们导出了 L L L 和 L ′ L' L′ 的线性组合的自知识蒸馏的最终损失函数: L f i n a l ← L + L ′ L_{final}\gets L+L' Lfinal←L+L′
整个训练过程是一个多阶段的工作流程(图2)。我们使用通过RetroMAE方法进一步预训练的XLM-RoBERTa模型作为基础文本编码器。首先,使用大量无监督数据对文本编码器进行预训练,其中仅以对比学习的基本形式训练稠密检索。将自知识提取应用于第二阶段,其中对 embedding 模型进行微调,以建立三种检索功能。此阶段同时使用标记数据和合成数据,其中按照 ANCE 方法为每个 query 引入 hard negative。详细处理见附录B.1。
3.4 高效批处理
embedding 模型需要从多样化和海量的多语言数据中学习,以充分捕捉不同语言的一般语义。它还需要保持 batch size 尽可能大(可以利用大量的批内负样本),以确保文本嵌入的区分性。考虑到GPU的内存和计算能力的限制,人们通常会将输入数据截断为短序列,以实现高吞吐量的训练和一个比较大的 batch zise。然而,对于 M3-Embedding 来说,通常的做法是不可行的,因为它需要从短序列数据和长序列数据中学习,才能有效地处理不同粒度的输入。在我们的工作中,我们通过优化批处理策略来提高训练效率,从而实现高吞吐量和大批量训练。
特别地,我们会通过按序列长度分组来预处理训练数据。训练实例从同一个组中采样从而生产一个小批量。由于序列长度相似,它显著减少了序列填充(用红色标记),并有助于更有效地利用GPU。当对不同GPU的训练数据进行采样时,随机种子总是固定的,这确保了负载平衡,并最大限度地减少了每个训练步骤的等待时间。此外,在处理长序列训练数据时,将小批量(mini-batch)进一步划分为子批量(sub-batches),这样处理占用的内存更少。我们使用 gradient-checkpointing 对每个 sub-batch 进行迭代编码,并收集所有生成的 embeddings。这种方法可以显著增加批量大小。gradient-checkpointing方法的原理可以参考这篇文章。 简单来说就是在反向传播时重新计算深度神经网络的中间值(而通常情况是在前向传播时存储的)。这个策略是用时间(重新计算这些值两次的时间成本)来换空间(提前存储这些值的内存成本)。例如,当处理长度为8192的文本时,batch size 可以增加20倍以上。有关更多详细信息,请参阅附录B.3。最后,来自不同GPU的 embeddings 是被广播的,允许每个设备在分布式环境中获得所有嵌入,这显著扩大了 in-batch 负样本的规模。
- 负载平衡: 在多 GPU 训练中,通常会将训练数据划分到不同的 GPU 上,以加快整个训练过程。如果每个 GPU 的训练数据采样过程是随机的,那么可能会导致不同 GPU 上的训练进度不均衡,有些 GPU 可能需要处理更多或更少的训练数据。通过使用固定的随机种子,可以确保每个 GPU 在采样训练数据时所得到的样本顺序是相同的,从而使得每个 GPU 的训练任务更加均衡。
- 减少等待时间: 在多 GPU 训练中,通常会采用数据并行的方式,即每个 GPU 处理不同的训练样本。如果采样数据的过程不是固定的,那么每个 GPU 在等待其他 GPU 采样数据时可能会出现空闲时间,从而降低了整个训练过程的效率。通过使用固定的随机种子,可以确保每个 GPU 在每个训练步骤都能够快速获取到相同的采样数据,从而减少了等待时间,提高了训练的效率
然而,用户可能缺乏足够的计算资源或数据来训练长文本模型。因此,我们还提出了一种MCLS策略,以在不需要训练的情况下增强模型的长文本能力。该策略利用多个 CLS toekn 来捕获在推理过程中应用的文本语义。有关更多详细信息,请参阅附录B.2。
4. Experiment
在接下来的部分中,我们对我们的模型进行了三种任务的评估:多语言检索、跨语言检索和长文档检索。
4.1 多语言检索
我们用 MIRACL 评估了多语言检索的性能,它包括18种语言的自组织检索任务。每项任务都由用同一种语言表示的 query 和 passage 组成。根据官方基准,我们使用Pyserini评估我们的方法,并使用nDCG@10作为主要评估指标(Recall@100也被测量并将结果放在了附录 C.1中)。我们在实验中引入了以下基线:词汇检索方法:BM25;稠密检索方法:mDPR,mContriever, m E 5 l a r g e mE5_{large} mE5large 和 E 5 m i s t r a l − 7 b E5_{mistral-7b} E5mistral−7b。为了使BM25和M3更具可比性,在实验中,我们对BM25使用与M3相同的 tokenizer(即XLM Roberta的 tokenizer)。使用XLM Roberta 的相同词汇表也可以确保两种方法具有相同的 retrieval latency 。BM25使用不同 tokenizer 的结果如附录C.2所示。我们还与OpenAI最近发布的 Text-Embedding-3-Large(缩写为OpenAI-3)进行了比较。
我们可以根据 Table 2 中的实验结果得出以下观察结果。首先,M3-Embedding 仅凭借其稠密检索功能(表示为 Dense)就已经获得了优越的检索性能。不仅在平均性能上优于其他基线方法,而且在大多数单独的语言中保持了一致的经验优势。即使与 E 5 m i s t r a l − 7 b E5_{mistral-7b} E5mistral−7b 相比,我们的方法也能够在英语中产生类似的结果,在其他语言中产生了更好的结果。 E 5 m i s t r a l − 7 b E5_{mistral-7b} E5mistral−7b利用更大的 Mistral-7b 模型作为文本编码器,并使用英语数据进行特定训练。此外,M3-Embedding 还有效地训练了稀疏检索功能(表示为 Sparse),因为它在所有语言中都优于典型的BM25方法。我们还可以观察到多向量检索(表示为Mult-vec)的额外改进,它依赖于 query 和 passage embeddings之间的细粒度交互来计算相关性得分。最后,密集和稀疏方法的协作,例如,Dense+Sparse,导致了对每种单独方法的进一步改进;并且所有三种方法的协作(表示为all)产生最佳性能。

4.2 跨语言检索
我们使用 MKQA 作为基准来测评跨语言检索的性能,包括25种非英语语言的 query。对于每个 query,它需要从英语维基百科语料库中检索基本事实段落。在我们的实验中,我们使用了 BEIR 提供的经过良好处理的语料库。遵循之前的研究,我们以Recall@100作为主要指标呈现(Recall@20在附录中作为辅助指标呈现)。
实验结果如 Table 3 所示。与我们在多语言检索中的观察结果相似,M3-Embedding 继续展现卓越的性能,其显著优于其他纯基于密集检索功能的基线方法(Dense)。不同检索方法的协作带来了进一步的改进,使跨语言检索具有最佳的经验性能。此外,我们还可以观察到以下有趣的结果,这些结果是该基准所独有的。首先,性能差距没有 MIRACL 那么大,在 MIRACL中,像 E 5 m i s t r a l − 7 b E5_{mistral-7b} E5mistral−7b 这样的有竞争性的基线能够在一些测试语言上产生类似甚至更好的结果。然而,在许多其他语言中,尤其是低资源语言,如ar、km、he等,基线容易出现糟糕的性能。相比之下,M3-Embedding 在所有语言中都保持了相对稳定的性能,这在很大程度上可归因于其对综合的无监督数据的预训练。其次,尽管 M3-Embedding(Sparse)仍然优于BM25,但与其他方法相比,它的性能较差。这是因为跨语言检索的共现项非常有限,因为 query 和 passage 是用不同的语言呈现的。
4.3 多语言长文档检索
我们用两个基准来评估较长序列的检索性能:MLDR(多语言长文档检索),由Wikipedia,Wudao和mC4(见Table 8),以及NarrativeQA 的多语言文章策划,仅适用于英语。除了之前的基线之外,我们还进一步介绍了JinaEmbeddingv2、来自OpenAI的text-embedding-ada-002和text-embeeding-3-large,因为它们具有突出的长文档检索能力。
MLDR的评估结果如Table 4所示。有趣的是,M3(稀疏)是一种更有效的长文档检索方法,它比密集方法又提高了约10点。此外,多向量检索也令人印象深刻,比M3(Dense)提高了5.1+分。最后,不同检索方法的组合促成了65.0的显著平均性能。

为了探索 M3-Embedding 在长文档检索中具有竞争力的原因,我们尝试从微调阶段删除长文档数据(表示为w.o long),经过这一修改,密集方法,即dense-w.olong,仍然可以优于大多数基线,这表明其在预训练阶段已经很好地确立了其实际优势。我们还提出了一种简单的策略MCLS来解决这种情况(没有数据或没有用于文档检索微调的GPU资源)。实验结果表明,MCLS可以显著提高无需训练的文档检索性能(41.2→ 45.0)。
我们用 NarrativeQA(Table 5)进行了进一步的分析,其中我们有与MLDR相似的观察结果。此外,随着序列长度的增长,我们的方法逐渐扩大了其相对于基线的优势(图4),这反映了它在处理长输入方面的优势。
4.4 消融研究
自知识提取(Self-knowledge distillation) :这项消融研究是为了分析自知识提取(skd)的影响。特别是,我们对蒸馏过程进行了分解,并对每个重新尝试的方法进行了独立训练(表示为M3-w.o.skd)。根据我们对MIR-ACL的评估(Table 6),原始方法,即M3 w.skd,在所有设置(即密集、稀疏、多矢量)中都比消融方法具有更好的性能。值得注意的是,稀疏检索的影响更为明显,这表明密集和稀疏检索方法之间不兼容。
多阶段训练的影响:我们还进行了实验来探索不同阶段的影响。微调是指直接从xlm-roberta模型进行微调,RetroMAE+微调 是指在用RetroMAE训练的模型上进行微调。同时,RetroMAE+Unsp+微调 涉及对用RetroMAE训练的模型进行微调,然后对无监督数据进行预训练。结果汇总在 Table 7 中。我们可以看到,RetroMAE 可以显著提高检索性能,而对无监督数据的预训练可以进一步增强嵌入模型的检索能力。

5. Conclusion
在本文中,我们提出了M3-Embedding,它在支持多语言检索、处理不同粒度的输入和统一不同的检索功能方面实现了显著的通用性。我们对训练数据进行全面、高质量的处理,通过自知识提取优化学习过程,通过高效的批量处理提高训练的吞吐量和批量大小。M3-Embedding的有效性通过我们的实验研究得到了验证,它在多语言检索、跨语言检索、以及多语言长文档检索任务上都表现出了卓越的性能。
A 数据的细节
A.1 收集的数据
无监督数据的语种和长度分布(令牌数量)如图5所示。
我们观察到,对于长文本(例如cc-news中的新闻),开头的句子往往是总结性的陈述,并且该模型可以完全依赖于这些最初的句子中呈现的信息来建立相关关系。为了避免模型只关注这些起始句,我们实现了一种在整个文本中随机打乱分段顺序的策略。具体来说,我们将文本分为三段,随机打乱它们的顺序,然后重新组合它们。这种方法允许相关文本片段随机出现在长序列中的任何位置。在训练过程中,我们以0.2%的概率将此操作应用于的文本中。
A.2 合成数据
GPT3.5的 prompt 是"You are a curious AI assistant, please generate one specific and valuable question based on the following text. The generated question should revolve around the core content of this text, and avoid using pronouns (e.g., "this"). Note that you should generate only one question, without including additional content:"。生成的数据集的详细信息如表8所示。

B 实施详细信息
B.1 实验超参数
我们采用了进一步预训练的 XLM-RoBERTa 作为基础模型。我们将最大位置扩展到8192,并通过 Retro-MAE 方法更新模型。训练数据集成了 Pile,Wudao 和 mC4 数据集。我们从这些来源总共抽取了1.84亿个文本样本,涵盖105种语言。最长的序列长度为8192,学习率为 7 × 1 0 − 5 7\times10^{-5} 7×10−5。批量大小设置为32,我们在16个 steps 上累积梯度 。在32个A100(40GB)GPU上进行20000 steps的预训练。
对于具有大量无监督数据的预训练,query 和 passage 的最大长度分别设置为512和8192。学习率设为 5 × 1 0 − 5 5\times10^{-5} 5×10−5 ,预热学习率(warmup ratio)设为0.1,权重衰减(weight decay)系数设为0.01。这里的训练过程花费了25000 steps。对于具有不同序列长度范围的训练数据(比如说0-500,500-1000等),我们使用不同的batch size。具体如Table 9 所示。第二阶段在96个A800(80GB)GPU上进行。

在微调阶段,我们为每个 query 采样7个负样本。batch zise 大小见 Table 9。在初始阶段,我们采用了大约 6000 个 steps 来对稠密嵌入、稀疏嵌入和多向量进行预热。随后,我们进行了自我知识提炼的统一训练。这些实验是在24个A800(80GB)GPU上进行的。
B.2 MCLS 方法
由于缺乏长文本数据或计算资源,使用长文本的微调可能受到限制。在这种情况下,我们提出了一种简单但有效的方法:MCLS(多CLS),以提高模型的能力,而不需要对长文本进行微调。MCLS方法旨在利用多个 CLS token 来联合捕获长文本的语义。具体来说,我们为每个固定数量的 toekn 插入一个CLS token(在我们的实验中,我们为每256个 token 插入一"[CLS]"),并且每个CLS token 可以从其相邻 token 中捕获语义信息。最终,通过对所有CLS token的最后隐藏状态求平均值来获得最终的文本嵌入。
B.3 Split-batch 方法

Algorthm 1提供了 split-batch 策略的伪代码。对于当前批次,我们将其划分为多个更小的 sub-batches。对于每个 sub-batch,我们利用模型生成 embeddings,在前向传播过程中通过 gradient-checkpointing 丢弃所有中间激活 。最后,我们收集所有 sub-batch 的编码结果,并获得当前批次的 embeddings。启用 gradient-checkpointing 策略至关重要;否则,每个 sub-batch 的中间激活将不断累积,最终占用与传统方法相同数量的GPU内存。
在 Table 10 中,我们研究了 split-batch 对批量大小的影响。可以观察到,启用 split-batch 后,batch size 显著增加。同时,文本长度越长,增加就越明显,在长度为8192的情况下,启用 split-batch 会导致 batch size 增长20倍以上。

C 更多的结果
C.1 额外的结果
在本节中,我们将介绍关于MIRACL和MKQA基准的其他评估结果。如表12和13所示,M3-Embedding 从平均分数来说要由于所有基线。
C.2 BM25 使用不同的Tokenizer
我们研究了不同 tokenizer 对BM25方法的影响,结果如表11所示。我们可以观察到:
- 使用 Lucene 的 Analyzer 可以显著提高BM25的性能。
Lucene analyzer 通常有多个步骤,包括tokenization、词干提取、删除停止字等,比直接使用xlm-roberta的 tokenizer 获得更好的结果。此外,值得注意的是,xlm-roberta 的 tokenizer 的词汇表大小是有限的,这导致在编码文档后 tokens 的唯一性减少(例如,在MLDR数据集上,xlm-roberta 的 tokenizer 每次生成1056个唯一 term,而Lucene的 analyzer 生成1451个唯一 term,这增加了37%以上,并将增加检索延迟(retrieval latency))。 - M3在所有数据集上都优于使用相同 tokenizer 的BM25模型,这表明所学习的权重明显优于BM25计算的权重。
- M3的稀疏检索在Miracl和MKQA数据集上优于BM25。在长文档检索(MLDR)中,M3的稀疏性并没有超过BM25,但取得了有竞争力的性能。这表明BM25仍然是一个极具竞争力的基线模型。探索在稀疏表示中表现更好的 tokenizer 是未来研究的一个有价值的课题。
