【问题标题】:gensim - Doc2Vec: Difference iter vs. epochsgensim - Doc2Vec:差异迭代与时代
【发布时间】:2023-12-14 11:22:01
【问题描述】:

阅读Doc2Vec documentation of gensim 时,我对一些选项感到有些困惑。比如Doc2Vec的构造函数有一个参数iter

iter (int) – 语料库的迭代次数(epochs)。

那么为什么train方法也有一个类似的参数叫做epochs

epochs (int) – 语料库的迭代次数(epochs)。

两者有什么区别?文档中还有一段:

为了避免围绕模型执行多项操作的能力的常见错误 训练通过自身,必须提供明确的 epochs 参数。 在常见和推荐的情况下,train() 只被调用一次, 模型的缓存 iter 值应作为 epochs 值提供。

但我真的不明白为什么构造函数需要一个 iter 参数以及应该为它提供什么。

编辑

我刚刚看到也可以直接在构造函数中指定语料库,而不是单独调用 train()。所以我认为在这种情况下,将使用 iter,否则将使用 epochs。对吗?

如果是这样,在构造函数中指定语料库和手动调用 train() 有什么区别?为什么要选择一个或另一个?

编辑 2

虽然文档中没有提到,但 iter 现在已被贬低为 Doc2Vec 的参数。它被重命名为epochs,以与train()的参数保持一致。培训似乎可以解决这个问题,尽管我对MemoryErrors 感到很挣扎。

【问题讨论】:

标签: python gensim doc2vec


【解决方案1】:

构造函数中的参数最初称为iter,当通过单个构造函数调用执行所有操作时——在构造函数中提供语料库——该值将仅用作训练通过的次数。

train() 的参数被扩展并强制要求以避免常见错误时,术语epochs 被选择为更具描述性,并且与iter 值不同。

当您在构造函数中指定语料库时,build_vocab()train() 将作为构造的一部分自动为您调用。对于大多数简单的用途,这很好。

但是,如果你让这些自动调用发生,你就失去了单独计时步骤的机会,或者在开始训练之前篡改词汇步骤的结果,或者多次调用train()(这通常是不好的)除非你确定你知道你在做什么)。

【讨论】: