RAG

image-20241022233308732

检索优化

数据清洗和预处理

  1. 在 RAG 索引流程中,文档解析之后,文档切块之前,进行数据清洗和预处理
    • 减少脏数据噪音,提升文本的整体质量信息密度
  2. 手段:清除冗余信息统一格式处理异常字符
    • 处理冗余的模板内容
    • 消除文档中的额外空白和格式不一致
    • 去除文档脚注页眉页脚版权信息

查询扩写

  1. 在 RAG 系统的检索步骤中,用户的查询会转换为向量后进行检索
  2. 单个向量查询只能覆盖向量空间中一个有限区域
  3. 如果查询中的嵌入向量未能包含所有关键信息,则可能检索到不相关的 Chunk
    • 单点查询的局限性 - 限制系统在庞大文档库中的搜索范围,导致错失与查询语义相关的内容
  4. 查询扩写
    • 通过 LLM原始查询语句生成多个语义相关的查询,可以覆盖向量空间中的不同区域
    • 提高检索的全面性准确性
    • 扩写后的查询在被嵌入后,能够击中不同的语义区域
      • 确保系统能够从更广泛的文档中检索到与用户需求相关的有用信息
  5. 通过查询扩写,原始问题被分解为多个子查询
    • 每个子查询独立检索相关文档并生成相应的结果
    • 系统将所有子查询的检索结果进行合并重新排序
  6. 能够有效扩展用户的查询意图,确保在复杂信息库中进行更全面的文档检索
1
2
3
4
你是一个AI语言模型助手。
你的任务是生成五个不同版本的用户问题,以便从向量数据库中检索相关文档。
通过从多个角度生成用户问题,你的目标是帮助用户克服基于距离的相似性搜索的一些局限性。
请将这些替代问题用换行符分隔。原始问题:{查询原文}

自查询 - 关键字

通过 LLM 提取 Query 中关键信息,然后进行混合检索(关键词检索 + 向量检索

  1. 将用户查询转化为向量的过程中,无法确保查询中的所有关键信息都被充分捕捉到向量中
    • 希望检索结果依赖查询标签,直接通过嵌入向量进行检索无法确保
      • 这些标签向量表示中被完整表达
      • 或者在与其它向量的距离计算中占有足够的权重
    • 可能导致检索结果缺乏相关性准确性
  2. 自查询策略通过 LLM 自动提取查询中对业务场景至关重要的元数据字段
    • 元数据字段结合到嵌入检索过程中,确保嵌入向量包含这些关键信息,从而提高检索的稳定性精确性
    • 结合关键词检索向量检索,提高检索结果的相关性准确性

image-20241023113530986

提示压缩

  1. 提示压缩可以减少上下文中的噪音,并突出最相关的信息,从而提高检索精度生成质量
  2. 在 RAG 中,检索到的文档通常包含大量无关的文本
    • 这些无关的内容可能会掩盖与查询高度相关的信息,导致生成结果相关性下降
  3. 提示压缩通过精简上下文、过滤掉不相关的信息,确保系统只处理与查询最相关最重要的内容
  4. 通过提示压缩,系统能够准确提取出与查询高度相关核心信息,去除冗余内容,并返回简洁压缩结果
    • 组成新的指令,输入 LLM 获得回复,提高 RAG 系统答案的准确度

image-20241023133714182

效果评估

  1. 建立统一的评估标准,能够公平、客观地比较不同 RAG 系统及其优化方法,从而识别出最佳实践
  2. RAG 效果评估是 RAG 系统完成搭建后的一个持续优化流程
    • 通过设定打分标准和评估指标,综合评分能够准确反映 RAG 系统的整体性能

评估方式

  1. LLM 打分
    • 使用 LLM 对 RAG 的输出进行自动评分
    • 评估效率高,能够快速处理大规模的评估任务,但在准确性上可能受到模型本身偏差的影响
  2. 人工打分
    • 由人类评审员对 RAG 的输出进行逐一打分
    • 人工评估方式可以提供更为精确细致的反映 - 检测生成答案中的细微错误和幻觉
    • 耗时较长 + 成本较高

评估指标

更多指标 - Top N 召回率 + 常用 NLP 评估指标

指标 描述
Context Relevancy 用于测量检索到的信息查询上下文的相关性
如果检索到的信息偏离了原始查询,后续的生成任务就会受到负面影响
Answer Relevancy 衡量生成答案原始问题之间的相关性
主要评估生成的答案能否解决用户的问题,且内容是否逻辑连贯
Faithfulness 评估生成的答案中是否存在幻觉不准确之处 – 非常重要
因为虚假的答案会极大影响用户对 RAG 系统的信任

image-20241023135403059

打分标准

Type Score
Perfect 1.0
Acceptable 0.75
Missing 0.5
Incorrect 0