python - 在 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 什么意思,我该怎么做才能解决问题问候
解决方案
您使用的版本与LabeledLineSentence
以前在 Gensim 中的代码不匹配。你的版本有一个额外的labels1
论点。所以,它是非标准的,你应该展示它的代码或解释你的代码基于哪个在线示例。同样,不清楚datafiles
和labels1
可能是什么价值或间接内容。
输出中的M
是您的代码的结果data[int[most_similar[0][0])]
。您的代码没有显示是什么data
,但也许它是一个字符串,并且该字符M
位于int(most_similar[0][0])
计算结果的任何位置。
(的值most_similar[0][0]
应该是与您推断的文本向量最相似的文档标签,它可能是一个 int 或字符串,具体取决于您在未显示的LabeledLineSentence
代码中准备训练数据的方式。一定有一个文档以它为标签的 trining 集。)
数字0.14691241085529327
是相似度。这不是很多,因此您的探测推断文本与任何培训文档都不是很相似。(也许这表明存在其他问题。)
您的代码还显示了一些不良做法:
train()
多次调用并使用非默认值min_alpha
您正在操纵自己 - 请参阅答案我的 Doc2Vec 代码,经过多次训练循环,并没有给出好的结果。可能有什么问题?更多细节- 设置
min_count=0
- 几乎总是一个坏主意,并且Doc2Vec
类似的算法受益于忽略稀有词 - 使用大的
vector_size=300
——这只适用于一些非常大的训练语料库,你最有可能使用比默认值大得多的语料库,min_count
并且只有在通过较小的实验获得成功后才尝试
我建议您不要相信或使用任何激发此代码的在线文章,而是从 Gensim 文档中的示例开始,逐步根据您的需要构建它们。
其他通用的好步骤:
- 在 INFO 级别启用日志记录,观察输出:它可能会提示未按应有方式运行的步骤(通过进度计数或计时)
- 仔细检查您的输入,尤其是
it
您创建的输入。
例如,如果您运行:
first_item = next(iter(it))
print('tags: %s\nwords: %s' % (first_item.tags, first_item.words))
它是否打印了您打算用作培训材料的第一个文档,并带有正确的单词和标签?如果不是,则您的数据源存在问题。
推荐阅读
- android - 使用 spyk 和 coVerify 进行验证时出现奇怪的失败消息(额外参数)
- qt - 使用 QtConcurrent::mapped 连续应用多个函数
- html - 用户输入一些值后如何使输入字段不可编辑
- html - Use custom CSS for radio buttons in JQuery
- ruby-on-rails - Rails 6 + Capistrano - 没有这样的 puma.sock 文件
- javascript - JavaScript 更改 JavaScript 中某些值的键并保持其他键相同
- python - 使用 selenium python 的任何方式“允许人们参加会议”
- reactjs - Storybook 中的旋钮和控件的区别?
- db2 - .NET Core DB2 连接器中的持久连接字符串错误
- c# - 如何使用 Entity Framework Core 在 SQL Server 的控制台中显示值?