在大模型应用中,如何提升 RAG(检索增强生成)的能力?
01、什么是 RAG?
RAG(Retrieval-Augmented Generation,检索增强生成)简单来说就是给予大语言模型(LLM)的一些增强。它通过引入新的信息来补充 LLM 的知识库,这些信息可能不在 LLM 的预训练数据中。
使用 RAG 控制内容来减少幻觉(模型生成与现实不符的输出),这是 RAG 的一个常见用途。通常的用例是提供内容给模型,并指示它仅使用该内容来回答问题,不使用 LLM 自有的知识,以此限制回答来自特定的知识库,减少幻觉。
简单来说,RAG 主要是由检索和生成两个阶段组成:
- 检索阶段:在检索阶段,算法搜索并检索与用户提示或问题相关的信息片段,在向量数据中查找与 Query 相关的数据。
- 生成阶段:大模型从增强提示及其训练数据的内部表示中提取信息,以在那一刻为用户量身定制引人入胜的答案。
基于 RAG 的提升方法也是从这两个极端来实现,接下来会用更简单通俗的方法讲解一下 RAG 存在的痛点和解决方法。
02、检索阶段:痛点和解决方案
1、痛点一:检索质量低
RAG 模型严重依赖于检索到的上下文文档的质量。如果检索器无法找到相关的事实段落,就会严重妨碍模型根据有用信息并产生准确、深入的响应的能力。
特别是现在,稀疏向量检索在语义匹配和检索高质量文档存在困难。
解决方案:
- 增强目标域的相关性:通过监督训练信号或模型反馈来微调检索器。
- 采用密集检索器模型:如 DPR (Dense Passage Retrieval) 或 ANCE (Approximate Nearest Neighbor Negative Contrastive Estimation),以获得更高的召回率和相关性。
- 优化检索速度:尝试使用多向量表示、近似最近邻搜索(ANN)和最大内积搜索(IVF-PQ)来不影响准确性的情况下提高检索速度。
- 确保真实性:使用可信度指标检索权威、值得信赖的来源。
2、痛点二:覆盖范围不足
虽然外部知识对于高质量的 RAG 输出是必不可少的,但即使是最大的语料库也无法完全覆盖用户可能查询的实体和概念。如果无法访问全面的知识源,该模型就会返回对利基或新兴主题的无知、通用的响应。
解决方案:
- 扩展语料库:通过集合不同来源的文档来扩展语料库,以增加覆盖的可能性。
- 模块化架构:设计模块化架构以添加/更新知识源,而无需完全重新培训。
- 实时检索:增加实时检索来覆盖运行时候文档覆盖度。
3、痛点三:情境调节困难
即使具有良好的检索能力,RAG 模型也常常难以正确地调节上下文文档并将外部知识合并到生成的文本中。如果没有有效的情境调节,就无法产生具体的、真实的反应。
解决方案:
- 加强情境化:通过专用的交叉注意力转换器层加强情境化。
- 预训练优化:具有自我监督目标的预训练语言模型,用于训练外部文本。
- 实体分析:使用更好的情感实体分析方法。
4、痛点四:有效内容划分
对于新增加的文档而言,RAG 模型确定所需要检索的内容并用于生成是十分困难的,特别是针对长内容的处理。这就需要针对新增加的信息进行清洗和划分。
解决方案:
- 数据清洗:更好的数据清洗方法,清理文档无效内容和隐私内容。
- 调整分块大小:调整上下文数据分块大小,较小的块通常可以改善检索,但可能会导致生成过程缺乏周围的上下文。建议采用滑动窗口或语义分块策略。
5、痛点五:高质量文本排名
在检索源数据时候,需要有效的方法给检索的数据进行排名,找到最想相关的数据才能更好的得到内容。


