本文内容来自:

论文:《Self-RAG: Learning to Retrieve, Generate and Critique through Self-Reflections》 https://arxiv.org/pdf/2310.11511.pdf
Twitter:https://twitter.com/cwolferesearch/status/1719054078544601096
论文描述的方法比较繁杂且富有技巧,但是思想比较赞同,由于模型能力的限制,不同的问题需要不同的 Prompt 解决,但 Prompt 又无法预先设置,就需要有一个独立的分析模块。
其实在实际的应用中,不仅仅是需要判断是否检索,例如:
  1. 做数学题的时候,我们给一些例子

  2. 物理题的时候,抽象一下原理
  3. 等等
正文
检索增强生成(RAG)是提高语言模型(LLMs)质量和真实性的流行工具。自我RAG通过教导LLM反思和决定RAG的哪些组成部分实际上有助于回答提示,使RAG更加智能化。
简而言之:RAG非常有效,但它是一种固定的方法。无论是否相关(或根本不需要检索),K个段落总是被检索并放置在LLM的上下文中。Self-RAG通过教导LLM反思RAG过程并决定改进了这种方法。
1. 是否需要检索
2. 如果检索到的内容确实相关
3. 无论其产出是否高质量和真实
自我评估引导下,LLM的输出质量得到了提高,幻觉现象也减少了。
反思token。为了让一个LLM进行反思,Self-RAG引入了两个特殊的“反思”token——retrieval和critique token。retrieval token用于确定是否需要检索,而critique token用于衡量模型输出的质量。有趣的是,这些仅仅是LLM词汇表中的特殊Token。因此,它们可以在训练期间学习,并在推理过程中像任何其他(文本)token一样使用——通过下一个token预测。
使用Self-RAG进行推理。要理解Self-RAG,我们需要看一下它如何使用LLM生成文本。这个推理过程有点复杂,但它遵循以下基本步骤:
1. 输出一个检索令牌以确定是否需要检索。
2. 如果不需要检索,LLM会生成一个回复,并使用批评令牌对回复进行批评。
3. 如果需要检索,检索模块会为LLM获取前K个文本段落。
算法如下:

LLM使用批判性标记来确定每个段落是否与提示相关。
对于每个段落,LLM会生成一个回应,并使用批评标记来确定回应是否准确和有用。
所有回复都会根据事实性、质量和相关性进行排名。
详细的过程:
Self-RAG训练。为了训练一个Self-RAG模型,论文作者首先在一个由GPT-4生成的合成数据集上训练一个Critic模型,该模型展示了如何将反思标记插入LLM的正常回复中。然后,使用这个Critic模型以离线方式为Self-RAG生成训练数据,通过向LLM的回复中添加Critic标记。接下来,可以使用一个类似LLaMA的模型作为起点,对这些数据进行端到端的训练,通过下一个标记的预测来学习必要的retrieve和critic技巧。
实证结果。使用Self-RAG来训练/微调LLaMA-7B和13B模型。得到的模型表现相当不错,实际上超过了几个强大的检索增强基准模型,如Toolformer、LLaMA-2和Alpaca-7B/13B。
关于实用性的说明。Self-RAG解决了RAG的一个重要限制。即使这些段落可能与提示无关,RAG始终会为LLM的上下文检索一定数量的段落。然而,Self-RAG引入了许多不实用的推理过程的复杂性——它需要LLM进行大量额外的前向传递!因此,Self-RAG可能对应用程序没有用处,但希望会有更实用/高效的变体出现。
继续阅读
阅读原文