モバイル&ワイヤレスブロードバンドでインターネットへ
Raspberry Pi 4 model B / 4GB の Raspbian 10 (buster) に fastText v0.9.1 をインストールして、日本語版 Wikipedia ダンプデータから単語の分散表現モデルを構築します。
日本語版 Wikipedia ダンプデータを取得します。現時点でおよそ 3GB のファイルを取得することになりますので、通信環境や空き領域に注意です。
$ curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml
取得したダンプデータから本文だけをテキストとして抽出します。WikiExtractor というツールを利用します。-b オプションは 200M ごとのファイルに分割して出力します。そして、分割されたファイルをひとつのファイルにまとめます。
$ git clone https://github.com/attardi/wikiextractor.git
$ python wikiextractor/WikiExtractor.py -b 200M -o extracted jawiki-latest-pages-articles.xml.bz2
$ cat extracted/*/* > jawiki.txt
分かち書き(わかちがき)のために Mecab を用意をします。分かち書きとは、文章中の語の区切りに空白を差し込むことです。
$ sudo apt install mecab libmecab-dev mecab-ipadic
mecab-ipadic-NEologd は、分かち書きに使用する辞書で、新語などを収録しています。
$ git clone https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n
分かち書きを実行します。
$ mecab -d /usr/lib/arm-linux-gnueabihf/mecab/dic/mecab-ipadic-neologd -O wakati -b 24576 jawiki.txt -o data.txt
fastText v0.9.1 をビルドします。
$ wget https://github.com/facebookresearch/fastText/archive/v0.9.1.zip
$ unzip v0.9.1.zip
$ cd fastText-0.9.1
$ make
fastText を実行します。出力ファイルは、model.vec と model.bin のふたつです。model.vec はテキスト形式、model.bin はバイナリ形式となります。なお、実行時間はおよそ 8.5時間でした。
$ ./fasttext skipgram -input data.txt -output model
Gensim ツールを利用します。Raspbian に Gensim をインストールするにあたっては、次のサイトを参照しました。
$ sudo apt install python3-scipy
$ sudo pip3 install gensim
Gensim でテキストファイルだけをロードする場合です。ちなみにバイナリファイルのロードはメモリエラーとなりました。そして、'日本' - '東京' + 'バリ' を試します。
$ python3
>>> from gensim.models import KeyedVectors
>>> model = KeyedVectors.load_word2vec_format('model.vec',binary=False)
>>> model.most_similar(['日本','パリ'],['東京'],10)