knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

word2vec + janome で、類似単語の抽出。 自然言語処理(1)


index:

概要

word2vec + janome で、NLP( 自然言語処理 )
してみたいと思います。
今回は、類似単語を抽出する例です。

環境

python 3.5.2
janome
gensim

形態素解析

追加がカンタンそうな janome を、使いました。
=> linux では、mecab でもカンタンそうでしたが。

ライブラリ、NLP関係

pip3 install gensim
pip3 install janome

学習データ

小説データ、 wget 等でコピーしておきます
http://www.aozora.gr.jp/cards/000148/files/794_ruby_4237.zip

sanshiro.txt

コード

・学習の処理
参考記事のと、ほぼ同じですが。
 前処理で、形態素解析
 モデル定義、学習。学習済モデルの保存
word2vec.Word2Vec のオプションは。任意で変更する
 必用がありそうです。

# Word2Vecライブラリのロード
from gensim.models import word2vec

# train
model = word2vec.Word2Vec(word_list, size=100,min_count=5,window=5,iter=100)
model.save("./book.model")

・評価
モデルロード、評価

# encoding: utf-8
from gensim.models import word2vec

model = word2vec.Word2Vec.load("./book.model")
#
posit= u"時代"
#print(model.__dict__['wv'][ posit ])
print("posit=", posit)
results = model.wv.most_similar(positive=[posit], topn=10 )
for result in results:
    print(result)


・結果
適当なキー(例: 時代) で、評価

model.wv.most_similar(positive=[posit], topn=10 )
topn は、トップ単語の出力数を指定できるようです。

posit= 時代
('青年', 0.603624701499939)
('趣', 0.5834314823150635)
('的', 0.5281779766082764)
('世', 0.5107872486114502)
('人格', 0.5079870223999023)
('思想', 0.5060170292854309)
('今日', 0.5013590455055237)
('小さん', 0.4987122118473053)
('人生', 0.49362632632255554)
('我々', 0.4930008053779602)

Github

https://github.com/kuc-arc-f/nlp_word2vec

サンプルのコードです。