ファイナンス、情報通信技術のスキル・アグリゲーション・サイト

' . iseeit.jp 情報通信技術 . '

fastText で日本語版 Wikipedia ダンプデータから単語の分散表現モデルを構築・体験

fastText は、Facebook AI Research が 2016年にオープンソースで公開した自然言語処理ライブラリです。単語表現の学習や文章の分類を効率的に行います。

https://github.com/facebookresearch/fastText

すでに多くのサイトで、日本語版 Wikipedia ダンプデータから Word2Vec や fastText を利用して単語のベクトル表現モデルを構築する手順が公開されています。これらを参考にさせていただき、お名前.com VPS のメモリー 2GB のプランで挑戦してみました。モデル構築までに約一週間かかっています。Wikipedia ではデータが大き過ぎました。パワー不足は明らかです。さらに Python gensim によるバイナリデータ(model.bin)の読み込みには、メモリ不足のため失敗しています。しかしながら、単語ベクトルのテキストデータ(model.vec)だけの読み込みには成功しています。これにより、構築したモデルを体験するシンプルな Web アプリも作成してみました。

日本語版 Wikipedia の単語分散表現モデルをシンプルなウェブアプリで体験

まずは、単語分散表現モデルをシンプルなウェブアプリで体験してみます。

単語を入力してリクエストすると、今回構築した単語分散表現モデルにおいて、近い関係にあると判断された単語が表示されます。

 

単語:

20 字まで入力できます。

半角文字・全角文字ともに入力できますが、半角記号は、リクエスト処理時に区切り文字(半角スペース)としています。また、入力された文字列に対しても、分かち書きしています。

日本語版 Wikipedia の単語分散表現モデルを fastText で構築

お名前.com VPS の標準 OS の CentOS 6 での手順です。

1.日本語版 Wikipedia ダンプデータを取得します。



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

2.ダンプデータから本文だけをテキストとして抽出します。

-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

3.分かち書き(わかちがき)します。

分かち書きとは、文章中の語の区切りに空白を記述することです。形態素解析の単語分割処理にあたります。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 

4.標準 OS の CentOS 6 のコンパイル環境をバージョンアップします。

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

5.fastText をビルドします。



$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText; make

6.fastText コマンドを実行します。

コマンド例の -input オプションの data.txt は、分かち書きしたファイル、-output オプションの model は、出力するファイルで、model.bin、model.vec の2ファイルが作成されます。

なお、コマンドの実行では、お名前.com VPS のメモリー 2GB のプランで、約一週間かかりました。最初は、Android の SSH アプリからコマンドを実行しましたが、長時間のため通信が切断してしまうので、シリアルコンソールを利用しました。



$ ./fastText/fasttext skipgram -input data.txt -output model

7.Gensim は、ベクトル空間モデリングやトピックモデリングのためのツールキットです。



$ 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('リンゴ')

現時点で最新の日本語版 Wikipedia ダンプデータと mecab-ipadic-NEologd 辞書でモデルを再構築しました。fastText のバージョン 0.2.0 を利用しました。また、『fastText (v0.2.0) で日本語版 Wikipedia ダンプデータから単語の分散表現モデルを構築・演算体験』では、単語分散表現モデルで+とーの演算をシンプルなウェブアプリで体験できます。

単語の分散表現モデルのシンプル体験ウェブアプリは、Chrome 、Safari 、Firefox のほか、Internet Explorer 、Edge にも対応しました。

『fastText で日本語版 wikipedia ダンプデータから単語の分散表現モデルを構築・体験』を公開しました。

ファイナンシャル・プランニング
6つの係数

終価係数 : 元本を一定期間一定利率で複利運用したとき、将来いくら になるかを計算するときに利用します。

現価係数 : 将来の一定期間後に目標のお金を得るために、現在いくら の元本で複利運用を開始すればよいかを計算するときに利用します。

年金終価係数 : 一定期間一定利率で毎年一定金額を複利運用で 積み立て たとき、将来いくら になるかを計算するときに利用します。

年金現価係数 : 元本を一定利率で複利運用しながら、毎年一定金額を一定期間 取り崩し ていくとき、現在いくら の元本で複利運用を開始すればよいかを計算するときに利用します。

減債基金係数 : 将来の一定期間後に目標のお金を得るために、一定利率で一定金額を複利運用で 積み立て るとき、毎年いくら ずつ積み立てればよいかを計算するときに利用します。

資本回収係数 : 元本を一定利率で複利運用しながら、毎年一定金額を一定期間 取り崩し ていくとき、毎年いくら ずつ受け取りができるかを計算するときに利用します。

積み立て&取り崩しモデルプラン

積立金額→年金額の計算 : 年金終価係数、終価係数、資本回収係数を利用して、複利運用で積み立てた資金から、将来取り崩すことのできる年金額を計算します。

年金額→積立金額の計算 : 年金現価係数、現価係数、減債基金係数を利用して、複利運用で将来の年金プランに必要な資金の積立金額を計算します。