我正在与Gensim库一起使用doc2vec训练一些数据文件,同时尝试使用方法LoadUnmanagedDll()
测试其中一个文件的相似性,我总是获得所有91%以上的结果,几乎没有差异它们之间(不是逻辑),因为文件之间没有相似之处。所以结果不准确。
这是训练模型的代码
model.docvecs.most_similar("file")
这是输出结果
[('file2.txt',0.9279470443725586),('file6.txt',0.9258157014846802),('file3.txt',0.92499840259552),('file5.txt',0.9209873676300049),('file4.txt',0.9180108308792114) ,(“ file7.txt”,0.9141069650650024)]
我在做什么错?如何提高结果的准确性?
答案 0 :(得分:2)
您的it
数据是什么,如何准备? (例如,print(iter(it).next())
会做什么,尤其是如果您连续两次调用它?)
通过调用train()
100次,并保留默认的model.iter
5,实际上是对数据进行了500次传递。前5次通过将使用train()
的内部有效alpha
管理,以逐渐将学习率降低到您声明的min_alpha
值。然后,您接下来的495次通过将以您自己笨拙地管理的alpha速率进行,首先备份到0.025
附近,然后降低每5个批次,直到达到0.005
。
这都不是个好主意。您只需拨打一次train()
,并传递您所需的epochs
号码即可。在已发表的作品中,典型的时期数是10-20。 (使用一个较小的数据集可能会有更多帮助,但是如果您认为需要数百个数据集,则数据或设置可能有其他问题。)
如果数据量很少,您将不会得到非常有趣的Word2Vec
/ Doc2Vec
结果,因为这些算法取决于大量示例。发布的结果倾向于使用具有成千上万到数百万个文档的训练集,每个文档至少要有几十个单词,但最好是数百个单词长。使用较小的数据集,有时您可以通过使用更多的训练遍和较小的向量来挤出足够的结果。同样,使用更简单的PV-DBOW模式(dm=0
)可以帮助处理较小的语料库/文档。
most_similar()
报告的值不是相似性“百分比”。它们是从-1.0到1.0的余弦相似度值,并且它们的绝对值不如不同结果的相对排名重要。因此,如果有很多结果具有> 0.9的相似性就没关系-只要这些文档更像查询文档而不是排名较低的文档。
因此,查看建议的最相似的单个文件才是真正的考验。如果它们看起来很废话,则可能是您的数据或其准备或训练参数存在问题。
对于具有足够的真实自然语言文本的数据集,通常使用更高的min_count
值才能获得更好的结果。真实文本往往包含许多低频词,这些词在没有更多示例的情况下并不意味着强词,因此在训练过程中保留它们会降低模型的强度。
答案 1 :(得分:0)
在不了解文档内容的情况下,以下两个提示可能会对您有所帮助。
首先,对于模型而言,100个纪元可能太小而无法学习差异。
另外,检查文档内容和使用的语料库。确保vocab与您的文件相关?