DR-RAG:理想汽车最新RAG研究成果,准确率和响应时间远超其他RAG框架
DR-RAG:理想汽车最新RAG研究成果,准确率和响应时间远超其他RAG框架
发布时间:2024 年 06 月 11 日

RAG
DR-RAG: Applying Dynamic Document Relevance to Retrieval-Augmented Generation for Question-Answering
先亮个观点:Retrieval-Augmented Generation (RAG) 确实让大模型在处理知识密集型任务,比如问答,这件事上有了质的飞跃。它通过整合外部知识库,给查询上下文做了个“外设”,回答的准确性自然就上去了。但问题也随之而来——每次查询都得反复调用大模型,效率实在谈不上高;而且,单靠一次检索,想把所有相关文档一网打尽,几乎是不可能的。关键在于,我们发现有些文档,虽然乍一看和查询关系不大,但通过把某个文档片段与查询本身“撮合”一下,反而能顺藤摸瓜,找到其他真正关键的资料。
基于这个思路,我们搞出了DR-RAG(Dynamic-Relevant Retrieval-Augmented Generation)。简单说,这是一个两阶段检索框架,目标很明确:提升文档召回率和答案准确性,同时还不拖慢速度。具体操作上,我们用了一个小型分类器,搭配两种选择策略,来判断检索到的文档到底对回答问题有没有贡献,然后只留下那些真正相关的。这样一来,整套流程只需要调用一次大模型,效率大幅提升。在多跳问答数据集上的测试结果也印证了这一点——DR-RAG在答案准确性上带来了显著进步,算是给QA系统打了个样。
论文地址:https://arxiv.org/abs/2406.07348
1. DR-RAG有多厉害?
咱们直接来看两组硬核数据。上面那两个表格,展示的是DR-RAG和其他几个主流RAG框架(比如Adaptive RAG和Self RAG)的PK结果。结论很清楚:在多个测试数据集上,DR-RAG的准确率都更高。而且,即便在相同的TopK参数设定下,它的召回率也更高——这意味着它能捞到更多真正有用的信息,回答对的概率自然就更大了。
再看上面这个具体案例的对比图,差异就更直观了。在一些问题上,DR-RAG的回答明显比Adaptive RAG更准确。
比如图中这个例子:传统的检索器,能轻松拿下那些和查询高度相关的“静态文档”(图里用红色标出),但对于那些相关性不高(用蓝色标出)、却对最终答案至关重要的“动态文档”,就显得力不从心了。
静态相关文档(Static-Relevant Documents,SRD):对答案生成至关重要且紧密相关的文档。
动态相关文档(Dynamic-Relevant Documents,DRD):相关性不高,但对答案生成同样关键的文档。
具体到“谁是彼得·安德烈亚斯·海伯格孩子的妻子?”这个问题,与“彼得·安德烈亚斯·海伯格”和“孩子/儿子”高度相关的静态文档,检索器很容易找到。但那个动态文档(蓝色),只是和问题中的“配偶/妻子”沾边,就很容易被淹没在知识库里海量的“配偶”信息中,排名一降再降。有意思的是,在静态和动态文档之间,“约翰·路德维格·海伯格”和“妻子”这条线其实非常紧密。如果检索时能把“配偶/妻子”这个信息也考虑进去,那这个动态文档就很容易被挖出来,答案也就豁然开朗了。
2. 什么是DR-RAG?
DR-RAG的全称是 Dynamic Relevant Retrieval-Augmented Generation,动态相关检索增强生成。这项工作是理想汽车团队和中山大学、东北大学、四川大学等高校一起搞出来的。
从上面那个例子就能看出,DR-RAG最擅长的,恰恰是发现那些“看起来不相关,但实际上很关键”的文档。它能这么厉害,核心在于采用了一个两步检索框架,专门用来深度挖掘查询和文档之间潜在的关联。
具体流程,如上图所示:
• 第一步,先根据和查询的高度相关性,快速拉取一波静态相关文档(SR-Documents)。
• 第二步,把拉到的静态文档和原始查询结合起来,用这个“组合拳”再去检索一波动态相关文档(DR-Documents)。
• 最后,把每个动态文档单独拎出来,和查询以及静态文档串在一起,丢进一个分类器里,从中筛选出最具相关性、最有价值的那几个。
(话说回来,翻遍了整篇论文,好像没找到这个分类器具体怎么训练、怎么复现的细节——可能是我看漏了。)
想让RAG回答得更准,关键就是尽可能喂给它最需要的资料。但理论上,我们检索的文档越多,模型获得的信息就越全面。然而,仅仅依靠相似性匹配,很难把所有静态和动态相关的文档一网打尽。
大家通常的做法是简单粗暴地提高K值。比如在MuSiQue系统里,K值从3提到6,召回率只从58%涨到76%,依然有很多关键文档没捞着。更糟的是,捞上来的不相关文档还会给大模型带来一堆噪声干扰。
所以,DR-RAG的思路其实很聪明:在保持top-k不变的前提下,通过提升对动态相关文档的识别和召回能力,来从根上改善检索效果。
3. 性能分析
3.1 召回率对LLM的影响
召回率对RAG和LLM来说,就是生命线。如果模型吃到的信息是残缺的,甚至压根没吃到关键的,那它产生“幻觉”、瞎编乱造的概率就会直线飙升。在2Wiki数据集上,DR-RAG只选了前6个文档,就达到了惊人的98%召回率,这就意味着模型拿到的信息几乎是完整的,准确性自然就有了保障。
3.2 冗余信息对LLM的影响
相反,如果上下文里的噪声能少一些,大模型就能更清清爽爽地理解问题,减少误解的概率。实验发现,当喂给模型的文档数量增多时,无效信息的比例可能会猛增近三成。但问题是,模型自己很难分辨哪些是有用的,哪些是来捣乱的。它很可能被这些冗余信息带偏,给出一个错误的答案。
这里的关键原则是:在RAG流程中,要尽可能减少给模型塞冗余或不准确的信息。
还是以2Wiki数据集为例,当喂给模型的文档数量k为4或6时,如果从CIS(简单的分类器逆选)方法切换到CFS(分类器正向选择)方法,你会发现召回率提升并不明显,甚至有些评价指标反而下滑了。这就说明,光提高召回还不行,如何平衡信息的冗余度和相关性,才是真功夫。所以作者才推出了CFS方法,专门来处理这个问题。
3.3 用更少的文档来提升召回率
CFS策略的精髓,就是在降低实际喂给模型的文档数量的同时,反倒提升了召回率。这是因为在二次检索阶段,由于核心文档已经被找到了,再为每对查询-文档找匹配项,就变得意义不大,甚至有些冗余。实际结果是,模型最终拿到的文档数量可能比预设的k值要少。比如在HotpotQA数据集上,当k设为6时,平均只有5.35份文档被真正喂给了LLM。这反而减少了无关信息的干扰。
和另一种QDC(查询文档拼接)方法相比,CFS方案在检索到的文档更少的情况下,实现了更高的召回率。最终在三个主要的评价指标上,CFS都拿到了更高的分数。这说明,在减掉冗余输入的同时,它的检索性能反而更出众了。
3.4 响应速度优化
和以往的RAG框架比起来,DR-RAG在整个流程的时间管理上,优化得相当出色。很多RAG框架在拿到最终答案前,要反复调用大模型,计算开销巨大,时间成本更是天文数字——毕竟,光调用一次大模型就够慢了,多次调用简直不可想象。
为了解决这个问题,作者设计了一个参数少、规模小的小模型,用来高效执行筛选策略,完全避免了频繁调用大模型。从上表的数据来看,和Adaptive-RAG相比,DR-RAG平均节省了74.2%的时间消耗。这个时间成本上的巨大优势,让DR-RAG在实际工程应用中,价值一下子就凸显出来了。