RAG高级技巧-生成&评估
作者: NLP前沿 来源: NLP前沿
“
三大顶会公众号一大早就发了Grok,今天就不蹭热点了。
https://div.beehiiv.com/p/advanced-rag-series-generation-evaluation
生成
虽然召回检索在确保输出的完整性方面功不可没,但生成最终的正确回复结果,是至关重要的。
有一些优化模型如下:
Corrective RAG (CRAG)
https://arxiv.org/abs/2401.15884
CRAG增强生成的方式是使用轻量级的“检索评估器”,该评估器为每个检索到的文档返回一个置信度分数。然后,该分数决定触发哪种检索操作。例如,评估器可以根据置信度分数将检索到的文档标记为三个桶中的一个:正确、模糊、不正确。
如果所有检索到的文档的置信度分数均低于阈值,则假定检索“不正确”。这会触发采取新的知识来源(例如网络搜索)的行动,以实现生成的质量。
如果至少有一个检索到的文档的置信度分数高于阈值,则假定检索“正确”,这会触发对检索到的文档进行知识细化的方法。知识细化包括将文档分割成“知识条”,然后根据相关性对每个条目进行评分,最相关的条目被重新组合为生成的内部知识。有关更直观的可视化表示,请参考上面的图像。
当检索评估器对其判断不够自信时,假定检索为“模糊”,导致上述策略的混合。这在下面的决策树中得到很好地表示。
如下图所示,CRAG的表现明显优于RAG。Self-CRAG(参见下文的Self-RAG)使这些差距变得更加显著,并且关键地展示了CRAG作为“即插即用”选项在RAG流程中的可适应性。CRAG相对于其他方法(如Self-RAG)的另一个重大优势是其在替换基础LLM方面的灵活性,这一点对于未来使用更强大的LLM至关重要。
明显的局限性在于CRAG严重依赖于检索评估器的质量,并容易受到网络搜索引入的偏见的影响。微调检索评估器可能是不可避免的,以确保输出的质量和准确性。
Self-RAG
https://arxiv.org/abs/2310.11511
这是另一个框架,用于思考我们如何提高LLM的质量和真实性,同时保持其多功能性。因此,与其无论是否需要或相关,都检索固定数量的段落,这个框架侧重于按需检索和自我反思。
步骤1:训练任意的LLM自我反思其自身生成的结果。这是通过特殊的标记(retrieval and critique)来完成的。检索是由LLM输出的检索标记触发的,基于输入提示和先前的生成(参考图像)。
步骤2:然后,LLM继续同时处理这些检索到的段落,以并行生成输出。这会触发LLM生成评论标记来评估这些输出。
步骤3:基于“事实性”和“相关性”,最佳输出被选择为最终生成。该算法在论文中有很好的描述,标记定义如下:
以下由Langchain制作的示意图很好地说明了基于上述定义的反思标记的自我RAG推理算法,用于决策制定。就性能而言,Self-RAG在基准测试中明显优于基准模型,无论是否使用检索。有关基准测试性能,请参考之前的CRAG讨论。值得注意的是,Self-CRAG进一步构建了这一框架以提高性能。
在这一框架中进行的LLM调用数量可能会带来成本和延迟方面的限制。值得研究一些解决方法,比如只为每个块生成一次而不是两次。
RRR (Rewrite-Retrieve-Read)
https://arxiv.org/pdf/2305.14283.pdf
“RRR 模型 引入了Rewrite-Retrieve-Read 过程,利用 LLM 的效果作为重写模块的强化学习激励。这使得重写器能够微调检索查询,从而提高阅读器的下游任务性能。”
该框架的假设是用户查询可以通过 LLM 进行进一步优化(即重写),以实现更准确的检索。虽然这可以通过查询重写过程使 LLM“思考”来提高性能,但推理错误或无效搜索等问题可能成为在生产环境中部署的潜在障碍。
为了解决这个问题,并且如上图所示,添加一个可训练的小LLM作为重写器已经被证明可以通过训练实现一致的性能提升,使得这个框架具有可扩展性和高效性。这里的训练实现分为两个阶段——“热身”和强化学习,关键的突破在于能够将可训练模块整合到更大的LLM中。
Evaluation
有各种方法可以进行评估,首先是使用一组问答对作为测试数据集,验证输出与实际答案。这种方法的明显缺陷是不仅耗时,而且增加了将流水线优化为数据集本身而不是更大的实际用例的风险,后者可能有许多边缘情况(在下面讨论的许多指标中捕获)。
RAGAs
https://github.com/explodinggradients/ragas
这就是 RAGAs(RAG 评估的简称)的用武之地。这是一个开源框架,用于评估 RAG 流水线。它通过以下方式帮助评估流水线:
a)提供基于“ground truth”的方式生成测试数据
b)基于检索和生成步骤的指标评估,可以单独进行评估,也可以进行端到端评估。
它评估了RAG系统的以下指标:
-
Faithfulness:事实一致性
-
Answer Relevance:答案与提示的相关性
-
Context Precision:检查包含答案的块是否排名较高。
-
Aspect Critique:根据预定义的aspect评估提交内容,如无害性和正确性。
-
Context Recall:比较答案与召回的上下文,以检查是否检索到所有相关信息。
-
Context entities Recall:评估检索到的上下文中存在的实体数量与基本事实的对比
-
Context Relevancy:检索到的上下文与提示的相关性
-
Answer Semantic Similarity:生成的答案与实际答案的语义相似程度
-
Answer Correctness:评估生成答案的准确性和一致性
Langsmith
https://www.langchain.com/langsmith
Langchain的Langsmith作为上下文中的可观察性和监控工具。
“LangSmith是一个平台,帮助调试、测试、评估和监控构建在任何LLM框架上的chain和agent。”
将Langsmith纳入RAGAs评估框架中,在我们希望更深入了解结果时会很有帮助。人们可以在日志记录和跟踪评估的过程中发现Langsmith特别有用,以了解哪个步骤可以进一步优化,从而改善检索器或生成器,如评估所指出的。
DeepEval
https://github.com/confident-ai/deepeval
另一个值得一提的评估框架是DeepEval。它拥有14个指标,涵盖了RAG和微调,并包括G-Eval、RAGAS、摘要、幻觉、偏见、毒性等。
这些指标的自解释性有助于解释指标得分,使调试变得更加容易。这是与上面提到的RAGAs框架的关键区别(也是为什么我之前将Langsmith与RAGAs并提的原因)。
它还具有一些很好的特性,如Pytest的集成(对开发者友好)、模块化组件等,并且也是开源的。
更多AI工具,参考Github-AiBard123,国内AiBard123