关于余弦距离(1-余弦相似度)和欧几里得距离之间的差异有很多很好的答案 - 有些链接如下。
我认为首先考虑它们是否相似是有用的。当您使用单位范数向量时,它们实际上是明显相关的a,b:||a||2=||b||2=1.
在这种特殊情况下:
||a−b||2=(a−b)T⋅(a−b)=aTa−2aTb+bTb=2−2aTb=1−cs(a,b)
在哪里cs是两个归一化向量的余弦相似度。因此,平方欧几里得距离是单位范数向量的余弦距离。
当向量未归一化时会发生什么?如果这意味着什么(例如在物理空间中),您可能有充分的理由使用欧几里得距离。
在 NLP 中,很难解释欧式距离。看看你的词嵌入(向量):是否有充分的理由认为组件的绝对大小应该在嵌入之间具有可比性?
余弦距离测量的是一个向量(在您的情况下是嵌入)到另一个向量的(标准化)投影,即告诉两者的方向是否相同。
为了更好地理解这一点,尝试计算以下向量的欧几里得距离和余弦距离可能很有用:
v1=(1,1,0,0),v2=(5,5,0,0),v3=(1,1,0,1)
这很可能是CountVectorizer的输出,用于 3 个单词,字典大小为 4。
一些很好的参考: