読者です 読者をやめる 読者になる 読者になる

サナギわさわさ.json

サナギさんとキルミーベイベーとプログラミングが好きです

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
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'

終わり

以上です。次回があったらキルミーベイベーから神を引いたらどうなるかを試します。