LLM Agent之再谈RAG的召回信息密度和质量

话接上文的召回多样性优化,多路索引的召回方案可以提供更多的潜在候选内容。但候选越多,如何对这些内容进行筛选和排序就变得更加重要。这一章我们唠唠召回的信息密度和质量。同样参考经典搜索和推荐框架,这一章对应排序+重排环节,考虑排序中粗排和精排的区分主要是针对低延时的工程优化,这里不再进一步区分,统一算作排序模块。让我们先对比下重排和排序模块在经典框架和RAG中的异同

  • 排序模块

    • 经典框架:pointwise建模,局部单一item价值最大化,这里的价值可以是搜索推荐中的内容点击率,或者广告中的ecpm,价值由后面使用的用户来决定

    • RAG:基本和经典框架相同,不过价值是大模型使用上文多大程度可以回答问题,价值的定义先由背后的大模型给出,再进一步才能触达用户。更具体的定义是,排序模块承担着最大化信息密度的功能,也就是在更少的TopK内筛选出尽可能多的高质量内容,并过滤噪声信息。

  • 重排模块

    • 经典框架:Listwise建模,通过对item进行排列组合,使得全局价值最大化,进而使得用户多次行为带来的整体体验感更好。这里的整体可以是一个搜索列表页,一屏推荐信息流,也可以是更长的一整个session内用户体验的整体指标,以及背后的商业价值。常见的做法是打散,提高连续内容的多样性,以及前后内容的逻辑连贯性,不过打散只是手段,全局价值才是终极目标

    • RAG:概念相似,通过重排优化模型对整体上文的使用效率。优化模型对上文的使用,提升信息连贯性和多样性,最小化信息不一致性和冲突。不过当前大模型对话式的交互方式更难拿到用户体验的反馈信号,想要优化用户体验难度更高。

下面我们分别说两这两个模块有哪些实现方案

1. 排序模块

上一章提到使用query改写,多路索引,包括bm25离散索引,多种embedding连续索引进行多路内容召回。这种方案会提供更丰富的内容候选,但也显著增加了上文长度。而很多论文都评估过,过长的上文,以及过长上文中更大比例的噪声信息,都会影响模型推理的效果,如下图

img

因此如何从这些召回内容中排序筛选出更出质量更高的内容,过滤噪声信息就是排序模块需要做的。考虑不同索引之间对于相似度的计算打分相互不可比,更不可加,因此需要统一的打分维度来对候选内容进行排序,这里提供两个无监督的混合排序打分方案

1.1 RRF混排

  • Hybrid search scoring (RRF) - Azure AI Search | Microsoft Learn

  • Ensemble Retriever | 🦜️🔗 Langchain

多路召回混合排序较常见的就是Reciprocal Rank Fusion(RRF),把所有打分维度都转化成排名,每个文档的最终得分是多路打分的排名之和的倒数。通过排名来解决不同打分之间scale的差异性。公式如下,其中r(d)是单一打分维度中的文档排名,K是常数起到平滑的作用,微软实验后给的取值是60。

img

以下是微软搜索中使用RRF类合并文本检索和向量检索的一个示意图,使用RRF分别对文本检索和向量检索的多路召回内容进行混合排序

img

1.2 信息熵打分

除了使用排名来对各路召回的内容质量进行归一化,当然也可以使用统一的模型打分来对内容质量进行衡量,比如可以使用Bert Cross-Encoder BGE-Reranker来对所有候选文档来进行打分排序,利用cross模型比embedding模型更精准的特点来进一步对召回内容进行过滤。

这里我想聊聊除了相关性之外的另一个内容质量评估维度 - Information-Entropy。Information-Entropy是从文本信息熵的角度对内容有效性和质量进行打分筛选,有以下几种不同的信息熵度量方式

1.2.1 Selective-Context

Unlocking Context Constraints of LLMs: Enhancing Context Efficiency of LLMs with Self-Information-Based Content Filtering

img

Selective-Context使用自信息对内容质量进行评估。上一次碰到自信息,还是在做新词挖掘的算法。放在内容质量筛选也是同样的道理,熵值越低(不确定性越低),自信息越低的token带给语言模型的信息量就越低,例如停用词,同义词等等。因此自信息更低的内容本身的价值更低。不过自信息的计算是token粒度的,想要对短语,句子,段落进行计算可以近似采用token求和的方式,也就是假设token之间是相互独立。但是越大粒度的信息合并,简单求和的自信息误差越大,因为token并非真正独立。因此单纯使用内容自信息的计算方式更适合短语粒度的上文内容压缩,似乎不完全适合对RAG召回的段落内容进行打分,不过不要着急接着往后看哟~

