active learning 入門

60
Active Learning 入門 ~アノテーションしんどいよね!(切実)~ 2013/9/1 DSIRNLP #4 中谷 秀洋@サイボウズ・ラボ / @shuyo

Upload: shuyo-nakatani

Post on 12-Nov-2014

11.711 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Active Learning 入門

Active Learning 入門 ~アノテーションしんどいよね!(切実)~

2013/9/1 DSIRNLP #4

中谷 秀洋@サイボウズ・ラボ / @shuyo

Page 2: Active Learning 入門

Agenda

• Active Learning とは

• Active Learning 試してみた

• まとめ

Page 3: Active Learning 入門

References

• (Settles 2009) Active Learning Literature Survey

– よくまとまったサーベイ。本資料での用語は主にこちらに準拠

• (Schein+ 2007) Active Learning for Logistic Regression

– LR に AL を適用する場合のサーベイとして使える

• (Olsson 2009) A Literature Survey of Active Machine Learning in the

Context of Natural Language Processing

– こちらもしっかりしたサーベイ

• (Guo+ 2007) Optimistic Active Learning using Mutual Information

– Expected Error Reduction AL の手法の1つ MM+M を提案

• (Tong+ 2000) Support Vector Machine Active Learning with Application to

Text Classification

– 本資料では参照してないが SVM で AL するなら

Page 4: Active Learning 入門

Active Learning とは

Page 5: Active Learning 入門

アノテーション職人の朝は早い

• アノテーション(ラベル付け)は高コスト

– 発話文のアノテーションは実時間長の10倍以

上かかる (Zhu 2005)

– 固有表現や関係抽出のためのアノテーション

は平易なニュース1つでも1時間半以上。専門

知識も必要(Settles+ 2008)

– 言語判定のために、19言語70万件のツイート

に言語ラベルを付与(5ヶ月)

Page 6: Active Learning 入門

少ない訓練データで

モデルの性能を上げたい

• 半教師あり学習 (semi-supervised learning)

– 大量の正解なしデータと少量の正解ありデー

タで学習して、十分な性能の実現を目指す

• 能動学習 (active learning)

– やみくもではなく、効果的なデータを選んで

アノテーションする

Page 7: Active Learning 入門

Active Learning (能動学習)

• 正解なしデータの中から「これの正解がわかれば性能が上がるかも」というデータを選ぶ

• Oracle(神託 : 正解を教えてくれる何か)にデータを問い合わせ(query)、得た正解を訓練データに追加する

via (Settles 2009)

Page 8: Active Learning 入門

半教師あり学習のほうが いいんじゃあないの?

Page 9: Active Learning 入門

クラウドサービスの苦悩

• ユーザごとにドメインが全く違う

クラウド

製造業 飲食業 官公庁

Page 10: Active Learning 入門

ビッグデータ! 機械学習!

• 誰が正解データ作るの?

クラウド

製造業 飲食業 官公庁

サービサー

え? ぼく?

Page 11: Active Learning 入門

サービサーが全て作るのは非現実的

• ドメイン知識をもたない

– ユーザごとに独自の用語や固有名詞も

• ユーザが増えるたびにアノテーション

– ムリムリムリ!

• 変化への追従も必要だし

– 共通基本データセット+大まかなドメイン

データセットくらいまでならなんとか……

Page 12: Active Learning 入門

ユーザに作れる?

• ゼロから作るのは無理

• 学習データとして何が必要かを判断する

のも困難

• 正解を必要とするデータの提示(推薦)

があれば、それらのコストは大幅低減

• Active Learning が役に立つかも!?

Page 13: Active Learning 入門

Active Learning 試してみた

Page 14: Active Learning 入門

Active Learning の分類 (Settles 2009)

• どこからデータを持ってくる?

– membership query synthesis

– stream-based selective sampling

– pool-based sampling

• どうやってデータを選ぶ?

– 戦略ごとに6つに分類

※ Active Learning の用語は必ずしもコンセンサスが取られていない。論文によって異なる名前が使われていることもあるので注意 本資料は (Settles 2009) での名称を主に優先する

Page 15: Active Learning 入門

Active Learning のシナリオ

• membership query synthesis

– 正解を知りたいデータを新規に生成する

• stream-based selective sampling

– ストリームで流れてくるデータ1つ1つについて、

Oracle に問い合わせるかどうか判断する

• pool-based sampling

– 正解なしデータの pool から、次に問い合わせる

データを1つ選ぶ

Page 16: Active Learning 入門

query を選ぶ戦略

• 1. Uncertainly Sampling

• 2. Query-By-Committee

• 3. Expected Model Change

