数据清洗与去重
垃圾进,垃圾出。RAG 的检索质量上限由索引内容决定,脏数据入库后,错误会被反复检索到并注入答案。清洗和去重是索引之前的事,不是事后补救。
清洗
| 问题 | 处理 |
|---|---|
| 页眉页脚、导航噪音 | 规则或模型识别后剥离 |
| PDF 解析乱码、重排错序 | 修复或丢弃低置信块 |
| 扫描件 | OCR,低质量页面识别后人工抽检 |
| 公式、代码、特殊符号 | 保留结构,避免切碎 |
| PII 和敏感信息 | 脱敏后再入库,涉及合规 |
清洗的验收标准:解析后的文本能被人类无障碍阅读。读不通的段落,模型也读不通,检索效果必然差。
去重
重复文档在 RAG 里是双重伤害:检索时多个重复块挤占 Top-K 名额,把真正相关的内容挤出去;生成时重复内容浪费上下文。
| 方法 | 原理 | 适用 |
|---|---|---|
| 精确去重 | 内容 hash 比对 | 完全相同的文档,最简单 |
| 近似去重 | MinHash / SimHash,局部敏感哈希 | 小改动版本、转载内容 |
| 语义去重 | Embedding 相似度阈值 | 表述不同但意思相同的段落 |
工程顺序:先精确去重(便宜),再 MinHash(覆盖轻微改动),高价值语料再做语义去重(贵,但能抓到换说法的重复)。去重要保留一条记录,通常保留元数据最全或时间最新的那条。
质量过滤
- 长度过滤:过短的块(几句话)检索价值低,过长的块切分时已经处理
- 语言过滤:混合语料里筛掉和目标语言无关的内容
- 时效过滤:过期政策、废弃文档打标或移除
- 质量评分:用规则或模型给块打分,低于阈值的进不了索引
面试追问
- 为什么要去重? 重复块挤占 Top-K 名额、浪费上下文,还让同义内容在重排阶段互相干扰
- 三种去重怎么选? 精确用 hash,轻微改动用 MinHash/SimHash 近似去重,换说法的重复用 Embedding 语义去重。按成本从低到高逐层做
- 清洗的验收标准? 解析后的文本人类能无障碍阅读。读不通的段落模型也读不通
- 敏感数据怎么处理? 入库前脱敏,涉及合规的数据不进索引或做权限隔离
- 脏数据入库了会怎样? 错误被反复检索并注入答案,且难定位。清洗要在索引之前做,不是事后补救