コーパスの準備
コーパス作成の流れ
1.日本語版Wikipedia記事のXMLをダウンロードする
2.WikiExtractorというツールを利用し,XMLファイルから記事本文だけを抽出する
まず最初に,WikiExtractorをgitから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
とすることでダウンロードできます.
容量が約2GBほどあるので,時間がかかります.
ダウンロードが終わったら,先ほどcloneしてきたWikiExtractorを使用し,
XMLファイルから,記事本文を抽出します.
使い方は以下の通り,インストールし,コマンドを入力することで抽出できます.
sudo python setup.py install python WikiExtractor.py jawiki-latest-pages-articles.xml.bz2
先程と同様抽出に時間がかかるので,しばらく待ちましょう.
抽出が終わると,textというディレクトリが新たにできます.
作成されたtextディレクトリには,複数ファイルに分割されているので
それを一つのtxtファイルにまとめます.
find text/ | grep wiki | awk '{system("cat "$0" >> wiki.txt")}'
とすることでwiki.txtという一つのファイルに出力できます.
以上でコーパスの準備は終わりです.
word2vecのモデル作成
コーパスを作成したので,これを利用してword2vecのモデルを作成します.
モデルの作成には,gensimを使用します.
pipでインストールできます.
pip install --upgrade gensim
gensimでモデルを作成する際には,コーパスをわかち書きにする必要があるので
mecabを用いて,コーパスをわかち書きにします.
mecabのインストール方法は以下の記事などを参考にしてください.
qiita.com
mecabがインストールされたら,以下のコマンドでコーパスをわかち書きにします.
mecab -Owakati wiki.txt -o wiki_wakati.txt -b 16384
デフォルトの設定だと,MeCab Error “input-buffer overflow. The line is split. use -b #SIZE option.”
というエラーが発生してしまったので -b 16384というオプションをつけています.
このエラーは1行あたりの文字列が(デフォルトの) 8192 文字を超えた時に表示されるみたいです.
"-b"オプションを付けてバッファ・サイズ(一時処理領域)を(デフォルトの2倍の)16384文字にしています.
参考記事でも挙げられていますが,作成されたwiki_wakati.txtにはバイナリ文字が含まれています.
nkfを利用して,utf-8に変換します.
nkfが入っていない場合は以下のコマンドでインストールできます(CentOS7)
sudo yum localinstall -y http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm
使い方は以下の通り.
nkf -w --overwrite wiki_wakati.txt
これでutf-8のtxtファイルができたのでモデル作成ができます.
モデル作成のために,make_models.pyを作成します.
vi make_models.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")
make_models.pyが作成できたら,プログラムを実行します.
python make_models.py
しばらくすると,プログラムが終了し,wiki.modelが出来上がります.
おわりに
今回は,Wikipediaの記事を利用して,word2vecのモデルを作成してみました.
最初は難しそうな印象でしたが,調べてみると意外と簡単そうだったのでやってみました.
せっかく作ったので,実際に使って,遊んでみたいと思います.