概要
gensimを使ったword2vec/doc2vecの実行は、下記のようにモデルを作成して学習させるだけで簡潔に実現できます。
# https://rare-technologies.com/word2vec-tutorial/
model = gensim.models.Word2Vec(iter=1) # an empty model, no training yet
model.build_vocab(some_sentences) # can be a non-repeatable, 1-pass generator
model.train(other_sentences)
ただ、細かな学習の管理等はgensimにおまかせになってしまうので、なるべく丁寧なチューニングができるように、この記事では
- 学習時に学習ロスを出力する
- 学習率
alpha
の値を変えながら学習させる
の2つの方法を解説します。
ちなみにデフォルトでは学習率alpha
の値はmin_alpha
に向かって線形に落ちていくので、通常ならば今回のような方法を取らなくてもalpha
およびmin_alpha
を指定すれば問題ありません。
alpha is the initial learning rate (will linearly drop to min_alpha as training progresses).
https://radimrehurek.com/gensim/models/word2vec.html
方法
学習時のロスを出力する
学習のロスを出力するためには、モデルにcompute_loss=True
を指定の上でget_latest_training_loss()
で取得できます。
model = word2vec.Word2Vec(min_count=1, compute_loss=True)
model.build_vocab(texts)
model.train(texts, total_examples=model.corpus_count, epochs=model.iter)
model.get_latest_training_loss()
alphaの値を変えながら学習させる
学習を繰り返す中で、学習率alpha
を都度指定するようにします。なお、min_alpha
が設定されているとalpha
の値が小さくなっていくので、alpha
と同じ値を入れて変化しないようにしています。
alpha = 0.025
alpha_delta = 0.001
passes = 20
loss_val_list = []
for epoch in range(passes):
model.alpha, model.min_alpha = alpha, alpha
model.train(texts, total_examples=model.corpus_count, epochs=model.iter)
alpha -= alpha_delta
loss_val_list.append(model.get_latest_training_loss())
また、上記で説明した学習ロスを出力してリストに格納しておくと、以下のように学習ロスを可視化することができます。