解决运行Doc2vec gensim时结果不同的问题的解决方案?

问题描述 投票:0回答:1

我尝试查找有关 Doc2vec 运行时返回不同结果的问题的信息。我之前看到了很多关于此的问题,我知道它发生是因为向量是随机初始化的。但是,我正在创建一个网站,它使用此结果在前端显示。结果的差异使得系统的可靠性降低。 我知道我的数据集非常小。但是

infer_vector()
无法返回具有相同文档的相同向量,并且每次运行的结果
most_similar()
都不同。如何防止此问题或有其他方法在我的应用程序中应用 doc2vec 模型以避免结果差异?

这是一些代码:

model = gensim.models.doc2vec.Doc2Vec(vector_size=50, dm=1, window=5, min_count=2, epochs=100, negative=0, workers=5)

但我收到警告:

You must set either 'hs' or 'negative' to be positive for proper training. When both 'hs=0' and 'negative=0', there will be no training.
我尝试设置
negative=-1
但我看到
gensim
的解释:
negative
必须是整数。

nlp doc2vec
1个回答
0
投票

这些可能是两个不同的问题。

关于您看到的警告:

You must set either 'hs' or 'negative' to be positive 
for proper training. When both 'hs=0' and 'negative=0', 
there will be no training.

警告完整且真实,它已经描述了您做错了什么以及如何解决它。

您必须将

hs
negative
设置为,否则您的模型中不会进行任何训练

negative=-1
是非法设置,并且不是积极的。

如果您想使用

Doc2Vec
,则需要将
negative
参数设置为正整数(与其默认值
negative=5
一样),或者如果您想设置
negative=0
,则需要启用另一种“分层 softmax”模式,带有
hs=1

如果你给它非法的配置,算法只会出错或给出无意义的未经训练的结果。

正如 Gensim 项目常见问题解答Q12 和 其他 StackOverflow 答案中所解释的那样,

Doc2Vec
算法的操作自然允许
infer_vector()
在每次运行中返回的向量存在差异。

并且,如果推论之间的“抖动”对结果产生很大影响,则在您使用 Doc2Vec 时可能存在

其他
严重问题,例如数据不足或参数错误,您应该修复这些问题,而不是试图将错误的决定论强加到你的计算中。

特别是,如果模型的变化

infer_vector()
结果是“训练”的——不是真正的——使用显示的参数(
negative=0
没有启用
hs
),忽略不起作用的警告,这是第一个大问题需要解决的问题。它将使all推断的矢量随机且无意义(而不是只是“有点吵”)。

但是,如果在修复了训练的完全失败之后,您仍然坚持做不正确的事情,您可以强制推理决定论,如另一个答案中所述:

删除 doc2vec 向量初始化的随机化

© www.soinside.com 2019 - 2024. All rights reserved.