对于大模型外挂知识库,大家通常的做法是根据用户 query 一次召回文档片段,让模型生成答案。 只进行一次文档召回在长文本生成的场景下效果往往不好,生成的文本过长,更有可能扩展出和 query 相关性较弱的内容,如果模型没有这部分知识,容易产生模型幻觉问题。一种解决思路是随 着文本生成,多次从向量库中召回内容。 2. FLARE 有哪些召回策略?
1.每生成固定的 n 个 token 就召回一次; 2. 每生成一个完整的句子就召回一次; 3.用户 query 一步步分解为子问题,需要解答当前子问题时候,就召回一次 已有的多次召回方案比较被动,召回文档的目的是为了得到模型不知道的信息,a、b 策略并不能保 证不需要召回的时候不召回,需要召回的时候触发召回。c.方案需要设计特定的 prompt 工程,限制 了其通用性。 作者在本文里提出了两种更主动的多次召回策略,让模型自己决定啥时候触发召回操作。
2.1 策略
2.1.1 策略 1 思路?
通过设计 prompt 以及提供示例的方式,让模型知道当遇到需要查询知识的时候,提出问题,并按照 格式输出,和 toolformer 的模式类似。 1. 提出问题的格式为[ Serch (“模型自动提出的问题")](称其为主动召回标识)。利用模型生成的问 题去召回答案。 2.召回出答案后,将答案放到用户 query 的前边,然后去掉主动召回标识之后,继续生成。 3.当下一次生成主动召回标识之后,将上一次召回出来的内容从 prompt 中去掉。 下图展示了生成拜登相关答案时,触发多次召回的例子,分别面对拜登在哪上学和获得了什么学位 的知识点上进行了主动召回标识的生成。
Search results: Dx
- Generate a summary about Joe Biden. Joe Biden attended
92 [ Search (Joe Biden University// the University of Pennsyivania, where he earned
a law degree.
Retriever