再看RAG何时触发检索之ProbingRAG:兼看RAG引文生成的三阶段新思路

文摘   2024-10-23 10:03   北京  

今天是2024年10月23日,星期三,北京,天气晴。

本文来看两个工作:

一个RAG中的引文生成的工作,目前这个技术点广泛应用于AI搜索以及RAG系统当中。其中提到的三种引用方法的优缺点,可以做个笔记用。

一个是关于RAG中决定何时检索,Probing-RAG,可以再回顾下自适应RAG的思路,里面提到的几种代表性决策方法,也可以再温习下。

供大家一起参考并思考。

一、RAG自适应新思路-Probing-RAG

何时检索这个工作一直都是RAG的中高腰方向,例如,类似的工作Adaptive-RAG通过分类器根据查询复杂性决定检索次数;FLARE在生成句子中任何标记的概率低于阈值时触发检索;DRAGIN结合标记不确定性和注意力权重决定检索时机。

如下图1所示:

不反映LLM内部知识的外部查询复杂性分类器引导的多余检索步骤,可能会导致错误的答案。相比之下,右侧的例子显示了模型使用探针来识别不需要进一步检索的情况,从而能够生成正确的答案。这其实就是我们一直所说的自适应检索方案,允许语言模型根据任务类型或查询中包含的特定信息主动决定何时以及检索哪些外部信息。

这些方法可以大致分为三种主要方法:基于外部分类器的、基于LLM反馈的和基于置信度的技术。

其中:

基于外部分类器的方法专注于训练外部模型,以优化基于查询特征的检索决策。例如,Adaptive-RAG结合了一个额外的分类器,将查询分为三种类型:无需检索、单步检索或多步检索。这个分类器根据每个查询的复杂性选择最优的检索次数。

基于LLM反馈的方法依赖于对响应一致性的评估来指导检索决策。这些方法使用提示或多语言表述来评估模型响应的质量。如果LLM在其输出中检测到低一致性,它将触发检索以获取相关文档。

基于置信度的方法依赖于模型的token不确定性来指导检索决策。例如,FLARE在生成的句子中遇到概率低于某个阈值的任何token时启动检索,而DRAGIN同时考虑token不确定性和连续token之间的注意力权重来决定何时检索额外信息。

因此,也可以通过内部状态估计置信度:当仅依赖于最终层的词汇分布输出时,估计LLM的事实置信度面临挑战,最近的工作已经从置信度估计扩展到使用中间表示来减轻幻觉。Dola对比了较后层和较早层的logits,以获得更可靠的下一个token分布。Lookback Lens使用基于分类器引导的解码策略来减轻上下文幻觉。

例如,图2所示的各种自适应RAG方法的概念比较。

(A) 根据外部分类器测量的查询复杂性来决定是否执行检索;(B) 基于LLM的响应来决定检索; (C) 使用最终令牌选择的置信度来决定检索; (D) Probing-RAG使用探针模型来决定检索,该模型利用LLM的内部隐藏状态来,也就是最近的工作 《Probing-RAG: Self-Probing to Guide Language Models in Selective Document Retrieval》,https://arxiv.org/abs/2410.13339,

一句话说下具体实现思路,Probing-RAG通过使用预训练的探针(prober)来有效捕捉模型的内部认知,从而可靠地决定是否检索外部文档。

其中,Prober是一个前馈网络,具有单个隐藏层和输出层,用于二分类。它利用LLM中间层的隐藏状态来评估是否需要额外的检索步骤。

在位置上,为啥是中层,是因为语言模型的较低层捕获低级信息,而较高层捕获更抽象的高级信息。因此,探针被放置在模型的三分之一位置之后,以最大化这些表示的效用。

伪代码如下:

在处理流程上,在输入上,探针使用模型生成的理由(r)和预测答案(ˆa)对应的隐藏状态作为输入。最后,通过计算隐藏状态的平均值来降低维度,并对其进行归一化处理,以保持数值稳定性和一致性。

此外,在训练数据上, 使用Chain-of-Thought(CoT)提示让LLM生成理由和预测答案,并记录生成过程中的隐藏状态。根据预测答案的准确性分配标签,生成正负样本对。

训练过程方面,使用交叉熵损失函数训练探针模型。通过比较隐藏状态表示,探针学习区分何时检索能提高性能,何时不能。

二、RAG中的引文生成的再回顾

关于RAG中的引文生成,这块之前有说过longcite这些,核心就是微调,大模型具备这样的能力,例如,WebGLM,采用基于规则的方法匹配回应和参考,以过滤包含引用的高质量训练数据,并对LLMs进行微调,以学习将引用融入答案。

最近也有工作,《On the Capacity of Citation Generation by Large Language Models》,https://arxiv.org/abs/2410.11217,这篇论文提出了Generate-then-Refine方法,目的是解决生成一些错误引用的问题。

借此可以看看里面提到几种方案:

1、预引用方法

将引用视为常规标记,在LLMs推理过程中直接生成引用。这种方法对LLMs的能力要求较高,但生成的引用与参考文献之间的一致性较好。

2、后引用方法

首先生成没有引用的回复,然后匹配回复内容与参考文献,确定是否需要添加引用。这种方法生成的引用质量较差。

3、Generate-then-Refine方法

这种方法是结合预引用和后引用方法,生成初始回复后,添加相关引用并删除无关引用,从而提高引用质量而不改变回复文本,但核心还是需要通过微调LLMs来成为一个细化器,能够准确判断引用是否支持回复。

首先,使用LLM生成一个回答。这个回答可能包含了一些引用,但这些引用的质量可能不高,可能包含不相关的引用或者缺少必要的引用。

接着,使用一个微调过的模型(称为优化器)来评估和修改生成的回答中的引用。 优化器需要具备三种能力:保留相关引用:识别并保留回答中已经正确包含的相关引用;添加缺失的引用:识别回答中缺少的引用,并将其添加到回答中;移除不相关的引用:识别并移除回答中不相关或错误的引用。

而为了训练这个优化器,训练数据也有讲究,需要构建一个包含问题、参考材料、陈述和目标引用的训练数据集。

再数据的构建上,通过枚举所有可能的引用组合,并使用自然语言推理(NLI)模型来确定哪些组合真正支持陈述,从而构建高质量的目标回答。

总结

本文来看两个工作,一个RAG中的引文生成的工作,一个是关于RAG中的文档选择Probing-RAG,可以再回顾下自适应RAG的思路。

参考文献

1、https://arxiv.org/abs/2410.13339

2、https://arxiv.org/abs/2410.11217

关于我们

老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。

加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入


老刘说NLP
老刘,NLP开源爱好者与践行者。主页:https://liuhuanyong.github.io。老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
 最新文章