Query Rewrite —— 基于大模型的query扩展改写,PRF+ GRF协同发力减少LLM的幻觉问题(论文)

通过GRF和PRF,可以有效提升召回率,和top的数据质量。两者可以相互互补,发挥更好的作用。

论文:Generative and Pseudo-Relevant Feedback for Sparse, Dense and Learned Sparse Retrieval

什么是PRF ?

Pseudo-relevance feedback (伪相关反馈)
为了解决模型的幻觉问题,在改写前,先拿原始query去进行一次query,然后将召回的数据作为参考内容,送给模型,根据这些内容重新生成query。
优势:可以一定程度上解决模型幻觉问题,有效解决解决词汇表不匹配问题。毕竟是根据query召回的内容去生成query的。
劣势:这将会很依赖首次的检索,如果召回的数据质量很差,就GG了。

什么是GRF

generative-relevance feedback (生成相关反馈)
最近关于生成相关性反馈(GRF)的研究表明,使用从大型语言模型生成的文本的查询扩展模型可以改进稀疏检索,而不依赖于第一次检索的有效性。这项工作将GRF扩展到密集和学习的稀疏检索范式。GRF是在检索前, 靠模型,依赖模型的知识能力去扩展query
优势:不依赖首次检索。GRF相比较PRF,会有10%的提升。
劣势:靠模型根据query生成,会存在幻觉问题。
如何用好GRF,才能减少幻觉问题?

更好的解决在改写过程中模型的幻觉问题

GRF和PRF具有不同的好处,GRF提供的外部上下文在首次检索中不存在上下文,而PRF将查询基于目标语料库中包含的信息。因此, GRF + PRF 是一个更好的工作方式。令GRF和PRF占不同的权重,是融合的方法。

论文中的核心思想

  论文:Generative and Pseudo-Relevant Feedback for Sparse, Dense and Learned Sparse Retrieval

论文中阐述了PRF和GRF的不同。用实验数据证明了GRF在召回率提升方面,比PRF好10%左右。 但是PRF + GRF 能带来1+1 大于2的效果。

论文中阐述了GRF的实现细节

GRF如何使用

先用LLM针对query生成K条数据,注意是不同主题方向的数据,从而避免同质化的问题。对于向量检索。论文中给出的query和K条数据的融合方式是,先算K条数据向量的平均值。然后query的向量占一定比例。再和k条数据的平均值向量融合,各自占不同的比例。

对密集的GRF采用Rocchio PRF方法[19],以允许查询向量和反馈向量的不同权重。这允许嵌入llm生成的文本,以一种可控的方式上下文化查询向量。具体来说,公式1表明,新的向量,®𝐺𝑅𝐹,是原始查询向量,®𝑄,和生成的文档向量,®𝐷𝐿𝐿𝑀=1/𝑘×(®𝐷𝐿𝐿𝑀1+®𝐷𝐿𝐿𝑀2+...+®𝐷𝐿𝐿𝑀𝑘).的均值的组合我们包括𝛼和𝛽来衡量查询和GRF向量的相对重要性。

但是我觉得这篇论文,对GRF的阐述不够清晰。请看这篇文章,会有更清晰的理解。Query Rewrite —— 基于大模型的query扩展改写,通过GRM减少LLM的幻觉问题(论文)-CSDN博客

GRF 如何和 PRF融合

 论文提出了加权倒易秩融合方法(WRRF),该方法结合了GRF和PRF(PRF+GRF)。公式如下:

WRRF使用一个评分公式𝑟(𝑑),基于文档在特定运行中的排名。有一组要排序的文档𝐷,一组排名𝑅,以及𝑘参数,这样低排名的文档信号就不会消失(默认值通常是60,这里就是召回多少条数据)。我们添加了一个超参数𝜆,它加权了伪相关文档排名的相对重要性,𝑟∈𝑅𝑃𝑅𝐹,和(1−𝜆)的生成文档排名,𝑟∈𝑅𝑃𝑅𝐹。

超参数𝜆是决定PRF和GRF权重占比的参数。论文中给到的𝜆取值范围是[0.2,0.5],具体可以再调试,会有不同的效果。𝜆不同取值的召回率对比如下图。

