EfficientRAG:多跳问题回答的高效检索器 论文链接: https://arxiv.org/pdf/2408.04259代码链接: https://github.com/NIL-zhuang/EfficientRAG-official摘要在处理复杂问题(如多跳查询)时,检索增强生成(RAG)方法往往面临挑战。尽管迭代检索技术通过收集额外信息来提高性能,但现有方法通常需要多次调用大型语言模型(LLM)。为了解决这一问题,作者提出了一种高效的多跳问答检索器——EfficientRAG。该方法在迭代过程中生成新的查询,避免了每次迭代都调用LLM,并能够过滤掉无关信息。实验结果表明,EfficientRAG在三个开放领域的多跳问答数据集上,性能优于现有的RAG方法。模型框架 EfficientRAG 是一种多轮检索生成(RAG)系统的高效方法,旨在通过多个检索轮次获取更相关的信息,并减少无关信息,从而提高答案的准确性和质量。上图显示了 EfficientRAG 如何集成到传统的 RAG 系统中,它的工作流程包括以下关键步骤和组成部分: 1. 检索阶段 2. 标签器和标注器(Labeler & Tagger) 3. 过滤器(Filter) 4. 多轮检索迭代 5. 终止条件与答案生成 综合数据构建利用大语言模型(LLM)合成用于标注器和过滤器的训练数据。该过程包括以下几个步骤:- 多跳问题分解:首先,给定一个多跳问题和相关片段,提示LLM将原始问题分解为多个单跳问题,每个单跳问题对应一个片段,并解析子问题的依赖关系。
- 令牌标记:对于每个子问题和相应片段,提示LLM标记与子问题回答相关的重要词语,使用二进制标签注释片段中的每个词,以确定其重要性。采用SpaCy工具包进行标记。
- 下一步问题过滤:给定单跳问题及其依赖问题的标记令牌,提示LLM生成下一步问题,提取下一步问题的令牌,过程与令牌标记相同。
- 负采样:对于每个过滤后的下一步问题,检索最相似但不相关的片段作为困难负片段,这些负片段将被标记。
训练训练EfficientRAG Labeler以完成两个任务:令牌标记和片段过滤,这两者都使用相同的输入。具体过程如下:- 编码与嵌入:使用自编码语言模型作为编码器,以推导连接序列query, chunk中每个令牌的嵌入。
- 令牌投影:使用一个全连接层将令牌嵌入投影到二维空间,指示“有用令牌”和“无用令牌”。
- 片段标签投影:另一个全连接层将序列嵌入的平均池化投影到二维空间,表示片段标签<Continue>和<Terminate>。
- EfficientRAG过滤器:以类似方式训练EfficientRAG过滤器,其输入序列是查询和标记令牌的连接。过滤器提取单词并将它们连接以形成下一步查询。
总结EfficientRAG 通过标签器、过滤器和多轮检索迭代的设计,解决了传统检索生成方法在处理复杂问题时的效率和准确性问题。它既能减少不必要的信息冗余,又能有效获取关键信息,提升最终答案的质量 |