何时在欧几里得相似度上使用余弦相似度

数据挖掘 机器学习 nlp 聚类 相似
2021-09-15 23:16:32

在 NLP 中,人们倾向于使用余弦相似度来衡量文档/文本的距离。我想听听人们对以下两种情况有何看法,选择余弦相似度还是欧几里得?

任务集概述:任务是计算多词表达的上下文相似度。例如,假设我们的 MWE 为put up,上下文指的是put up在一个文本中的左侧的单词和右侧的单词。从数学上讲,这个任务中的相似度是关于计算

sim(context_of_using_"put_up", context_of_using_"in_short")

请注意,上下文是建立在词嵌入之上的特征,让我们假设每个词的嵌入维度为200

表示的两种情况context_of_an_expression

  1. 连接左右上下文词,200*4=800如果在每一边选择两个词,则产生一个维度的嵌入向量。换句话说,[lc1, lc2, rc1, rc2] 的特征向量是为上下文构建的,其中lc=left_contextrc=right_context

  2. 得到左右上下文词之和的平均值,产生一个200维度向量。换句话说,[mean(lc1+lc2+rc1+rc2)] 的特征向量是为上下文构建的。

[编辑] 对于这两种情况,我认为欧几里得距离更合适。由于归一化,余弦相似性以处理比例/长度效应而闻名。但我认为没有太多需要标准化的地方。

4个回答

何时使用余弦相似度而不是欧几里得相似度

余弦相似度着眼于两个向量之间的角度,欧几里得相似度着眼于两点之间的距离。

假设您在电子商务环境中,并且想要比较用户的产品推荐:

  • 用户 1 购买了 1 个鸡蛋、1 个面粉和 1 个糖。
  • 用户 2 买了 100x 鸡蛋、100x 面粉和 100x 糖
  • 用户 3 购买了 1 个鸡蛋、1 个伏特加和 1 个红牛

通过余弦相似度,用户 1 和用户 2 更相似。通过欧几里得相似度,用户 3 与用户 1 更相似。

文中的问题

我不明白第一部分。

余弦相似度专门用于处理比例/长度效应。对于案例 1,上下文长度是固定的——4 个单词,没有规模效应。就情况2而言,词频很重要,一个词出现一次不同于一个词出现两次,我们不能应用余弦。

这朝着正确的方向发展,但并不完全正确。例如:

cos((10),(21))=cos((10),(42))cos((10),(52))

对于余弦相似度,以下情况成立:

cos((ab),(cd))=cos((ab),n(cd)) with nN

因此,如果所有特征都乘以相同的常数,则仅忽略频率。

维度诅咒

当您查看我的博客文章的表格时,您可以看到:

  • 我拥有的维度越多,随机放置的点之间的平均距离和最大距离就越接近。
  • 同样,均匀随机放置的点之间的平均角度变为 90°。

因此,这两种度量都受到高维度的影响。有关此的更多信息:维度诅咒 - 余弦相似性是否更好,如果是,为什么?. 一个关键点:

  • 余弦在归一化数据上与欧几里得基本相同。

备择方案

您可能对度量学习感兴趣。该原理在FaceNet:A Unified Embedding for Face Recognition and Clustering我的总结)中进行了描述/使用。而不是采用定义明确且简单的指标之一。您可以了解问题域的度量。

好的,所以,你的直觉是错误的。不一定是关于您提供的示例,而是您认为欧几里得距离在 200 维空间中可能有用的事实。200d空间是如此,如此空旷。一切都与其他一切相去甚远。这就是我们使用余弦相似度的原因——因为一切都与其他一切相去甚远,所以如果两个向量指向同一个方向,那已经很好了。[NLP 的这一领域是我传统数学背景最有用的地方]。

让我明白这一点的例子是考虑单位球体的体积与 n 维中的单位立方体的体积之比,因为 n 趋于无穷大。您可以阅读Stack Exchange Math上的答案,或者只考虑前几个案例。在一个维度中,一条线,单位球体占单位立方体的 100%。在 2D 中,这是 π/4:大约 78%。3D 这个 π/6,大约 52%。通过 10D,这是 π^5/122880,或 ~0.2%。

在 200D 中,单位球体是单位立方体的 5e10^-165。这只是一个点。欧几里得距离只是......对大多数事情都变得无用了。

另一个非常相关的例子是采样中的维度诅咒,下面引用了很好的衡量标准

与向数学空间添加额外维度相关的体积呈指数增长。例如,102=100 个均匀分布的采样点足以采样一个单位间隔(“一维立方体”),点之间的距离不超过 10−2=0.01;一个 10 维单位超立方体的等效采样,其格子的相邻点之间的间距为 10−2=0.01,需要 1020[=(102)10] 个采样点。一般来说,在间距为 10−n 的情况下,10 维超立方体看起来比 1 维超立方体“大”10n(10-1)[=(10n)10/(10n)] 倍,即是单位区间。在上面的示例中 n=2:当使用 0.01 的采样距离时,10 维超立方体看起来比单位间隔“大”1018。

由顶部响应建立的直觉是针对 tf-idf 向量的,并且可以延续到任何自然希望被归一化的向量。然而,在这种情况下,余弦相似度与欧几里得距离是双射的,因此理论上两者并没有真正的优势;在实践中,余弦相似度会更快。

第二个响应是不正确的,稀疏性在这种情况下并不重要,至少在实践中并不重要。事实上,我写了一篇关于词嵌入的代数(和一些几何)属性的论文,在 NLP 任务(好吧,在分类任务)上使用 RNN 进行端到端训练,发现余弦相似度是一个非常非常弱的估计一个单词对隐藏状态的动作(启发式地,句子的“意义”)比欧几里得距离。如果您愿意,您可以在此处查看图 16。

为此,我实际上认为余弦相似度的使用是对使用 tf-idf 向量的经典 NLP 的保留,确实需要放弃。

警告:对于归一化向量(单位向量),余弦相似度和欧几里得距离本质上是等价的(最小化一个等于最大化另一个)。这是因为对于单位向量,余弦相似度被简单地计算为点积,并且xy2=2xTy. 在计算上,点积更快,因为它可以用于稀疏向量并节省一个向量减法。