単語や類するデータで、順番性を考慮して扱いたいことがあります。そんなときにWord2Vecを使うと非常に便利です。
データの読み込みとモデル化
1文を単語のリストとし、さらにその分を格納したリストをcorpus
として渡すだけです。
from gensim.models import word2vec w2v = word2vec.Word2Vec( corpus, size=200, min_count=3, window=10, iter=100 )
一緒に渡すパラメータはこれらです。単語数と、一文の長さで調整する感じになります。
- size:次元数
- min_count:扱う単語の頻度閾値
- window:いくつ前後をみるか
あとは後述のベクトルの値を見て、iterを増やすかなどを考えます。
扱い方(単語間)
類似度がさくっと出せるのが便利です。
#negative=[]で単語間の引き算ができる w2v.wv.most_similar( positive=["word"], topn=5 ) w2v.wv.similarity(w1="一つ目の単語", w2="二つ目の単語") #w2v.wv.index2wordで単語のリストをとるなど
ベクトル
W2Vの最大の特徴は、ベクトル表現できることだと思っており、それらも簡単に取得できます。
#全単語のベクトル w2v.wv.syn0 #一単語のベクトル #w2v.wv.["キーワード"]
この辺のものをPCAやt-sneなどで次元圧縮して可視化します。
結果の保存
save,loadは独自のメソッドを持っているので注意が必要です。
w2v.save("w2v.mdl") #専用のロード model = word2vec.Word2Vec.load("w2v.mdl")