以下是Selective-Context通过自信息对Context进行压缩的效果,至于压缩幅度和压缩后对模型推理的影响我们放到最后一起对比

img

1.2.2 LLMLingua

LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models

LLMLingua同样是使用token熵值来对内容质量进行打分,不过进一步放松了token独立性的假设。 计算公式如下,先把整个上文context分段,论文使用100个token为一段。以下Sj,i��,�为第j个段落中第i个字,~Sj�~�是第j个段落前所有段落经过压缩后的内容。也就是在计算当前段落每个字的熵值时,会把之前已经压缩过的内容拼接在前面,使得对更大粒度的段落熵值估计更加准确。

img

1.2.3 LongLLMLingua

LongLLMLingua: Accelerating and Enhancing LLMs in Long Context Scenarios via Prompt Compression

LongLLMLingua进一步把完全基于内容的信息熵,优化成了基于内容回答问题的条件熵,更完美的适配RAG框架中排序模块对召回内容整体打分的要求。

以上LLMLinugua和Selective-Context单纯对上文内容的熵值进行计算,但很有可能熵值高的内容虽然包含大量信息但都和问题无关,只是单纯的信息噪声。因此LongLLMLingua在熵值计算中引入了问题,那无非就是两种计算方案,要么给定问题计算内容的熵值,要么给定内容计算问题的熵值。论文考虑内容中可能是有效信息和噪声信息的混合,因此选用了后者。也就是给定每段召回内容,计算问题的熵值。

这里论文还在问题前加了一段指令,"Xrestrict=���������=we can get the answer to this question in the given documents",通过增加内容到问题的关联程度,来优化条件熵的计算。

img

论文对比了不同打分排序方案,包括BM25,各种向量embedding,以及LLMLingua,其中LongLLMLinuga在TopK文档的召回率上显著更优,如下图。具体的压缩率和推理效果对比,我们放到后面的重排模块一起来说。

img

LongLLMLingua在以上的段落打分之外,还加入了对段落内部token级别的内容压缩。也就是先筛选TopN段落,再在段落内筛选有效Token。不过看论文效果感觉段落排序的重要性>>内容压缩,这部分就不再赘述,感兴趣的朋友去看论文吧~

重排模块

针对排序模块筛选出的TopK上文候选,重排模块需要通过对内容进一步排列组合,最大化模型整体推理效果。和排序模块最大的差异在于它的整体性,不再针对每个Doc进行独立打分,而是优化整个Context上文的效果。主要有以下两个优化方向:一个是文档位置的优化,一个是文档之间关联性的优化

文档位置

  • LongLLMLingua: Accelerating and Enhancing LLMs in Long Context Scenarios via Prompt Compression

  • Lost in the Middle: How Language Models Use Long Contexts

  • https://api.python.langchain.com/en/latest/document_transformers/langchain.document_transformers.long_context_reorder.LongContextReorder.html#

img

针对文档位置的最优化就是Lost in the Middle(上图),相信大家可能都比较熟悉。简单说就是大模型在使用上文推理时,倾向于使用最前面和最后面的内容,而对中间的内容爱搭不理。因此可以基于内容的质量,把重要的内容放在Context的前面和后面。

LongLLMLingua也做了类似的尝试,并且认为前面的位置比后面更加重要,因此直接使用上面排序模块对段落的打分,对排序后保留的候选内容,进行重新排列,按照分数由高到低依次从前往后排列。

img

最后来一起看下效果,在LongLLMLingua中,论文对比了各种相似度排序方案保留TopN文档,并使用该排序方案进一步重排内容的效果。在2倍和4倍的压缩率下LongLLMLingua的效果都是显著最好的,不过可以发现只使用LongLLMLingua进行排序(Retrieval-base Methods)并做重排(Reorder列)的效果其实就已经不差了,而段落内部的token压缩更多是锦上添花。

img

文档关联性

  • LOTR (Merger Retriever) | 🦜️🔗 Langchain

  • MetaInsight: Automatic Discovery of Structured Knowledge for Exploratory Data Analysis

以上排序和重排的逻辑,都是考虑问题和召回内容之间的关联性,但都没有引入Context内部不同召回内容之间的关联性。

