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