gensim - Doc2Vec:iter 与 epochs 的区别

gensim - Doc2Vec: Difference iter vs. epochs

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

iter (int) – Number of iterations (epochs) over the corpus.

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

epochs (int) – Number of iterations (epochs) over the corpus.

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

To avoid common mistakes around the model’s ability to do multiple training passes itself, an explicit epochs argument MUST be provided. In the common and recommended case, where train() is only called once, the model’s cached iter value should be supplied as epochs value.

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

编辑:

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

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

编辑 2:

虽然文档中没有提到,iter 现在作为 Doc2Vec 的参数被贬值了。重命名为 epochs 以与 train() 的参数保持一致。培训似乎可以解决这个问题,尽管我在 MemoryErrors.

上挣扎

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

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

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

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