ファイナンス、情報通信技術のスキル・アグリゲーション・サイト
『fastText で日本語版 Wikipedia ダンプデータから単語の分散表現モデルを構築・体験 』から1年が経とうとしていますので、最近の日本語版 Wikipedia ダンプデータと mecab-ipadic-NEologd 辞書で再構築したいと考えていました。
fastText は、Facebook AI Research が 2016年にオープンソースで公開した自然言語処理ライブラリです。単語表現の学習や文章の分類を効率的に行います。https://github.com/
なお、前回の1年前の構築に利用した お名前.com VPS のメモリー 2GB のプランは、標準 OS (CentOS 6) から Ubuntu 18.04 LTS GNOME Desktop へ切り替え、この環境での構築に挑戦してみました。
さて、Ubuntu 18.04 LTS GNOME Desktop では、2GB 以上の RAM が必要となっていることも影響していると思うのですが、メモリーの不足により、fastText のコマンドをすべてデフォルトのままで実行することはできませんでした。ただし、-thread 8 でスレッド数を調整する(デフォルトは 12)ことで実行できました。そして、モデル構築完了まで約25時間でした。前回の1年前の構築では、デフォルトのパラメーターのままで、モデル構築に約一週間かかっていました。fastText のバージョンアップによるところが大きいと想像できます。
まずは、単語分散表現モデルで+、ーの演算をシンプルなウェブアプリで体験してみます。
ポジティブ(+)欄とネガティブ(ー)欄に単語を入力してリクエストすると、今回構築した単語分散表現モデルで+、ーの演算を実行します。
たとえば、「日本」ー「東京」+「パリ」の場合、ポジティブ(+)欄に「日本 パリ」、ネガティブ(ー)欄に、「東京」を入力します。
お名前.com VPS に Ubuntu 18.04 LTS GNOME Desktop をインストールした環境での手順です。
$ curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2
-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 を利用します。
$ install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file swig
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/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd -O wakati -b 16384 jawiki.txt -o data.txt
コマンド例の jawiki.txt は、対象ファイル、data.txt は、出力ファイルです。
-b オプションは、次のコマンドで表示される値を参考にして 8192 × 2 の値としました。
$ wc -L jawiki.txt
wget https://github.com/facebookresearch/fastText/archive/v0.2.0.zip
$ unzip v0.2.0.zip
$ cd fastText-0.2.0
$ make
コマンド例の -input オプションの data.txt は、分かち書きしたファイル、-output オプションの model は、出力するファイルで、model.bin、model.vec の2ファイルが作成されます。
なお、コマンドの実行では、お名前.com VPS のメモリー 2GB のプランで、約25時間かかりました。
$ ./fastText-0.2.0/fasttext skipgram --input data.txt -output model -thread 8
$ pip install gensim
Gensim で、fastText のバイナリファイルをロードする場合です。
$ python
>>> from gensim.models.wrappers.fasttext import FastText
>>> model = FastText.load_fasttext_format('model')
>>> model.most_similar(['日本','パリ'],['東京'],10)
Gensim で、テキストファイルだけをロードする場合です。
$ python
>>> from gensim.models import KeyedVectors
>>> model = KeyedVectors.load_word2vec_format('model.vec',binary=False)
>>> model.most_similar(['日本','パリ'],['東京'],10)