エビフライの唐揚げ

今までのことや、技術的なこと、その他を書いていこうと思います。

Word2Vecによる単語計算のアプリをHerokuにデプロイした話:Word2VecのModel作成編

【アプリ名】
Word2Vecによる単語計算
【概要】
Word2Vecによる単語計算を行えるWebアプリ

Word2Vecによる単語計算

【言語】

Python

【サーバー】

Heroku

 

 

 

単純にWord2Vecを試したいだけであれば、学習済みのデータが転がっているので、それをダウンロードして読み込めばすぐにできる

しかし、Herokuにデプロイするには容量の問題が発生する

有料プランでアレば問題ないのだが、無料プランでは500MBまでしかストレージが使用できず、転がっている学習済モデルだと500MBを超えてしまう

なので、モデルから作った

 

1.Wikipediaの文章データをダウンロードする

2.wikiextractorを使用して、ダウンロードしたダンプデータからTextファイルにする

下記を参考に2まで行ってください

自分はwindows環境なのですが、下記のサイトではLinux環境のようなので

Window環境の方はこのあとの手順はこちらに書きます

kzkohashi.hatenablog.com

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形態素解析を行う

qiita.com

 

下記のようなテキストファイルが出来ればOK(4GB弱あるので、メモ帳だと開けない・・・)

f:id:littlemore:20200526093622p:plain

 

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使い方だとかすべてすっ飛ばしていますが、他のサイトに詳しく書かれているのでいいかなぁ、と。

需要がアレば記事があるので、その際はコメントください