GRF效果如何?

 从论文中,可以看到GRF整提效果都要好于PRF,不挂失在向量检索下还是在BM25检索场景下。

测试项说明 

BM25 [ 41 ]: Sparse retrieval method where 𝑘 1 parameter was tuned
between 0.1 and 5.0 using a step size of 0.2, while 𝑏 was tuned
between 0.1 and 1.0 with a step size of 0.1, as described earlier.
BM25+Relevance Model (RM3) [ 1 ]: We tune 𝑓 𝑏 _ 𝑡𝑒𝑟𝑚𝑠 (between
10 and 100 with a step of 10), 𝑓 𝑏 _ 𝑑𝑜𝑐𝑠 (between 10 and 100 with a
step of 10), and 𝑜𝑟𝑖𝑔𝑖𝑛𝑎𝑙 _ 𝑞𝑢𝑒𝑟𝑦 _ 𝑤𝑒𝑖𝑔ℎ𝑡 (between 0.1 and 0.9 with
a step of 0.1).
ColBERT-TCT (TCT) [ 22 ]: is a dense retrieval model incorporat
ing knowledge distillation over ColBERT [ 16 ]. We employ TCT
ColBERT-v2-HNP’s MS MARCO [ 36 ] model and use a max-passage
approach to convert our passage runs into document runs. For
ColBERT-TCT+PRF (TCT+PRF) [ 18 ], we tune Rocchio PRF pa
rameters: 𝑑𝑒𝑝𝑡ℎ (2,3,5,7,10,17), 𝛼 (between 0.1 and 0.9 with a step
of 0.1, and 𝛽 (between 0.1 and 0.9 with a step of 0.1).
SPLADE [ 12 ]: is a neural retrieval model which learns sparse
query and document weightings via the BERT MLM head and
sparse regularization. We index the term vectors using Pyserini
[20] and use their “impact” searcher for max-passage aggregation.
For SPLADE+RM3 , we tune 𝑓 𝑏 _ 𝑑𝑜𝑐𝑠 (5,10,15,20,25,30) 𝑓 𝑏 _ 𝑡𝑒𝑟𝑚𝑠
(20,40,60,80,100), and 𝑜𝑟𝑖𝑔𝑖𝑛𝑎𝑙 _ 𝑞𝑢𝑒𝑟𝑦 _ 𝑤𝑒𝑖𝑔ℎ𝑡 (between 0.1 and 0.9
with a step of 0.1).
ColBERT [16] & ColBERT+PRF [ 46 ]: We use the runs provided
by Wang et al. [47], which use pyterrier framework [26].

 

GRF + PRF 效果如何?

从下图我们可以看到,GRF + PRF同时使用,几乎总能带来正面的召回率提升效果。

 

### RAG 查询语句的优化与改写 #### 查询生成/改写的原理 为了提高检索效率和准确性,在RAG框架下,查询生成阶段利用LLM模型对用户的初始查询进行改写,从而生成多个版本的新查询。这些新查询旨在从不同角度捕捉用户意图,进而提升后续检索的质量[^1]。 ```python def generate_rewritten_queries(initial_query, llm_model): """ 对输入的初始查询进行多次改写,返回一系列新的查询列表 参数: initial_query (str): 用户提出的原始问题 llm_model : 已训练好的大型语言模型实例 返回: list of str: 多个经过改写的查询字符串组成的列表 """ rewritten_queries = [] # 基于llm_model生成多种可能的询问方式 for _ in range(5): # 控制生成数量 new_query = llm_model.rewrite_query(initial_query) rewritten_queries.append(new_query) return rewritten_queries ``` #### 向量搜索过程中的应用 对于每一个由上述方法产生的查询变体,系统会执行一次独立的向量匹配操作来获取最接近目标的信息片段。通过这种方式,即使原问题是模糊不清或是表述不够精确的情况下,也能找到更多潜在的相关资料作为候选答案源。 #### 排序机制的作用 值得注意的是,在完成多轮次的向量查找之后,RAG-Fusion引入了一种特殊的排序策略——即所谓的“倒数排名融合”。这一技术能够综合考虑各个查询路径下的文档关联度得分,并据此调整最终呈现给下游模块处理的结果顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值