CentOSにgensimを入れてWord2Vecを試す
超今更で恐縮ですがWord2Vecを試してみたくなりました。常に流行から2年ぐらい遅れてる気がします。キルミーベイベーの存在にもアニメ放映時に初めて気付いたぐらいです。
手軽そうなので、gensim上で動かします。gensimは自然言語処理系のモデルがいっぱい入った便利なpythonモジュールです。
環境
- CentOS6.6
- python2.6.6
gensimのインストール
- とりあえず必要そうな依存関係をインストール
yum install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel patch
yum install blas-devel lapack-devel atlas-devel
- setuptools, pipをインストール
wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | python easy_install pip
- numpy, scipyの依存関係をインストール
sudo yum install numpy scipy python-matplotlib ipython python- pandas sympy python-nose
- NumPy, SciPy, Sphynx, nose, pydotをインストール(バージョンはhttps://radimrehurek.com/gensim/install.htmlを参照)
pip install numpy==1.7.1 pip install scipy==0.11.0 pip install sphinx pip install pydot
- Gensimをインストール
pip install --upgrade gensim
- テスト用スクリプトを実行
wget https://pypi.python.org/packages/source/g/gensim/gensim-0.12.2.tar.gz#md5=02f99fc1510bfef7e2e81b7fb38a2cf4 tar -xzvf gensim-0.12.2.tar.gz cd gensim-0.12.2 python setup.py test
最後のpython setup.py test
でエラーが出なければOK。
ちなみにRAM2GBで走らせたらエラーが出たのでRAM4GBにしました。
MeCabインストールとpythonバインディング
折角なので日本語のデータを対象に試したいです。というわけでフリーの日本語形態素解析エンジンMeCabをインストールして、pythonから使えるようにします。以下を参考にしてください。(手抜き)
CentOSにmecab-pythonをインストールする - Qiita
mecab-ipadic-neologdのインストール
MeCab用の新語辞書mecab-ipadic-neologdをインストールします。
yum install git make curl xz git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git cd mecab-ipadic-neologd/ ./bin/install-mecab-ipadic-neologd -n echo `mecab-config --dicdir`"/mecab-ipadic-neologd" #インストール先を確認
python実行
pythonで分かち書きデータを作成してWord2Vecの学習を行います。超簡単なサンプルプログラム置いておきます。
# -*- coding: utf-8 -*- import csv import MeCab import re from gensim.models import word2vec target_base_file = 'base.txt' #元テキストの読み取り用ファイル target_file = 'word_for_word2vec.txt' #分かち書きテキストの書き込み用ファイル tagger = MeCab.Tagger('-Owakati -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') fo = file(target_file,'w') f = open(target_base_file) textdata = f.read() f.close() fo.write(tagger.parse(textdata)) fo.close() sentences = word2vec.Text8Corpus(target_file) model = word2vec.Word2Vec(sentences, size=200) model.save("sample.model")
作成したモデルを使って類似語を出します。
# -*- coding: utf-8 -*- from gensim.models import word2vec model = word2vec.Word2Vec.load("sample.model") try: for i,j in model.most_similar(positive=[u'人間'], negative=[]): print i.encode('utf-8'), j except KeyError: print 'keyword was not found'
終わり
以上です。次回があったらキルミーベイベーから神を引いたらどうなるかを試します。