langchain的LOTR (Merger Retriever)实现了部分类似的功能,包括使用embedding对多路召回的内容进行消重,以及对内容进行聚类,每个聚类中筛选最靠近中心的一条内容。这一步可以放在排序中去做,也可以放在排序后的重排模块。

之前解密Prompt系列19. LLM Agent之数据分析领域的应用章节提到的微软的MetaInsight也引入了类似的打散逻辑。其中

  • 内容的整体价值=每条内容的价值之和-内容之间重合的价值

  • 两两内容重合价值=两条内容打分的最小值*内容重合率

那放到RAG框架可能就可以使用以上的信息熵来作为打分,相似度来作为重合率

img

img

这块我们也在尝试中,所以没有结论性的内容,这里只抛出几个问题,有试验过效果的有缘人可以在评论区回复

  • 信息连贯性:把内容相似的多个召回连续排列,会比散落在Context各处效果更好么

  • 信息多样性:对召回内容进行聚类,把内容相似观的多个召回进行消重,或者只使用每个cluster内距离类中心最新的一条或TopN条内容,会提升推理效果么

  • 信息一致性:观点或内容冲突的多个召回内容,对推理的影响有多大

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

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

相关文章

大白话说区块链和通证

1 区块链 简单地说,区块链其实就像是一个不可篡改的分布式数据库,该分布式数据库记录了一系列交易或事件。区块链运行在至少1个以上的节点上,每个节点都有自己的一个分布式数据库,也就是分布式账本。正常情况下,每个节…

C 练习实例19

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如61+2+3.编程找出1000以内的所有完数。 程序分析:请参照:C 练习实例14。 步骤分析: 写一个函数判断是否是完数 找出…

软文写作三大原则与技巧,媒介盒子分享

网络技术的快速发展带来传播环境的巨变,软文已经成为各大企业宣传的主要形式之一。而软文广告的核心就是其文案,一个好的软文不仅能够传达品牌理念,还能吸引用户了解品牌,提高转化率,今天媒介盒子就来和大家聊聊软文写…

二叉树的直径,力扣

目录 题目地址: 题目: 我们直接看题解吧: 审题目事例提示: 解题方法: 难度分析: 解题方法分析: 解题分析: 补充说明: 代码优化: 题目地址: 543. 二…

Minitab 20安装包下载及安装教程

Minitab 20下载链接:https://docs.qq.com/doc/DUmNYVGxtUnZkWUpk 1.选中下载好的安装包,鼠标右键解压到”Minitab 20“文件夹 2.选中Setup,鼠标右击选择“以管理员身份运行” 3.点击“下一步” 4.点击“下一步” 5.勾选我接受许可协议中的条…

wblogic中间件配置数据源

配置数据源 1.服务-数据源-配置-新建 2.单机选一般数据源 3.选择源名称、jndi名称、数据库类型 4.选择驱动 5.下一步 6.输入连接串信息 参考&#xff1a; 格式二&#xff1a;jdbc:oracle:thin:<host>:<port>:<SID> 数据库名称配置的sid 7.测试配置&#xff…

CEC2017(Python):七种算法(RFO、DBO、HHO、SSA、DE、GWO、OOA)求解CEC2017

一、7种算法简介 1、红狐优化算法RFO 2、蜣螂优化算法DBO 3、哈里斯鹰优化算法HHO 4、麻雀搜索算法SSA 5、差分进化算法DE 6、灰狼优化算法GWO 7、鱼鹰优化算法OOA 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., &…

MINCO+汽车

对于环境中的静态障碍物&#xff0c;我们构造几何自由空间来约束自我车辆的完整模型以保证安全。 对于动态障碍物&#xff0c;我们使用凸多边形来覆盖其形状。 然后&#xff0c;我们约束小车与障碍物多边形在每一时刻的符号距离[1]的下界近似&#xff0c;以保证小车的安全。 …

ssm基于BS架构的法律咨询系统的分析与设计论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统法律咨询信息以及法规信息管理难度大&#xff0c;容错率低…

MSVCP140_1.dll文件丢失的解决方法指南,MSVCP140_1.dll最快捷的修复手段

在近些年里&#xff0c;随着电脑技术的迅猛进步&#xff0c;我们对操作系统变得越来越依赖。然而&#xff0c;在使用过程中&#xff0c;我们也可能偶遇一些技术挑战&#xff0c;比如遇到 MSVCP140_1.dll 文件丢失的问题。本文旨在深入探讨这个常见的技术难题&#xff0c;并为大…

