RAG查询改写方法概述

在RAG系统中,用户的查询是丰富多样的,可能存在措辞不准确和缺乏语义信息的问题。这导致使用原始的查询可能无法有效检索到目标文档。
因此,将用户查询的语义空间与文档的语义空间对齐至关重要,目前主要有查询改写和嵌入转换两种方法。

  1. 查询改写(Query Rewriting)通过修改原始用户查询,使其更加精确或更能反映用户的意图,从而提高检索结果的相关性和质量。
  2. 嵌入转换(Embedding Transformation)通过应用一个或多个转换模型(例如神经网络)来调整查询嵌入,使其更接近与目标文档的嵌入。

查询改写的方法包括Query2Doc,Doc2Query,HyDE,Step-Back Prompting,Rewrite-Retrieve-Read,ITER-RETGEN,Multi-query。下面依次介绍:

Query2Doc和Doc2Query

双向改写。
Query2Doc:使用LLM的一些提示生成伪文档,然后将它们与原始查询组合以创建新的查询,提高检索命中。
在这里插入图片描述

Doc2Query:与上面的相反,为每篇文档生成若干条query,使用这些关联的query来代替文档被检索。有点类似于为每篇文档做语义摘要,用摘要代替文档来做检索。

HyDE

Hypothetical Document Embeddings,通过LLM对用户的query生成一篇假设性的文档,然后根据这个文档的向量去查找相似的N个向量。 核心的原理就是,生成的假设性文档要比query更接近于文档的embedding 空间。

Query2doc认为,HyDE隐含地假设groundtruth文档和伪文档用不同的单词表达相同的语义,这可能不适用于某些查询。(二者的区别)

在这里插入图片描述
在这里插入图片描述
实现:1.https://docs.llamaindex.ai/en/stable/examples/query_transformations/HyDEQueryTransformDemo/

2.https://blog.csdn.net/hy592070616/article/details/132544684

Step-Back Prompting

这种方法基于首先提出一个更简单、更广泛的问题,该问题有助于理解和检索回答原始更复杂查询所需的基础信息。该过程分为两个基本步骤:抽象和推理。

详细步骤

  1. 抽象:不是直接回应查询,而是提示大型语言模型(LLM)生成一个关于与原始问题相关的更高级概念或原则的问题。这一抽象步骤将焦点从具体细节转移到更广泛的视角,有助于检索支撑复杂查询的一般性但相关的信息。

  2. 推理:在检索到有关高级概念或原则的基础事实后,LLM 应用抽象推理为原始查询推导出答案。此步骤利用从抽象信息中获得的上下文和概念洞察,以制定全面准确的响应。

在这里插入图片描述
实现:https://github.com/langchain-ai/langchain/blob/master/cookbook/stepback-qa.ipynb?ref=blog.langchain.dev

Rewrite-Retrieve-Read

该文章首先使用LLM对query进行改写,再进行检索和回答生成,而不是直接对原始的query进行内容检索和答案生成。

在这里插入图片描述

实现:https://github.com/langchain-ai/langchain/blob/master/cookbook/rewrite.ipynb?ref=blog.langchain.dev

ITER-RETGEN

先走正常流程进行检索增强生成,然后将前一次生成的结果+问题拼接,再去检索相关文档,继续生成新的结果;这个过程重复多次之后得到最终结果。
在这里插入图片描述

Multi-query

Multi-query 是一种查询改写(Query Rewrite)的进阶版技术,其核心在于同时生成多个与用户原始查询(query)类似的查询。通过这种方式,可以并行执行多个查询,从而大幅增加检索系统召回与原始查询相关内容的可能性。

在这里插入图片描述

参考:
1.https://arxiv.org/html/2404.01037v1
2.https://blog.csdn.net/wshzd/article/details/136564062
3.https://zhuanlan.zhihu.com/p/680232507
4.https://zhuanlan.zhihu.com/p/677540243

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

使用apache和htaccess对目录访问设置密码保护配置教程

对目录设置密码保护配置说明 我们有时候访问某些网站的时候,要求输入用户名和密码才能访问。这是为了保护隐私,只让经过许可的人访问。 在本教程中主要介绍两种方法,一种是通过apache httpd.conf配置文件对管理后台目录设置密码保护&#xff…

20232801 2023-2024-2 《网络攻防实践》实践九报告

20232801 2023-2024-2 《网络攻防实践》实践九报告 1.实践内容 (1)手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。 (2)利用foo函数的Bof漏洞,构造一个攻击输入字符串&#xf…

【科研】常用的实验结果评价指标(1) —— R2(R-square)是什么?

常用的实验结果评价指标(1) —— R2(R-square),可能为负数吗?! 提示:先说概念,后续再陆续上代码 文章目录 常用的实验结果评价指标(1) —— R2(R-square),可能…

Spring MVC分页示例

Spring MVC分页示例 分页用于在不同部分显示大量记录。在这种情况下,我们将在一页中显示10、20或50条记录。对于其余记录,我们提供链接。 我们可以在Spring MVC中简单地创建分页示例。在此分页示例中,我们使用MySQL数据库来获取记录。 创建…

