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()
,但这是一种高级且极易出错的方法。只需调用一次,结合一个完整的训练集,就可以轻松自动地做正确的事情训练学习率衰减和训练迭代次数。)
我正在使用 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()
,但这是一种高级且极易出错的方法。只需调用一次,结合一个完整的训练集,就可以轻松自动地做正确的事情训练学习率衰减和训练迭代次数。)