実タスクで能動学習を試してみた

実タスクで簡単な能動学習を試してみました。結論としては、1200件で到達できる精度に400件程度のアノテーションでも到達でき、それによりアノテーションに要する時間をかなり削減できそうということが分かりました*1。今後、アノテーションを必要とする機械学習タスクをやる際には能動学習で一手間かけるのを検討してみようと思います。

能動学習をする動機

ここしばらく仕事のタスクで機械学習の教師用のデータをアノテーションをする機会がありました。機械学習する上で、1000件程度は学習データ欲しいという想定でポチポチとアノテーションをしていました。一人1時間で大体100件くらいのデータが作れるようなタスクでしたが、1000件アノテーションするには約10時間の作業工程が必要です。アノテーション自体よりはコードを書いたり実験するのが好きな人間なので、5時間くらいずっとアノテーションしていると疲労します。同じ精度を達成するんだったらアノテーションするコストは少ないに越したことはない、ということで能動学習をやってみました*2

実験設定

データについてはあまり詳細には書けませんが、タスクは文書分類タスクです。その他の設定としては

  • 2値分類
    • クラス数は均衡しているわけではないが、そこまで不均衡でもない
  • 疎な特徴量(数万次元程度)を使用
  • 学習器は平均化パーセプトロンを使用

比較手法と試してみる能動学習の手法について

あまり凝ったことをする時間もなかったので、一番簡単と思うものでやっています。ランダム性が入るので、実験結果は10回の平均を取っています。

  • 比較手法: Random
    • 何も考えずにランダムにアノテーションしていき、精度を計測
  • 試してみる能動学習の手法

実験結果

結果は以下のグラフのようになりました。

f:id:syou6162:20161007154802p:plain

このグラフから

  • Randomではサチらずにじわじわと精度は伸びている
  • Randomでは1200件アノテーションして到達できた精度に、能動学習では約400件程度で到達できている(1/3程度のアノテーション)
  • 1時間100件程度の教師データ作成のスピードだと、8時間ほどの作業時間の削減ができる見込み

ということが分かりました。思っていたより劇的に結果に表われて「俺たちの残りの8時間のアノテーション時間は何だったのか...」という気持ちになりました。この結果は相当うまくいくデータセットだったんじゃないかと思うので、毎回こんなにうまく行くとは思わないほうがよいですが、アノテーションをする際には能動学習は積極的に取り入れていくことを検討する価値がありそう、というのが自分の感覚としても分かったのは収穫でした。

Active Learning (Synthesis Lectures on Artificial Intelligence and Machine Learning)

Active Learning (Synthesis Lectures on Artificial Intelligence and Machine Learning)

*1:もちろん結果はデータに強く依存すると思います。今回はかなりうまく行く設定の部類と思っておいたほうがよさそう

*2:実際には1200件アノテーションをやってみた後に能動学習をやってみると同精度を達成するにはどれくらいのデータにアノテーションすれば済んだか、という設定にはなっています