RAG - Optimization + Evaluation
RAG
检索优化
数据清洗和预处理
- 在 RAG 索引流程中,文档解析之后,文档切块之前,进行数据清洗和预处理
- 减少脏数据和噪音,提升文本的整体质量和信息密度
- 手段:清除冗余信息、统一格式、处理异常字符等
- 处理冗余的模板内容
- 消除文档中的额外空白和格式不一致
- 去除文档脚注、页眉页脚、版权信息
查询扩写
- 在 RAG 系统的检索步骤中,用户的查询会转换为向量后进行检索
- 单个向量查询只能覆盖向量空间中一个有限区域
- 如果查询中的嵌入向量未能包含所有关键信息,则可能检索到不相关的 Chunk
- 单点查询的局限性 - 限制系统在庞大文档库中的搜索范围,导致错失与查询语义相关的内容
- 查询扩写
- 通过 LLM 从原始查询语句生成多个语义相关的查询,可以覆盖向量空间中的不同区域
- 提高检索的全面性和准确性
- 扩写后的查询在被嵌入后,能够击中不同的语义区域
- 确保系统能够从更广泛的文档中检索到与用户需求相关的有用信息
- 通过查询扩写,原始问题被分解为多个子查询
- 每个子查询独立检索相关文档并生成相应的结果
- 系统将所有子查询的检索结果进行合并和重新排序
- 能够有效扩展用户的查询意图,确保在复杂信息库中进行更全面的文档检索
1 | 你是一个AI语言模型助手。 |
自查询 - 关键字
通过 LLM 提取 Query 中关键信息,然后进行混合检索(关键词检索 + 向量检索)
- 将用户查询转化为向量的过程中,无法确保查询中的所有关键信息都被充分捕捉到向量中
- 希望检索结果依赖查询中标签,直接通过嵌入向量进行检索无法确保
- 这些标签在向量表示中被完整表达
- 或者在与其它向量的距离计算中占有足够的权重
- 可能导致检索结果缺乏相关性和准确性
- 希望检索结果依赖查询中标签,直接通过嵌入向量进行检索无法确保
- 自查询策略通过 LLM 自动提取查询中对业务场景至关重要的元数据字段
- 将元数据字段结合到嵌入检索过程中,确保嵌入向量包含这些关键信息,从而提高检索的稳定性和精确性
- 结合关键词检索和向量检索,提高检索结果的相关性和准确性
提示压缩
- 提示压缩可以减少上下文中的噪音,并突出最相关的信息,从而提高检索精度和生成质量
- 在 RAG 中,检索到的文档通常包含大量无关的文本
- 这些无关的内容可能会掩盖与查询高度相关的信息,导致生成结果的相关性下降
- 提示压缩通过精简上下文、过滤掉不相关的信息,确保系统只处理与查询最相关、最重要的内容
- 通过提示压缩,系统能够准确提取出与查询高度相关的核心信息,去除冗余内容,并返回简洁的压缩结果
- 组成新的指令,输入 LLM 获得回复,提高 RAG 系统答案的准确度
效果评估
- 建立统一的评估标准,能够公平、客观地比较不同 RAG 系统及其优化方法,从而识别出最佳实践
- RAG 效果评估是 RAG 系统完成搭建后的一个持续优化流程
- 通过设定打分标准和评估指标,综合评分能够准确反映 RAG 系统的整体性能
评估方式
- LLM 打分
- 使用 LLM 对 RAG 的输出进行自动评分
- 评估效率高,能够快速处理大规模的评估任务,但在准确性上可能受到模型本身偏差的影响
- 人工打分
- 由人类评审员对 RAG 的输出进行逐一打分
- 人工评估方式可以提供更为精确、细致的反映 - 检测生成答案中的细微错误和幻觉
- 但耗时较长 + 成本较高
评估指标
更多指标 - Top N 召回率 + 常用 NLP 评估指标
指标 | 描述 |
---|---|
Context Relevancy | 用于测量检索到的信息与查询上下文的相关性 如果检索到的信息偏离了原始查询,后续的生成任务就会受到负面影响 |
Answer Relevancy | 衡量生成答案与原始问题之间的相关性 主要评估生成的答案能否解决用户的问题,且内容是否逻辑连贯 |
Faithfulness | 评估生成的答案中是否存在幻觉或不准确之处 – 非常重要 因为虚假的答案会极大影响用户对 RAG 系统的信任 |
打分标准
Type | Score |
---|---|
Perfect | 1.0 |
Acceptable | 0.75 |
Missing | 0.5 |
Incorrect | 0 |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.