2008NOIP普及组真题 4. 立体图

线上OJ: 一本通-1977:【08NOIP普及组】立体图 核心思想: 本题采用模拟方法一个一个画小方块(虽然画的是立体空间的积木,但本质还是在二维平面上画图形) 本题的难点在于: 1、如何确定二维平面画…

Spring Boot | Spring Boot 整合“ 邮件任务“ 实现

目录: Spring Boot 整合" 邮件任务" 实现 :一、发送 "纯文本邮件" :(1) 添加 "邮件服务" 依赖启动器(2) 添加 "邮件服务" 配置信息(3) 定制 "邮件发送服务"(4) "纯文本" 邮件发送 测试效果 二、发送 带 "附件…

Redis数据结构-Dict

1.3 Redis数据结构-Dict 我们知道Redis是一个键值型(Key-Value Pair)的数据库,我们可以根据键实现快速的增删改查。而键与值的映射关系正是通过Dict来实现的。 Dict由三部分组成,分别是:哈希表(DictHashTa…

java技术总结

1.java基本数据类型? byte 1,short 2 ,int 4,long 8 ,float 4,double 8,boolean 1,char 2 2.java为什么要有包装类型? 前 6 个类派生于公共的超类 Number,而 Character 和 Boolean 是 Object 的直接子类。 被 final 修饰, Java 内置的包装类是无法被继承的。 包装…

从头理解transformer,注意力机制(上)

深入理解注意力机制和Transformer架构,及其在NLP和其他领域的突破。 要想理解transformer,先从编码器解码器结构开始理解 基于transformer发展起来的llm 右边:只有解码器,强项是生成内容 左边:只有编码器&#xff0…

Ftp笑脸漏洞(VSFTPD 2.3.4)复现(后门漏洞)

Ftp笑脸漏洞(VSFTPD 2.3.4)复现(后门漏洞) 一、原理二、复现准备三、漏洞复现四、Metasploit利用脚本复现 一、原理 vsftpd 是“ very secure FTP daemon ”的缩写,安全性是它的一个最大的特点。 vsftpd是一个 UNIX 类…

NSS刷题

1、[SWPUCTF 2021 新生赛]gift_f12 打开题目后查看源码无发现,用f12发现flag 2、[GDOUCTF 2023]hate eat snake 打开链接是一个贪吃蛇小游戏,f12找到js文件中有一个speed的语句,该语句的作用是使速度增加,因此,将该语…

Linux虚拟机运行“yum install gcc-c++”报错“Loading mirror speeds from cached hostfile”

目录 一、在Linux上安装Redis时,在终端执行命令“yum install gcc-c”时,报错: 二、然后发现linux的网络不通,什么网站都访问不了 三、连上网后,再变换yum源 四、重新运行yum install gcc 一、在Linux上安装Redis时…

分布式与一致性协议之MySQL XA协议

MySQL XA协议 概述 相信很多人都知道MySQL支持单机事务,那么在分布式系统中,涉及多个节点,MySQL又是怎样实现分布式事务的呢? 举个例子,一个业务系统需要接收来自外部的指令,然后访问多个内部其他系统来执…

机器学习算法应用——神经网络回归任务、神经网络分类任务

神经网络回归任务(4-3) 神经网络回归任务,通常指的是使用神经网络模型进行回归分析。回归分析是一种统计学方法,用于研究一个或多个自变量(预测变量)与一个因变量(响应变量)之间的关…

【北京迅为】《iTOP-3588开发板从零搭建ubuntu环境手册》-第2章 获取并安装Ubuntu操作系统

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

使用2G内存求20亿个数字中出现次数最多的N个

又是一个TOP -N的题目 我看了一下CSDN上大多数人的回答和GPT说的差不多,都是说使用哈希之类的; 我今天说一下我的解法,首先说一下不太快的基础解法 20亿数字使用uint32需要80GB, (1)分为40块读取&#…

Apinto下载安装以及集群部署总结

下载 下载官方提供的安装包安装(推荐) wget https://github.com/eolinker/apinto/releases/download/v0.13.3/apinto_v0.13.3_linux_amd64.tar.gz && tar -zxvf apinto_v0.13.3_linux_amd64.tar.gz && cd apinto 安装 先确保已经入解…

3d如何同时贴两个图在模型上?---模大狮模型网

在3D设计中,为模型贴上纹理或图案是常见的操作,可以使模型更加逼真和生动。然而,有时候我们需要在同一个模型上同时贴上两个不同的图案,这可能会对初学者构成一定的挑战。在本文中,我们将分享一些简单而有效的方法&…

【数学】泰勒公式

目录 引言 一、泰勒公式 1.泰勒公式及推导 (1)推导 (2)公式 2.泰勒中值定理 (1)定理1(佩亚诺余项) (2)定理2(拉格朗日余项) …

【系统架构师】-选择题(十一)操作系统与嵌入式

1、紧耦合多机系统一般通过(共享内存)实现多机间的通信。对称多处理器结构(SMP)属于( 紧耦合)系统。 松耦合多机系统又称间接耦合系统,—般是通过通道或通信线路实现计算机间的互连。 2、采用微内核的OS结构…