核心要点

  • 能讲三者定义:余弦看方向夹角、点积看方向+模长、欧氏看绝对距离

  • 能讲关系:向量归一化后,余弦相似度与点积等价,欧氏距离与余弦单调相关

  • 能讲选型:语义检索关心方向而非长度,常用余弦(或归一化后点积)

  • 能讲工程:归一化后用点积最快,是向量库的常见默认

标准回答

三种度量(独占一行)

余弦相似度衡量两向量夹角(只看方向),点积同时受方向和模长影响,欧氏距离衡量两点的绝对空间距离(对模长敏感)。

它们的关系

关键在归一化:当向量都被归一化为单位长度后,点积就等于余弦相似度;此时欧氏距离与余弦相似度满足单调关系(dist² = 2 − 2·cos),三者排序一致。差异只在向量未归一化时才显现——此时点积和欧氏会被模长「污染」。

为什么 embedding 检索常用余弦

文本 embedding 的语义主要编码在方向上,向量模长往往受文本长度等无关因素影响。余弦剔除模长、只比方向,更贴合「语义相近」的诉求,因此语义检索(参考 向量数据库原理)默认用余弦或归一化后点积。

工程取舍

实践中先把 embedding 归一化,再用点积度量——计算最快且等价于余弦,FAISS 等库可直接用内积索引。模长本身有意义的场景才考虑保留点积/欧氏。

常见误区

⚠️ 常见踩坑

别说「余弦和欧氏结果一定不同」——对归一化向量它们排序一致;也别在未归一化时用点积当语义相似度,长文本向量模长偏大会虚高得分。

追问

追问 1为什么很多向量库默认用内积(点积)而非余弦?

因为只要预先把向量归一化,内积就等于余弦,而内积计算更简单、可直接用高效的 MIPS 索引;把归一化前置到写入阶段,检索时只算点积即可,兼顾正确性与性能。

追问 2什么时候欧氏距离更合适?

当向量的绝对位置/模长本身携带信息时(如某些数值特征、聚类任务、图像特征),欧氏更能反映真实差异;纯语义文本检索则通常用余弦。

追问 3embedding 不归一化会带来什么问题?

用点积时长文本因模长偏大可能获得虚高相似度,导致召回偏向长文档;用余弦则不受影响。所以工程上一般在入库前统一归一化以保证度量一致。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。