相似度只是"像不像",不等于"该不该排前面"
向量检索默认按相似度排序,但用户在真实场景里要的是有用,而有用至少还取决于四件事:
- 时效:三年前的方案可能已经过时;
- 权威:官方文档 > 二手转述;
- 覆盖:命中三句和一个完整章节,价值差很多;
- 多样性:五条结果讲同一件事,等于只有一条。
一个可用的排序公式
把排序做成加权和(权重可调、可回归):score = w1·相似度 + w2·时效 + w3·权威 + w4·覆盖度。
- 相似度归一化到 0~1;
- 时效用指数衰减(例如半衰期 180 天,可配置);
- 权威用来源等级表(官方 1.0 / 论文 0.8 / 社区 0.5 …),等级表要人工定,不要模型猜;
- 覆盖度可以用命中长度占比或段落完整度。
关键:权重是配置而不是散在代码里的魔法数字,这样能版本化、能回归。
去重与多样性
- 先做近似去重(同一段落被切成多块时,只留最好的那块);
- 再做多样性重排:同一来源/同一主题最多占前 N 位(MMR 思路);
- 结果里标注来源与时间,让用户能自己判断可信度。
常见错误
- 只调相似度阈值:阈值高→召回差,阈值低→噪声多,永远调不到满意;
- 把权威度交给模型打:模型对"哪个来源更权威"经常没有稳定判断,应由人工维护等级表;
- 忽略时间:在快速变化的领域,旧文档排第一会直接损害信任;
- 没有多样性的硬约束:重排模型自己也常把同类结果排一起。
怎么验证排序改动
固定 30~50 个真实问题,人工标注"前 5 条里是否有真正有用的":
- 记录改动前的命中质量;
- 只改一个因子(例如加时效);
- 用同一批问题复跑,比较"前 5 条有用率"与"重复率";
- 记录权重配置与结果,便于回滚。
排序优化的收益通常比换检索模型更大,而且成本低得多。