gpt4 book ai didi

python - 使用 gensim 库的 doc2vec 的相似度结果不准确

转载 作者:行者123 更新时间:2023-12-01 01:37:11 29 4
gpt4 key购买 nike

我正在使用 Gensim 库使用 doc2vec 训练一些数据文件,同时尝试使用方法 model.docvecs.most_similar("file") 测试其中一个文件的相似性,我总是得到 91% 以上的所有结果,它们之间几乎没有差异(这不符合逻辑),因为文件之间没有相似之处。所以结果不准确。

这是训练模型的代码

model = gensim.models.Doc2Vec(vector_size=300, min_count=0, alpha=0.025, min_alpha=0.00025,dm=1)
model.build_vocab(it)
for epoch in range(100):
model.train(it,epochs=model.iter, total_examples=model.corpus_count)
model.alpha -= 0.0002
model.min_alpha = model.alpha
model.save('doc2vecs.model')
model_d2v = gensim.models.doc2vec.Doc2Vec.load('doc2vecs.model')
sim = model_d2v.docvecs.most_similar('file1.txt')
print sim

**这是输出结果**

[('file2.txt', 0.9279470443725586), ('file6.txt', 0.9258157014846802), ('file3.txt', 0.92499840259552), ('file5.txt', 0.9209873676300049), ('file4.txt', 0.9180108308792114), ('file7.txt', 0.9141069650650024)]

我做错了什么?如何提高结果的准确性?

最佳答案

您的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 数量传递给它即可。已发表作品的典型 epoch 数量为 10-20。 (多一点可能对小数据集有帮助,但如果您认为需要数百个数据集,则数据或设置可能有其他问题。)

如果数据量很小,您将不会得到非常有趣的 Word2Vec/Doc2Vec 结果,因为这些算法依赖于大量不同的示例。已发表的结果往往使用包含数万到数百万个文档的训练集,每个文档至少有几十个,但最好是数百个单词长。对于较小的数据集,有时您可以通过使用更多的训练遍数和更小的向量来获得足够的结果。此外,使用更简单的 PV-DBOW 模式 (dm=0) 可能有助于处理较小的语料库/文档。

most_similar() 报告的值不是相似性“百分比”。它们是余弦相似度值,从 -1.0 到 1.0,它们的绝对值不如不同结果的相对排名重要。因此,即使存在大量相似度 >0.9 的结果也没关系,只要这些文档比排名较低的文档更像查询文档即可。

因此,查看建议的最相似的各个文档才是真正的测试。如果它们看起来像是无稽之谈,则可能是您的数据或其准备或训练参数存在问题。

对于具有足够真实自然语言文本的数据集,通常需要较高的 min_count 值来提供更好的结果。真实文本往往包含大量低频单词,如果没有更多示例,这些单词并不意味着强有力的事物,因此在训练期间保留它们会成为噪音,使模型变得不那么强大。

关于python - 使用 gensim 库的 doc2vec 的相似度结果不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52286330/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com