所有文档的成对地球移动器距离(word2vec 表示)

Pairwise Earth Mover Distance across all documents (word2vec representations)

是否有一个库可以获取文档列表并集体计算 nxn 距离矩阵 - 其中提供了 word2vec 模型?我可以看到 genism 允许您在两个文档之间执行此操作 - 但我需要对所有文档进行快速比较。像 sklearns cosine_similarity.

"Word Mover's Distance"(推土机的距离应用于词向量组)是一个相当复杂的优化计算,取决于每个文档中的每个词。

我不知道有什么技巧可以帮助它在一次计算很多东西时更快——甚至是到同一个文档的许多距离。

所以计算成对距离唯一需要的是嵌套循环来考虑每个(忽略顺序的唯一)配对。

例如,假设您的文档列表(每个都是单词列表)是 docsmodel 中的 gensim 词向量模型,并且 numpy 导入为np,你可以计算成对距离 D 的数组:

D = np.zeros((len(docs), len(docs)))
for i in range(len(docs)):
    for j in range(len(docs)):
        if i == j:
            continue  # self-distance is 0.0
        if i > j:
            D[i, j] = D[j, i]  # re-use earlier calc
        D[i, j] = model.wmdistance(docs[i], docs[j])

这可能需要一段时间,但随后您将在数组 D 中获得所有成对距离。

除了已接受的答案之外,您可能还想使用更快的 wmd 库 wmd-relax

例子可以调整为:

D[i, j] = docs[i].similarity(docs[j])