RichRAG简介

126 阅读2分钟

背景

大部分的RAG的工作强调回答的精炼,但是会使得答案不够完整。

RichRAG通过分析用户的子意图,通过更长形式的回答来覆盖这些子意图,使得答案更加完整。

架构

image.png

子意图挖掘 -- 提升完整性

  1. 通过prompt让大模型预测输入query的子意图。
  2. 通过标注数据用于finetune大模型,用于约束生成格式和准确性

多面检索(multi-faceted retriever)-- 提升完整性

  1. 每个子意图和原始query拼起来后,对数据库进行共同检索
  2. 对每个子意图的检索结果进行消重,同一篇document关联的不同的子意图构成相应的候选子意图。
  3. 去重后的document形成了一个候选池

生成式List-wise Ranker -- 除了相关以外,还要兼顾各种子意图

将所有候选的document都输入给大模型做预测,负载太高了。不现实,因此,设计一个ranker,只取top-k的document进行回答,并且top-k的document需要满足覆盖所有子意图。

使用T5,阅读所有相关的document,直接生成top-k的doc id:

  1. 每个document都和原始query和对应子意图进行拼接形成一个candiate sequence:

image.png

  1. 每个candidate sequence,把每个token的hidden states使用pooling得到统一的表示
  2. 将每个candidate sequence的pooling结果拼接起来,输送到decoder中,生成ranking list

image.png

SFT -- 为了生成更好的ranker

  • Coverage Utility Function :衡量每篇文章对于子意图的新增覆盖收益,其中d是document,是子意图对应的回答,为rouge score,为前t-1步中,所加入到回答中的document。

  • 贪心选择document

  • finetune with NTP task: 通过上述贪心选择,可以得到document的加入顺序和对应序号,可以将之用于训练ranking model

Reinforcement Learning -- 为了生成更好的ranker

将最后生成的response 质量作为reward用于建模大模型的偏好。

将除了计算response和answer之间的rouge score之外,再额外引入com-rouge score 作为用于衡量response中对于sub-answers的覆盖率。

,其中r其实是给定的top-k document下的response,是answer的normalized 长度,用于衡量sub-answer的权重。

Data construction

通过两步进行构造数据:

  1. Unilaterality: 使用贪心和随机采样的方法分别得到两组 top-k的document list
  2. Significance: 贪心和随机采样的pair对之间,计算所得reward 差距需要超过一定阈值

得到两组top-k的document list之后,就可以采用DPO的方式进行训练

Optimization:

优化目标为: