RAG技术简介及研究方向推荐

什么是RAG

检索增强生成(Retrieval Augmented Generation,简称 RAG)向 LLM 提供了从特定数据源检索的信息,以此作为生成答案的基础。简而言之,RAG 结合了搜索和 LLM 的提示功能,在此基础上,模型根据搜索算法提供的信息,作为上下文来回答问题。这些查询和检索到的上下文会一并被注入到发送给 LLM 的提示中。

目前有两个最著名的开源库专注于基于 LLM 的流程和应用开发 —— LangChain 和 LlamaIndex。

为什么引入RAG:

目前LLM存在偏见、幻觉、时效性(由于只是按照概率空间进行输出),RAG的外部检索很好的解决了知识的动态性问题,从而保持了模型的时效性和准确性。

好处:

  • 长尾知识 、私有数据、数据及时性 、来源性和可解释性能够很好的解决
  • 幻觉问题没有很好的解决

微调的缺点:

  • 1、对计算资源要求更高,参数量巨大,更加困难
  • 2、知识并非是线性增加,有可能会遗忘一些知识,新的知识注入也需要一种更加便捷的方式

RAG 还是微调?

在大语言模型 (LLM) 的优化策略中,除了 RAG,我们还经常听到提示工程 (Prompt Engineering) 微调 (Fine-tuning, FT)。使用 RAG 就好比给模型配备了一本定制的教科书,它能够针对特定的问题进行精准的信息查找。而微调则像是让模型变成一个学习者,随着时间逐步吸收和内化知识,这使得模型更擅长于复制特定的结构、风格或格式。

通过提升模型已有的知识水平、调整其输出结果以及训练它执行复杂的指令,微调能够提高模型的表现力和工作效率。然而,微调不太擅长融入新知识或快速应对新的使用场景。RAG 和微调并不是对立的,它们可以互相补充,在一起使用时可能会带来最好的效果。

编码器微调

关于编码器微调方法,持保留态度,因为最新的为搜索优化的 Transformer 编码器已经相当高效。我在 LlamaIndex 笔记本环境中测试了对 bge-large-en-v1.5(当时 MTEB 排行榜前四)的微调性能,发现其检索质量提升了 2%。虽然提升不大,但了解这一选项是有益的,特别是当你在针对特定领域数据集构建 RAG 时。

排名器微调

另一个选择是使用交叉编码器重新排名检索结果,这适用于那些不完全信任基础编码器的情况。

其工作方式是将查询和每个检索到的前 k 个文本块传递给交叉编码器,之间用 SEP Token 分隔,然后微调它以输出 1 表示相关块和 0 表示非相关块。

LLM 微调

最近 OpenAI 开始提供 LLM 微调 API,LlamaIndex 提供了在 RAG 设置中微调 GPT-3.5-turbo 的教程,旨在 “提炼” GPT-4 的部分知识。这里的思路是取一个文档,用 GPT-3.5-turbo 生成若干问题,然后用 GPT-4 根据文档内容回答这些问题(构建一个 GPT-4 驱动的 RAG 管道),接着对 GPT-3.5-turbo 在这些问题 - 答案对数据集上进行微调。使用 RAG 管道评估的 ragas 框架表明,信实度指标提高了 5%,意味着微调后的 GPT-3.5-turbo 模型比原版更好地利用了提供的上下文来生成答案。

一种更复杂的方法在最近的论文 RA-DIT:Retrieval Augmented Dual Instruction Tuning 中被提出,由 Meta AI Research 提出,建议同时调整 LLM 和检索器(原论文中的双编码器),基于查询、上下文和答案的三元组。

论文链接:https://arxiv.org/pdf/2310.01352.pdf

这种技术被用于通过微调 API 对 OpenAI LLM 进行微调,以及对 Llama2 开源模型进行微调,在知识密集型任务的指标上导致了约 5% 的提升(与 RAG 的 Llama2 65B 相比),并在常识推理任务上增加了一些百分点。

RAG整体框架

基础RAG

基础 RAG 案例的过程大致如下:首先,将文本分割成不同的段落;接着,使用某种 Transformer 编码器模型将这些段落转换成向量;然后,把这些向量存储到一个索引中;最后,为 LLM 创建一个提示,指引模型根据我们在搜索步骤中找到的上下文来回答用户的查询。

在实际运行时,我们使用相同的编码器模型将用户的查询转换成向量,然后对这个查询向量进行搜索,针对索引找到前 k 个结果,从数据库中检索相应的文本段落,并将它们作为上下文输入到 LLM 的提示中。

高级RAG

初级 RAG 在信息检索、内容生成和信息增强方面存在挑战。为此,高级 RAG 应运而生,它在检索前后加入了额外的处理步骤。在检索前,可以采用查询重写路径选择扩展等方法来缩小问题与文档片段之间的语义差异。检索后,对文档进行重新排序,以避免在信息处理中出现信息丢失或上下文信息过于冗长的问题。

注:绿色元素代表我们将要深入讨论的核心 RAG 技术,蓝色元素则表示文本

模块化 RAG

模块化 RAG结构不仅更加灵活自由,还引入了更多定制化的功能模块,例如查询搜索引擎和多答案整合。技术上,它将信息检索与微调、强化学习等技术相结合。从流程上看,RAG 的各个模块被精心设计和调配,形成了多种RAG模式。

但模块化 RAG 并非一蹴而就;它是在前两个范式基础上逐步演化而来的。高级 RAG 可以看作是模块化 RAG 的一个特殊实例,而初级 RAG 则是高级 RAG 的一个简化版本。


 

模型需要对文档进行切分chunks,不然由于上下文过长,有可能导致OOV问题

如何评价 RAG 的效果

评估 RAG 的方法多种多样,主要包括三个质量评分:上下文相关性答案的准确度以及答案的相关性。此外,评估还涉及到四个关键能力:抵抗干扰的能力、拒绝回答不当问题的能力、整合信息的能力、以及在面对假设性情况时保持稳定性的能力。

评估框架方面,我们有一些基准测试如 RGB 和 RECALL,还有自动化评估工具如 RAGAS、ARES 和 TruLens,这些工具帮助我们全面地衡量 RAG 模型的性能。

在 Andrew NG 最近发布的精彩短课程《构建和评估高级 RAG》中,LlamaIndex 和评估框架 Truelens 提出了 RAG 三合一 —— 检索到的上下文与查询的相关性、基础性(LLM 答案由提供的上下文支持的程度)以及答案与查询的相关性。

https://learn.deeplearning.ai/building-evaluating-advanced-rag/

最关键且最可控的指标是检索到的上下文相关性 —— 本文上述的高级 RAG 管道的第 1-7 部分加上编码器和排名器微调部分旨在提高这个指标,而第 8 部分和 LLM 微调则专注于答案相关性和基础性。

关于检索器评估的简单管道例子请看:

https://github.com/run-llama/finetune-embedding/blob/main/evaluate.ipynb

它已应用于编码器微调部分。

一个更高级的方法,不仅考虑命中率,还包括平均倒数排名(一种常见的搜索引擎指标)以及生成答案的指标,如真实性和相关性,这在 OpenAI 的实用指南中有所展示。

LangChain 拥有一个高级的评估框架 LangSmith,它可以实现自定义评估器,并监控 RAG 管道中的运行轨迹,以提高系统的透明度。

如果你在使用 LlamaIndex 构建,可以使用 rag_evaluator llama pack,它提供了一个快速的工具,使用公共数据集评估你的管道。

RAG研究优化方向

想要打造一个出色的 RAG(检索增强生成)系统,关键在于如何巧妙地进行信息增强。在这个过程中,我们需要深思熟虑以下三个问题:

  1. 我们要从海量信息中检索哪些内容?
  2. 我们应该在什么时候进行这样的检索?
  3. 我们如何有效利用检索到的这些内容?

针对这些问题,我们可以将信息增强分为以下几个阶段:

  • 增强的阶段。我们可以在模型的预训练微调或是实际应用推理时进行信息检索增强,不同阶段对计算资源的需求各不相同,也影响着外部知识如何与模型参数结合。
  • 增强的来源。信息增强可以来源于多种数据形式。非结构化数据可能是文本段落、短语或单词;而结构化数据则可能是已经建立好索引的文档、数据三元组或是数据子图。除了这些外部来源,我们还可以仅依靠大语言模型(LLMs)本身的能力,从模型自己生成的内容中提取信息。
  • 增强的过程。最初,我们可能只做一次简单的检索,但随着技术的进步,我们开始尝试更为复杂的迭代检索递归检索自适应检索方法,让模型根据情况自行决定何时进行检索。

RAG 系统核心组件详细分类

发展前景

我们可以预见大模型和RAG技术将会共同进步,并可能融合发展。大模型可能会内置更加高效的检索机制,而RAG技术也会不断优化,使得检索过程更加精准、生成过程更加自然。在某些特定领域,大模型可能会逐渐减少对外部检索的依赖;但在需要处理最新信息或特定领域知识的任务中,RAG仍将是不可或缺的。

1、现有挑战

RAG 目前面临的挑战,我们考虑如下几个方面:

  • 上下文长度:当检索到的内容过多,超出了模型处理的窗口限制,我们该如何应对?如果大语言模型 (Large Language Model, LLMs) 的上下文窗口不再有限制,我们应该如何优化 RAG?
  • 鲁棒性:面对检索到的不正确内容,我们该如何处理?我们如何过滤和验证检索到的内容?我们能如何提升模型对抗错误信息和噪声的能力?
  • 微调协同:如何同时发挥 RAG 和微调 (Fine-tuning, FT) 的效果?它们之间应该如何协调,是串行、交替还是端到端组织?
  • 规模定律:RAG 模型是否遵循规模定律?在什么情况下,RAG 可能会出现逆规模定律的现象?
  • 大语言模型的角色:LLMs 可以用于检索(用生成替代搜索或搜索 LLMs 的记忆)、生成和评估。我们如何进一步挖掘 LLMs 在 RAG 中的潜力?
  • 生产部署:我们如何减少超大规模语料库的检索延时?我们如何确保 LLMs 检索到的内容不被泄露?
2、多模态扩展

RAG 的技术和概念正在不断进化,它们将如何扩展到图像音频视频代码等其他数据形式?一方面,这可以增强单一模态内的任务性能;另一方面,它可以通过 RAG 的思想来实现多模态数据的融合。

3、RAG生态系统

RAG 的应用范围已经不再局限于问答系统,其影响力正在向更广泛的领域扩散。目前,包括推荐系统信息提取报告生成在内的多种任务已经开始受益于 RAG 技术的应用。

同时,RAG 技术栈也在迅速壮大。市场上不仅有像 LangchainLlamaIndex 这样的知名工具,还涌现出许多更具针对性的 RAG 工具。这些工具有的为特定用例量身定制,满足更具体的场景需求;有的简化了使用流程,进一步降低了使用门槛;还有的在功能上进行了专业化设计,逐步适应生产环境的需求。

除了答案相关性和真实性外,RAG 系统的主要挑战是速度,特别是对于更灵活的基于 Agent 的方案,多关注小型化LLM

RAG for factuality

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

https://proceedings.neurips.cc/paper/2020/hash/6b493230205f780e1bc26945df7481e5-Abstract.html

Retrieval Augmentation Reduces Hallucination in Conversation

https://arxiv.org/abs/2104.07567

FacTool: Factuality Detection in Generative Al -- A Tool Augmented Framework forMulti-Task and Multi-Domain Scenarios

https://arxiv.org/abs/2307.13528

Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection

https://arxiv.org/abs/2310.11511

增强阶段
预训练
  1. 通过检索数万亿 Token (Token) 来改善语言模型 https://arxiv.org/abs/2112.04426
  2. 少样本学习借助检索增强型语言模型https://arxiv.org/pdf/2208.03299.pdf
  3. Toolformer: 语言模型自学使用工具https://arxiv.org/abs/2302.04761
  4. 一切只需复制https://openreview.net/pdf?id=CROlOA9Nd8C
  5. 结合检索增强的编解码器进行上下文学习https://arxiv.org/abs/2308.07922
  6. 我们是否应该通过检索来预训练自回归语言模型?https://arxiv.org/abs/2304.06762
  7. 展示-搜索-预测: 融合检索与语言模型,用于知识密集型自然语言处理https://arxiv.org/abs/2212.14024
微调
  1. 密集通道检索在开放域问答中的应用https://arxiv.org/abs/2004.04906
  2. UPRISE: 通用提示检索助力零样本评估提升https://arxiv.org/abs/2303.08518https://github.com/microsoft/LMOps
  3. 问答系统中从阅读器到检索器的知识转移https://arxiv.org/abs/2012.04584
  4. RA-DIT: 检索增强双指令微调https://arxiv.org/abs/2310.01352
  5. Self-RAG: 自我反思学习检索、生成及评价https://arxiv.org/abs/2310.11511
  6. 知识图谱增强的语言模型,用于生成知识驱动对话https://arxiv.org/abs/2305.18846
  7. 结构感知预训练语言模型,提高结构化数据的密集检索性https://aclanthology.org/2023.findings-acl.734.pdfhttps://github.com/OpenMatch/SANTA
  8. Replug: 检索增强的黑盒语言模型https://arxiv.org/pdf/2301.12652.pdf
  9. 适应性增强检索器,提升语言模型作为泛用插件的泛化能力https://arxiv.org/abs/2305.17331https://github.com/OpenMatch/Augmentation-Adapted-Retriever
推理
  1. 通过记忆实现泛化:最近邻居语言模型https://arxiv.org/abs/1911.00172
  2. 展示-搜索-预测: 融合检索与语言模型,用于知识密集型自然语言处理https://arxiv.org/abs/2212.14024https://github.com/stanfordnlp/dspy
  3. 关键词增强检索: 结合语音接口的信息检索新框架https://arxiv.org/abs/2310.04205
  4. 在多步骤问题解答中交错使用检索与链式思考推理https://arxiv.org/pdf/2212.10509.pdfhttps://github.com/stonybrooknlp/ircot
  5. 直接生成:大语言模型 (Large Language Model) 作为出色的上下文生成器https://arxiv.org/abs/2209.10063https://github.com/wyu97/GenRead
  6. 上下文中使用检索增强的语言模型https://arxiv.org/abs/2302.00083
增强来源
非结构化数据
  1. UPRISE: 通用提示检索助力零样本评估提升https://arxiv.org/abs/2303.08518https://github.com/microsoft/LMOps
  2. 从分类到生成:洞察跨语言检索增强互动式上下文学习 (ICL)https://arxiv.org/abs/2311.06595
  3. 简单复制即可https://openreview.net/pdf?id=CROlOA9Nd8C
结构化数据
  1. FABULA: 利用检索增强的叙事技术生成情报报告https://arxiv.org/abs/2310.13848
  2. 知识图谱辅助的语言模型:用于生成知识驱动的对话https://arxiv.org/abs/2305.18846
  3. KnowledGPT: 结合知识库的检索和存储访问来提升大语言模https://arxiv.org/abs/2308.11761
  4. Graph-ToolFormer: 利用 ChatGPT 增强提示来提升大语言模型的图形推理能力https://arxiv.org/abs/2304.11116
LLM 生成内容
  1. 自我提升:带有记忆功能的检索增强文本生成技术https://arxiv.org/abs/2305.02437
  2. 展示—搜索—预测:结合检索与语言模型技术,面向知识密集型自然语言处理任务https://arxiv.org/abs/2212.14024
  3. Recitation-augmented 语言模型https://arxiv.org/pdf/2210.01296.pdf
  4. 生成胜于检索:大语言模型作为强大的上下文生成器 https://arxiv.org/abs/2209.10063
  5. 自我知识引导的检索增强技术,用于提升大语言模型https://arxiv.org/abs/2310.05002
增强过程
一次性检索
  1. 面向知识密集型自然语言处理任务的检索增强生成方法https://proceedings.neurips.cc/paper/2020/hash/6b493230205f780e1bc26945df7481e5-Abstract.html
  2. UPRISE: 通用提示式检索改善零样本评估技术https://arxiv.org/abs/2303.08518
  3. 带参数化知识引导的大语言模型增强技术https://arxiv.org/abs/2305.04757
  4. 学习为大语言模型检索上下文示例的方法https://arxiv.org/pdf/2307.07164.pdf
  5. 使用检索增强的少样本学习语言模型https://arxiv.org/pdf/2208.03299.pdf
  6. Replug: 检索增强的黑箱式语言模型https://arxiv.org/pdf/2301.12652.pdf
  7. 背诵增强式语言模型https://arxiv.org/pdf/2210.01296.pdf
迭代检索
  1. 展示—搜索—预测:结合检索与语言模型技术,面向知识密集型自然语言处理任务https://arxiv.org/abs/2212.14024 https://github.com/stanfordnlp/dspy
  2. 检索与抽样:结合混合检索增强技术进行文档级事件参数提取https://aclanthology.org/2023.acl-long.17/
  3. 通过迭代检索与生成的协同作用来增强大语言模型的检索能力https://arxiv.org/abs/2305.15294
  4. 检索-生成协同作用下的大语言模型增强方法https://arxiv.org/abs/2310.05149
递归式检索
  1. 结合思维链条推理与信息检索,解答知识密集型多步骤问题https://arxiv.org/abs/2212.10509 https://github.com/stonybrooknlp/ircot
  2. 采用检索增强型大语言模型 (LLM) 解开含糊问题的迷雾https://arxiv.org/abs/2310.14696
自适应检索
  1. 主动式检索增强生成技术https://arxiv.org/abs/2305.06983 https://github.com/jzbjyb/FLARE
  2. 自我RAG:自省中学习检索、生成及评判的艺术https://arxiv.org/abs/2310.11511
  3. 结合检索功能的编解码器语言模型上下文学习方法https://arxiv.org/abs/2308.07922
  • 31
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科技之歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值