文章分類タスクをやってみようと思いfastTextを試したところ、1日もかからずにモデルがつくれたので感動しました。
fastTextを動かす環境を作成
自分はDockerを使ってサクッと用意しました。
docker-compose.yml
version: '3'
services:
fasttext:
command: /bin/bash
image: xebxeb/fasttext-docker
volumes:
- ./fasttext/data/train:/data
- ./fasttext/data/result:/results
- ./fasttext/data/test:/mytests
以下のコマンドを打つと、image内にログインにして
$ docker-compose run fasttext
fasttextのコマンドは以下から利用できます。
$ /fasttext
利用したイメージの詳細は下記から
https://hub.docker.com/r/xebxeb/fasttext-docker/
学習データ作成
結論からいえば、下記のようなデータが作成できれば準備完了です。
__label__ラベル, 分かち書きした文章
例:データのイメージ
__label__男性が書いた文章, 私 は ガンダム が 好きだ\n
__label__男性が書いた文章, 私 は ザク が 好きだ\n
__label__男性が書いた文章, 私 は ケンプファー が 好きだ\n
__label__男性が書いた文章, 私 は サザビー が 好きだ\n
__label__女性が書いた文章, 私 は コウ・ウラキ が 好きだ\n
ちなみに私は分かち書きをするために、mecabを利用しました。
モデル作成
さきほどつくった学習データを利用。
$ /fasttext supervised -input 学習したい内容がはいったテキストファイル -output 出力先のディレクトリ -dim 50 -lr 1.0 -epoch 25
学習時に指定できる-dim
など他のパラメータはfastTextの公式Githubページ?に書いてあるのでチューニングはここから。
学習が終わると以下の表示がされます。
Read 7M words
Number of words: 144197
Number of labels: 2
Progress: 100.0% words/s: 6276258 lr: 0.000000 loss: 0.216902 eta: 0h 0m
そして-output
パラメータで指定したディレクトリに、.binファイルと.vecファイルができあがります。
予測
予測したいテキストを用意します
私は ニナ・パープルトン が 嫌いだ
$ /fasttext predict-prob outputで指定したディレクトリ/.bin テキストファイル
これを実行すると予測結果が帰ってきます。
__label__女性が書いた文章, 0.9965
感想
早い。楽ちん。