标准回答
三种度量(独占一行)
余弦相似度衡量两向量夹角(只看方向),点积同时受方向和模长影响,欧氏距离衡量两点的绝对空间距离(对模长敏感)。
它们的关系
关键在归一化:当向量都被归一化为单位长度后,点积就等于余弦相似度;此时欧氏距离与余弦相似度满足单调关系(dist² = 2 − 2·cos),三者排序一致。差异只在向量未归一化时才显现——此时点积和欧氏会被模长「污染」。
为什么 embedding 检索常用余弦
文本 embedding 的语义主要编码在方向上,向量模长往往受文本长度等无关因素影响。余弦剔除模长、只比方向,更贴合「语义相近」的诉求,因此语义检索(参考 向量数据库原理)默认用余弦或归一化后点积。
工程取舍
实践中先把 embedding 归一化,再用点积度量——计算最快且等价于余弦,FAISS 等库可直接用内积索引。模长本身有意义的场景才考虑保留点积/欧氏。
常见误区
⚠️ 常见踩坑
别说「余弦和欧氏结果一定不同」——对归一化向量它们排序一致;也别在未归一化时用点积当语义相似度,长文本向量模长偏大会虚高得分。
追问
追问 1:为什么很多向量库默认用内积(点积)而非余弦?
因为只要预先把向量归一化,内积就等于余弦,而内积计算更简单、可直接用高效的 MIPS 索引;把归一化前置到写入阶段,检索时只算点积即可,兼顾正确性与性能。
追问 2:什么时候欧氏距离更合适?
当向量的绝对位置/模长本身携带信息时(如某些数值特征、聚类任务、图像特征),欧氏更能反映真实差异;纯语义文本检索则通常用余弦。
追问 3:embedding 不归一化会带来什么问题?
用点积时长文本因模长偏大可能获得虚高相似度,导致召回偏向长文档;用余弦则不受影响。所以工程上一般在入库前统一归一化以保证度量一致。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。