ファイナンス、情報通信技術のスキル・アグリゲーション・サイト
fastText は、Facebook AI Research が 2016年にオープンソースで公開した自然言語処理ライブラリです。単語表現の学習や文章の分類を効率的に行います。
https://github.com/
すでに多くのサイトで、日本語版 Wikipedia ダンプデータから Word2Vec や fastText を利用して単語のベクトル表現モデルを構築する手順が公開されています。これらを参考にさせていただき、お名前.com VPS のメモリー 2GB のプランで挑戦してみました。モデル構築までに約一週間かかっています。Wikipedia ではデータが大き過ぎました。パワー不足は明らかです。さらに Python gensim によるバイナリデータ(model.bin)の読み込みには、メモリ不足のため失敗しています。しかしながら、単語ベクトルのテキストデータ(model.vec)だけの読み込みには成功しています。これにより、構築したモデルを体験するシンプルな Web アプリも作成してみました。
まずは、単語分散表現モデルをシンプルなウェブアプリで体験してみます。
単語を入力してリクエストすると、今回構築した単語分散表現モデルにおいて、近い関係にあると判断された単語が表示されます。
20 字まで入力できます。
半角文字・全角文字ともに入力できますが、半角記号は、リクエスト処理時に区切り文字(半角スペース)としています。また、入力された文字列に対しても、分かち書きしています。
お名前.com VPS の標準 OS の CentOS 6 での手順です。
$ curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2
-b オプションの例は、500M ごとに分割したファイルを出力します。
$ git clone https://github.com/attardi/wikiextractor.git
$ python wikiextractor/WikiExtractor.py -b 500M -o extracted jawiki-latest-pages-articles.xml.bz2
$ cat extracted/*/* > jawiki.txt
分かち書きとは、文章中の語の区切りに空白を記述することです。形態素解析の単語分割処理にあたります。MeCab を利用します。
$ sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
$ sudo yum makecache
$ sudo yum install mecab mecab-devel mecab-ipadic git make curl xz
〖参考〗Ubuntu 16.04 LTS の場合
$ sudo apt install mecab libmecab-dev mecab-ipadic-utf8
mecab-ipadic-NEologd は、分かち書きに使用する辞書で、新語など新しい語も収録しているのが特徴です。
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n -a
分かち書きします。
$ mecab -d /usr/lib64/mecab/dic/mecab-ipadic-neologd -O wakati -b 2682254537 jawiki.txt -o data.txt
コマンド例の jawiki.txt は、対象ファイル、data.txt は、出力ファイルです。
-b オプションは、次のコマンドで表示される値です。
$ wc jawiki.txt
Software Collections の Developer Toolset を使用します。
$ sudo yum install scl-utils
$ cd /etc/yum.repos.d/
$ sudo wget https://copr-fe.cloud.fedoraproject.org/coprs/rhscl/devtoolset-3/repo/epel-6/rhscl-devtoolset-3-epel-6.repo
$ sudo yum install devtoolset-3-gcc devtoolset-3-binutils
$ sudo yum install devtoolset-3-gcc-c++ devtoolset-3-gcc-gfortran
$ sudo echo 'source /opt/rh/devtoolset-3/enable' >> /etc/profile.d/devtools
$ sudo scl enable devtoolset-3 bash
$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText; make
コマンド例の -input オプションの data.txt は、分かち書きしたファイル、-output オプションの model は、出力するファイルで、model.bin、model.vec の2ファイルが作成されます。
なお、コマンドの実行では、お名前.com VPS のメモリー 2GB のプランで、約一週間かかりました。最初は、Android の SSH アプリからコマンドを実行しましたが、長時間のため通信が切断してしまうので、シリアルコンソールを利用しました。
$ ./fastText/fasttext skipgram -input data.txt -output model
$ pip install gensim
Gensim で、fastText のバイナリファイルをロードする場合です。
$ python
>>> from gensim.models.wrappers.fasttext import FastText
>>> model = FastText.load_fasttext_format('model')
>>> model.most_similar('リンゴ')
Gensim で、テキストファイルだけをロードする場合です。
$ python
>>> from gensim.models import KeyedVectors
>>> model = KeyedVectors.load_word2vec_format('model.vec',binary=False)
>>> model.most_similar('リンゴ')