Doc2vec(gensim)-如何推断看不见的句子的标签?


14

https://radimrehurek.com/gensim/models/doc2vec.html

例如,如果我们使用以下方法训练了doc2vec

“ aaaaaAAAAAaaaaaaaa”-“标签1”

“ bbbbbbBBBBBbbbb”-“标签2”

我们可以使用Doc2vec推断标签为1的“ aaaaAAAAaaaaAAAA”吗?

我知道Doc2vec可以训练单词向量和标签向量。使用这个向量,我们可以推断出哪个标签中看不见的句子(经过训练的单词的组合)吗?

Answers:


11

这个问题的标题是其文本的单独问题,因此我将分别回答两个问题(假设一个问题引向另一个问题)。

  1. 如何推断看不见的句子:
# ... trained model stored in var model
list_of_words = ["this", "is", "a", "new","unseen", "sentence"]
inferred_embedding = model.infer_vector(list_of_words)

WRN×PDRM×Rk

1Mi=1M1|Di|t=k|Di1|klog(p(wti|wtki,...,wt+ki,Di))

Diith|Di|wtitthithD

WD

  1. 我们是否可以推断出可能看不见的句子恰好对应于训练集中的句子?

D

即使修复随机种子也可能不起作用,还有太多其他变量可能会影响其收敛,请参见https://github.com/RaRe-Technologies/gensim/issues/374上的第一个答案。

无论如何,您只需迭代训练集并将相似度与推断向量相比较,便可以在数据集中找到与推断句子最相似的标签。但是,为什么要与训练集中的某项完全匹配?这些文档嵌入的正则表达式就是用于有监督或无监督学习任务(即分类和聚类)的。


0

我今天试图解决这个问题,很遗憾地找到了gensim.Doc2Vec给定的任何模块,这些模块可以计算非训练模型中的推断文档向量与训练模型中的文档向量之间的相似度。所以基本上我是这样做的。

from scipy import spatial
inferred_vector=model.infer_vector(sentence.split())
for labels in labelled_documents:
    print (1-  spatial.distance.cosine(inferred_vector,model.docvecs[labels]))

0

基于Gensim Doc2Vec 教程,您可以执行以下操作。

inferred_vector = model_dmm.infer_vector(sentence.split())
sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs))

这将为您提供具有所有标签的元组列表,以及与属于每个标签的新文档相关联的概率。那么您可以简单地将最大值作为标签。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.