gensim - 如何理解 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
类需要遍历您的语料库一次以发现完整的词汇表,然后再iter
进行训练。所以你会看到你的语料库可迭代使用iter + 1
时间。
是的,如果您的预处理很昂贵,那么每次迭代都重复它是浪费的。您可以执行一次,将结果写入单独的临时文件,其中每个标记由空格 ( ' '
) 分隔。然后,您只花费了一次预处理工作,当您稍后进行训练时Word2Vec
,您只执行(非常简单且便宜的)按空间分割标记化。
推荐阅读
- c# - 创建 IE 插件(扩展)以获取反馈
- html - 确保输入字段在 7 到 10 位之间
- amazon-s3 - 从 Lambda 处理大型 S3 文件的方法是什么?
- docker - Docker ARG 或 ENV 在 Dockerfile 中未按预期工作
- c# - 用立方体创建简单的无尽移动平台
- android - 离子框架和 Cordova 是否支持 windows xp 32 位 pc?
- c# - 为映射创建任务扩展方法
- javascript - Vue 指令的优先级?
- javascript - 如何使html标签自动运行
- android - 制作 clicakble 时不显示阿拉伯语可扩展字符串