DeepMind | 在生成的过程中进行检索:一种有潜力完全替代RAG的思路"RICHES"
大家好,我是HxShine
今天分享一篇 Google DeepMind 公司的一篇文章,Title: From RAG to RICHES: Retrieval Interlaced with Sequence Generation:从 RAG 到 RICHES:在生成过程中完成检索。
这篇文章提出了一种新的方法 RICHES,它将检索RAG与生成完全结合在一块。RICHES 消除了对单独构建RAG系统再结合LLM进行生成的模式,为传统的 RAG 系统提供了一种替代方案。它通过直接解码其内容来检索文档,并受到语料库的约束。RICHES允许我们仅通过提示即可适应各种新任务。RICHES 可以与任何指令微调模型一起使用,而无需额外的训练。它提供属性证据,支持多跳检索,并在单个 LLM 解码过程中交织思维以规划下一步要检索的内容。 实验表明RICHES 在 ODQA 任务(包括属性和多跳 QA)中都有非常好的性能。
RICHES是非常有潜力能替代RAG的一种方案,他能做到在生成的过程中完成检索,并且能做到边检索,边思考,边纠错,能解决复杂的多步推理问题。后续RICHES或许能成为LLM接入外部知识的一种新方案。同时其对检索数据的构建方法也有了更高的要求,需要在decode上做额外的设计,也增加了其使用难度。
一、概述
• Title: From RAG to RICHES: Retrieval Interlaced with Sequence Generation
• URL: https://arxiv.org/pdf/2407.00361
• Authors: Palak Jain, Livio Baldini Soares, Tom Kwiatkowski
• Institution: Google DeepMind
1 Motivation
• 当前的 RAG 系统需要将检索和生成分开,导致多系统流水线复杂且难以训练。
• LLMs 容易产生幻觉,无法及时引入新内容,无法解释新鲜的、在训练时无法获得的知识。
2 Methods
RICHES 通过将检索与生成统一到单一的解码过程中,RICHES旨在通过提示(prompting)适应多样化的新任务,从而减少对额外训练的需求。其通过直接解码文档内容或与之相关的自然语言检索键,提高了检索效率,并允许在单个解码过程中进行多跳检索和思考规划。
1)RICHES 的工作流程
- 输入问题:用户输入一个问题。
- 生成检索键:从 FM-Index 中生成指向相关文档的检索键。
- 解码过程:使用 LLM 进行解码,生成包含检索键和非约束文本的序列。
- 选择最优序列:从多个候选序列中选择最优序列作为答案。
- 输出答案:输出答案,并可以提供属性证据,指明答案的来源。
2)详细方法和步骤
- 检索键生成: 通过解码文档内容或相关的自然语言检索键来检索文档,这些键指向它们生成的文档。
FM-Index 索引:使用 FM-Index 索引检索语料库,将文本的所有后缀按照字典序排列并压缩成更紧凑的形式。
检索键:从 FM-Index 中生成指向文档的检索键,例如段落、句子或命题。检索键可以是文本片段,也可以是经过命题化处理的文本片段。
- 约束解码: 使用 FM-index 对模型输出进行约束,以确保它们存在于语料库中。
约束条件:在解码过程中添加约束条件,确保生成的序列与检索语料库中的序列一致。
约束解码技术: 使用多种约束解码技术,例如:
• 掩码技术:将不在检索语料库中的词汇的概率设置为 0,防止模型生成不存在的词汇。
• 前缀匹配:确保生成的序列以检索键开头。
• 长度限制:限制生成序列的长度,避免生成过长的序列。
def constrain(input_prefix):
# Fetch continuations for prefix
allowed_tokens = fm_index.get_continuations(input_prefix)
# Get next token probabilities
logprobs = LLM.logprobs(input_prefix)
# Disallowed tokens are set to -inf
for i in logprobs:
token = vocab[i]
if token not in allowed_tokens:
logprobs[i] -= np.inf
return logprobs
3)自适应beamsearch大小: 使用自适应beamsearch大小来平衡约束和非约束生成。
• 束搜索:使用束搜索技术来生成多个候选序列,从中选择最优序列作为答案。
• 自适应束大小:根据是受限序列还是非受限序列自适应调整beamsearch窗口大小。
约束序列:对于约束序列,使用较小的束大小,因为约束序列的搜索空间较小。
非约束序列:对于非约束序列,使用较大的束大小,因为非约束序列的搜索空间较大。
3 Few-shot prompt(QA的提示词)
1)single-hop QA
特点:
• keyword引入思考过程,辅助检索相关内容,同时keyword生成为非受限解码,给足充分的思考空间。
• passage生成《》内部用限制解码,精确解码检索相关知识,同时可以设置大的Beam size,充分发挥其能力。
• 迭代生成多个keyword,可以用于检索多个知识,以及修复检索错误的结果。
2)multi-hop QA
特点:
• keyword引入思考过程,辅助检索相关内容,同时keyword生成为非受限解码,给足充分的思考空间。
• passage生成《》内部用限制解码,精确解码检索相关知识,同时可以设置大的Beam size,充分发挥其能力。
• 迭代生成多个keyword,解决多跳问答需要搜索多个知识问题,同时迭代生成还能对其进行纠错,修复检索错误的结果。
3)特点总结
- 统一检索与生成:将检索操作与文本生成过程统一到一个单一的解码过程中,消除了对单独检索器和生成器的需求。
- 受限解码(Constrained Decoding):通过标记特殊的开始和结束符号来识别检索键,确保生成的文本是存在于预定义的语料库中的序列。
- 自适应束搜索(Adaptive Beam Search):为了处理交替出现的受限和非受限文本生成任务,引入了自适应束搜索策略,在受限序列生成时使用全束搜索,而在非受限生成时则使用贪心解码。
- 高效的约束实现:利用FM-index数据结构来支持快速的子字符串搜索操作,从而在解码过程中对模型输出进行语料库约束,确保生成的文本符合要求。
- 多种检索键选择:提供了多种检索键的选择,包括文档标题、段落子字符串、句子子字符串和命题索引,以适应不同的检索需求。
- 无需额外训练:可以与任何指令调整(Instruction-tuned)模型一起工作,无需额外的训练,这得益于统一检索与生成的方法可以直接通过提示适应新任务。
- 多跳检索和思考规划:支持多跳检索任务,允许模型在生成过程中穿插“思考”步骤,以帮助指导搜索过程,避免重复检索,并在必要时纠正错误的检索。
4)索引构建策略对比
多种索引策略优缺点分析:
• 文档标题和章节标题:
优点:这种策略利用了检索语料库的结构化信息,例如 Wikipedia 中的标题和章节标题,可以有效地组织文档并提供层次化的检索。
缺点:这种策略依赖于检索语料库的结构,对于结构不规范的语料库可能不适用。
• 段落子字符串:
• 优点:这种策略将段落作为检索单元,可以有效地检索段落级别的信息,例如开放式问答中的证据段落。
• 缺点:这种策略可能导致检索结果过多,因为每个段落都可能对应多个检索键。
• 句子子字符串:
• 优点:这种策略将句子作为检索单元,可以检索句子级别的信息,例如翻译任务中的翻译示例。
• 缺点:句子可能不够完整,无法提供足够的信息来回答问题。
• 命题索引(需要额外对文本进行分析拆解):
• 优点:这种策略将文档分解为原子命题,每个命题包含一个事实性信息。命题索引可以有效地检索事实性信息,例如开放式问答中的答案。
• 缺点:命题化过程需要额外的计算成本,并且可能无法涵盖所有类型的知识。
4 QA
Q1:如何选择合适的索引策略?:
• 任务类型:根据任务类型选择合适的索引策略。例如,对于开放式问答任务,可以选择段落子字符串或命题索引。
• 语料库结构:根据检索语料库的结构选择合适的索引策略。例如,**对于结构化的语料库,可以选择文档标题和章节标题。
实验结论:RICHES 论文中的实验结果表明,命题索引在开放式问答任务中表现最好,因为它可以有效地检索事实性信息,并且与 RICHES 的解码搜索策略更匹配。
Q2:基于命题索引究竟是什么,怎么来的?
- • Proposition定义:其需要对原始passage做原子处理,为文本中的原子表达式,每个Proposition命题都封装了独特的特征,并以简洁、自成一体的自然语言格式呈现一个知识点。
• Proposition命题构建步骤一:利用GPT4将passage转化成propositions(构建Flan-T5-large模型的训练语料)
• Proposition命题构建步骤二:训练Flan-T5-large model生成大量Proposition
5 Conclusion
• RICHES 可以将检索与序列生成统一在一起,不用去构建复杂的pipeline。
• RICHES可以解决各种 ODQA 任务,同时其复杂任务推理能力中表现出色,并可以与任何指令微调模型一起使用,而无需额外的训练。
• RICHES能在推理的过程中,一边检索知识,一边进行思考,还能对生成的结果进行校验,是比较有潜力替代RAG的一种方法。
本文转载自 NLP PaperWeekly,作者: NLP PaperWeekly