Chainerをつかった助詞の学習システムを作る (2)
続き
前回は助詞を学習して、正しい助詞をSuggestするシステムを作りました。ただ、テストをしてみたところ正答率が50%超とちょっと微妙な正解率。はじめてにしてはよかったと思うけど、でも実用的には使えないです。目標としては90%越え、できれば95%といったところでしょうか。
とりあえずいろいろ試してみる
せっかくなので以下のように学習方法を変えてみて検証結果に変化が出るか確認をしてみることにしました。
- 学習する記事の量を増やす (Double)
前回は1日分の記事でしたが、とりあえず2日分入れてみるとどうなるでしょうか - 学習する前後の単語を増やす (15Words)
前回は前後の10ワードずつ入れていましたが、15ワードに増やしてみるとどうなるでしょうか - 学習するモデルを変える (GRU)
前回は本に書いてあるがまま、LSTMで試してみましたが、さらに本に書いてあるままにGRUモデルで変化がでるのかを試してみます。
基準として前回の学習内容を (Single) というラベルを張っています。
結果をどん
- Double: 最高で70%程度の正解率、やはり上がってますね
- 15Words: こちらも同じく70%程度に上がっていて、効果がみられます
- GRU: 正解率は Single と同程度ですが、学習を繰り返すとしり上がりによくなっている?
- 全体を通して、学習は10~15 epoch内で終わってしまっていて、50までは不必要そうだが、微妙な変動で正解率に差がでている?
次は欲張って、全部組み合わせて正解率がどれくらい上がるのかみてみます。 学習する記事は4日分、前後15wordで、なんとなくGRUモデルで学習した検証結果が次のようになりました。
比較はGRUの1日分の記事、10Wordです。最初の方の学習はすごくよく、80%弱ぐらいの正解率までいきます。が、繰り返すをするたびに、だんだんと正解率は低下、ついには GRU にも負けてしまうようになります。学習に1日半ついやしたのに。こりつが過学習というやつなのでしょうか。
以下がまとめたテーブルです。時間とかの数値は裏でいろいろ動かしていたので正確ではないのですが、ご参考までに。また、今回は Chainerに付属するCudaの計算機能を使ってみたのですが、比較として、CPU Onlyの時間も最後に入れています。条件は Single 相当です。
まとめ
学習するサンプルを増やすことは成果はあるようですが、モデルとか回数とかのバランスが難しそうです。この学習に関していえば、正解か不正解かがすぐわかるので、ループさせれば半永久的に学習の追加ができます。 なので現在は新着の記事を読みに行って、間違ったサンプルのセットを自動的に再学習させる、ということを試みています。またまとまったらここに追記したいと思います。 なお、ソースコードの公開もしたいのですが、いかんせんぐちゃぐちゃになってしまっているので、まとめてからだしたいと思います。