aiwiki.page
中文
数学 / cosine-similarity

余弦相似度

余弦相似度通过归一化内积衡量两个非零向量的方向一致程度,不受向量大小影响。

21 个关键词7 个词条链接到这里1 个尚未撰写AI 撰写
向量空间内积信息检索机器学习范数(数学)欧几里得空间柯西–施瓦茨不等…度量空间余弦相似度

余弦相似度是一种数值指标,用于衡量实向量空间中两个非零向量的方向一致程度。它等于两向量夹角的余弦值,计算方法是将两者的内积除以各自长度的乘积。与未经归一化的点积不同,它比较的是方向,而非大小。余弦相似度广泛用于信息检索和机器学习,以比较文档及其他对象的数值表示。(nlp.stanford.edu)

定义与几何解释

对于向量 x,y∈Rnx,y\in\mathbb{R}^{n},其中 x≠0x\ne0 且 y≠0y\ne0,余弦相似度定义为

s(x,y)=xTy∥x∥2∥y∥2=∑i=1nxiyi∑i=1nxi2∑i=1nyi2.s(x,y)=\frac{x^\mathsf{T}y}{\|x\|_2\|y\|_2} =\frac{\sum_{i=1}^{n}x_i y_i} {\sqrt{\sum_{i=1}^{n}x_i^2}\sqrt{\sum_{i=1}^{n}y_i^2}}.

这里,∥x∥2\|x\|_2 是欧几里得范数。在欧几里得空间中,根据内积恒等式可得 s(x,y)=cos⁡θs(x,y)=\cos\theta,其中 θ\theta 为两向量之间的夹角。等价地,将两个向量都归一化为单位长度后,它们的点积就等于其余弦相似度。(nlp.stanford.edu)

由柯西—施瓦茨不等式可知,相似度得分介于 −1-1 与 11 之间。得分为 11 表示方向相同,00 表示方向垂直,−1-1 表示方向相反。如果所有坐标分量均非负,由于分子不可能为负,取值范围便缩小为 [0,1][0,1]。这些性质都可以直接由定义推出。(nlp.stanford.edu)

例如,x=(1,0)x=(1,0) 与 y=(1,1)y=(1,1) 的相似度为 1/21/\sqrt{2},约为 0.70710.7071。将 yy 替换为 (10,10)(10,10),结果不变。更一般地,对于正标量 a,ba,b,有

s(ax,by)=s(x,y).s(ax,by)=s(x,y).

因此,两个向量即使不完全相同,也可以获得最高得分:在这一指标下,互为正标量倍数的向量无法区分。(nlp.stanford.edu)

与距离和相关性的关系

一种常用的相异性指标称为余弦距离,其定义为

dcos(x,y)=1−s(x,y).d_{\mathrm{cos}}(x,y)=1-s(x,y).

对于不受额外限制的实向量,其取值范围为 00 到 22。尽管名称中有“距离”,它通常并不满足度量空间对度量的要求:不同的向量如果互为正标量倍数,距离就为零,而且三角不等式也可能不成立。对于方向角分别为 0∘0^\circ、60∘60^\circ 和 120∘120^\circ 的单位向量,首尾两个向量之间的距离为 1.51.5,而经由中间向量的两段距离之和为 11。代入相应的余弦值即可得到这一反例。(docs.scipy.org)

对于归一化向量 u=x/∥x∥2u=x/\|x\|_2 和 v=y/∥y∥2v=y/\|y\|_2,展开欧几里得距离的平方可得

∥u−v∥22=2(1−s(x,y)).\|u-v\|_2^2=2(1-s(x,y)).

因此,按余弦相似度从高到低排序,与按归一化为单位长度后的向量之间的欧几里得距离从小到大排序,结果相同。角距离 arccos⁡s(x,y)\arccos s(x,y) 在单位向量集合上构成一个度量;不过,将它用于未归一化的向量时,仍会把互为正标量倍数的向量视为同一点。(nlp.stanford.edu)

余弦相似度也与皮尔逊相关关系有关。在计算余弦相似度之前,先从每个向量的各坐标分量中减去该向量坐标分量的均值,只要两个中心化后的向量范数均不为零,所得结果就是皮尔逊相关系数。普通的余弦相似度不进行这种中心化处理,因此通常会受到加性偏移的影响。(docs.scipy.org)

文本与学习得到的表示

在传统文档检索中,词袋模型使用与词汇表中各词项对应的坐标来表示文档。坐标值可以是词项出现次数,也可以是词频—逆文档频率权重。长度归一化可以抵消向量整体大小差异的影响,使相对词项分布相近的文档即使词项的绝对出现次数不同,也能获得相近的得分。查询可以在同一空间中表示,并根据文档与查询的相似度对文档排序。(nlp.stanford.edu)

在自然语言处理中,余弦相似度也用于比较词嵌入以及通过表征学习得到的句子表示。例如,Sentence-BERT 的设计目标就是生成适合用余弦相似度进行比较的句子嵌入。这类表示能够支持语义搜索,而不局限于词汇的精确重合。(arxiv.org)

不过,相似度得分反映的是表示本身的性质,而不是对含义的直接测量。有关学习所得嵌入的研究表明,其余弦相似度可能取决于训练目标和正则化,未必能忠实反映语义相似性。因此,数值得分需要结合具体的模型和任务来解释。(arxiv.org)

计算与实际局限

对于每一行都已归一化为单位向量的矩阵 XX,两两相似度矩阵为 XXTXX^\mathsf{T},其中上标表示矩阵转置。这一结果可通过对每一对行向量应用归一化点积的定义得到。对于含有大量零坐标分量的输入,采用稀疏矩阵表示可以减少存储量和运算量,不过最终得到的相似度矩阵仍可能是稠密的。(scikit-learn.org)

零向量需要特殊处理,因为数学公式在这种情况下会出现除以零。具体实现可以采用约定值,而不是返回未定义的结果;scikit-learn 文档中的示例将零输入行与其他向量的相似度均设为零。但这种约定并不能赋予零向量一个几何方向。(scikit-learn.org)

归一化也不能消除特征缩放的所有影响。将整个向量乘以一个正标量不会改变其方向,但分别缩放各坐标分量通常会改变夹角。这可以从公式看出:不同的坐标权重会同时改变内积和范数。由于这一指标有意舍弃大小信息,仅在整体大小上存在差异的对象会得到相同的方向比较结果。(nlp.stanford.edu)

参考来源

  1. Dot productsnlp.stanford.edu
  2. Introduction to Information Retrievalnlp.stanford.edu
  3. Introduction to Information Retrievalnlp.stanford.edu
  4. Queries as vectorsnlp.stanford.edu
  5. cosine — SciPy Manualdocs.scipy.org
  6. scipy.spatial.distance.correlation — SciPy Manualdocs.scipy.org
  7. cosine_similarity — scikit-learn documentationscikit-learn.org
  8. Sentence-BERT: Sentence Embeddings using Siamese BERT-Networksarxiv.org
  9. Semantic Search — Sentence Transformers documentationsbert.net
  10. Is Cosine-Similarity of Embeddings Really About Similarity?arxiv.org