NLP 利器 Gensim 来训练 word2vec 词向量模型的参数设置

使用 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

猜你喜欢

转载自blog.csdn.net/qq_42067550/article/details/106531036