【FLARE】Active Retrieval Augmented Generation
论文题目:Active Retrieval Augmented Generation
论文地址:Active Retrieval Augmented Generation - ACL Anthology
会议:EMNLP 2023 main (Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing)
github 链接:jzbjyb/FLARE: Forward-Looking Active REtrieval-augmented generation (FLARE) (github.com)
笔记参考: Better RAG with Active Retrieval Augmented Generation FLARE (lancedb.com)
Abstract
传统方法采用retrieve-and-generate 的范式进行检索增强,这种方式一般仅检索一次。本文提出了一种名为Forward-Looking Active REtrieval augmented generation (FLARE)的主动检索的方法,可以在生成过程中主动决定何时检索以及检索的内容。
具体来说,它迭代式地对 待生成的句子进行预测,如果预测的句子中含有低置信度的token,就使用预测的结果作为query检索相关文档,然后重新生成句子。
long-form / short-form
单次检索增强大模型比纯参数化的模型在 short-form knowledge-intensive generation task上表现更好,这种任务的信息需求在用户的输入中是明确的,并且仅基于输入来检索相关知识就足够了。
short-form knowledge-intensive generation task 比如 factoid question answering
long-form knowledge-intensive generation task 比如long-form QA, open-domain summarization,chain-of-thought reasoning 任务。
而long-form的任务需要的信息常常在输入中不明显,与人类写文章时的过程类似,往往需要在生成的过程中多次收集信息。
多次检索方法的策略
之前的文章提出了两类多次检索的策略,但这些都不是主动决定何时检索以及检索内容。
-
每生成固定的n个token就找回一次【1】(In-Context RALM)【2】(IRCoT)
-
将问题分解为多个子问题,每个子问题检索一次,如多跳QA问题
multihop QA问题指需要阅读多个段落才能回答问题
核心思想
主动决定何时检索和检索的内容,并将检索到的内容会拼接在用户输入之前以辅助未来的生成。
何时检索: 当模型缺少相关知识时。因此作者认为当模型产生低概率或低置信度的token时说明LLM缺乏相关知识,需要进行检索。
检索什么:通过生成一个临时的下一个句子来预测未来,使用它作为查询来检索相关文档,然后结合检索到的文档重新生成下一个句子。
FLARE
原则
- 当需要信息时LLM才去检索
- 使用的query应该考虑未来生成的内容
提出了两类方法:
- F L A R E i n s t r u c t FLARE_{instruct} FLAREinstruct ,此方法使用鼓励检索的instruction,指示大模型在需要检索的时候生成检索query
- F L A R E d i r e c t FLARE_{direct} FLAREdirect,此方法直接使用LLM生成的内容作为检索query,它迭代地生成下一个句子,如果生成的句子中有低概率的token,就进行检索并重新生成下一个句子。
使用检索 instruction的FLARE ( F L A R E i n s t r u c t FLARE_{instruct} FLAREinstruct)
这种方式参考了Toolformer【3】的方式,模型通过输出**[Search(query)]**来表达检索信息的需求。
Toolformer 可以决定调用哪些 API、何时调用它们、传递哪些参数以及如何最好地将结果合并到未来的令牌预测中
如上图,分别产生了两个[Search(query)]进行检索信息。
这种方式在使用时既需要指导大模型完成任务的指令,又需要指导大模型生成检索query的指令,同时可能还需要指导大模型i将两者结合起来的指令。如下图
疑问,当需要检索时,模型生成会停止。而当检索到内容后,怎么让LLM结合检索的内容在停止的地方接着生成?
应该是在检索到相关文档后,将文档放在用户query的前部,然后去掉上一步生成的检索query,指示大模型继续生成。
缺陷
- LM不太愿意生成主动召回的标识。解决方法:将"[“对应的logit乘以2,以提高生成”["的概率。
- 过于频繁的主动召回可能导致生成经常被打断,影响生成的质量。解决方法:每当LLM生成一个"[“时,得到一个query,从而得到相关文档后,从生成中去掉检索query,并再接下来几个token的生成过程中,给”[“的logit加上一个较大的负值,从而禁止LLM生成”["。
- 这种方案需要微调大模型才能得到很好的生成检索query的效果。
根据置信度进行检索的FLARE( F L A R E d i r e c t FLARE_{direct} FLAREdirect)
- 根据用户的input作为初始query,进行第一次召回,检索到相关文档
- FLARE迭代地生成一个临时的下一句(没生成64个token,用NLTK工具从里面找到第一个完整的句子,扔掉多余的token)
- 检查是否有低概率的token,如果有,针对这个句子进行检索,召回相关文档。
- 利用召回出来的文本,重新生成这个句子,然后进行下一个句子的生成。
如果重新生成的句子中也有置信度低的怎么办?
利用含有低概率token句子进行检索的方法有两种。
- 屏蔽掉低置信度的token,然后进行向量召回
- 利用大模型的能力,对置信度低的部分进行提问,生成一个问题,用生成的问题进行检索
Self-ask 【4】也实现了在回答初始问题前生成显示query,但这种方法需要手动在下游任务中插入后续问题作为示例。
实验
在text-davinci-003的API上测试本方法
检索器:BM25用来检索Wikipedia dump, Bing search engine用来检索开放的网络信息
数据集
-
MultihopQA:2WikiMultihopQA
-
Commonsense reasoning:StrategyQA
-
Long-form QA:ASQA
-
Open-domain summarization:WikiAsp
结论
-
前瞻性的主动检索是非常有效的,而使用前一个句子进行检索的改进相对较小,我们假设这主要是因为前一个句子经常描述与下一个句子不同的实体或关系。
-
F L A R E i n s t r u c t FLARE_{instruct} FLAREinstruct效果不算好,说明教LM使用任务通用检索指令和范例生成搜索查询是具有挑战性的。
-
对40%-80%的句子进行触发检索,通常会导致跨任务/数据集的良好表现
相关工作
在文本和代码生成任务中人们研究了迭代检索和细化。【5】【6】【7】本文与它们的不同在于生成的粒度和检索策略的不同。
在主动检索方面,一些研究【8】【9】关注于单次检索场景,基于问题流行度以及生成概率,而本文关注需要主动信息访问的长文本生成任务。
限制
- 在Wizard of Wikipedia上,需要生成较短文本(20token)时,本方法不那么有效
- 在ELI5(需要深入研究开放式问题的长篇QA数据集)上,由于检索和评估时的真实生成困难【10】导致单次检索和FLARE相比于不见所都没有明显提升
- 直接的方式实现交替进行生成和检索会导致成本增加
- LLM需要被激活多次(每次检索一次),而一个无缓存的实现还需要在每次检索后重新计算之前的激活值。
References
【1】[2302.00083] In-Context Retrieval-Augmented Language Models (arxiv.org)
【2】ACL 2023 long Interleaving Retrieval with Chain-of-Thought Reasoning for Knowledge-Intensive Multi-Step Questions - ACL Anthology
【3】[2302.04761] Toolformer: Language Models Can Teach Themselves to Use Tools (arxiv.org)
【4】EMNLP 2023 findings Measuring and Narrowing the Compositionality Gap in Language Models - ACL Anthology
【5】[2302.12813] Check Your Facts and Try Again: Improving Large Language Models with External Knowledge and Automated Feedback (arxiv.org)
【6】EMNLP 2023 [2303.12570] RepoCoder: Repository-Level Code Completion Through Iterative Retrieval and Generation (arxiv.org)
【7】COLING 2022 Generate-and-Retrieve: Use Your Predictions to Improve Retrieval for Semantic Parsing - ACL Anthology
【8】ACL 2023 long [2212.10511] When Not to Trust Language Models: Investigating Effectiveness of Parametric and Non-Parametric Memories (arxiv.org)
【9】ACL 2023 findings [2305.10998] The Web Can Be Your Oyster for Improving Large Language Models (arxiv.org)文章来源:https://www.toymoban.com/news/detail-841661.html
【9】ACL 2023 findings [2305.10998] The Web Can Be Your Oyster for Improving Large Language Models (arxiv.org)
【10】NAACL 2021 main[2103.06332] Hurdles to Progress in Long-form Question Answering (arxiv.org)文章来源地址https://www.toymoban.com/news/detail-841661.html
到了这里,关于【论文笔记】Active Retrieval Augmented Generation的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!