所有文档的成对地球移动器距离(word2vec 表示)
Pairwise Earth Mover Distance across all documents (word2vec representations)
是否有一个库可以获取文档列表并集体计算 nxn 距离矩阵 - 其中提供了 word2vec 模型?我可以看到 genism 允许您在两个文档之间执行此操作 - 但我需要对所有文档进行快速比较。像 sklearns cosine_similarity.
"Word Mover's Distance"(推土机的距离应用于词向量组)是一个相当复杂的优化计算,取决于每个文档中的每个词。
我不知道有什么技巧可以帮助它在一次计算很多东西时更快——甚至是到同一个文档的许多距离。
所以计算成对距离唯一需要的是嵌套循环来考虑每个(忽略顺序的唯一)配对。
例如,假设您的文档列表(每个都是单词列表)是 docs
,model
中的 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])
是否有一个库可以获取文档列表并集体计算 nxn 距离矩阵 - 其中提供了 word2vec 模型?我可以看到 genism 允许您在两个文档之间执行此操作 - 但我需要对所有文档进行快速比较。像 sklearns cosine_similarity.
"Word Mover's Distance"(推土机的距离应用于词向量组)是一个相当复杂的优化计算,取决于每个文档中的每个词。
我不知道有什么技巧可以帮助它在一次计算很多东西时更快——甚至是到同一个文档的许多距离。
所以计算成对距离唯一需要的是嵌套循环来考虑每个(忽略顺序的唯一)配对。
例如,假设您的文档列表(每个都是单词列表)是 docs
,model
中的 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])