
embedding 在算什么
把一段文本压成一串数字,语义相近的文本,数字之间的距离也近。
“怎么退款”和“退款流程”会很近,“怎么退款”和“退货政策”也近,但后者可能答非所问。
这个距离是在训练语料里学出来的,反映的是“经常一起出现”,不是“逻辑上等价”。
理解这一点,就能理解后面的所有误判。
所以向量检索擅长“找同类表述”,不擅长“判断真假对错”。

四种常见的相似误判
否定词。 “支持退款”和“不支持退款”向量非常近,意思相反。
数字。 “三十天”和“九十天”几乎一样,差的是关键。
专有名词。两个不同产品的型号,字面接近,指向完全不同的东西。
同义不同指。 “苹果手机”和“苹果价格”,都含苹果,指向不同。
这四种误判里,否定词造成的损失最大,因为答案看起来完全合理,只是意思反了。
混合检索怎么配
向量检索加关键词检索,两路结果合并再重排。这是目前最稳的做法。
关键词检索补的是精确匹配:型号、编号、人名、条款号。这些向量表达不好,字面匹配反而准。
合并方式有两种:按分数加权,或者各取前若干条再去重。后者简单,效果通常够用。
重排是最后一步,用一个专门的小模型对候选段落重新打分。量不大时,收益很明显。
重排模型不用太大,几千条候选里挑几十条,小模型够用。

召回率怎么测
准备五十个问题,人工标出每个问题的答案在哪一段。这是标准答案。
跑检索,看这五十个问题里,有多少个的正确答案出现在了返回的前五条里。这个比例就是召回率。
低于七成,先修文档和切块;七到九成,加重排;九成以上,再考虑换模型。
别用“看起来相关”来判断效果。人看五条会觉得都还行,实际正确答案可能一条都没进来。
所以标注时必须先看原文,再看检索结果。

常见问题
embedding 模型要跟生成模型一致吗?
不需要,两套是独立的。但要保证建库和查询用的是同一个 embedding 模型,换模型要重建索引。
切多长合适?
三百到八百字之间,按语义边界切。固定字数切最省事,效果最差。
重排值得上吗?
候选多、要求高的时候值得。候选只有三五条,重排收益有限。


