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

note

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

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

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

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

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

文章目录

  • note
  • 零、BGE M3-emb模型
  • 一、训练数据的构建
  • 二、混合检索
    • 1. Dense retrieval
    • 2. Lexical Retrieval
    • 3. Multi-Vec Retrieval
  • 三、训练方式
    • 1. loss的组成
    • 2. 多阶段训练
  • 四、实验结果
    • 1. 任务上的表现
    • 2. 消融实验
  • Reference

零、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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(08)Hive——Join连接、谓词下推

前言 Hive-3.1.2版本支持6种join语法。分别是:inner join(内连接)、left join(左连接)、right join(右连接)、full outer join(全外连接)、left semi join(左…

电商小程序08调用缓存

目录 1 将信息存入缓存中2 获取登录信息3 退出登录4 发布预览总结 小程序的登录功能里,如果只是将登录信息保存到全局变量中,存在的问题是如果小程序重新打开,用户的登录状态就丢失了。为了解决这个问题,我们需要用到微搭的缓存的…

初识最短路径

一.最短路径的介绍 最短路径是图论和网络分析中一个重要的概念,它指的是在一个图或网络中连接两个节点或顶点的路径中,具有最小权重总和的路径。这个权重可以表示为路径上边或弧的长度、耗费、时间等,具体取决于问题的背景和应用场景。 如果你…

基于Spring Boot的古典舞在线交流平台设计与实现,计算机毕业设计(带源码+论文)

源码获取地址: 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1758349555560165377

Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制)

一、概念 Compose 通过三个阶段把数据转化为UI:组合(要显示什么)、布局(要显示在哪里)、绘制(如何渲染)。 组合阶段 Compisition 界面首次渲染时会将可组合函数转化为一个个布局节点 Layout Nod…

NVIDIA Chat with RTX

NVIDIA在2月13日发布了Chat With RTX,这是一款类似于ChatGPT的免费个性化 AI 聊天机器人,可以在配备 Nvidia RTX 显卡的 PC 上本地运行。它使用Mistral或Llama开放权重LLM,可以搜索本地文件并回答有关它们的问题。本文中我们一起来了解一下Ch…

【网络安全】什么样的人适合学?该怎么学?

有很多想要转行网络安全或者选择网络安全专业的人在进行决定之前一定会有的问题: 什么样的人适合学习网络安全?我适不适合学习网络安全? 当然,产生这样的疑惑并不奇怪,毕竟网络安全这个专业在2017年才调整为国家一级…

Arduino ESP8266/ESP32 TCP/UDP通讯例程

Arduino ESP8266/ESP32 TCP/UDP通讯例程 🔧需要配合上位机软件:网络调试助手(http://www.cmsoft.cn/software.html) 📝ESP8266/ESP32 作为TCP客户端使用 //要将ESP8266/32 Arduino TCPClient的调试输出发送到串口&am…

OpenAI首个文生视频模型亮相,你觉得咋样?

2月16日凌晨,OpenAI再次扔出一枚深水炸弹,发布了首个文生视频模型Sora。据介绍,Sora可以直接输出长达60秒的视频,并且包含高度细致的背景、复杂的多角度镜头,以及富有情感的多个角色。 目前官网上已经更新了48个视频d…

在Visual Studio中搭建Dynamo Python开发环境,效率飞一般的增长

最近在学习Dynamo中Python Script的用法,发现这个东西用起来太不友好了,不支持自动缩进,不支持自动填充和提示。用过Visual Studio做二开的都知道,在引用了Revit api以后,就可以自动填充和提示了。 本来英语就不好&am…

UI风格汇:毛玻璃风格风靡的原因解读

Hello,我是大千UI工场,设计风格是我们新开辟的栏目,主要讲解各类UI风格特征、辨识方法、应用场景、运用方法等,本次带来的是毛玻璃风格的解读,有设计需求可以私聊。 一、什么是毛玻璃风格 毛玻璃风格(Fros…

Mysql5.6忘记密码,如何找回(windows)

mysql5.6安装 第一步:关闭正在运行的数据库服务 net stop mysql第二步:在my.ini文件当中的[mysqld] 任意一个位置放入 skip-grant-tables第三步:启动mysql服务 net start mysql第四步:服务启动成功后就可以登录了,…

Typora+PicGO+腾讯云COS做图床教程

文章目录 Typora+PicGO+腾讯云COS做图床教程一、为什么使用图床二、Typora、PicGO和腾讯云COS介绍三、下载Typora和PicGOTyporaPicGO 四、配置Typora、PicGO和腾讯云COS腾讯云COS配置PicGO配置Typora配置 Typora+PicGO+腾讯云COS做…

AI Infra论文阅读之LIGHTSEQ(LLM长文本训练的Infra工作)

感觉这篇paper有几个亮点,首先把Megatron-LM的Self-Attention模块的模型并行方式变成序列并行,优化了通信量,同时通过计算和通信重叠近一步压缩了训练迭代时间。另外,在使用重计算的时候发现当前Huggingface/Megatron-LM的重计算策…

电容充电速度

对电容充电的过程中,电容器充电的电压为,求电容器的充电速度。

【Algorithms 4】算法(第4版)学习笔记 08 - 3.1 符号表

文章目录 前言参考目录学习笔记1:API1.1:遵循的规则1.2:ST 用例举例1.2.1:行为测试用例1.2.2:性能测试用例2:基本实现2.1:无序链表处理2.2:初级ST实现小结2.3:有序数组的…

2.14:二维数组、非函数实现strcat、strcmp、strcpy、strlen

1.编程实现二维数组的杨辉三角 程序代码&#xff1a; 1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 int main(int argc, const char *argv[])5 {6 int n;7 printf("please enter n:");8 scanf("%d",&…

Python四级考试笔记

Python四级考试笔记【源源老师】 四级标准 一、 理解函数及过程、函数的参数、函数的返回值、变量作用域等概念。 二、 能够创建简单的自定义函数。 三、 理解算法以及算法性能、效率的概念&#xff0c;初步认识算法优化 效率的方法。 四、 理解基本算法中递归的概念。 五、 掌…

如何解决缓存和数据库的数据不一致问题

数据不一致问题是操作数据库和操作缓存值的过程中&#xff0c;其中一个操作失败的情况。实际上&#xff0c;即使这两个操作第一次执行时都没有失败&#xff0c;当有大量并发请求时&#xff0c;应用还是有可能读到不一致的数据。 如何更新缓存 更新缓存的步骤就两步&#xff0…

Linux下解压tar.xz文件的命令

tar -c: 建立压缩档案-x&#xff1a;解压-t&#xff1a;查看内容-r&#xff1a;向压缩归档文件末尾追加文件-u&#xff1a;更新原压缩包中的文件 ------------------------------------------ 这五个是独立的命令&#xff0c;压缩解压都要用到其中一个&#xff0c;可以和别的…