【LLM-RAG】BGE M3-embedding模型(模型篇|混合检索、多阶段训练)

note

  • M3-Embedding联合了3种常用的检索方式,对应三种不同的文本相似度计算方法。可以基于这三种检索方式进行多路召回相关文档,然后基于三种相似度得分平均求和对召回结果做进一步重排。

  • 多阶段训练过程:
    在这里插入图片描述

  • 第一阶段:第一阶段的自动编码预训练采用的是RetroMAE,在105种语言的网页跟wiki数据上进行,从而获得一个基底模型

  • 第二阶段:在第一个数据源的弱监督数据进行预训练,这阶段的损失损失只考虑基于稠密检索的对比学习损失。

  • 第三阶段:会在第二,三个数据源的监督数据进行训练,这阶段的损失就包括前面提及的所有损失,包括对比学习损失跟蒸馏损失。

零、BGE M3-emb模型

  • 项目链接:https://github.com/FlagOpen/FlagEmbedding
  • 论文:BGE M3-Embedding: Multi-Lingual, Multi-Functionality,
    Multi-Granularity Text Embeddings Through Self-Knowledge Distillation
  • 该模型支持超过100种语言,能够接受不同形式的文本输入,文本最大输入长度扩展到4192,并且支持包括稠密检索,稀疏检索,多向量检索三种不同检索手段。
  • BGE M3-Embedding的效果超过微软E5-mistral-7b、openai去年发布的第三代text embedding

一、训练数据的构建

有三个来源:

  • 没有标注信息的弱监督数据:来自于从网上挖掘得到的各种有语义关联的数据,并过滤掉其中低质量的内容。
  • 来自有标注信息的监督数据:包括若干个中文跟英文的开源数据集,例如MS MARCO,NLI,DuReader等。
  • 合成得到的监督数据:利用GPT3.5为来自Wiki跟MC4的长文本生成对应的问题,用于缓解模型在长文档检索任务的不足,同时引入额外的多语言数据。

注:这三种不同来源的数据相互补充,分别作用于模型不同阶段的训练
在这里插入图片描述

二、混合检索

M3-Embedding联合了3种常用的检索方式,对应三种不同的文本相似度计算方法。可以基于这三种检索方式进行多路召回相关文档,然后基于三种相似度得分平均求和对召回结果做进一步重排。

1. Dense retrieval

Dense retrieval: 给定一个文本,获取语言模型最后一层上[CLS]位置的隐状态,经过标准化作为文本的稠密向量表征。通过计算query跟doc的向量表征之间的内积就知道文本之间的稠密检索相似度。

注:这是目前主流text embedding模型用的比较多的一种检索方式,这部分表征更注重文本整体的语义信息。

2. Lexical Retrieval

Lexical Retrieval:给定一个文本,获取语言模型最后一层上所有位置的隐状态,每个位置对应原始文本中的一个token,依次将每个位置的隐状态通过一个全连接层+Relu函数得到该token的权重,将所有每个token的隐状态*对应的权重再求和作为文本的稀疏表征(如果文本包含两个以上相同的token,则该token的权重取其中最大的权重值)。

注:很像tfidf,也跟RetroMAE-V2的第二部分特征很相似,这部分特征更在意文本中各个token的信息,重要的token就赋予更高的权重。

3. Multi-Vec Retrieval

Multi-Vec Retrieval: 给定一个文本,获取语言模型最后一层上所有位置的隐状态,经过一个全连接矩阵跟标准化后得到文本的多向量表征(文本的多向量表征维度为n*d,其中n是文本长度,d是隐状态维度)。给定query,query上第i个位置跟doc的相似度的计算方式为依次计算query第i个位置的多向量表征跟doc各个位置上的多向量表征之间的内积,取其中最大值作为其得分,将query上所有位置跟doc的相似度平均求和就得到对应的多向量表征相似度。其实这就是稠密检索的一个引申版本。

三、训练方式

1. loss的组成

loss由两个部分组成:

  • 第一部分是对比学习损失,沿用InfoNCE的方式,希望拉近query跟相关文档之间的距离,同时疏远query跟不相关文档之间的距离,但是由于M3-Embedding提供了三种相似度计算方式,所以这里其实是包含了3个对比学习损失的。
  • 第二部分蒸馏损失,研究人员将三种不同方式的相似度得分进行加权求和作为teacher分数,然后让三种相似度得分去学习teacher得分的信息,由此得到3个蒸馏损失。

2. 多阶段训练

多阶段训练过程:
在这里插入图片描述

  • 第一阶段:第一阶段的自动编码预训练采用的是RetroMAE,在105种语言的网页跟wiki数据上进行,从而获得一个基底模型
  • 第二阶段:在第一个数据源的弱监督数据进行预训练,这阶段的损失损失只考虑基于稠密检索的对比学习损失。
  • 最后第三阶段会在第二,三个数据源的监督数据进行训练,这阶段的损失就包括前面提及的所有损失,包括对比学习损失跟蒸馏损失。

四、实验结果

1. 任务上的表现

(1)在多语言检索,跨语言检索,多语言长文档检索等任务上效果表现出色
在这里插入图片描述

2. 消融实验

(2)通过消融实验对比,可以发现在使用不同相似度计算方式条件下,M3-Embedding中的蒸馏损失都能给最终效果带来明显提升,尤其是对于稀疏检索而言。
在这里插入图片描述

Reference

[1] BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation
[2] https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/BGE_M3/BGE_M3.pdf
[3] BGE M3-Embedding:智源最新发布的text embedding模型,多语言检索效果超过微软跟openai

相关推荐

  1. LLM、AGI、模态AI 三:微调模型

    2024-02-16 18:48:02       64 阅读
  2. 模型训练trick

    2024-02-16 18:48:02       68 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-16 18:48:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-16 18:48:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-16 18:48:02       87 阅读
  4. Python语言-面向对象

    2024-02-16 18:48:02       96 阅读

热门阅读

  1. 【图论经典题目讲解】洛谷 P2149 Elaxia的路线

    2024-02-16 18:48:02       60 阅读
  2. 应急响应实战笔记02日志分析篇(2)

    2024-02-16 18:48:02       49 阅读
  3. MySQL双写机制

    2024-02-16 18:48:02       61 阅读
  4. coredns 状态为running但not ready

    2024-02-16 18:48:02       53 阅读
  5. Acwing---869. 试除法求约数

    2024-02-16 18:48:02       44 阅读
  6. Leetcode-657. 机器人能否返回原点

    2024-02-16 18:48:02       53 阅读
  7. vue3 codemirror yaml文件编辑器插件

    2024-02-16 18:48:02       47 阅读
  8. Leetcode With Golang 二叉树 part1

    2024-02-16 18:48:02       53 阅读