学习契约与正确模型
先明确为什么学、学完能做什么,以及如何证明自己真的掌握。
RAG 与企业搜索常直接采购 embedding API,却没有 BM25 基线或查询集。稠密检索擅长释义,但可能错过型号、罕见实体、数字和新术语;B2B 场景通常需要混合策略与持续评估。
- 解释 bi-encoder、embedding 与 ANN 的服务流程
- 区分模型训练失败与向量索引配置失败
- 用查询类型和强基线评估 dense retrieval
精读 36 分钟 → 引导练习 32 分钟 → 实战任务 70 分钟。实战时间单列,不再把浏览页面和项目操作混成一个数字。
- 它是什么
- 双编码器把查询和文档独立映射到同一稠密空间,离线预计算文档向量,在线通过近似最近邻寻找相近候选。
- 为什么重要
- 独立编码支持大规模快速召回,并能通过训练把不共享表面词项但语义相关的文本拉近。
- 什么时候使用
- 用于自然语言问答、同义表达、跨表述文档发现,以及作为混合检索一路候选。
- 什么时候不要套用
- 对精确代码、数值、法规条款、最新专名或权限过滤,不能只靠向量相似;小数据下不要默认微调胜过成熟基线。
- 边界与不确定性
- embedding 质量依赖训练目标与领域;ANN 还会引入近似召回损失。这里的 dense retrieval 不是 Google Web Search 生产架构声明。
机制精讲
先读完整因果链,再看每个环节留下什么可观察信号。
稠密神经检索通常用两个编码器分别把查询和文档映射为固定维度向量,再通过点积或余弦快速寻找近邻。文档向量可以预先计算,查询在线编码,因此它适合大规模候选生成。它能够连接没有明显词项重合的表达,却把大量语义压缩进有限向量,也可能混淆否定、数字、实体和相近产品。近似最近邻(ANN)索引进一步以少量召回损失换取速度与内存可控;所以失败可能来自编码器没有表达相关性,也可能来自 ANN 没找回本应接近的文档。
训练质量高度依赖正例和负例。随机负例太容易,模型可能只学会区分主题;真正有价值的是 hard negatives:表面或语义接近却不满足任务的文档,如错误型号、旧版本和“不支持”页面。但若把其实相关的文档误作负例,又会伤害召回。稠密检索是通用 IR 技术,不是 Google 公开排名公式。生产设计通常保留 BM25 混合通道,分别监控 encoder、ANN、过滤和融合,以便知道相关文档究竟在哪一步丢失。
双编码器将查询与文档独立映射
查询编码器产生 q,文档编码器产生 d;相似度可批量计算并建立向量索引。独立编码提高效率,却少了逐 token 交互,细粒度约束可能被压缩。
ANN 在速度与召回间取舍
精确搜索遍历全部向量代价高,ANN 通过图、量化或分区快速找近邻。索引参数更激进可降低延迟,却可能漏掉精确 top-k。
负例塑造决策边界
同主题错误文档比随机异主题文档更能教会模型区分任务。应包含否定、相邻型号、对象和版本等困难负例,并防止正例污染。
混合检索保护精确词法
BM25 可以守住型号、标准与罕见术语,稠密通道补同义与自然语言。融合后仍需权限、库存和版本过滤。
关键概念
掌握术语之间的关系,才能迁移到不同网站、行业和工具。
Bi-encoder
查询与文档独立编码,速度快且文档可预计算,但缺少逐 token 的查询—文档交互。
对比学习
训练常拉近正例、推远负例;负例选择决定模型学到的是细粒度相关性还是表面捷径。
ANN 索引
近似最近邻以速度和内存换取一定 recall,HNSW 等参数与模型质量需分开评估。
完整示范
跟随一次“输入 → 分析 → 中间产物 → 结论”,看见专家是怎样做判断的。
二维向量候选的精确手算
以下全部是教学用合成数据。查询“供应商风险评估”向量 q=[1,1];D1“第三方风险工作流”=[0.9,0.8],D2“员工背景调查”=[0.8,0.9],D3“供应商风险不评估”=[1,0.7],均已简化为二维。
- 使用余弦相似度,结果保留三位小数
- 二维坐标没有真实语义,仅用于展示向量接近与任务判断可能冲突
- 不代表 Google、任何真实 encoder 或生产 ANN 参数
计算 D1 相似度
- 输入
- q=[1,1],D1=[0.9,0.8]。
- 分析
- 点积1.7;||q||≈1.414,||D1||=sqrt1.45≈1.204;cos≈1.7/1.703=0.998。
- 输出
- D1 余弦约0.998,是合理高相关候选。
计算 D2 相似度
- 输入
- D2=[0.8,0.9]。
- 分析
- 与D1范数相同、点积同为1.7,余弦也约0.998;向量表示没有编码“供应商”和“员工”的对象差异。
- 输出
- D2 与D1同分,但人工任务判断应更低。
计算 D3 相似度
- 输入
- D3=[1,0.7]。
- 分析
- 点积1.7,范数sqrt1.49≈1.221,cos≈1.7/1.727=0.984;仍非常接近,却包含否定。
- 输出
- D3 高相似暴露否定边界,不能让相似度独立过滤。
形成训练与系统动作
- 输入
- 人工标签 D1=3、D2=0、D3=0。
- 分析
- 把D2作为对象 hard negative、D3作为否定 hard negative,扩大同类样本;生产同时用实体/否定重排与BM25通道,不期待一次训练消除所有错误。
- 输出
- 错误账本区分 encoder表示问题、ANN候选与后续约束。
决策规则与证据边界
把“看到什么、意味着什么、下一步做什么”连起来,同时区分公开事实、实践推断和未知项。
- 给定向量和余弦公式可精确复算相似度;exact 与 ANN 结果差异可直接测量。
- 双编码器独立编码支持预计算文档向量,但交互能力受表示压缩限制。
- 困难负例可帮助模型学习更细边界,但增益依赖数据质量与领域。
- 混合召回在词法和语义任务上常有互补性,仍需本地评估。
- Google Web Search 使用哪些稠密模型、ANN结构、训练数据和查询路由未完整公开。
- 向量工具相似度不能换算为网页排名或所谓语义权威分。
引导练习
先独立完成,再按提示修正,最后展开参考解法并用 0–4 级量规评分。
教学用合成数据:10条查询的 exact dense Recall@10=0.90,ANN Recall@10=0.70;BM25找回两个 ANN 漏掉的型号文档。错误样本含否定、旧版本和跨权限文档。请定位层级并设计混合发布门槛。
给定材料
- 每条查询的人工相关集合、exact top10、ANN top10、BM25 top10及候选来源
- 参数表:ANN搜索深度、P95延迟、内存、文档版本和权限字段完整率
需要提示时再展开
- 先比较 exact 与人工,再比较 ANN 与 exact;两种 Recall 的分母不同。
- 跨权限不是相关性软错误,必须由可靠过滤处理。
完成后核对参考解法
exact dense Recall为0.90说明 encoder 大体有效但仍有10%漏召回;ANN降到0.70表明另有20个百分点损失来自近似索引,应调搜索深度并绘制延迟—Recall曲线。BM25补回型号文档,适合混合召回。否定和旧版本应加入重排挑战与hard negatives,权限必须在候选输出前强制过滤。发布应要求融合Recall不低于基线、关键型号不退化、ANN Recall达到约定、P95和内存达标、权限错误为零并具备BM25回退。
自评分量规
真实项目实战
把理解变成一个可以检查、复核和复用的工作产物。
评估安全文档库的稠密召回
用户用自然语言描述安全问题,文档标题却使用内部功能名;团队考虑向量检索。
- 建立真实查询、qrels 和 BM25 基线
- 选定 embedding 模型、输入前缀、截断与 chunk 规则并锁定版本
- 先做 exact vector search 测模型,再引入 ANN 测索引损失
- 比较 dense、BM25 与候选 union 的 Recall@20,分精确实体与释义查询
- 记录 P95 延迟、索引大小、更新时延和退化案例
验收条件
- 模型效果与 ANN 近似损失分别测量
- 保留 BM25 与混合候选对照
- 对型号、数字、否定和新实体建立挑战集
诊断练习
目标不是猜中答案,而是提出竞争假设并选择能区分它们的证据。
dense 检索自然语言查询提升明显,但新发布产品名完全搜不到。
竞争假设
- 模型训练语料没有新专名,表示缺乏区分
- 文档向量索引尚未更新或缓存陈旧
- ANN 参数或 metadata filter 排除了相关文档
应该检查的证据
- exact 与 ANN 检索差异
- 向量索引版本、写入时间与文档 ID
- BM25 结果、过滤前后候选和 embedding 邻居
常见陷阱:立刻更换 embedding 模型,却不检查索引更新和过滤链。
完成后用本页决策规则复核
- 若观察到:exact 向量 top-k 已缺失相关文档
应优先:检查截断、正负例和领域分布,重训或采用混合召回。
人工标签也可能不完整,应先复核相关性。 - 若观察到:exact 有相关文档而 ANN 没有
应优先:提高搜索深度、调整图/量化参数并测延迟—Recall曲线。
更高 Recall 会增加延迟、内存或成本,需要业务门槛。 - 若观察到:错误集中否定、型号和数字
应优先:增加 hard negatives、词法融合、结构化过滤或重排。
训练增强不能替代权限和合规等必须正确的硬过滤。 - 若观察到:BM25 和 dense 各自贡献不同正确候选
应优先:用透明融合和去重,按查询类型测增量 Recall。
候选扩大增加重排成本与噪声,需要限定 top-k。
自测与误区
先口头回答,再展开检查。无法给出例外与证据,说明还没真正掌握。
你应该能回答
1. 失败来自 encoder、ANN 还是过滤?
参考答案:先跑精确向量搜索:若相关文档在 exact top-k 就缺失,优先查 encoder、tokenization、截断、文档切分和训练标签;若 exact 有而 ANN 无,问题在近似索引参数或版本;若候选已返回但权限/业务过滤后消失,则检查过滤。每层保存候选列表才能定位。
为什么:encoder、ANN 和过滤的修复动作完全不同,只有分层对照能避免盲目重训。
2. 负例是否接近真实混淆文档?
参考答案:负例应接近真实决策边界:同主题错误对象、相邻型号、否定、旧版本和相似但不满足任务的文档。来源可从 BM25/dense 高位误召回和人工错误中挖掘,并由专家复核;随机异主题负例只能教会粗主题。还要避免把未标注相关文档错当负例。
为什么:hard negatives 决定模型学习细粒度区分,同时也是标签污染风险最高的部分。
3. 哪类查询需要 BM25 兜底或融合?
参考答案:型号、标准、错误码、数字和专名查询需要BM25或精确字段兜底;同义和自然语言任务可由dense补充。可并行召回后融合,或按查询分类路由。上线以关键切片Recall、误召回、P95延迟和回退率验收,不能只看总体向量分。
为什么:混合系统利用互补错误,并为模型或ANN故障保留稳定路径。
需要避开的误区
- embedding 模型越大,检索必然越好
- 向量数据库本身会理解业务语义
- dense retrieval 可以完全取代词法检索
术语与复盘
用自己的话复述术语和结论;如果只能认出、不能解释,就还没有形成可调用的知识。
- 双编码器
- 分别编码查询和文档、通过向量相似度比较的架构。
- 稠密向量
- 多数维度非零、由模型学习的固定长度表示。
- ANN
- 以可控近似换取快速最近邻搜索的索引方法集合。
- Exact search
- 与全部候选精确比较,用作衡量 ANN 召回损失的基准。
- Hard negative
- 与查询接近但不相关、用于学习细粒度边界的负例。
- 增量召回
- 某通道相对其他通道新找回的相关候选数量或比例。
离开本页前记住
- 稠密检索压缩查询和文档语义,能补同义召回也会丢精确约束。
- 先用 exact 区分 encoder 失败,再用 ANN 对照定位索引损失。
- 困难负例必须真实、接近且经复核,随机负例不够。
- BM25、结构化过滤和重排是稠密通道的重要补充。
- 发布同时看 Recall、严重错误、延迟、内存、权限和回退。
- 稠密模型与 ANN 不是 Google 公开排名算法,第三方分数不可外推。
资料与证据
优先采用官方和一手资料。实践材料用于补充工作方法,不替代机制证据。