011:RAG 评测数据生产速查卡
**📎 内容来源**:本小节为豆包对话整理(2026-09-11)。用户口述概念 "golden site / hard site / corner site"
📑 目录
- 1 生产日志 → 评测样本:清洗四步法
- 2 三级去重对比
- 3 拒答测试:构造"看似相关但文档没答案"的问题
- 3.1 六类不可答(UAEval4RAG)
- 3.2 五法构造
- 3.3 保真过滤(防假难负例)
- 4 混淆矩阵与指标
- 5 清洗去重脚本速查
- 6 拒答问题构造脚本速查(unanswerable_gen.py)
- 7 案例速查(7 → 3)
- 8 评测样本分级速查:金标集 · 困难样本 · 边界样本(Golden / Hard / Corner)
1 生产日志 → 评测样本:清洗四步法
Step 1 基础清洗(规则) → Step 2 规范化(语义) → Step 3 三级去重 → Step 4 抽样标注
| 步骤 | 关键动作 | 常用技术 |
|---|---|---|
| 1 基础清洗 | Unicode NFC、全角→半角、去 emoji/HTML/符号 | 标准库正则 |
隐私脱敏(手机号/身份证/邮箱/URL → [PHONE] 占位符) |
正则替换 | |
| 过滤乱码/超短/纯标点/机器人探针 | 乱码率阈值 | |
| 2 规范化 | 空白折叠、拉丁小写、拼写纠错 | 规则+词典 |
| 别名/简称归一("企微"→"企业微信",带部门/时间范围) | 别名表 | |
意图模板化("怎么退货/如何退货"→ <return_how>) |
正则/轻量 LLM | |
| 原文+规范双份保留(防改写变意图) | — | |
| 3 三级去重 | 见下表 | — |
| session/时间窗去重(同 user+session 5~10 分钟重复只留 1 条) | — | |
| 4 抽样标注 | 按意图分层抽样 Top-N、频次加权、人工抽检防误杀 | — |
2 三级去重对比
| 层级 | 技术 | 解决 | 代价 | 备注 |
|---|---|---|---|---|
| L1 精确 | 规范化后哈希 fingerprint | 完全/归一后相同 | 极低 | 先做,命中最多 |
| L2 近似 | SimHash / MinHash+LSH / 编辑距离 | 一字之差变体 | 低 | 汉明距离阈值常用 ≤3 |
| L3 语义 | SBERT 句向量 + 余弦 + 聚类(FAISS/ANN) | 同义不同表述 | 中 | 阈值常用 0.85~0.92 |
口诀:先清洗再去重(L1 命中率暴增);语义只并"同意图";阈值宁宽勿激进。
3 拒答测试:构造"看似相关但文档没答案"的问题
核心:检索能召回相关片段,但答案在文档中不存在。
3.1 六类不可答(UAEval4RAG)
Underspecified 信息不足 · False-premise 错误前提 · Nonsensical 无意义 · Modality 模态受限 · Safety 安全敏感 · Out-of-scope 领域外
3.2 五法构造
| 手法 | 一句话 | 例子 |
|---|---|---|
| ① 换实体(最常用) | 换同领域实体/数字/时间 | "埃菲尔铁塔在巴黎"→"里昂的铁塔怎么去" |
| ② 删证据(最强) | 答案句所在 chunk 屏蔽,留周边主题 | 运费条款删除,"退货运费谁出" |
| ③ 跨文档拼接 | A 主语 + B 谓词 | "销售提成 5%"+"研发 15 天年假"→"销售有几天年假" |
| ④ 错误前提 | 真实实体 + 假前提 | "2024 新规后涨薪 50%,比例多少?" |
| ⑤ 断链/时间错位 | 多跳去中间环 / 历史问当下 | "2023 总部在朝阳"→"总部现在在哪" |
3.3 保真过滤(防假难负例)
构造 → 检索召回 Top-10 chunk → LLM 判断"能/不能"回答 → 不能才入负例集
- 生成层二次验证(被测模型试答,答出需人工确认真假)+ 每批抽检 ≥20% + 黄金负例集 100~200 条。
4 混淆矩阵与指标
| 真实\行为 | 模型答 | 模型拒 |
|---|---|---|
| 真实应答 | ✓ 正常 | ✗ 过度拒答率(<5%) |
| 真实应拒 | ✗ 拒答失败率/幻觉率(≤5%) | ✓ 正常 |
- 难负例占 Golden Set 20%~30%(太少测不出护栏,太多模型过度保守)
- Prompt:无答案必须回"知识库中未找到相关信息",禁止编造;拒答话术分级(完全无关→直接拒;部分相关→给最接近+说明范围)
- 每周挖"用户问了但系统答了幻觉"的 bad case 补入负例集
5 清洗去重脚本速查
位置:interview/raw/sources/leetcode/query_dedup_tool.py(标准库即可跑通 L1/L2;L3 需 pip install sentence-transformers)
# 自测(内置 20 条样例)
python3 query_dedup_tool.py --demo
# 生产使用:JSONL 输入 → 去重清洗 → JSONL 输出
python3 query_dedup_tool.py raw_queries.jsonl -o clean_queries.jsonl --topk 100
# 常用参数
--sim-threshold 3 # L2 SimHash 汉明距离阈值
--sem-threshold 0.90 # L3 语义相似度阈值
--session-window 600 # session 时间窗(秒)
--no-semantic # 禁用 L3(无 GPU/依赖时)
输入:每行 {"query": "...", "user_id": "...", "session_id": "...", "ts": 1234567890}
输出:原字段 + normalized(规范化)/ intent(意图标签)/ keep / dedup_round(L1_exact/L2_simhash/L3_semantic/session_window/stratified_sample)/ count / reason
已知局限:规则层无法识别"合法但无意义"的文本(如"的撒打算"),这类语义有效性过滤需接 LLM 判断。
6 拒答问题构造脚本速查(unanswerable_gen.py)
位置:interview/raw/sources/leetcode/unanswerable_gen.py(标准库即可跑通,LLM 调用走 urllib 零依赖)
# 自测(内置 3 个示例 chunk,mock 生成 + mock 判断,演示"生成→召回→判断→过滤"全流程)
python3 unanswerable_gen.py --demo
# 生产使用:chunk JSONL → 六类拒答问题(带保真过滤)→ JSONL
python3 unanswerable_gen.py chunks.jsonl -o negatives.jsonl \
--api-key sk-xxx --base-url https://dashscope.aliyuncs.com/compatible-mode/v1 --model qwen-max
# 常用参数
--topk 10 # 保真过滤的召回条数
--demo # 无 Key 演示模式
输入:每行 {"chunk": "...", "doc_id": "..."}
输出:question / type(六类之一)/ reason / doc_id / verified / keep / filter_detail
对应关系:本脚本即本文"三、拒答测试"的方法落地——六类不可答 + 五法构造(生成 Prompt 内嵌)+ 保真过滤(内置 n-gram 检索召回 Top-K + LLM judge,判"不能"才保留,防假难负例)。
7 案例速查(7 → 3)
| 原始 | 处理 |
|---|---|
| "怎么退货?"(刷新×3) | session 时间窗去重 |
| "怎么退货!!!" / "如何退货" | 规范化后 L1 命中 |
| "退货流程是什么?" | L3 语义归并 <return_how> |
| "帮我查 138xxxx" | 脱敏 [PHONE],留作边界样本 |
| "的撒打算" | 乱码过滤 |
| "退货多久到账?" | 独立意图保留 |
8 评测样本分级速查:金标集 · 困难样本 · 边界样本(Golden / Hard / Corner)
📎 内容来源:本小节为豆包对话整理(2026-09-11)。用户口述概念 "golden site / hard site / corner site",经检索查证该组合并非大模型评测标准术语("site" 疑为 "set" 误记),按评测领域标准概念修正为 金标集(Golden Set)/ 困难样本(Hard Cases)/ 边界样本(Corner Cases),并与美团白皮书「黄金集 / 必过集 / 挑战集」及评测集难度分布惯例相互印证。
| 分级 | 标准术语 | 定义 | 作用 | 配比参考 |
|---|---|---|---|---|
| 金标集 | Golden Set / Golden Dataset | 人工验证的高质量测试用例集(输入 + 期望输出 + 判定标准,可含期望检索文档),冻结后作为评测基准与回归基线 | 定义"好的下限":每次改 Prompt / 模型 / 检索后跑一遍,证明没有变差 | 核心 40%~60% |
| 困难样本 | Hard Cases / Challenge Set | 高难度问题:需多步推理、多工具编排、长上下文、深检索才能答对 | 标定能力上限、拉开模型差距(对应美团"挑战集") | 20%~30% |
| 边界样本 | Corner Cases / Edge Cases | 边界 / 异常 / 长尾输入:歧义提问、缺上下文、脏数据、对抗性提问、过度拒答测试 | 测试鲁棒性与"防御 vs 过度拒答"平衡 | 20%~30% |
实践要点: - 金标集必须冻结:禁止用测试集调 Prompt;每次规则 / Prompt 变更记录版本,结果按版本存档,方便回溯(对应 012 美团白皮书"黄金集"与评测视频"金标集是尺子")。 - 三分法彼此独立:与"端到端 / 过程"评测集维度、以及"黄金集 / 必过集 / 挑战集"分类不冲突,可按需叠加。 - 配比参考:70% 真实业务 Query + 20% 边缘高难场景(Corner Cases)+ 10% 对抗诱导场景(通用评测集构建惯例)。 - 来源:金标集定义参考 QASkills · How to Build a Golden Dataset for LLM Evaluation 与 The Neural Base · Golden Test Set Construction;配比参考 评测数据集构建指南(70/20/10);对应关系参考 美团《Agent 评测白皮书》系列01(黄金集 / 必过集 / 挑战集)。
索引:000_面试知识体系索引.md · 009_RAG原理与评测.md(3.5/3.6 详细版)