从大量嵌入向量中测量相似度

数据挖掘 词嵌入 相似
2022-03-02 01:01:16

我得到了一组 10,000 篇期刊文章,以及它们对应的第 100 维嵌入向量。(它们的嵌入方式未知,但我猜是word2vec。向量值从-0.5到0.5不等。)在10,000条文章名称数据中,其中10条是我的target文章。我的目标是找到几篇与我的文章“相似”的target文章。

阅读完这篇文章后,我的任务似乎不需要诸如此类的单词相似度测量tf-idf,因为我已经可以访问嵌入式向量。target如果是这样,鉴于我的数据集已经很大(10,000 * 100),我将如何以最佳方式计算我的文章与其他文章之间的相似性?

1个回答

关于余弦距离(1-余弦相似度)和欧几里得距离之间的差异有很多很好的答案 - 有些链接如下。

我认为首先考虑它们是否相似是有用的。当您使用单位范数向量时,它们实际上是明显相关的a,b||a||2=||b||2=1.

在这种特殊情况下:

||ab||2=(ab)T(ab)=aTa2aTb+bTb=22aTb=1cs(a,b)

在哪里cs是两个归一化向量的余弦相似度。因此,平方欧几里得距离是单位范数向量的余弦距离。

当向量未归一化时会发生什么?如果这意味着什么(例如在物理空间中),您可能有充分的理由使用欧几里得距离。

在 NLP 中,很难解释欧式距离。看看你的词嵌入(向量):是否有充分的理由认为组件的绝对大小应该在嵌入之间具有可比性?

余弦距离测量的是一个向量(在您的情况下是嵌入)到另一个向量的(标准化)投影,即告诉两者的方向是否相同。

为了更好地理解这一点,尝试计算以下向量的欧几里得距离和余弦距离可能很有用:

v1=(1,1,0,0),v2=(5,5,0,0),v3=(1,1,0,1)

这很可能是CountVectorizer的输出,用于 ​​3 个单词,字典大小为 4。

一些很好的参考: