首页 > 解决方案 > 在 doc2vec 的正确答案中

问题描述

我为我的代码执行 doc2vec 模型以获取文本相似性,但没有获得 reslt

it = LabeledLineSentence(datafiles, labels1)
    
model = gensim.models.Doc2Vec(vector_size=300, min_count=0, alpha=0.025, min_alpha=0.025)
model.build_vocab(it)
    
#training of model

for epoch in range(100):
    print ('iteration '+str(epoch+1))
    model.train(it,total_examples=model.corpus_count,
                epochs=model.epochs)
    
    model.alpha -= 0.002
    model.min_alpha = model.alpha
    
#saving the created model
model.save('doc2vec.model')
print ("model saved")
    
#loading the model
d2v_model = gensim.models.doc2vec.Doc2Vec.load('doc2vec.model')
    
#start testing
seed_text = "consider illegal immoral plagiarism do various"
tokens1 = seed_text.lower().split()
vector1 = d2v_model.infer_vector(tokens1)
    
#to get most similar document with similarity scores using document-index
most_similar = d2v_model.docvecs.most_similar(positive = [vector1] )
    
# output_sentences(most_similar)
print(u'%s %s: %s\n' % ("Most", most_similar[0][1], data[int(most_similar[0][0])]))

它输出

大多数 0.14691241085529327:M

为什么不打印数据 bt 只有 M 什么意思,我该怎么做才能解决问题问候

标签: pythondoc2vec

解决方案


您使用的版本与LabeledLineSentence以前在 Gensim 中的代码不匹配。你的版本有一个额外的labels1论点。所以,它是非标准的,你应该展示它的代码或解释你的代码基于哪个在线示例。同样,不清楚datafileslabels1可能是什么价值或间接内容。

输出中的M是您的代码的结果data[int[most_similar[0][0])]。您的代码没有显示是什么data,但也许它是一个字符串,并且该字符M位于int(most_similar[0][0])计算结果的任何位置。

(的值most_similar[0][0]应该是与您推断的文本向量最相似的文档标签,它可能是一个 int 或字符串,具体取决于您在未显示的LabeledLineSentence代码中准备训练数据的方式。一定有一个文档以它为标签的 trining 集。)

数字0.14691241085529327是相似度。这不是很多,因此您的探测推断文本与任何培训文档都不是很相似。(也许这表明存在其他问题。)

您的代码还显示了一些不良做法:

我建议您不要相信或使用任何激发此代码的在线文章,而是从 Gensim 文档中的示例开始,逐步根据您的需要构建它们。

其他通用的好步骤:

  • 在 INFO 级别启用日志记录,观察输出:它可能会提示未按应有方式运行的步骤(通过进度计数或计时)
  • 仔细检查您的输入,尤其是it您创建的输入。

例如,如果您运行:

first_item = next(iter(it))
print('tags: %s\nwords: %s' % (first_item.tags, first_item.words))

它是否打印了您打算用作培训材料的第一个文档,并带有正确的单词和标签?如果不是,则您的数据源存在问题。


推荐阅读