RAG技术完全指南(四):RAG文档处理四步优化法
一、文档解析:多格式支持与增强方案
一般情况下,文档解析分为以下几个步骤:
- 文档加载:将文档加载到内存中。
- 格式转换:将文档转换为统一的格式,如 HTML 或 Markdown。
- 元数据提取:从文档中提取元数据,如标题、作者、日期等。
- 结构化处理:将文档转换为结构化的数据,如段落、标题、列表等。
LlamaIndex 原生支持解析 PDF、Word、Markdown、JSON、CSV、HTML 等多种文件格式,并提供了丰富的配置选项,以满足不同场景下的需求。但是存在一些复杂的文本格式(扫描件、复杂表格等),此时,便需要引入 其他解析技术(使用 OCR 技术处理扫描件等),对文档进行预处理,提升文档解析效果。
二、文档切分:语义分块优化策略
2.1 分块三要素
| 要素 | 说明 | 推荐值 |
|---|---|---|
| 块大小 | 每段文字的长度 | 200-500 字 |
| 块重叠 | 相邻块重复内容 | 10%-20% |
| 切分依据 | 按句子/段落/语义划分 | 语义分割最优 |
2.2 分块策略对比表
| 策略类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 固定大小 | 实现简单 | 可能切断完整语义 | 技术文档 |
| 按段落分割 | 保持逻辑完整性 | 段落长度差异大 | 文学小说 |
| 语义分割 | 确保内容完整性 | 计算资源消耗较大 | 专业领域文档 |
2.3 分块常见问题
如何确定最佳块大小?
测试不同尺寸查看检索效果1
2
3
4
5#测试块大小对召回率的影响
sizes = [128, 256, 512]
for size in sizes:
test_recall = evaluate_chunk_size(size)
print(f"块大小{size} → 召回率{test_recall:.2f}%")分块重叠是否越多越好?
适当重叠(10-20%)可防止信息断裂,但过多会导致冗余
三、提升召回率:多粒度检索技术
3.1 什么是召回率
低召回率:检索结果中包含的文档数量较少,可能无法满足用户需求
高召回率:检索结果中包含的文档数量较多,能够满足用户需求
3.2 提升召回率的三大策略
查询扩展:将用户查询扩展为多个相关查询,提高检索结果的多样性
例如:用户查询“Python 编程”,可以扩展为“Python 编程入门”、“Python 编程进阶”、“Python 编程实战”等混合检索:结合两种搜索方式
例如:关键词搜索 + 语义搜索向量优化:进行微调
例如:微调前:”Transformer” → 理解为”变形金刚”
微调后:”Transformer” → 识别为”深度学习模型”
效果验证方法:
- 准备测试问题集(至少 50 个典型问题)
- 记录基础方案召回率
- 应用优化策略后再次测试
- 对比提升幅度
1 | |
四、重排序:精准结果排序优化
4.1 什么要重排序?
- 基于关键词的检索结果可能存在不相关的情况
- 基于向量的检索结果可能存在相关度不高的现象
4.2 常见排序模型对比
| 模型名称 | 速度 | 精度 | 硬件要求 | 适用场景 |
|---|---|---|---|---|
| BM25 | 快 | 中 | 低 | 关键词匹配 |
| Cross-Encoder | 慢 | 高 | 高 | 小规模精准排序 |
| ColBERT | 中 | 高 | 中 | 平衡速度与精度 |
1 | |
RAG技术完全指南(四):RAG文档处理四步优化法
https://blog.echo-silence.top/posts/a3e130c6.html