word2vecでWikipediaのダンプを扱う

標準

今回、ある大学の研究室見学に赴いたところ自然言語処理をしているところが有りまして、そこでword2vecという単語をベクトルとして表現するというツールが存在することを知りまして、早速自分でも試してみました。今回はUbuntuを使っていきますが、word2vecは3GB以上のメモリが無いと正常に動作しないので、特別にメイン機をエミュレートして実験しました。

Wikipediaのダンプをダウンロード

まずはwikipediaのダンプファイルをダウンロードします。これは、日本語版のWikipediaの全文が収録されていて、これを日本語のモデルとして学習させます。cURLで任意のフォルダーにダウンロードしてください。約2GBちょいあるので、扱いには気をつけてください。

curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2

次にダウンロードしたダンプファイルをテキストファイルに展開します。500個ほどファイルが生成されます。こちらもそれなりに重い作業で数時間かかります。

rbenv exec wp2txt --input-file jawiki-latest-pages-articles.xml.bz2 

上の展開で生成された500個以上のテキストファイルを1つにまとめます。catファイルでコマンドラインに出力するものをそのままテキストに流し込んでいきます。

cat jawiki-latest-pages-articles.xml*.txt > jawiki-dump.txt

jawikiをまとめる
このようにひとつのファイルに纏まっていきます。(画像は実行途中なので、ファイルの重さも軽いです。)

辞書をダウンロードする

この時点でダンプファイルがテキストファイルの状態で1つにまとまっていると思います。それをこれから品詞分解していきます。ここで、品詞分解をする辞書として「mecab-ipadic-NEologd」を使っていきます。この辞書は常に最新の日本語が収録されているので、品詞分解の精度はピカイチです。多くのサイトでは品詞分解を標準のものでやっていますが、ここではこちらを使っていきます。

まずは前提パッケージをインストールします。

sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file

パッケージをインストールし終われば、辞書をダウンロードする準備が整ったので以下のコマンドを走らせます。

//githubからクローンを取る
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

//ディレクトリー移動
cd mecab-ipadic-neologd

//インストール
./bin/install-mecab-ipadic-neologd -n

mecab-ipadic-NEologdインストール中

このように辞書がインストールされていきます。

この実行が終了すれば最新の辞書がダウンロード出来ました。ついでにインストール先を調べるために以下コマンドも走らせます。出力を控えておきましょう。

echo `mecab-config --dicdir`"/mecab-ipadic-neologd"

ダンプファイルを品詞分解する

さて、いよいよ品詞分解していきます。ここでは、品詞分解と言っても全ての品詞を解析していくわけではなく「分かち書き」という表記にしていきます。分かち書きというのは、単語ごとにスペースを挟んだ表記法です。これでword2vecに単語を認識してもらえるようにします。

cat jawiki-dump.txt | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd -Owakati -b 81920 > jawiki-wakati.txt

ここでの辞書のパスは控えておいたmecab-ipadic-NEologdのパスを入力してください。また、「-b 81920」を指定しないとバッファ不足かなにかでエラーを返されます。このコマンドが実行されると、jawiki-wakati.txtという名前で分かち書きが施されたダンプファイルが生成されます。これがword2vecの食べ物です。

word2vecに読み込ませる

いよいよword2vecに読み込ませていきます。ここまで仮想環境でも相当の時間がかかりましたが、ここが正念場です。頑張っていきます。以下のコマンドを走らせます。

time ./word2vec -train jawiki-wakati.txt -output jawiki-train.bin -size 200 -window 5 -sample 1e-3 -negative 5 -binary 1

word2vec解析中

このようにして出力が始まります。Wikipediaのダンプに収録されている単語は合計11億語くらいで、そのうち実際に語彙となったのは170万程です。

私の仮想環境ではコマンドが遂げられるまで8時間近くかかりました。仮想ということもあるのでしょうが、結構重いです。このコマンドが終了するとjawiki-train.binというファイルが生成されます。これが日本語の学習データです。これを使うと色々と日本語で遊ぶことが出来ますので、その部分は次回に。

投稿者プロフィール

yoshipc

コンピューター関連を得意としています。PHPが専門です(尚、技量はお察し)。このブログとMastodonのインスタンスを運営・管理しています。よろしくお願いいたします。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です