飞腾Ubantu22.04.3安装OpenNebula测试

目前登录权限存在问题-待解决。 1.概述 因OpenneBula官方镜像源只有AMD架构的镜像包不存在ARM的镜像包&#xff0c;借此用源码编译进行测试。 2.官网github地址 下载解压存放在服务器上&#xff1a; https://github.com/OpenNebula/minione/blob/master文件目录&#xff1…

LLM之RAG实战(十二)| 在RAG管道中实现上下文压缩和过滤

在RAG中可能面临的最大问题之一是检索器应该检索什么内容&#xff1f; ​ 实际使用中&#xff0c;检索到的上下文并不完全有用&#xff0c;可能检索处理较大的块中只有非常小的一部分与答案相关&#xff0c;还可能对于一个特定的问题需要来自多个块合并来得到答案。 一…

微同城本地小程序源码系统:顺风车+二手市场+跑腿功能+信息发布+广告功能 带完整的搭建教程

随着移动互联网的普及&#xff0c;小程序已成为各行业进行线上业务拓展的重要工具。微同城作为一款集顺风车、二手市场、跑腿功能、信息发布和广告功能于一体的本地小程序源码系统&#xff0c;旨在满足现代城市居民的多元化需求&#xff0c;提供一个方便、快捷、实用的服务平台…

k8s快速搭建

VMware16Pro虚拟机安装教程VMware16.1.2安装及各版本密钥CentOS7.4的安装包:提取码&#xff1a;lp6qVMware搭建Centos7虚拟机教程 搭建完一个镜像 关机 拍摄一个快照,克隆两个作为子节点 0. 环境准备 在开始之前&#xff0c;部署Kubernetes集群机器需要满足以下几个条件&#…

网络调试 UDP1,开发板用静态地址-入门5

https://www.bilibili.com/video/BV1zx411d7eC?p11&vd_source109fb20ee1f39e5212cd7a443a0286c5 1, 开发板连接路由器 1.1&#xff0c;烧录无OS UDP例程 1.2&#xff0c;Mini USB连接电脑 1.3&#xff0c;开发板LAN接口连接路由器 2. Ping开发板与电脑之间通信* 2.1 根据…

【霹雳吧啦】手把手带你入门语义分割の番外11:U2-Net 源码讲解(PyTorch)—— 代码的使用

目录 前言 Preparation 一、U2-Net 网络结构图 二、U2-Net 网络源代码 1、train.py &#xff08;1&#xff09;parse_args 参数 &#xff08;2&#xff09;SODPresetTrain 类 &#xff08;3&#xff09;SODPresetEval 类 &#xff08;4&#xff09;main 函数 &#x…

HackTheBox - Medium - Linux - Investigation

Investigation Investigation 是一款 Linux 机器&#xff0c;难度为中等&#xff0c;它具有一个 Web 应用程序&#xff0c;可为图像文件的数字取证分析提供服务。服务器利用 ExifTool 实用程序来分析图像&#xff0c;但是&#xff0c;正在使用的版本存在命令注入漏洞&#xff…

年度最整洁的海盗3.0版本

在修改海盗3.0客户端源码的时候&#xff0c;一直都存在这样的一个问题&#xff1a; 客户端在某些特定的情况下&#xff0c;会报内存错误导致程序崩溃。 经过调试&#xff0c;发现是那个MindPower3D的dll&#xff0c;在跳转地图等情况下卸载清理内存的时候&#xff0c;会偶发出…

进程的介绍及相关命令

首先&#xff0c;先了解一下计算机五大性能的命令 cpu top w 内存 top free 硬盘剩余 df 硬盘读写性能 iostat 网络带宽 iftop 一&#xff0c;进程与程序 1&#xff0c;什么是程序 &#xff1a; 硬盘上躺着&#xff0c;执行特点任务的一串代码 2&am…

Transformer从菜鸟到新手(三)

引言 这是Transformer的第三篇文章&#xff0c;上篇文章中我们了解了多头注意力和位置编码&#xff0c;本文我们继续了解Transformer中剩下的其他组件。 层归一化 层归一化想要解决一个问题&#xff0c;这个问题在Batch Normalization的论文中有详细的描述&#xff0c;即深层…