开卷翻到毒蘑菇?浅谈大模型检索增强(RAG)的鲁棒性
很久没有写论文 notes 了,近期因为参与对检索增强生成(Retrieval-Augmented Generation, RAG)范式鲁棒性的研究,注意到了近两个月来社区中涌现了一小批关于这个话题的工作,简单梳理以飨读者。
何为检索增强:模型可以开卷考
▲ 全都背下来就会像硬吃记忆面包一样痛苦
检索增强的语言模型(Retrieval-Augmented Language Model,RALM)的正式定义是:
A language model (LM) that uses an external datastore at test time.
▲ 以上定义和示意图来自ACL 2023的Tutorial [1]
示意图如上,对用户输入的文本 x,我们构造记为 q 的 query ,从数据库 D 的索引中召回了小一部分相关文档(右侧的小块简报),模型以其为参考生成最后的输出 y。除了缓解以上三个问题(长尾记忆困难、容易过时、参数太多导致计算代价大)之外,还可以起到给模型的回答提供可靠的消息来源、防止模型权重泄露隐私信息等作用,具体的机制和代表性工作可以参见今年 ACL 上陈丹琦老师领衔的 Tutorial [1],此处不详细展开。
交代完了 RAG 这一大背景,回到今天想聊的鲁棒性的正题。我们知道,人在翻书找长尾知识或者上网冲浪吃新瓜的时候,如果不加审慎的分辨,很容易以讹传讹:
当然,语言模型也不比人高明,如果检索增强的时候召回的是和输入问题无关的内容(噪声干扰),甚至是反事实的 fake news 或者被篡改的百科,模型就会像吃了毒蘑菇一样胡言乱语。
以下是来自论文 [3] 的检索到反事实信息造成模型错误输出的例子。对博闻强识的大模型来说,17-18 赛季的欧冠冠军是道简单题,不用检索增强就知道是皇马,但如果有恶意用户某一天编辑了相关的维基百科把答案改成巴萨,模型通过检索模块吃到这样与自身知识冲突的辅助输入就会被忽悠住,人云亦云,复读出错误的答案。
如何提高检索增强的可靠性:怎么应对毒蘑菇?
SKR: 以自身知识引导检索增强
论文链接:
解读:直接看具体方法:
实验是在一些 QA 数据集上做的,LM 是 InstructGPT 和 ChatGPT,似乎没有详细说明预训练 retriever 是什么模型,结果显示 KNN 版本的 SKR 与不带检索增强的 CoT 以及非自适应的 RAG+CoT 类型的基线相比,能取得 3%-4% 的显著提升。
RECALL: 反事实信息危害极大,现有干预方法难以缓解其风险
论文链接:
结果显示,选择题形式的 EventKG QA 任务上,一旦对 context 的反事实扰动涉及到了答案本身(即答案被篡改为错误选项),模型的 accuracy (下图中的 QA-A Acc)会从 90%+ (图中的第一行"original")下降到 20% 以下(第二行"edited"),远低于没有检索机制,模型直接回答时的 60%左右(第三行“no”)。相比之下,QA-NA 和文本生成的指标下降幅度较小。
为了更精细地量化反事实信息带来的影响,作者额外定义了两个指标:
误导率 M-Rate: 选择式 QA 中,模型在无上下文输入时原本能答对的问题(即模型预训练阶段记忆住的问题),在接收反事实上下文后回答出错的比例;
错误重复率 R-Rate: 生成任务中,反事实扰动对应的 tokens 在模型的答案中出现的比例。
结果显示,EventKG 数据集上,四个大模型在 QA-A 设定下的误导率 M-Rate 高达 80% 以上,生成设定下反事实信息被复读的比例 R-Rate 也高达 85-91%,可见 RAG 模块如果召回了包含反事实信息的参考文档,将对模型的可信度造成巨大的危害。
本文比较侧重前面的 benchmark 构建与分析部分,本身没有直接提出新方法来增强模型的鲁棒性,而且测试了两种现存方法:
Prompt Engineering: 简单粗暴,直接在 prompt 中告诉模型“忽略上下文中的反事实信息”;
DOLA [7]: 最近受到关注的一种针对模型幻觉的推理时干预方法,概括地讲是用模型(最后一层)输出的分布减去浅层 hidden states 对应的输出分布做解码。
出于篇幅考虑此处不拉表格,直接搬运结论:
Prompt Engineering:虽然能提升 QA-A 设定下被扰动时的 accuracy,但对 QA-NA 设定下的 accuracy 反而有损害,有时对生成的质量也有损害;
DOLA: 虽然能小幅提升大部分指标,但会导致生成任务中错误复现率 R-Rate 显著上升。
结论:以上两类方法都不能稳定地提升模型对反事实输入的鲁棒性,亟需有可靠的新方法解决这一问题。
Training Robust RALMs:数据硬怼,端对端提升鲁棒性
论文链接:
Chain of Note:适合检索增强的思维链蒸馏
论文链接:
值得一提的是,另外几篇文章都没有注意 OOD detection 的问题,即当模型本身和召回文档都不掌握回答问题需要的知识时,应该回答 unknown 而不是胡编乱造,本文考虑了此问题(下图第三栏)。
Self-RAG:自我求助,自我生成,自我反思
论文链接:
Takeaway: 本文提出了一个叫 Self-RAG 的框架,方法如其名,希望 LM 自主决定对当前输入是否需要召回(而不是像 SKR [2] 那样训练一个额外的分类器或像 [4] 那样借助一个 NLI 模型判断),把召回内容拼接近输入,再生成一段下文,自主判断召回文档是否与输入问题相关、自己借此生成的一段下文是否合理、是否有用,对 topk 召回内容进行排序,把 top-1 加进最后的输入以尽量生成正确答案。框架如下图右栏所示。
解读:如上所示,Self-RAG 把要不要进行检索的决定、判断检索召回内容是否与问题相关、检索增强后的输出是否合理有用这几个决定都转化成了 token 预测的形式,文中称为 reflection tokens,整个过程可以用如下算法概括:
以上是方法的骨架,接下来的关键在于如何构造包含reflection tokens 的训练数据来训练 Self-RAG。数据构建的流程略复杂,文中没有给出简洁的流程图,笔者概括如下:
GPT-4 收集种子数据:对四种类型的 reflection tokens,各用 GPT-4 标注 4k-20k 个从开源的 QA 和知识问答数据中收集的样本;
知识蒸馏,训练 critric model: 在第 1 步的训练数据上微调开源大模型,如LLaMa2-7B,称为 critic model;
为生成模型生成训练数据:使用上述的 critic model联合检索模块,为最后的生成模型构造模拟整个 Self-RAG 推理过程的训练集(两个例子如下图所示),约 150k 大小;
训练生成模型:在第 3 步生成的训练数据上训练生成模型,文中为 LLaMa2-7B和 13B,最后推理时只需要该模型,不需要 critic model。
按下该疑问不表,我们来看目前实现版本的效果,可以发现 Self-RAG 在一系列开放域 QA 和生成任务上都能比普通的检索增强 LLaMa2 取得明显提升。
方法论小结
小文写作于冬日的燕园和万柳,还有许多细节和未来可能的方向未尽讨论,望诸君不吝赐教。
参考文献
[1] Asai, Akari, et al. "Retrieval-based language models and applications." Proceedings of the 61st Annual Meeting of the Association for Computational Linguistics (Volume 6: Tutorial Abstracts). 2023.
[2] Wang, Yile, et al. "Self-Knowledge Guided Retrieval Augmentation for Large Language Models." arXiv preprint arXiv:2310.05002 (2023).
[3] Liu, Yi, et al. "RECALL: A Benchmark for LLMs Robustness against External Counterfactual Knowledge." arXiv preprint arXiv:2311.08147 (2023).
[4] Yoran, Ori, et al. "Making Retrieval-Augmented Language Models Robust to Irrelevant Context." arXiv preprint arXiv:2310.01558 (2023).
[5] Yu, Wenhao, et al. "Chain-of-Note: Enhancing Robustness in Retrieval-Augmented Language Models." arXiv preprint arXiv:2311.09210 (2023).
[6] Asai, Akari, et al. "Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection." arXiv preprint arXiv:2310.11511 (2023).
[7] Chuang, Yung-Sung, et al. "Dola: Decoding by contrasting layers improves factuality in large language models." arXiv preprint arXiv:2309.03883 (2023).
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:[email protected]
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
微信扫码关注该文公众号作者