CentOSでpython3からgensimのword2vecを使ってみる
環境
VMware PlayerのCentOS6
手順
学習データにはWikipediaのデータを利用。
ライブラリをpipインストール
pip install numpy pip install scipy pip install --upgrade gensim
wp2txtインストール
CentOSにwp2txtインストール - とりあえずシステムエンジニアの備忘録
Wikipediaデータのダウンロード
wget http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
wikipediaデータをパース
wp2txt --input-file jawiki-latest-pages-articles.xml.bz2
パース結果を結合
cat jawiki-latest-pages-articles.xml-* > /work/word2vec/corpus.txt
[root@localhost word2vec]# mecab -Owakati corpus.txt -o corpus_wakati.txt input-buffer overflow. The line is split. use -b #SIZE option.
エラーが多発するので、デフォルトの10倍にバッファサイズを設定
30分位
[root@localhost word2vec]# mecab -b 81920 -Owakati corpus.txt -o corpus_wakati.txt
学習を実行しモデル作成。
[root@localhost word2vec]# python3.5 word2vec_sample.py
ソース
from gensim.models import word2vec # 学習 sentences = word2vec.Text8Corpus("corpus_wakati.txt") model = word2vec.Word2Vec(sentences, size=100) # モデルの保存と読込 model.save("sample.model")
Wikipediaデータは6.2GB
VMWare環境、8GBメモリで7時間近くかかった。
時間かかりすぎ・・
では使ってみる
こんな感じ
def load_model(): global model timeStart = time.clock(); model = word2vec.Word2Vec.load("sample.model") timeTotal = round(time.clock() - timeStart, 3) print("load model ... {0}s".format(timeTotal)) def print_result(out): print("-----") for x in out: for y in x: try: print (y, '\t') except KeyError: print("not found : " + y) try: load_model() #よく一緒に使われる(距離が近い)単語を3つ取得 out = model.most_similar(positive=[u'ピカチュウ'], topn=3) print_result(out) #単語を足して、それらとよく使われる単語を取得 out = model.most_similar(positive=[u'ピカチュウ', u'進化'], topn=5) print_result(out) #単語から単語を引いた意味を取得 out = model.most_similar(positive=[u'ピカチュウ', u'モンスター'], negative=[u'ポケモン'], topn=5) print_result(out)
読み込み時間10秒近く掛かる、遅すぎ・・・
word2vec使って色々出来そうで面白そう