gensim.models.Word2Vec方法的"iter"参数是遍历整个语料库还是一次传给它的句子?

Does the "iter" parameter of gensim.models.Word2Vec method iterate over the whole corpus or the sentence passed to it at a time?

我正在使用 gensim 训练 word2Vec 模型。在这里,我一次将一个句子从我的语料库传递给 gensim.models.Word2Vec() 方法,以逐渐在我的整个语料库上训练模型。但是我很困惑 iter 参数的值应该是多少,因为我不确定它是对传递的句子进行 n 次迭代还是对整个语料库进行迭代。

我试过查看gensim的文档。它声明定义如下:

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

但我很困惑,因为我没有通过整个语料库,而是每次迭代只通过一个句子。

我训练模型的代码行如下所示:
model = gensim.models.Word2Vec(data, min_count=2, window=arg.window_size, size=arg.dim_size, workers=4, sg=0, hs=0, negative=10, ns_exponent=0.75, alpha=0.025, iter=1)
这里 "data" 表示一次从生成器传递的单个句子。

假设我有一个包含 2 个句子的语料库。 "X is a variable. Y is a variable too."。该模型首先接收数据 = "X is a variable.",然后在第二次迭代中接收数据 = "Y is a variable too."。 现在澄清一下,我的问题是, iter = 50 是否会训练我的模型迭代 "X is a variable." 50 次和 "Y is a variable too." 50 次或者它会迭代 "X is a variable. Y is a variable too." (我的整个语料库)50 次。

Word2Vec 是一个 class。将其称为 model = Word2Vec(...) returns 一个新模型实例。

如果您向该实例化调用提供数据,它需要一个完整的训练语料库,其中包含所有示例,作为数据(sentences 参数)。它将迭代该数据一次以学习词汇,然后再次迭代 epochs 参数中指定的次数进行训练。 (此参数以前称为 iter,现在仍然有效。)

所以:

  • 您不应该用一条短信多次拨打 Word2Vec(...)。您应该调用一次,并将所有文本的可重复序列作为数据。
  • 作为模型初始化和训练的一部分,完整提供的语料库将迭代 epochs + 1 次,通过对 Word2Vec(...).
  • 的单次调用

您应该在 INFO 级别启用日志记录,以便在尝试不同方法时更好地了解发生了什么。

您还应该查看工作示例,例如在其 docs/notebooks 目录中与 gensim 捆绑在一起的 word2vec.ipynb 笔记本,以了解通常的使用模式。 (最好从您的本地安装中以交互方式 运行 查看 - 但也可以在 https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/word2vec.ipynb 在线浏览。)

请注意,您 可以 避免向 Word2Vec(...) 实例化调用提供任何数据,但是您需要调用 model.build_vocab(full_corpus) 然后 model.train(full_corpus, epochs=desired_iterations) 完成模型初始化&训练。 (虽然您随后可以使用训练数据片段继续调用 train(),但这是一种高级且极易出错的方法。只需调用一次,结合一个完整的训练集,就可以轻松自动地做正确的事情训练学习率衰减和训练迭代次数。)