输入“/”快速插入内容

DeepMind | 在生成的过程中进行检索:一种有潜力完全替代RAG的思路"RICHES"

2024年8月28日修改
作者:NLP PaperWeekly
大家好,我是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
Authors: Palak Jain, Livio Baldini Soares, Tom Kwiatkowski
Institution: Google DeepMind
1 Motivation
• 当前的 RAG 系统 需要将检索和生成分开,导致多系统流水线复杂且难以训练。
• LLMs 容易产生幻觉,无法及时引入新内容,无法解释新鲜的、在训练时无法获得的知识。
2 Methods
RICHES 通过 将检索与生成统一到单一的解码过程中,RICHES旨在通过提示(prompting)适应多样化的新任务,从而减少对额外训练的需求。 通过直接解码文档内容或与之相关的自然语言检索键,提高了检索效率,并允许在单个解码过程中进行多跳检索和思考规划。
1 RICHES 的工作流程
1.
1. 输入问题 :用户输入一个问题。
2.
2. 生成检索键:从 FM-Index 中生成指向相关文档的检索键。
3.
3. 解码过程:使用 LLM 进行解码,生成包含检索键和非约束文本的序列。
4.
4. 选择最优序列:从多个候选序列中选择最优序列作为答案。
5.
5. 输出答案 :输出答案,并可以提供属性证据,指明答案的来源。
2 详细方法和步骤
1.
1. 检索键生成 : 通过解码文档内容或相关的自然语言 检索键 来检索文档,这些键指向它们生成的文档。
FM-Index 索引 :使用 FM-Index 索引检索语料库,将文本的所有后缀按照字典序排列并压缩成更紧凑的形式。
检索键:从 FM-Index 中生成指向文档的检索键,例如段落、句子或命题。 检索键可以是文本片段,也可以是经过命题化处理的文本片段。
2.
2. 约束解码 : 使用 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