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

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

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

fastText で日本語版 Wikipedia ダンプデータから単語の分散表現モデルを構築・体験 』から1年が経とうとしていますので、最近の日本語版 Wikipedia ダンプデータと mecab-ipadic-NEologd 辞書で再構築したいと考えていました。

fastText は、Facebook AI Research が 2016年にオープンソースで公開した自然言語処理ライブラリです。単語表現の学習や文章の分類を効率的に行います。https://github.com/facebookresearch/fastText では、2018年12月19日にバージョン 0.2.0 がアナウンスされています。

なお、前回の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 のバージョンアップによるところが大きいと想像できます。

日本語版 Wikipedia の単語分散表現モデルでの演算(+、ー)をシンプルなウェブアプリで体験

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

ポジティブ(+)欄とネガティブ(ー)欄に単語を入力してリクエストすると、今回構築した単語分散表現モデルで+、ーの演算を実行します。

たとえば、「日本」ー「東京」+「パリ」の場合、ポジティブ(+)欄に「日本 パリ」、ネガティブ(ー)欄に、「東京」を入力します。

日本語版 Wikipedia の単語分散表現モデルを fastText (v0.2.0) で構築

お名前.com VPS に Ubuntu 18.04 LTS GNOME Desktop をインストールした環境での手順です。

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



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

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

-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

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

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

4.fastText (v0.2.0) をビルドします。



wget https://github.com/facebookresearch/fastText/archive/v0.2.0.zip
$ unzip v0.2.0.zip
$ cd fastText-0.2.0
$ make

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

コマンド例の -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

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



$ 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)

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

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

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

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

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

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

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

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

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

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

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