LLM大模型: RAG两大核心利器: M3E-embedding和bge-rerank

  RAG的效果好不好,最核心依赖两点:文本embedding语义提取的好不好,rerank的排序效果好不好(包含正确答案的文本是不是排在前面)!各自使用的环节如下:

        

    1、文本embedding的提取:理论上讲,任何transformer架构的encoder部分都可用于生成token的embedding,然后采用合适的pooling方式把整个setence中所有token的embedding融合成一个embedding。截止目前,哪个现成的LLM的encoder更适合提取整段句子的embedding了?

   要想效果好,以下是必要条件:

  • 模型不能太小,否则对训练预料的“”消化、承载“”能力不够,无法精准理解语义;模型也不能太大,否则过于耗费计算资源,同时还需要大量训练预料,否则会欠拟合(模型参数大小和所需token数详见scaling law)!
  • 训练预料要足够,涵盖各行业、各领域;也要涵盖各种不同的类型、风格的文本(中英文、说明文、议论文、陈述文、小说、散文、诗歌)等
  • 最好能提供微调的接口,利于用户使用自己特定领域的数据

  截止目前,业界公认效果比较好的就是moka-ai/m3e了!以下是官方的介绍:

  • Moka,此模型由 MokaAI 训练,开源和评测,训练脚本使用 uniem ,评测 BenchMark 使用 MTEB-zh
  • Massive,此模型通过千万级 (2200w+) 的中文句对数据集进行训练
  • Mixed,此模型支持中英双语的同质文本相似度计算,异质文本检索等功能,未来还会支持代码检索

  最核心的还是训练数据了,如下:

  • 中文训练集,M3E 在大规模句对数据集上的训练,包含中文百科,金融,医疗,法律,新闻,学术等多个领域共计 2200W 句对样本,数据集详见 M3E 数据集
  • 英文训练集,M3E 使用 MEDI 145W 英文三元组数据集进行训练,数据集详见 MEDI 数据集,此数据集由 instructor team 提供
  • 指令数据集,M3E 使用了 300W + 的指令微调数据集,这使得 M3E 对文本编码的时候可以遵从指令,这部分的工作主要被启发于 instructor-embedding (这点很牛逼,同样的sentence,可以根据不同的instruct生成不同的embedding,充分理解语义,比普通的bert模型强多了

  基础模型,还是基于bert架构:

  • 基础模型,M3E 使用 hfl 实验室的 Roberta 系列模型进行训练,目前提供 small 、base和large 三个版本;只要是embedding,就离不开bert架构!

  最终的效果就是:ALL IN ONE,不仅支持同质句子相似度判断,还支持异质文本检索,只需要一个模型就可以覆盖全部的应用场景,各个指标对比如下:

          

  看着还是很牛逼的! M3E的配置文件 1_Pooling/config.json,有pooling的方式和embedding的dimension:这里可以看出M3E默认采用的是每个token取均值的pooling方式!

{"word_embedding_dimension": 768,"pooling_mode_cls_token": false,"pooling_mode_mean_tokens": true,"pooling_mode_max_tokens": false,"pooling_mode_mean_sqrt_len_tokens": false
}

  2、rerank: 经过第一步使用cosin余弦相似度从密集向量数据库 + keyword search(稀疏向量召回)初步召回top K相似度的文本,按理来说就可以让LLM根据用户的query + 召回的context生成最终答案了,还要这个rerank干啥了?实际操作时,还是会发现一些问题:包含正确答案的文本在context中的排名可能并不靠前。比如query = “清华大学在哪座城市?” 。正确答案肯定是“北京”啦!但实际召回的context中包含北京的文本不一定排在前面,可能在中间甚至后面,给最后一个LLM输入的context会很大,直接导致LLM需要处理很长的文本,推理效率低不说,还容易出错,核心问题还是在于:初步召回的context还是有进一步压缩提炼的空间!造成这种现象的原因是啥了?

  利用cosin求两个向量的相似度,本质是看两个向量的距离。比如“北京”、“上海”、“深圳”这些都是中国的一线大城市,这3个词的embedding的cosin会很近,所以使用cosin召回的时候也可能把“上海”、“深圳”这些不是正确答案的sentence召回,所以要用tf-idf这类稀疏向量补充召回部分向量,整个过程称为 hybrid search。经过hybird search后,召回的context变多,给最后一步的LLM生成最终答案带来了麻烦,所以需要进一步从context中继续提炼,优中选优!比如初步召回20条,需要通过rerank选择更接近的3~5条,这个过程就是rerank!整个流程图示如下:

     

   确定要做rerank后,怎么做才能达到既定的目的?要想明白这个问题,还要回到最初的动机:cosin计算的是两个向量的距离,只考虑语义相似,不考虑字面符号是否一致;而稀疏检索tf-idf只考虑字面的符号, 不考虑语义,怎么整合这两种retrieve的优势,摒弃其劣势了?这就需要用到传统NLP常见的手段了:classifier!

        

   如上图右边所示:两个sentence先进入同一个bert,lm_head用一个二分类来判断这两个sentence是否匹配!右边这种classifier判断是否匹配比左边这种cosin判断是否相似更准确,原因又是啥了?两个sentence首尾拼接进入bert后:

  • 先要计算attention计算token之间的相似度,再进入FFN生成非线性特征,更利于lm_head的分类
  • 两个sentence的特征能两两组合交互生成新的维度特征,捕捉复杂的细节关系

    上面两个角度是从特征维度考虑的,从模型维度看,还有以下优点:

  • cosin是没有参数可调节的,但classifier可以通过调节参数,让模型的目标函数主动适配特定的任务和数据分布

  当然,既然classifier的准确性提高了,为啥不从一开始就用这种classifier来召回生成context了?还用cosin计算相似度干嘛了?这里就是计算量的问题了!cosin的计算量远比classifier小,并且可以事先离线计算embedding存入向量数据库,所以适合第一步从大量数据中初步召回数十条;classifier精准度高,但计算量大,适合从初步召回的数十条context中进一步精选出几条包含或最接正确答案的context

  原理搞清楚了,接下来看代码:

  getitem方法要对query、pos、neg三个不同的答案按照一定的逻辑配对,后续的loss才知道是0还是1;

      

   看看吧:loss用的是常规的cross entropy;classifier也是常规的SequenceClassifierOutput,没啥特别的!

      

 

 

 

 

总结:

1、RAG整个流程有3个地方涉及到LLM:文本embedding、rerank和根据context生成最终的答案
2、moka官方的建议:

  • 使用场景主要是中文,少量英文的情况,建议使用 m3e 系列的模型
  • 多语言使用场景,并且不介意数据隐私的话,我建议使用 openai text-embedding-ada-002
  • 代码检索场景,推荐使用 openai text-embedding-ada-002
  • 文本检索场景,请使用具备文本检索能力的模型,只在 Sentence 2 Sentence 上训练的文本嵌入模型,没有办法完成文本检索任务

3、 FlagEmbedding也有 Embedding Model: Visualized-BGE, BGE-M3, LLM Embedder, BGE Embedding,感兴趣的小伙伴也可以尝试一下!

 

 

参考:

1、https://huggingface.co/moka-ai/m3e-base    https://github.com/wangyingdong/m3e-base  

2、https://github.com/coffeebean6/retrieval_augmented_generation  

3、https://blog.csdn.net/lovechris00/article/details/138378828

 4、https://github.com/wangyuxinwhy/uniem/blob/main/examples/finetune.ipynb 

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

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

相关文章

oop-PTA题目集7~8总结

一、前言 第七次和第八次的题目集中的题目均是在前两次的电路模拟程序中增加新的内容,难度相较前面两次的题目有明显增大,主要是电路结构更加复杂,比如多并联、并联包含并联等较为特殊的情况,另外,新增了一些需要特殊处理的电器设备,比如有三个引脚的互斥开关、与其他设备…

lamp lump

为网站备案老王:记得一定要完成ICP备案,才可以通过网站对外提供互联网信息服务! 老王:根据 《互联网信息服务管理办法》以及 《非经营性互联网信息服务备案管理办法》,国家对非经营性互联网信息服务实行备案制度,对经营性互联网信息服务实行许可制度。未取得许可或者未履…

UI Explorer 的下载

离线版下载地址参考 UI Path 论坛的一篇文章:Standalone UiExplorer client download?该链接现在依然有效。 另外,替换链接中的版本号可获取其他版本的下载路径。 理论上,遍历此链接可以获取最新版本的独立程序包。有了计划记得推动,不要原地踏步。

监狱视频智能分析系统

监狱视频智能分析系统解决方案包括视频AI行为智能分析预警是一套可以独立运行的监狱视频智能分析系统。仅需在原有监控终端设备上的基础上,增加一台智能预警分析盒子,基于智能视频分析盒子实现监控系统智能预警功能。当视频监控划分的视野范围内发生事先预设的事件,如人员倒…

SpringMVC初体验

新建Maven项目 pom.xml文件导包<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://ma…

.NET|--WPF|--笔记合集|--依赖项属性|--概览

前言 本文介绍一下WPF的依赖项属性, 可以让大家对该依赖项属性知识点有个简单认识. "依赖项属性"其实也是"属性"的一种, 而"只读依赖项属性"又是"依赖项属性"的一种. 层级关系 : 属性 > 依赖项属性 > 附加属性 / 只读依赖项属性…

2024年自学python必看的书籍《Python编程:从入门到实践 第三版》PDF免费下载

本书是一本针对所有层次的Python 读者而作的Python 入门书。第一部分介绍了编程环境的搭建和Python编程所必须了解的基本概念。第二部分将理论付诸实践,讲解如何开发三个项目:分别是射击游戏、数据可视化、小型Web应用程序适读人群 :本书适合对Python感兴趣的所有读者阅读。…

视频监控智能分析系统

视频监控智能分析系统核心技术优势是以各大监控终端为基础,以智能视频分析系统为核心,用户可以在后台设置视频监控智能分析系统的某些特定的规则,视频监控智能分析系统识别不同区域范围内的物体,同时识别范围内的目标行为是否符合这些规则。如果发现监控画面中的异常情况,…

模拟集成电路设计系列博客——8.2.3 振荡器的相位噪声

8.2.3 振荡器的相位噪声 振荡器的相位噪声是一个基本特征。因为不存在一个无损失的振荡器(那就是永动机了),任何振荡器都需要一些有源电路来维持振荡,而这些有源电路会引入噪声。具体哪个器件引入了噪声的机理很微妙,到了后来才逐渐变得易于理解。但是,相位噪声的现象学事…

微信小程序中使用阿里图标iconfont

由于微信小程序中图标不是很全或者用png等图片每次都要修改图片颜色或者啥的感觉不是很方便 用习惯了阿里单色图标库之后,感觉总是缺点什么,所以总结了一下,废话不多说,步骤如下:1. 阿里图标库地址:https://www.iconfont.cn 自己进去选择图标,然后选择fontclass下载到本…

Xming配合Winterm实现远端Linux本地图形显示

1.下载安装xming xming可以实现在windows上访问linux的图形应用程序。 xming下载sourceforge 安装基本都是下一步,这里使用windterm作为ssh客户端,因此不再需要额外安装,其他选项根据需要自定义。2.配置xming 同xming一起安装的有一个xlaunch的软件,打开后其他都默认,这一…

mysql索引数据结构

一、索引 1. 什么是索引 索引是帮助MySql高效获取数据的排好序的数据结构。 2.索引的数据结构 ① 二叉树(Binary tree) 定义:是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树。 特点:左子树小于父节点的值,右子树大于父节点的值。 缺点:当…

字典树

字典树 它是一个快速插入和查询的多叉树 支持字符串的操作 支持查询和插入 使用边来标记我的字母 它的路径代表着这个字符串 比如1 2 6 11这条路径的意思就是字符串aba 如果要插入字符就在应该有的字符串路径插入应该要的字符 Code:#include <bits/stdc++.h>using names…

题目集7~8总结

5-6次大作业难度还算较简单,尤其第五次大作业,可谓是开场小菜,到第六次作业才上了一些难度,而第七次第八次更是难度大大增加,第二轮大作业比起第一轮大作业难度上升了不少,运用到的东西更新,更先进,所涉及的思维设计,逻辑框架也更难,还有其计算的设计也会很复杂很难。…

项目微服务化

记得不久之前,我曾经计划将本项目改造成微服务的形式,原因在于探索了Graal VM以后,我发觉曾经梦想的将自己的项目微服务化并不是一个天方夜谭,而是一些切实可行的,只需要工作量堆砌的事情。于是这段时间我就集中精力把这件事情做了一下。但是实际做完的感觉尽管非常舒心,…

内网穿透之frp+proxifier实现socks5反向代理

frp是一个专注于内网穿透的高性能的反向代理应用,proxifier允许用户将网络应用程序通过代理服务器进行连接。目录前言环境搭建frp反向代理proxifier代理工具 前言内网穿透,代理技术的联系与区别?我个人感觉在内网渗透的时候它们之间的界限很模糊,其目的都是为了突破内网访问…

笔记本电脑的电源计划

电池保留电池电量 保留电池电量使用电池:7%接通电源:7%"保留电池电量"通常是指设备为了延长电池整体寿命而采取的一种策略,比如在电池充电时不会充满至100%,而是维持在一个较低的安全水平(例如93%),以减少电池的高压力状态,这是一种电池维护功能。 关键级 关…

Web应用课 3.1 JavaScript——变量与运算符、输入输出、判断、循环

JS的调用方式与执行顺序 使用方式 HTML页面中的任意位置加上<script type="module"></script>标签即可。 常见使用方式有以下几种:直接在标签内写JS代码。 直接引入文件:<script type="module" src="/static/js/index.js">&…

综述 | 农业大模型:关键技术、应用分析与发展方向

分享一篇农业大模型综述。 官网全文免费阅读知网阅读农业大模型:AI领域的新热点 农业大模型,基于Transformer架构,通过自监督学习方法,在大规模数据上进行训练,展现出了卓越的通用能力和强大的下游任务适应性。这些模型不仅能够处理复杂的关联表示,还在多模态信息处理等方…