【问题标题】:How does gensim.models.FatText.wv.wmdistance calculate between two documents?gensim.models.FatText.wv.wmdistance 如何计算两个文档之间的距离?
【发布时间】:2019-12-13 08:45:43
【问题描述】:

我已经有了一个带有 gensim 的 fastText 训练模型,并且
我可以得到两个句子之间的距离,如下所述,

sentence_1 = "Today is very cold."  
sentence_2 = "I'd like something to drink."    

print(model.wv.wmdistance(sentence_1.split(" "), sentence_2.split(" ")))
# 0.8446287678977793  # for example

但是vmdistance 是如何计算这个值的呢?
我想知道公式。

API 文档:https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.Doc2VecKeyedVectors.distance

【问题讨论】:

    标签: python-3.x gensim fasttext


    【解决方案1】:

    wmdistance() 函数计算两组单词之间的“Word Mover 距离”。

    您可以通过将运筹学中称为“Earth Mover's Distance”的旧思想应用到文本中来查看创造“Word Mover's Distance”(WMD)度量的学术论文,网址为:

    From Word Embeddings To Document Distances,作者:Matt Kusner 等人

    您可以在以下位置查看 gensim 的 wmdistance() 函数使用的确切代码:

    https://github.com/RaRe-Technologies/gensim/blob/de0dcc39fee0ae4eaf45d79bd5418d32780f9aa5/gensim/models/keyedvectors.py#L677

    WMD 的计算相当耗时,因为它涉及对“意义堆”的许多可能“转变”进行搜索,以找到一种最低消耗的方法。随着文本变得更长,它变得特别耗时。 (短句比完整的段落或文档更实用。)

    通常文本会被总结为单个向量——通过对它们的词向量进行平均,或者像Doc2Vec 这样的浅文本到向量算法,或者深度学习模型(BERT、ELMo 等) .然后可以通过简单的余弦相似度更快地比较这些单个向量。 (这就是 gensim 向量模型的普通 similarity()distance() 方法所做的。)

    【讨论】:

    • 有趣!我想知道大规模杀伤性武器和单向量之间的能力差异。我会尽力。感谢您的友好回答。
    猜你喜欢
    • 2018-02-22
    • 2019-02-16
    • 2016-07-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 2011-03-18
    相关资源
    最近更新 更多