使用 Gensim 来训练 word2vec 词向量模型的参数设置
我们可以使用一些参数设置来控制训练的速度和质量。
一、最小频次 min_count
min_count 用来修剪内部的词表。
比如在一个 10 亿词级别的语料中,如果一个词只出现了一两次,那这个词不是错字就是垃圾~。
再说了,出现次数太少,我们也没有足够的数据来训练出该词的有意义的词向量,所以最好的做法就是:剔除。
# 准备语料
from gensim.test.utils import datapath
from gensim import utils
import gensim.models
class MyCorpus(object):
"""An interator that yields sentences (lists of str)."""
def __iter__(self):
corpus_path = datapath('lee_background.cor')
for line in open(corpus_path):
yield utils.simple_preprocess(line)
# 实例化数据预处理
sentences = MyCorpus()
# 训练模型,min_count 的默认值为 5
model = gensim.models.Word2Vec(sentences, min_count=10)
# 其中设置 min_count=10 表示出现频次 10 词以下的词被剔除
然后我们看下得到的新词表:
print(len(model.wv.vocab))
运行结果:
889
词表的词语总数从 1750 减少到了 889。
二、词向量维度 size
size 约定了我们训练得到的词向量的维度数量。
越大的维度数量,需要越多的训练数据,自然能得到更好的模型(更精确)。
通常设置在 几十~几百 之间。
# 默认 size=100
model = gensim.models.Word2Vec(sentences, size=200)
# 这里我们设置词向量维度为 200
三、并行处理核心数 workers
workers 用于设定训练的并行处理,以加快训练速度。
这是最后一个主要的训练参数。
# 默认值 workers=3
model = gensim.models.Word2Vec(sentences, workers=4)
# 这里我们设定并行处理核心数为 4
可以看到运行显示 4 个 threads,即 4 个线程。
注:
- worker 这个参数起作用的前提是安装了 Cython,否则只能用单核。
- 在每个 batch 太大的时候,程序会提示
under 10 jobs per worker: consider setting a smaller 'batch_words' for smoother alpha decay