前言
地址:https://arxiv.org/pdf/2401.05856.pdf
标题:Seven Failure Points When Engineering a Retrieval Augmented Generation System
这篇论文介绍了如何设计一个检索增强生成系统(RAG),作者通过对三个不同领域的案例研究,总结了七个失败点并提出了相关建议。此外,作者还指出了验证RAG系统只能在运行期间完成以及其鲁棒性随时间推移而不断发展的两个关键要点。最后,作者列出了关于RAG系统的研究方向,以供软件工程社区参考。
问题
RAG系统中,容易造成失败的7个点,已经在红色框中标出
FP1 缺失的内容
内容信息缺失情况下系统的无中生有,在询问不能从现有文档中回答的问题时。在理想情况下,RAG 系统会以“抱歉,我不知道”之类的拒绝响应。然而,对于与内容相关但没有答案的问题,系统可能无中生有。
FP2 高度相关的文档没有被找到
问题的答案在文档中,但排名没有高到足以返回给用户。在实践中,优化排序算法,并返回前K个文档。
FP3 不在上下文中
数量限制,从数据库中检索到包含答案的文档,但因为返回的数量多,会出现没有进入生成答案的上下文。
FP4 没有提取出来
答案在上下文中给出,但大型语言模型未能正确提取出答案。通常这种情况发生在上下文中有太多噪音、后者存在矛盾的信息时。
FP5 格式错误
问题涉及提取特定格式的信息,如表格或列表,而大型语言模型忽略了该说明。
FP6 特殊要求不正确
满足不了特殊要求,回复过于笼统,答案在响应中返回了,但不够具体或太具体以满足用户的需求。当 RAG 系统设计者对给定的问题有期望的结果时,例如为学生提供教师。在这种情况下,应该提供特定的教育内容,而不仅仅是答案。
FP7 答案不完整
答案不一定是错误,但即使信息在上下文中且可以提取,仍然会遗漏一些信息。例如,“文件A、B和C中涵盖了哪些关键点?”这样的问题。更好的做法是分开问这些问题。
待研究的3个方向
- Chunking and Embedding(文档分块和表示)
-
文档分块,和表示学习,需求构建自己的迭代benchmark。小编建议:文档分块需要以分块大小、单分块知识覆盖率 两个指标来衡量分块的能力。Embedding 表示学习,需要构建Hitrate,或者 triple rank的指标,能够区分命中率,或者triple 元素之间的距离相对值
-
文档分块可以用一些启发式的方式,比如分段,标题进行分块,还可以结合块与块之间的语义距离进行切分。Embedding的学习,建议尽量在直接的数据集任务上进行FT,以便更加适配自己的任务。
-
-
RAG 还是 Fine-tuning:小编建议都要结合,我们要RAG的方式,整合Input + Retireve 知识,构建prompt,积累需要SFT的数据,然后进行正对性的FT。
- 评估和监控RAG的系统:自己的benchmark非常重要,不然都是自己的感觉,采样几个case看看,难以精确的衡量哪些方面存在问题,以及问题的严重程度;多次FT之间的差异、他们的收益增量都需要有个benchmark来衡量。不然就是3板斧耍完之后,就感觉没有方向,没有思路了。