Word2Vecによる単語計算のアプリをHerokuにデプロイした話:Word2VecのModel作成編
【アプリ名】
Word2Vecによる単語計算
【概要】
Word2Vecによる単語計算を行えるWebアプリ
【言語】
【サーバー】
Heroku
単純にWord2Vecを試したいだけであれば、学習済みのデータが転がっているので、それをダウンロードして読み込めばすぐにできる
しかし、Herokuにデプロイするには容量の問題が発生する
有料プランでアレば問題ないのだが、無料プランでは500MBまでしかストレージが使用できず、転がっている学習済モデルだと500MBを超えてしまう
なので、モデルから作った
1.Wikipediaの文章データをダウンロードする
2.wikiextractorを使用して、ダウンロードしたダンプデータからTextファイルにする
下記を参考に2まで行ってください
自分はwindows環境なのですが、下記のサイトではLinux環境のようなので
Window環境の方はこのあとの手順はこちらに書きます
python WikiExtractor.py jawiki-latest-pages-articles.xml.bz2
ここまで完了するとtextディレクトリ配下にたくさんのテキストファイルが出来ると思います
3.バラけたテキストファイルをまとめつつ、不要な文字列を削除
import glob import re files = glob.glob("./text/*/wiki_*", recursive=True) for file in files: with open("./wiki.txt", mode='a', encoding="utf_8") as wf: with open(file, encoding="utf_8") as f: text = f.read() text = re.sub('<doc id.*>', '',text) text = re.sub('</doc>', '',text) wf.write(text)
4.3で作成したテキストを下記を参考にMecabで形態素解析を行う
下記のようなテキストファイルが出来ればOK(4GB弱あるので、メモ帳だと開けない・・・)
5.gensimを使用してModel作成
from gensim.models import word2vec import logging print("First") logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) sentences = word2vec.Text8Corpus('./wakati.txt') model = word2vec.Word2Vec(sentences, size=300, min_count=50, iter=10) model.wv.save_word2vec_format("./wiki.model", binary=True)
min_count=50で50個以上ある単語でのみモデルを作成するような設定になっています。
これで160MBくらいのモデルが作成できます
pipでgensimをインストールするだとか、Mecabno使い方だとかすべてすっ飛ばしていますが、他のサイトに詳しく書かれているのでいいかなぁ、と。
需要がアレば記事があるので、その際はコメントください