Skip to content

L02-08 相似度阈值:别拍脑袋定 0.8 ​

全局中心内容:阈值不是常数,是随模型、语言、文档类型变化的——必须用数据定。 全局讲解主线:三种度量 → 分数分布实验 → 阈值怎么定 → 拒答联动 → topK 与阈值的关系。


P1 · 产出页 ​

中心内容:一条用真实数据画出来的分数分布曲线 + 一个可配置的阈值。

  • 讲解技巧
    • 开场提问:「相似度 0.75 算高还是低?」——让学员回答,答案必然分歧,然后说这个问题本身就是错的。
  • 时长:20s

P2 · 三种距离度量 ​

中心内容:余弦 / 内积 / 欧氏,选型错了分数就没有可比性。

  • 页面内容:公式与适用场景;归一化的影响

  • 讲解技巧

    • 一句话讲清:余弦看方向、内积看方向+长度、欧氏看绝对距离。文本场景默认余弦。
    • 点出陷阱:有些模型输出的向量没有归一化,这时候内积和余弦差别很大,换库后分数突变就是这个原因。
  • 时长:4min


P3 · 分数分布实验 ​

中心内容:跑一批真实 query,画出「答对」和「答错」两组的分数分布。

  • 页面内容:分布直方图;两条曲线重叠区

  • 讲解技巧

    • 这是本节最有价值的一页:让学员看到两组分布是重叠的,因此不可能有一个完美阈值。
    • 结论:阈值是在「漏召」和「误召」之间取平衡点,不是找正确答案。
  • 时长:6min


P4 · 阈值怎么定 ​

中心内容:先定业务能接受的错误类型,再选阈值。

  • 页面内容:宁可拒答 vs 宁可硬答的两种取舍

  • 讲解技巧

    • 给两个场景对比:医疗/法务问答「宁可拒答」(答错代价高),客服闲聊「宁可硬答」(拒答体验差)。
    • 强调先问业务方这个问题,再动阈值,这是工程师最容易跳过的一步。
  • 时长:5min


P5 · topK 与阈值的关系 ​

中心内容:两个参数要一起调,只调一个会互相打架。

  • 页面内容:topK=5 阈值 0.7 vs topK=20 阈值 0.7 的效果差异

  • 讲解技巧

    • 讲清顺序:先放大 topK 保证召回,再用阈值/rerank 收窄。
    • 常见错误:topK=3 还加高阈值,结果经常一条都不剩,直接走拒答分支。
  • 时长:5min


P6 · 编码:可配置阈值 ​

中心内容:阈值要放在配置里,且按场景分组。

  • 页面内容:SimilarityProperties;按文档类型分别配置

  • 讲解技巧

    • 强调不要全局一个阈值:制度文档和闲聊文本的分数分布完全不同。
    • 加一个启动校验:阈值必须在 (0,1) 区间且不超过 0.95,避免写错成 0.95 以上导致几乎全部拒答。
  • 时长:5min


P7 · 与拒答联动 ​

中心内容:阈值过滤后为空 ≠ 模型不知道,是要走拒答分支。

  • 页面内容:空结果 → 拒答话术 → 引导转人工

  • 讲解技巧

    • 预告 02-11 引用与拒答,这里只埋钩子:「没有命中」和「命中了但不会答」是两件事,要分开处理。
  • 时长:3min


P8 · 避坑与小结 ​

中心内容:换模型/换库后,阈值必须重新校准。

  • 讲解技巧
    • 收尾口诀:「阈值跟着模型走,模型一变阈值变」。
    • 引出下一节:纯靠相似度会漏掉关键词命中的文档——02-09 混合检索。
  • 时长:2min

讲师备忘 ​

项内容
课前必做预先跑好 50 条 query 的分数分布图(离线也要有截图)
最容易超时处P3 分布图容易被追问统计学细节——给结论即可
学员最常问「有没有通用推荐值?」答:中文语义向量 0.6~0.75 起步,但必须自己校准
现场备用无现成数据 → 现场跑 10 条 query 手工统计,5 分钟出结果