• 4. Expected Error Reduction

• 5. Variance Reduction

• 6. Density-Weighted Methods

1

2

3

4

Page 17: Active Learning 入門

1. Uncertainly Sampling

• 「最も不確かなデータ」を選ぶ

– 現在のモデルでの予測確率が「あいまい」

– その正解がわかれば、モデルの不確かさは減るだ

ろう(期待感)

• 「不確かさ」をどうやって測る?

– 一番確率の高いラベルでも 0.5 しかない

– 一番確率の高いラベルと二番目との確率が近い

– エントロピー(不確かさの尺度)が大きい

Page 18: Active Learning 入門

Uncertainly Sampling

• Least Confident

– 「確率最大のラベル」の確率が最小のデータを選ぶ

argmin𝑥

max𝑦

𝑃 𝑦 𝑥

• Margin Sampling

– (「1番目に確率の高いラベル」の確率-「2番目に確率の高いラベル」の確率) が最小のデータを選ぶ

argmin𝑥

𝑃 𝑦1 𝑥 − 𝑃 𝑦2 𝑥

Page 19: Active Learning 入門

Uncertainly Sampling

• Entropy-based Approach

– 予測分布のエントロピーが最大のデータを選

argmax𝑥

− 𝑃 𝑦 𝑥 log 𝑃 𝑦 𝑥

𝑦

Page 20: Active Learning 入門

選択されるデータの違い

category 1 category 2 category 3 least conf. margin entropy

A 0.50 0.35 0.15 0.50 0.15 0.43

B 0.55 0.45 0.00 0.55 0.10 0.30

C 0.51 0.25 0.24 0.51 0.26 0.45

via (Settles 2009)

※線形二値分類の場合、3手法の選ぶデータは同じ「分離平面に一番近い点」になる

Page 21: Active Learning 入門

実験しよう!

Page 22: Active Learning 入門

環境

• Python / numpy / scipy / scikit learn

– (確率的)分類モデルを対象とする

– sklearn.linear_model.LogisticRegression(L1)

– sklearn.linear_model.LogisticRegression(L2)

– sklearn.naive_bayes.MultinomialNB

• コードはここに

– https://github.com/shuyo/iir/tree/master/activelearn

Page 23: Active Learning 入門

データセット

• 20NewsGroups

– sklearn.datasets.fetch_20newsgroups_vectorized

– 56436 次元、tf-idf、L2 ノルム正規化済み

– training : 11314件、test: 7532件

• 原則 20クラス全て使うが、処理が重い手

法の場合は 3~4 クラスに制限する

Page 24: Active Learning 入門

準備

• モデルのパラメータ

– LogisticRegression : 正規化係数の逆数 C

– MultinomialNB : スムージング係数 alpha

• test data に対する精度が最高となるパラ

メータを黄金分割探索で見つける

– モデルの性能ではなく Active Learning の各手

法の有効性を見るのが目的なので

Page 25: Active Learning 入門

全データで学習(最高性能?)

モデル パラメータ test data に 対する精度

L1 LogisticRegression C=89443 0.8340

L2 LogisticRegression C=1193.9 0.8196

MultinomialNB alpha=0.0054781 0.8359

アンサンブル(3分類器の確率を平均) 0.8497

• 少ないデータでこの性能(82~85%)に近づきたい

Page 26: Active Learning 入門

実験の設定

• クラスごとにランダムにデータを1つ選び初期訓練データとする。正解付きデータの残りを pool とする

• 各手法によって pool から query を選び、訓練データに追加する

– 正解は無視していただけなので、明示的な oracle はいない

• これを訓練データが所定の個数になるまで繰り返す

• 各回でテストデータに対する正解率を測定する

• random sampling を baseline とする

– (Schein+ 2007) では “straw men” と呼んでいるw

• 分類器は MultinomialNB を用いる

Page 27: Active Learning 入門

実行結果(2000件まで)

横軸:訓練データ件数 縦軸:精度(正解数/テストデータ件数)

2000件まで行くと 手法の差は

ほぼなくなってくる

Page 28: Active Learning 入門

500件までを拡大

Page 29: Active Learning 入門

実行するたび結果が変わる

• 初期値に強く依存

• モデルの学習にも乱数が用いられている

Page 30: Active Learning 入門

箱ひげ図でばらつきを見てみる

• ランダム初期データ→300件まで追加を50

回繰り返し、20件ごとの精度のばらつき

を図示

Page 31: Active Learning 入門

• margin sampling だけ縦軸が違うことに注

Page 32: Active Learning 入門

300件目の精度のばらつき

Page 33: Active Learning 入門

