Embedding 检索中余弦、点积和欧氏距离如何选择?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
先问训练目标和向量是否归一化。L2 归一化后,余弦与点积排序相同,欧氏距离也可单调转换;未归一化时,点积还包含模长信息,可能表达置信度,也可能偏向热门大模长向量。最后强调线上 ANN 索引的度量必须与训练、离线评测一致。
可以这样答:
相似度选择要与训练目标一致。向量做过 L2 归一化时,余弦相似度等于点积,欧氏距离与它们也存在单调关系,因此排序相同;未归一化时,点积会同时受方向和模长影响,而余弦只看方向。模长可能包含有用置信度,也可能造成热门项偏置。训练损失、离线检索和 ANN 索引必须使用一致的度量假设。
核心回答
余弦只比较方向,忽略向量模长;点积同时受夹角和模长影响;欧氏距离衡量绝对空间距离。若向量都做 L2 归一化,最大化点积、最大化余弦和最小化平方欧氏距离会产生相同排序,因为 \(\lVert x-y\rVert_2^2=2-2x^\top y\)。真正选择应与模型的训练目标、是否归一化和向量索引支持保持一致,而不是仅凭经验。
展开说明
某些双塔模型用点积训练,向量模长可能编码置信度或流行度,此时改成余弦会丢信息;另一些对比模型显式归一化,余弦最自然。欧氏距离对模长和维度尺度敏感。近似最近邻系统对不同度量使用的索引或变换可能不同,离线计算正确不代表线上索引配置正确。
工程实践
先查模型卡和训练损失,再用同一查询集比较 Recall@k、NDCG、延迟与索引大小。写入库与查询端要使用完全相同的归一化流程,并对零向量、NaN、版本混用做拦截。阈值不能从一种度量直接搬到另一种,模型升级后也要重新校准。
常见追问
- 归一化后为什么三个度量排序等价? 单位向量的模长固定,平方欧氏距离只差一个关于点积的单调变换。
- 余弦相似度高就代表语义一定相关吗? 不一定,它只反映该表示空间中的几何关系,仍受训练数据、各向异性和领域偏移影响。
- 点积能否直接用于近似最近邻? 可以,但需选择支持最大内积搜索的索引或做相应变换,并与训练时的预处理一致。
一句话复习
度量要匹配训练目标;单位向量下余弦、点积、欧氏排序等价,未归一化时模长是否有意义决定选择。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。