RAG(检索增强生成)是由 Lewis 等人于 2020 年中期提出的一种大语言模型领域的范式。
其发展经历了以下阶段:
RAG 在多个基准测试中表现出色,如在 Natural Questions、WebQuestions 和 CuratedTrec 等中表现抢眼。用 MS-MARCO 和 Jeopardy 问题进行测试时,生成的答案更符合事实、具体和多样,FEVER 事实验证使用后也有更好结果。基于检索器的方法越来越流行,常与 ChatGPT 等流行大语言模型结合使用提高能力和事实一致性,在 LangChain 文档中有相关使用例子。
同时,对增强生成检索的兴趣增长促使了嵌入模型质量的提高,传统 RAG 解决方案中的问题也得到解决。
开发:产品视角的大模型RAG应用[heading1]一文看懂RAG:大语言模型落地应用的未来[heading2]RAG发展的四个阶段大型语言模型(LLMs)如GPT系列在自然语言处理方面取得了显著的成功,Super-GLUE等各种基准测试中表现出色。尽管有了这些进展,LLMs仍然存在显著的局限性,特别是在处理特定领域或高度专业化的查询时,一个常见问题是产生错误的信息,或者称为“幻觉”。特别是当查询超出模型的训练数据或需要最新信息时。所以说在直接将LLMs部署运行到生产环境中时,其就是一个黑盒,鬼知道它会输出什么的结果...解决这些问题的一种有希望的方法是检索增强生成(RAG),它将外部数据检索整合到生成过程中,从而提高模型提供准确和相关回答的能力。RAG于2020年中期由Lewis等人提出,是LLMs领域中的一种范式,可增强生成任务。具体而言,RAG包括一个初始的检索步骤,LLMs在此步骤中查询外部数据源以获取相关信息,然后才回答问题或生成文本。这个过程不仅为后续的生成阶段提供信息,还确保回答基于检索到的证据,从而显著提高了输出的准确性和相关性。在推断阶段动态检索来自知识库的信息使RAG能够解决生成事实错误内容的问题,通常被称为“幻觉”。将RAG整合到LLMs中已经迅速被采用,并成为完善聊天机器人能力和使LLMs更适用于实际应用的关键技术。RAG的演进轨迹在四个不同阶段展开,如下图所示。在2017年的创始阶段,与Transformer架构的出现相一致,主要重点是通过预训练模型(PTM)来吸收额外的知识以增强语言模型。这个时代见证了RAG的基础工作主要集中在优化预训练方法上。
合成数据是Phi family的主要训练数据来源,Anthropic在培训Claude 3时使用合成数据,来代表可能在训练数据中缺失的场景。Hugging Face使用Mixtral-8x7B Instruct生成超过3000万份文件和250亿个合成教科书、博客文章和故事,以重新创建Phi-1.5训练数据集,他们将其称为Cosmopedia。为了使合成数据更容易,NVIDIA发布了Nemotron-4-340B家族,这是一个专为合成数据生成设计的模型套件,可通过许可协议获得。另外Meta的Llama也可以用于合成数据生成。通过直接从对齐的LLM中提取它,也有可能创建合成高质量指令数据。使用像Magpie这样的技术,有时可以将模型进行微调,以达到与Llama-3-8B-Instruct相当的表现。RAG提高嵌入模型质量虽然检索和嵌入不是新的,但对增强生成检索(RAG)的兴趣增长促使了嵌入模型质量的提高。在常规的LLMs中,证明有效的剧本是大规模性能改进的关键(GritLM有约47亿个参数,而之前的嵌入模型只有1.1亿个)。同样,大规模语料库的使用和改进过滤方法导致了小型模型的巨大改善。同时,ColPali是一种利用文档的视觉结构而不是文本嵌入来改进检索的视图-语言嵌入模型。检索模型是少数几个开放模型通常优于大型实验室专有模型的子领域之一。在MTEB检索排行榜上,OpenAI的嵌入模型排名第29位,而NVIDIA的开放NV-Embed-v2排名第一。传统RAG解决方案中的问题得到解决
RAG在[Natural Questions(opens in a new tab)](https://ai.google.com/research/NaturalQuestions)、[WebQuestions(opens in a new tab)](https://paperswithcode.com/dataset/webquestions)和CuratedTrec等基准测试中表现抢眼。用MS-MARCO和Jeopardy问题进行测试时,RAG生成的答案更符合事实、更具体、更多样。FEVER事实验证使用RAG后也得到了更好的结果。这说明RAG是一种可行的方案,能在知识密集型任务中增强语言模型的输出。最近,基于检索器的方法越来越流行,经常与ChatGPT等流行LLM结合使用来提高其能力和事实一致性。LangChain文档中可以找到[一个使用检索器和LLM回答问题并给出知识来源的简单例子(opens in a new tab)](https://python.langchain.com/docs/use_cases/question_answering/quickstart)。