ぷちまとめ

• margin sampling が安定かつ優秀

• entropy-based は期待はずれ

– random sampling を下回ることも

– 計算時間は一番多いのに……

• random sampling は総じて低調

– 瞬間風速なら他手法を圧倒することも

いろいろ伏線が……

Page 34: Active Learning 入門

2. Query-By-Committee

• 「多数決で票が一番割れたデータ」を選ぶ

– 「不確かなデータを選ぶ」のは Uncertainly

sampling と同様

– アンサンブル前提。精度の嵩上げも期待

• (Settles 2009) では2手法を紹介

– Vote Entropy

– Average Kullback-Leibler Divergence

Page 35: Active Learning 入門

Vote Entropy

• 投票結果情報のエントロピーを計算して、そ

れが一番大きいものを選ぶ

– つまり「票が一番割れたデータ」

– 各分類器は確率モデルでなくても良い

argmax𝑥

− 𝑉 𝑦

𝐶 log

𝑉 𝑦

𝐶𝑦

– ただし C: 分類器数、V(y): ラベル y を予測した分

類器数

Page 36: Active Learning 入門

Average Kullback-Leibler Divergence

• 学習器たちの予測分布それぞれと、それ

らを平均した分布との KL-divergence の平

均が一番大きいもの

– わかりにくい……

– 「各分類器の出力する予測分布同士が一番似

ていないデータ」

• 数式 (Settles 2009) などを見てね

Page 37: Active Learning 入門

実験の設定

• 基本は Uncertainly Sampling と同様

• 分類器は MultinomialNB, LogisticRegression

(L1 / L2) のアンサンブルとする

• random sampling と、平均分布に対する

margin sampling を baseline とする

Page 38: Active Learning 入門

実験結果の一例(300件まで)

Page 39: Active Learning 入門

300件目の精度のばらつき

• 約20回の試行を箱ひげ図にしたもの

Page 40: Active Learning 入門

ぷちまとめ

• Uncertainly sampling よりばらつきが小さい

– でも random すら大幅に性能向上。ほぼアンサンブルの恩恵か

– 分布の平均に対する margin sampling が最高性能……

– もう少し複雑な問題の方が効果が見込めるかも

• Vote Entropy は確率モデルでなくてもOK

– 今回は試してないが SVM, Random Forest, ...

• Average KL Divergence が random より悪い

– バグ? 本質的な問題?(NB と LR の予測分布が似てるわけない、みたいな)

Page 41: Active Learning 入門

3. Density-Weighted Methods

• Uncertainly Sampling も QBC も、各データ点ごとの評価しか行わない

– しかし学習して効果があるかは分布にもよるはず

• 下図の例:各点を赤か青に分類する問題で、次の

query は A と B のどちらにするべきか

– B の方が近い点(おそらく同じカテゴリ)が多いので、これを学習すれば正解率に貢献するだろうが、分離平面に近い

A が選ばれやすい

A

B

Page 42: Active Learning 入門

Information Density (Settles+ 2008)

• 𝜙𝐴 𝑥 : 手法 A におけるデータ x の評価関数

– argmax𝑥

𝜙𝐴(𝑥) または argmin𝑥

𝜙𝐴(𝑥) となる x を選ぶ

• 評価に類似度を加味した係数を掛ける

argm𝑎𝑥𝑥

𝜙𝐴(𝑥) ×1

𝑈 sim 𝑥, 𝑥𝑢

𝑈

𝑢=1

𝛽

– ただし U は pool サイズ、xu は pool 内の u 番目の点

• 「似ているデータ」が多いほど選ばれやすい

Page 43: Active Learning 入門

• 実験の設定は同様

• Uncertainly Sampling の3手法に Information Density を組み合わせる

• 類似度は余弦類似度を用いる(正規化済みなので内積を取るだけ)

• β=1 とする

Page 44: Active Learning 入門

300件時の精度のばらつき

Page 45: Active Learning 入門

ぷちまとめ

• Information Density は低コストながら効果大

– 特に entropy-based と組み合わせたときの性能は目を

見張るものが

– 類似度を導入可能なら選択肢の一つに

• least confident + ID は、序盤は低性能だがある程度

データが増えると entropy-based 並に良くなる印象

• margin sampling + ID はなぜか良くない……

• βをどのように決めるかが課題か

Page 46: Active Learning 入門

次の手法に行く前に……

Page 47: Active Learning 入門

Active Learning への不満

• 瞬間的に random sampling が他の手法を上

回ることも決して珍しくない

– 「最適な query」を選べていない

• もし「最適な query 」を選び続けることが

できたら、どれくらいの性能が出るんだ

