【コード】
#ライブラリの読み込み
from gensim.models import word2vec
import logging
#計算中のログを出力する
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
#文章ファイルの読み込み
files = word2vec.LineSentence('DATA.txt')
#モデルの作成=word2vecの計算
model = word2vec.Word2Vec(files, sg=1, size=100, min_count=2, window=5, sample=1e-3)
#モデルの保存
model.save("MODEL.model")
【word2vec.pyで見たWord2vecの計算オプション】
__init__(self, sentences=None, corpus_file=None, size=100, alpha=0.025, window=5, min_count=5,
max_vocab_size=None, sample=1e-3, seed=1, workers=3, min_alpha=0.0001,
sg=0, hs=0, negative=5, ns_exponent=0.75, cbow_mean=1, hashfxn=hash, iter=5, null_word=0,
trim_rule=None, sorted_vocab=1, batch_words=MAX_WORDS_IN_BATCH, compute_loss=False, callbacks=(),
max_final_vocab=None):
【オプションの説明】
sentences=None:
corpus_file=None:
size=100:基底とする単語ベクトルの数。これだと1つの単語を100次元のベクトルで表現する。
alpha=0.025:学習係数。
window=5:参照にする前後それぞれの単語数
min_count=5:登場回数がこの回数未満の単語を切り捨てる
max_vocab_size=None,
sample=1e-3,
seed=1,
workers=3: 並列計算を行う数
min_alpha=0.0001,
sg=0:計算に使用するモデル。 cbowの時は0、skip-gramであれば1
hs=0: 階層化ソフトマックス(頻度の低い単語に対して優れている。)を使うときは1
negative=5:ネガティブサンプリングに用いる単語数(ネガティブサンプリングを使うときはhs=0にしておくこと。)
ns_exponent=0.75,
cbow_mean=1,
hashfxn=hash,
iter=5:反復回数。ニューラルネットワークにおけるepochと同じ。
null_word=0,
trim_rule=None,
sorted_vocab=1:1の時は語彙を出現頻度でソートする。
batch_words=MAX_WORDS_IN_BATCH,
compute_loss=False,
callbacks=(),
max_final_vocab=None
参考リンク
alphaとmin_alphaのdoc2vecのデフォルト値
頻度の低い単語に対しては階層的なソフトマックスが優れているのに対し、頻度の高い単語に対してはネガティブサンプリングが優れているのはなぜですか?
0 件のコメント:
コメントを投稿