跳到主要内容

配置写的是混合检索,跑的是稠密

阿简
阿简

· 阅读约 5 分钟

业务知识到底该塞进模型权重,还是放在检索里?

简单说,微调改的是模型怎么说话,检索管的是它此刻说的事真不真。

这话我讲过一次。再讲,是因为前几天 dev.to 上又出了一篇,论点是很多团队把"模型不懂业务"误判成"得微调",该先去修索引。三种失败模式,一套推荐流程。写得挺整齐。

那篇本身没什么可转述的。

值钱的是评论区。有人真的量了。

十个问题,稠密检索一个都没答上来

一个叫 Tom Jones 的,在自己的工程笔记上做了一组小测量。十个有已知答案的问题,配金标准文档,按文档级召回算。

纯稠密检索:前 10 命中 0 个,放宽到前 100,命中 3 个。

纯 BM25:前 10 命中 3 个,前 100 命中 7 个。

他那份恢复运行手册,BM25 排第一。稠密检索前 100 都没进去。

这组数字值钱的不是 BM25 赢,是那个 0。稠密在这一小片语料上不是弱,是整条腿根本没伸出去。

他自己先泼了一盆冷水

单次运行,私有语料,文档级,没有 LLM 评判,14 个任务里只有 10 个能用。

他另外跑了个公开对照。SciFact 上,整文档稠密和标准分块那一版打平,BM25 那组数字和已发表的对得上。

这一步很多报数的人不做。私有语料上的小测量,第一次看只能当线索。他自己标出来了,所以我愿意接着往下看。

混合方案输给了纯 BM25

他配的是混合 RRF,前 10 命中 0 个,前 100 命中 4 个。比稠密强,仍然输给纯 BM25。

他的归因是两件事。一是准入闸门只放 14 个查询里的 7 个进词法那一路,把 BM25 本来能排第一的查询挡在外面。二是 RRF 在 K=60 上把稀疏信号稀释掉了。某个查询稀疏排第 6,混合之后掉到第 11。另一个从第 11 掉到第 16。还有一个第 33 直接丢了。

混合检索不是两条腿凑一起就完了。闸门和融合参数本身就能把效果吃掉。

那条腿在生产上根本没跑

这一段是这期我想拎出来的重点。

他后来发现,全文 sidecar 索引过期了,生产里实际只走稠密,但配置页上写的是混合。

监控没抓到。因为输出形态没变。回答看起来一如既往地正常。

这才是这条路上最难缠的地方。它不会崩。它会悄悄换一条路走,然后照常给你答案。配置是绿,监控是绿,你以为在跑的东西不是实际在跑的那个。

这事跟不碰检索的人也有关系。你配的东西和你实际在跑的东西,是两码事。区别只在崩不崩给你看。

top-1 命中 0 次,分数一直健康

同一套笔记里还有一组。检索回来的第一条文档,和真正含答案的那份文件对不对得上,14 次里 0 次对。

混合分数全程好看。

分数是系统自己给的。它当然会告诉你它很自信。

83 个 guard,52 个已证明,31 个未证明

负控制那套。他仓库里有 83 个 guard,每个都该声明自己的负控制 fixture。某次跑下来,52 个已证明、0 个损坏、31 个未证明。

未证明不是通过。是没人证明它还能失败。

一个不会失败的检查,看起来和通过的检查一模一样,都是绿的。绿这两个字,在这条路线上最不值钱。

一个 90 分钟前刚写的 fixture,两分钟内结论翻了

他举了三个缺陷。

第一个,控制只设了实例 fixture 没设卷 fixture,一半检查查询实际打到了线上 AWS,guard 本身没问题。

第二个,控制用了相对路径,从仓库根目录跑没事,从别处跑就崩,崩了被当成 guard 失败。

第三个我看了两遍才明白:那个控制是 90 分钟前刚发布的,fixture 的评分依赖语料,语料一动,直接运行时 82% 被拒,11 分钟后从 harness 里跑,43% 被接受。

一个负控制自己也会随语料漂移。而漂移出来的结论,长得和真正的失败一模一样。

评论区还有个叫 Tommie 的补了一刀。有个 guard 把所有 NameError 都当成 harness 的问题,拒过两次基准运行,其中一次的原因是模型把变量名 total 拼成了 total2。修法是让 guard 判断那个缺失的名字是不是提示里本来给过的。

拒了,但拒的理由是错的。跟那台跑着稠密的"混合检索"是同一类事:动作发生了,原因不是你以为的那个。

所以呢

我不打算在这儿给一套方法论。

Dimitris 自己在回帖里提了一条挺实在的:给每个文档块记上最后索引时间和源文件最后修改时间,超过阈值就让检索器直接提示,硬失败或者可见降级。总比引用看上去完美、答案是过期的强。

我能说的就一句。这条路线上没有响亮的失败,全是静默的。你唯一能靠的,是拿一组有已知答案的问题,去问"哪条臂真的在跑",不是问"答得好不好"。

那组 10 个问题的数字,别当结论用。他写得比我诚实,那组数只够当线索。

这期收得有点偏,大半个篇幅都是评论区。但评论区里那串数字,比正文那套"微调还是检索"的老话值钱。

写到这里补一句。上面那些数字和 guard,我一条都没自己跑过,全是从人家笔记里转的。转错算我的。

本周就这些。

上面有任何一条你试过,或者觉得我讲错了,欢迎告诉我。讲错的我补,没讲清的我改。

下周见。

阿简
阿简

每周替你把 vibe-coding 圈的大事筛成一张小抄,被讲玄的概念一句话搞懂。

查看主页 →