向量值没变但最近结果变了,怎样用小样本选清楚余弦与欧氏距离

2026-10-24

先选定相似度所表达的含义,再按正确方向排序:余弦与点积通常越大越靠前,欧氏距离越小越靠前。方向接近但长度悬殊的向量会让这些规则给出不同排名,所以“向量数值没变”不代表换度量后结果也不变。

用长度差异构造对照

查询向量q为(1,0),候选a为(10,1),候选b为(0.7,0.7)。a几乎指向查询方向,但长度大得多;b方向更斜,却离查询坐标很近。附件CSV保存这些原始值,避免从排名倒推输入。它们是手工构造的二维例子,不是某个嵌入模型的真实输出,因此不能据此断言生产系统应该普遍使用哪一种距离。

三个分数逐个核对

a的余弦约0.995,b约0.707,因此按方向相近程度a在前。欧氏距离分别约9.055和0.762,按坐标距离则b在前。点积为10和0.7,也会把a放前,但它还受到向量长度影响,不能直接解释成归一化后的语义相关性。输出表列出每个原始分数与排名,检查时先看升降序有没有写反,再讨论指标选择。

归一化后验证等价关系

把查询与候选分别除以各自L2范数后,欧氏距离平方应等于2×(1−余弦)。附件同时输出这两个独立表达式,浮点误差范围内相等。这里说的是单位向量上的平方距离关系,不是原始向量欧氏距离与余弦始终相同;更不能把“平方”等字省掉后逐数比较。比较关系也依赖每个向量都按同一规则归一化。

零向量和真实模型另处理

失败命令加入零向量,因分母为零而停止,不能把余弦填成零假装正常结果。真实嵌入模型是否已经归一化、建议用哪个度量,应查该模型与索引文档,保留当前配置再做检索质量对照。若索引参数、过滤条件、近似搜索或并列排序发生变化,即使度量没换,排名也可能变化;本例只隔离距离选择这一件事,不将二维计算冒充线上根因诊断。

重建索引前保存度量、归一化开关和排序方向,使用同一批查询比较命中id及原始分数。若只是把分数显示方式从相似度改成距离,前端排序也要一起核对;展示单位改变而排序未改,常会把最近候选排到列表底部。

下载与复现

下载完整样例包,解压到一个新文件夹;也可查看全部文件清单和主脚本。使用Python 3.10或更新版本,在解压目录运行。此脚本只使用标准库,无需安装额外包。

python -B run.py
python -B run.py --negative

先查看主要结果,再修改输入重跑;已有输入会保留,结果写回同目录。边界命令可能故意非零退出,也可能输出明确的不适用状态,按正文说明判断,不把所有非零退出都当成安装故障。

依据与延伸阅读

资料核对日期为2026年10月24日。一手资料1:余弦是归一化点积;单位向量上的欧氏距离与余弦存在确定关系。

继续阅读:Embedding 向量入库前,怎样检查维度、非有限数与零范数;不调模型也能先测检索:怎样给中文小语料做一个字符 TF-IDF 基线;检索前五条都在重复同一段,怎样用 MMR 留出互补材料的位置。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。

加微信,把这一页存到手机上

扫码加站长企业微信,会自动把这一页的链接发给你,方便在手机上接着看。AI 落地卡住了,也可以直接问。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。