首页 > 解决方案 > 如何理解 gensim 的 iter 参数及其对预处理的影响?

问题描述

from gensim.test.utils import datapath
from gensim import utils

class MyCorpus(object):
    """An interator that yields sentences (lists of str)."""

    def __iter__(self):
        corpus_path = datapath('lee_background.cor')
        i = 1
        print(str(i))
        for line in open(corpus_path):
            # assume there's one document per line, tokens separated by whitespace

            yield utils.simple_preprocess(line)

import gensim.models

sentences = MyCorpus()
model = gensim.models.Word2Vec(sentences=sentences, iter=1)

这是来自https://radimrehurek.com/gensim/auto_examples/tutorials/run_word2vec.html的 genism 文档代码。

我有两个关于 iter 参数的问题:

1)设置为1时,为什么print(str(i))会执行两次?

2)当“iter=10”时,“simple_preprocess”执行11次。如果我自己定制的“预处理”很重,这会很慢吗?如何在使用 genism word2vec 时避免这种预处理重复?

标签: gensimword2vec

解决方案


gensimWord2Vec类需要遍历您的语料库一次以发现完整的词汇表,然后再iter进行训练。所以你会看到你的语料库可迭代使用iter + 1时间。

是的,如果您的预处理很昂贵,那么每次迭代都重复它是浪费的。您可以执行一次,将结果写入单独的临时文件,其中每个标记由空格 ( ' ') 分隔。然后,您只花费了一次预处理工作,当您稍后进行训练时Word2Vec,您只执行(非常简单且便宜的)按空间分割标记化。


推荐阅读