【问题标题】:How to perform efficient queries with Gensim doc2vec?如何使用 Gensim doc2vec 执行高效查询?
【发布时间】:2019-05-14 12:06:29
【问题描述】:

我正在研究具有以下用例的句子相似度算法:给定一个新句子,我想从给定集合中检索其 n 个最相似的句子。我正在使用 Gensim v.3.7.1,并且我已经训练了 word2vec 和 doc2vec 模型。后者的结果优于 word2vec,但我在使用 Doc2Vec 模型执行高效查询时遇到了麻烦。该模型使用分布式词袋实现(dm = 0)。

我曾经使用内置方法model.most_similar() 来推断相似性,但是一旦我开始使用我想要查询的更多数据进行训练,这将是不可能的。也就是说,我想在我的训练数据集的一个子集中找到最相似的句子。我对此的快速解决方法是使用余弦相似度将新句子的向量与我的集合中的每个向量进行比较,但显然这无法扩展,因为我必须计算嵌入负载并进行大量比较。

我成功地将 word-mover distance 用于 word2vec 和 doc2vec,但在使用余弦相似度时我得到了更好的 doc2vec 结果。如何使用 PV-DBOW Doc2Vec 模型和来自class Similarity 的方法有效地查询我的集合中的新文档?

我正在寻找一种与我对 WMD 所做的类似的方法,但对于 doc2vec 余弦相似性:

# set_to_query contains ~10% of the training data + some future updates
set_to_query_tokenized = [sentence.split() for sentence in set_to_query]
w2v_model = gensim.models.Word2Vec.load("my_w2v_model")
w2v_to_query = gensim.similarities.WmdSimilarity(
               corpus = set_to_query_tokenized,
               w2v_model = w2v_model,
               num_best=10
              )
new_query = "I want to find the most similar sentence to this one".split()
most_similar = w2v_to_query[new_query]

【问题讨论】:

  • d2v_model.docvecs.most_similar() 始终用于在训练期间使用的文档中查找最接近的匹配项。您是否还想搜索增量和连续到达的新培训后文档的问题?您能否偶尔使用所有文档(原始文档和新文档)从头开始重新训练模型?
  • @gojomo 我在我的问题中添加了一些代码,以更好地解释我在这里尝试做的事情。我想在其中找到匹配项的文档是我的训练数据集的一个子集——这就是我不能使用 model.docvecs.most_similar() 的原因。
  • 所以,您已经用 N 个文档训练了一个 Doc2Vec 模型,但只想针对 M 个文档的一些较小子集执行 most_similar(),其中 M
  • @gojomo 就是这样!

标签: python gensim similarity doc2vec sentence-similarity


【解决方案1】:

创建自己的向量子集(作为KeyedVectors 实例)并不像它可以或应该做的那么容易。

但是,您应该能够使用仅加载感兴趣的向量的WordEmbeddingsKeyedVectors(即使您正在使用文档向量)。我没有对此进行测试,但假设 d2v_model 是您的 Doc2Vec 模型,而 list_of_tags 是您想要在子集中的标签,请尝试以下操作:

subset_vectors = WordEmbeddingsKeyedVectors(vector_size)
subset_vectors.add(list_of_tags, d2v_model.docvecs[list_of_tags])

然后您可以执行通常的操作,例如most_similar() 上的subset_vectors

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2018-07-21
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多