我应该使用欧几里得距离还是余弦相似度来计算两个词的语义相似度?

数据挖掘 nlp 词嵌入
2021-10-05 08:32:17

我想使用它们的向量表示来计算两个词的语义相似度(使用例如 word2vec、GloVe 等获得)。我应该使用欧几里得距离还是余弦相似度?

GloVe网站提到了这两种措施,但没有说明每种措施的优缺点:

两个词向量之间的欧几里得距离(或余弦相似度)为衡量对应词的语言或语义相似度提供了一种有效的方法。

2个回答

首先,如果 GloVe 给你标准化的单位向量,那么这两个计算是等价的。一般来说,我会使用余弦相似度,因为它消除了文档长度的影响。例如,一张明信片和一本完整的书可能是关于同一主题的,但在使用欧几里得距离的纯“词频”空间中可能会相距甚远。它们将在余弦相似度上彼此重叠。

这是针对上面的答案

那就对了。但是当一个词被表示为词频向量或 tf-idf 向量时,这不是有意义的吗?在这种情况下,由于某些术语的高频率,每个向量术语的高值将使相似含义的词远离。

但是如果我们使用 word2vec 或 Glove 来使用词向量,那么向量项基本上是神经网络的随机权重。它不再代表术语频率计数。那么我们不应该用ED而不是余弦吗?就像一个词的词向量离另一个词很远但在同一行时会发生什么。那么余弦相似度会很高,因为这两个向量之间的角度几乎为零,但 ED 会很高,因为这两个向量相距甚远。

从本质上讲,如果这两个恰好是不同的词,那么我们确实希望它们不同。在这种情况下,余弦相似度会给出错误的结果,而 ED 更有意义。

所以问题是余弦距离是否有意义,如果使用的向量是由术语 freq 或 tf-idf 创建的。但是,如果创建的向量是词嵌入,那么使用余弦仍然有意义吗?