さて環境ができたのでいろいろ遊んでみる。
ここは膨大なボキャブラリを誇る幻想再帰のアリュージョニストで単語ベクトルしてみましょう。
mecab のインストール
mecab, mecab-ipadic, mecab-ipadic-NEologd を導入する。
% yaourt -S mecab mecab-ipadic
途中PKGBUILDを編集するか聞かれるので Y で編集に入り、UTF8用にカスタマイズする。
PKGBUILD(mecab)
./configure --with-charset=utf8 --enable-utf8-only
PKGBUILD(mecab-ipadic)
./configure --with-charset=utf8
最新の新語辞典である mecab-ipadic-NEologd を導入する。導入時に /usr/libexec
がないよと怒られるので事前にリンクを張る。
% sudo ln -s /usr/lib /usr/libexec
github から最新の辞書を取得して導入する。ちなみにメモリ 2G 無いとエラーになるらしい。
% git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
% cd mecab-ipadic-neologd
% ./bin/install-mecab-ipadic-neologd -n
使うときには辞書を指定する。
% mecab
惑星のさみだれ
惑星 名詞,一般,*,*,*,*,惑星,ワクセイ,ワクセイ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
さみだれ 名詞,一般,*,*,*,*,さみだれ,サミダレ,サミダレ
EOS
% mecab -d /usr/lib/mecab/dic/mecab-ipadic-neologd
惑星のさみだれ
惑星のさみだれ 名詞,固有名詞,一般,*,*,*,惑星のさみだれ,ホシノサミダレ,ホシノサミダレ
EOS
すごいですね。
word2vec インストール
pip で gensim, cython, word2vec を導入する。
% pip install gensim
% pip install cython
% pip install word2vec
コーパスモデル作成して近似を求める。
まずは mecab で分かち書きファイルを作成する。
mecab -d /usr/lib/mecab/dic/mecab-ipadic-neologd -Owakati original.txt -o data.txt
続いて python でコーパスモデル作成。
from gensim.models import word2vec
sentences = word2vec.Text8Corpus("data.txt")
model = word2vec.Word2Vec(sentences, size=100)
model.save("data.model")
このモデルを使って近似を求めてみる。
from gensim.models import word2vec
model = word2vec.Word2Vec.load("data.model")
out = model.most_similar(positive=[u'アキラ'], topn=3)
print(out)
[('セスカ', 0.7233824133872986), ('みんな', 0.6344067454338074), ('私たち', 0.6305500864982605)]
ほう? トリシューラ負けてるぞ。
>>> out = model.most_similar(positive=[u'アキラ'], topn=10)
>>> print(out)
[
('セスカ', 0.7233824133872986),
('みんな', 0.6344067454338074),
('私たち', 0.6305500864982605),
('くん', 0.6283941268920898),
('アズーリア', 0.6272101998329163),
('お姉様', 0.626919150352478),
('私', 0.5991101264953613),
('お願い', 0.5972921252250671),
('貴方', 0.5968158841133118),
('てろ', 0.5852774381637573)
]
>>> out = model.most_similar(positive=[u'セリアック'], topn=10)
>>> print(out)
[
('ニア', 0.9699307680130005),
('イヴロス', 0.9016405344009399),
('=', 0.8912437558174133),
('ヴィヴィ', 0.8854511380195618),
('ベフォニス', 0.8579694032669067),
('ラウス', 0.8542773127555847),
('ライニンサル', 0.7912667989730835),
('アーニスタ', 0.7889609336853027),
('マラコーダ', 0.7593907713890076),
('イヴァ', 0.738694429397583)
]
>>> out = model.most_similar(positive=[u'再帰'], topn=10)
>>> print(out)
[
('根源', 0.9172159433364868),
('遡及', 0.9000077843666077),
('枠組み', 0.895927369594574),
('人工', 0.8953160643577576),
('飛躍', 0.8908029198646545),
('受動', 0.8826395273208618),
('典型', 0.8811641931533813),
('疑似', 0.8803087472915649),
('向上', 0.8802028298377991),
('合理', 0.8798677921295166)
]