我尝试查找有关 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
必须是整数。
这些可能是两个不同的问题。
关于您看到的警告:
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推断的矢量随机且无意义(而不是只是“有点吵”)。
但是,如果在修复了训练的完全失败之后,您仍然坚持做不正确的事情,您可以强制推理决定论,如另一个答案中所述: