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