边界与检索单元
本节目标
在选择 Embedding、数据库或框架前,先定义一次检索实验的基本对象:用户信息需求、query、document/passages、相关性判断、可见性和第一阶段候选。学完后,你应能写出一页不依赖具体产品的检索任务规范。
用户原话不等于信息需求
用户输入“退钱怎么还没到”可能同时需要:
- 识别他问的是退款到账时效,而不是如何申请退款;
- 知道订单何时审核通过、支付渠道和当前时间;
- 检索一般时效、状态查询入口和异常升级条件;
- 只读取该用户有权访问的订单与知识文档。
原始字符串称为 original query;经过上下文补全、别名扩展或拆分后形成一个或多个 retrieval queries。任何改写都必须保留与原始输入、会话状态、版本和时间的关联,否则无法回放“系统为何搜了这些词”。
五个基本对象
| 对象 | 定义 | 最小元数据 |
|---|---|---|
| information need | 用户真正想完成的任务 | 意图、时点、错误代价 |
| query | 一次可执行、可回放的检索请求 | ID、original/rewrite、身份、filter、版本 |
| document/passages | 可被返回和评判的检索单元 | 稳定 ID、source span/revision、权限、状态 |
| qrels | query 对 document 的相关性判断 | 等级、标注指南、标注者/裁决版本 |
| ranking | 某通道按规则排列的候选 | channel、rank、score、参数与时间 |
Qrels 是 relevance judgment,不是访问控制表。一个内部 runbook 对问题高度相关,但访客无权读取:它可以用于受控审计或平台员工 query 的 qrels,却不能成为访客线上候选。评测 fixture 应让每个 query 的正例都满足该 query 的 tenant、ACL、status 与业务 filter;安全边界另用 must_not_return 或等价门禁验证。
Document 单元必须与线上一致
如果线上返回 chunk,qrels 也应标 chunk,而不是只标整篇 PDF。否则会出现“论文总体相关,但返回段落没有答案”的假阳性。一个检索单元至少需要:
- 稳定 document_id/chunk_id;
- 原文路径、页码/段落或字符 span;
- source revision 与 content hash;
- 标题、层级和必要局部上下文;
- tenant、ACL、状态、语言、产品和有效期;
- representation revision。
过长 document 会稀释答案并增加后续成本;过短 document 失去主语和条件。边界设计属于 Chunking策略,本库负责用 qrels 验证它是否可检索。
相关性不是“出现关键词”
建议从明确任务出发定义 0~3 级:
| 等级 | 含义 | 例子 |
|---|---|---|
| 3 | 直接回答主要需求,条件与版本正确 | 明确给出当前退款到账时效 |
| 2 | 提供必要证据,但需与其他段落组合 | 解释审核完成时间,不含渠道差异 |
| 1 | 主题相关但不能独立解决问题 | 只说明如何发起退款 |
| 0 | 不相关、过时、冲突或错误对象 | 退货物流规则 |
规则必须说明时间、版本、语言、来源可信度和“仅提及”是否算相关。标注者冲突通过 adjudication 解决,并保留指南版本;不要偷偷把分歧改成一致。
未标记不一定是不相关
大语料不可能逐一标完。若只标旧系统的 top-k,新系统发现的有效文档会被误算为负例。常用做法是 pooling:收集多个候选系统的前若干结果,打乱系统来源后统一标注,再补 hard negatives 和线上失败样本。
因此指标要同时报告 qrels 覆盖和标注池构成。外部 benchmark 的 qrels 适合比较通用能力,不能替代你的语言、权限、时效和业务定义。
第一阶段召回的职责
第一阶段目标是以可接受成本把“可能相关且已授权”的文档放入候选窗口:
可信身份 + original query + 系统上下文
↓
query 处理与硬过滤
↓
BM25 / dense / 其他召回
↓
融合、去重、候选预算
↓
Reranker 或直接返回它不必把最佳证据永远排第一,但必须让后续组件看得到。若相关文档不在候选中,Reranking 和 RAG 都无法补回。
无答案与拒答是正式样本
Query 集必须包含:
- 语料确实没有答案;
- 有相关内容但当前身份无权访问;
- 内容尚未发布或已过有效期;
- 索引延迟导致暂不可见;
- query 含互相冲突或无法满足的条件。
“无结果”“无权限”“系统故障”和“弱相关结果”应是不同状态。不能为降低 no-result rate 而取消 ACL 或返回任意相似文档。
常见失败与诊断
- 标题入库、正文未入库:确认 document 内容和 source span;
- 近重复 chunk 占满 top-k:按 canonical document 限额并测 evidence coverage;
- qrels 只标一个正例:pool 多系统结果,复核未标候选;
- 评测整篇、线上返回 chunk:统一判断单位;
- query 集全是关键词直命中:加入同义改写、口语、错别字和 hard negatives;
- 无权限文档被当正例:将 relevance 与 eligibility 分开建模;
- 把首位准确率当召回全部:明确 Hit@k、Recall@k 与排序指标的分母。
练习
为“内部 IT 帮助中心”写任务规范:
- 定义 query、document 与 source span;
- 写出 0~3 级 relevance 指南,各举一例;
- 构造 VPN、错误码、账号、无答案和访客越权各 2 条 query;
- 为每条 query 写 trusted tenant/groups/filter;
- 说明 qrels 如何 pooling、盲标和裁决;
- 定义第一阶段候选窗口以及进入 reranker 的条件。
掌握检查
- 原始 query、改写 query 与 information need 明确区分。
- 线上返回单位和 qrels 判断单位一致。
- 每个 document 可追溯 source revision/span 和权限状态。
- Qrels 允许多个正例和分级相关性。
- 无答案、无权限、故障和弱相关分别建模。
- 第一阶段以高召回候选为目标,不假装完成最终回答。
下一步:Query 与 Document 表示。
参考资料
- Nguyen et al., MS MARCO
- Karpukhin et al., Dense Passage Retrieval
- Thakur et al., BEIR
来源获取日期:2026-07-14。返回 语义搜索目录。