学習結果のRecallとPrecision【半教師あり学習の効果の検証】

この前の続き。

前回のところは設定をどう置けばいいのかetcが自分でもはっきりしていなかったりで、とりあえずRecallとPrecision書いてみました的な感じになってしまっていたorz。ということで今回はもうちょっとその付近をはっきりさせつつ、プログラムのあれなところも修正してもう一回RecallとPrecisionのplotをやってみました。

閾値などのパラメータは今回は置いといて*1、食わせる辞書のサイズを変化させて結果を見てみることにします。

辞書サイズを変化させてみる

いきなり結果。Iterationは半教師あり学習の中のIterationの数のことです。
Quartz 2 [*]
Recallが小さいときは差がほとんどないですが、Recallを大きくしていくと半教師あり学習でラベルなしデータを追加していったときのほうがPrecisionが高いということが見て取れます。Recall90%くらいのところで、Precisionで5%くらい差が出ている。Iterationを増やすごとにPrecisionも大きくなっているというのも見て取れます(増え方は減るが)。

上の図はある程度大きめの辞書を使っていたので、辞書サイズを小さくしてみる(1/10くらいにしてみた)とどうなるか実験してみました。結果は以下の図の通り。
Quartz 2 [*]
まず、最初につっこむ教師データの数が小さいので、大きめの辞書を使ったときより全体的にPrecisionが悪くなっているのが見て取れます。まあ、これは当たり前か。注目すべきはRecallが0.95くらいのところ。Iterationが0の場合だとPrecision0.8を切っていたりするのですが、Iterationが20の場合だとPrecisionはまだ0.95以上あったりします。

結果のまとめ

前回の結果と被りますが、以上の結果をまとめると

  • 半教師あり学習をやるとPrecisionが向上している
  • Iterationを繰り返すたびに、向上率のしかたはゆっくりになっていく
  • 教師データ数が小さいときに、Precisionの改善のされ方が特に顕著である

ということが分かりました。Applicationとしては「ちょっとしかない辞書データを使って、新しく辞書に追加できる候補をなるべく精度よく見つけたい」ということだったので、特に3つ目の結論のところがきいてくるかなと思います。

なぜ半教師あり学習を使うと辞書の自動構築がうまく行くのか?

こういう結果が出たわけですが、理由付けがなんとなく思い浮かんだので、書いておきます。

現在、素性として

  • 複合名詞中の単名詞自体と単名詞の品詞(「名詞,一般」くらいまで含めた感じの)
  • 複合名詞の前後(2つ)の単語自体とその品詞
  • 複合名詞を構成する単名詞の数

などを入れている。ここで、教師データとして使う辞書のサイズが比較的小さい場合について考えよう。この場合、上2つのもの、特に単名詞自体というのはかなりスパースなデータになっている。教師データ数を増やせばいいのではないかと思うが、辞書に新たな単語を追加したいからこの実験をやっているわけで、それでは意味がない。

半教師あり学習では大量のラベルなしデータを使う。そして、各Iterationでスコアの高いサンプルを教師データとして追加する。ここがきいてくる。データスパースネスで困っていたところに、外部から教師データと信頼してよいようなデータを取り込むことができる。これにより、データスパースネスをある程度回避できるという仕組みになっていたわけだ。

...という感じでちゃんと説明できそう。半教師ありと相性がよさそうというのが確認できてよかったです。これで論文書けないかなぁ、と思ったりするのですが無理かなー(特にすごいことを使ってない。。。)。

*1:現在は、ヒューリステックな感じで調整している。。。