我想使用它们的向量表示来计算两个词的语义相似度(使用例如 word2vec、GloVe 等获得)。我应该使用欧几里得距离还是余弦相似度?
GloVe网站提到了这两种措施,但没有说明每种措施的优缺点:
两个词向量之间的欧几里得距离(或余弦相似度)为衡量对应词的语言或语义相似度提供了一种有效的方法。
我想使用它们的向量表示来计算两个词的语义相似度(使用例如 word2vec、GloVe 等获得)。我应该使用欧几里得距离还是余弦相似度?
GloVe网站提到了这两种措施,但没有说明每种措施的优缺点:
两个词向量之间的欧几里得距离(或余弦相似度)为衡量对应词的语言或语义相似度提供了一种有效的方法。
首先,如果 GloVe 给你标准化的单位向量,那么这两个计算是等价的。一般来说,我会使用余弦相似度,因为它消除了文档长度的影响。例如,一张明信片和一本完整的书可能是关于同一主题的,但在使用欧几里得距离的纯“词频”空间中可能会相距甚远。它们将在余弦相似度上彼此重叠。
这是针对上面的答案
那就对了。但是当一个词被表示为词频向量或 tf-idf 向量时,这不是有意义的吗?在这种情况下,由于某些术语的高频率,每个向量术语的高值将使相似含义的词远离。
但是如果我们使用 word2vec 或 Glove 来使用词向量,那么向量项基本上是神经网络的随机权重。它不再代表术语频率计数。那么我们不应该用ED而不是余弦吗?就像一个词的词向量离另一个词很远但在同一行时会发生什么。那么余弦相似度会很高,因为这两个向量之间的角度几乎为零,但 ED 会很高,因为这两个向量相距甚远。
从本质上讲,如果这两个恰好是不同的词,那么我们确实希望它们不同。在这种情况下,余弦相似度会给出错误的结果,而 ED 更有意义。
所以问题是余弦距离是否有意义,如果使用的向量是由术语 freq 或 tf-idf 创建的。但是,如果创建的向量是词嵌入,那么使用余弦仍然有意义吗?