ろう?

– 正解と test data を知っていれば……!

Page 48: Active Learning 入門

Oracle Sampling

• Err(X) :訓練データ X で学習したモデルにおける、テストデータに対するエラー率

• L:既知の訓練データ、U:正解無しプールとするとき、次のように query を定める

argmin𝑥𝑢∈𝑈

Err 𝐿 ∪ 𝑥𝑢, 𝑦𝑢

• ただし yu は xu の正解ラベルとする

– 知るはずのない正解とテストデータを知る

「神の Active Learning」

※ 中谷が勝手に思いついて oracle sampling と呼んでいるだけ。誰かがすでに別の名前付けてたらごめんなさい。

Page 49: Active Learning 入門

要は反則

Page 50: Active Learning 入門

性能は圧倒的(上限?)

• pool のデータ件数だけモデルの学習が必要→めちゃめちゃ重い

• クラス数=4に制限

– 正解付きデータ:2245件、テストデータ:1494件

Page 51: Active Learning 入門

(でも言うほど無敵でもないんだけどね)

• クラス数=2 のときの正解率推移

• Active Learning は本質的に Greedy ゆえ「大域最適解」は得られない

– かつ問題が易しいので、訓練データ数の寄与の方が大きいと推測

Page 52: Active Learning 入門

これを反則でなくすには……

Page 53: Active Learning 入門

4. Expected Error Reduction

• 未知である正解とテストデータをどうするか

– test set と development set に分ける手もあるけど

• そもそも訓練データ不足だから active learning がしたい

• 貴重な正解をテストに回すのすらもったいない

• 置き換え

– テストデータの誤差 → 期待誤差(risk)

– 正解ラベル → 推定値 or 期待値

Page 54: Active Learning 入門

• P(y|x;L) を、訓練データ L で学習したモデルにおいて、点 x におけるラベル y の確率とすると、訓練データに

(xi, yi) を追加した場合の log-loss は次の式で得られる

− 𝑃 𝑦 𝑥, 𝐿 ∪ 𝑥𝑖 , 𝑦𝑖 log 𝑃 𝑦 𝑥, 𝐿 ∪ 𝑥𝑖 , 𝑦𝑖𝑦

𝑥∈𝑈

• これを R(xi, yi; L) と書く。yi が未知なので、現在のモデルでの期待値を評価値とする

𝑬𝑦𝑖 𝑅 𝑥𝑖 , 𝑦𝑖; 𝐿 = 𝑃 𝑦𝑖 𝑥𝑖; 𝐿 𝑅(𝑥𝑖 , 𝑦𝑖; 𝐿)

𝑦𝑖

• これを最小とするような x_i を query とする

– 「学習後のエントロピーの総和を最小化」と同値

Page 55: Active Learning 入門

MM+M (Guo+ 2007)

• Expected Error Reduction をアレンジ

– 期待値をではなく log-loss(エントロピー)を最小とする yi を推定値とする

– min𝑦𝑖

𝑅 𝑥𝑖 , 𝑦𝑖; 𝐿 を最小化する xi を query とする

(MCMI[min])

– oracle から得た正解 𝑦𝑖 が推定値 yi と異なる場合

• 予測分布のエントロピーが最大である xj を query とする&訓練データに追加 (Most Unconcern)

– Uncertainly Sampling の Entropy-based Approach と同じ

Page 56: Active Learning 入門

実験(4クラス)

Page 57: Active Learning 入門

MM-MS (仮称)

• Expected Error Reduction はめちゃめちゃ重い

– (クラス数)×(pool size) 回 モデルを学習

– 4クラス、訓練データ 100件まで追加で一昼夜。

箱ひげ図は勘弁

• margin が小さい順に T(=30) 個抽出し、

MCMI[min] が最小のものを query とする

– 本資料での実験設定で MM+M の約 60 倍速

– MM+M と margin sampling のいいとこ取り

Page 58: Active Learning 入門

4クラス

Page 59: Active Learning 入門

4クラス、100件目

Page 60: Active Learning 入門

まとめ

• 今後いろいろ使ってみる

– 手軽に試すなら margin sampling

– ちょっと頑張るなら entropy-based + information density

• ラベル付けが超高コストなら Expected Error Reduction もあり

– でも重すぎ。せめて中規模データで動かしたい

• 時間と理解が足りなくてやれなかったが、 Variance Reduction

は理論的におもしろそう

– 計算量がヤバい。O(プールサイズ×(クラス数×特徴量数)^3 )

– オンライン学習の RFTL のようなフレームワークが active

learning にも出てくれば……! regret とか相性良さそう