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

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵海之森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值