前回投稿した gensim についての知識のなさから、最新バージョンに対応した Word2Vec 用のモデルを見つけることができなかったので、自分でモデルを作成することにしました。検索能力の欠如ですね。
今回は Wikipedia の記事を使ってモデルを作成していきます。
まずは WikiExtractor を clone します。
git clone https://github.com/attardi/wikiextractor.git
新しくできた wikiextractor ディレクトリーに移動します。
cd wikiextractor
Wikipedia の記事 (XML ファイル) をダウンロードします。
curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2
容量がとても大きいので、このコードで実行するとダウンロードできない場合があります。その場合 Safari から直接ダウンロードします。
ここから本文を抽出していきます。
python setup.py install
python WikiExtractor.py jawiki-latest-pages-articles.xml.bz2
これにもだいぶ時間がかかります。できたら新しくtext というディレクトリができていますが、複数ファイルになっているのでこれを txt というディレクトリにひとまとめにします。
find text/ | grep wiki | awk '{system("cat "$0" >> wiki.txt")}'
これで wiki.txt という一つのファイルになりました。次から Word2Vec 用のモデル作成のためのデータ成形に入ります。
成形には gensim と Mecab を使用します。
pip install gensim
pip install mecab
ここでインストールされた gensimの バージョンは現時点で4.1.2です。数年前に大きな変更があり、バージョン3と4の間には記述方法に大きな違いがあるので注意が必要です。
次に記事を分かち書きしていきます。
mecab -Owakati wiki.txt -o wiki_wakati.txt -b 65536
このコマンド b-65536 という引数は、1行当たりの文字数を表します。デフォルトの設定だと 8192 だそうですが、の状態だと
input-buffer overflow. The line is split. use -b #SIZE option
というエラーが出てしまいます。特にwikipediaはデータが多いので、ここの数値はその都度試していくしかなさそうです。
記事にはバイナリ文字も含まれているので nkf を利用して utf-8 に変換していきます。
ukfのインストールは下記の通りです。
brew install nkf
下記を記述して nkf を使用します。
nkf -w --overwrite wiki_wakati.txt
以上でテキスト成形が終わったのでモデル作成に入ります。モデル作成のためのファイル make_model.py を作成します。そして下記を記述します。
from gensim.models import word2vec
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
sentences = word2vec.Text8Corpus('./wiki_wakati.txt')
model = word2vec.Word2Vec(sentences, size=200, min_count=20, window=15)
model.save("./wiki.model")
以上を実行してしばらくすると、wiki.model が完成します。
コメントする