active learning 入門
DESCRIPTION
TRANSCRIPT
Active Learning 入門 ~アノテーションしんどいよね!(切実)~
2013/9/1 DSIRNLP #4
中谷 秀洋@サイボウズ・ラボ / @shuyo
Agenda
• Active Learning とは
• 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 するなら
Active Learning とは
アノテーション職人の朝は早い
• アノテーション(ラベル付け)は高コスト
– 発話文のアノテーションは実時間長の10倍以
上かかる (Zhu 2005)
– 固有表現や関係抽出のためのアノテーション
は平易なニュース1つでも1時間半以上。専門
知識も必要(Settles+ 2008)
– 言語判定のために、19言語70万件のツイート
に言語ラベルを付与(5ヶ月)
少ない訓練データで
モデルの性能を上げたい
• 半教師あり学習 (semi-supervised learning)
– 大量の正解なしデータと少量の正解ありデー
タで学習して、十分な性能の実現を目指す
• 能動学習 (active learning)
– やみくもではなく、効果的なデータを選んで
アノテーションする
Active Learning (能動学習)
• 正解なしデータの中から「これの正解がわかれば性能が上がるかも」というデータを選ぶ
• Oracle(神託 : 正解を教えてくれる何か)にデータを問い合わせ(query)、得た正解を訓練データに追加する
via (Settles 2009)
半教師あり学習のほうが いいんじゃあないの?
クラウドサービスの苦悩
• ユーザごとにドメインが全く違う
クラウド
製造業 飲食業 官公庁
ビッグデータ! 機械学習!
• 誰が正解データ作るの?
クラウド
製造業 飲食業 官公庁
サービサー
え? ぼく?
サービサーが全て作るのは非現実的
• ドメイン知識をもたない
– ユーザごとに独自の用語や固有名詞も
• ユーザが増えるたびにアノテーション
– ムリムリムリ!
• 変化への追従も必要だし
– 共通基本データセット+大まかなドメイン
データセットくらいまでならなんとか……
ユーザに作れる?
• ゼロから作るのは無理
• 学習データとして何が必要かを判断する
のも困難
• 正解を必要とするデータの提示(推薦)
があれば、それらのコストは大幅低減
• Active Learning が役に立つかも!?
Active Learning 試してみた
Active Learning の分類 (Settles 2009)
• どこからデータを持ってくる?
– membership query synthesis
– stream-based selective sampling
– pool-based sampling
• どうやってデータを選ぶ?
– 戦略ごとに6つに分類
※ Active Learning の用語は必ずしもコンセンサスが取られていない。論文によって異なる名前が使われていることもあるので注意 本資料は (Settles 2009) での名称を主に優先する
Active Learning のシナリオ
• membership query synthesis
– 正解を知りたいデータを新規に生成する
• stream-based selective sampling
– ストリームで流れてくるデータ1つ1つについて、
Oracle に問い合わせるかどうか判断する
• pool-based sampling
– 正解なしデータの pool から、次に問い合わせる
データを1つ選ぶ
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
1. Uncertainly Sampling
• 「最も不確かなデータ」を選ぶ
– 現在のモデルでの予測確率が「あいまい」
– その正解がわかれば、モデルの不確かさは減るだ
ろう(期待感)
• 「不確かさ」をどうやって測る?
– 一番確率の高いラベルでも 0.5 しかない
– 一番確率の高いラベルと二番目との確率が近い
– エントロピー(不確かさの尺度)が大きい
Uncertainly Sampling
• Least Confident
– 「確率最大のラベル」の確率が最小のデータを選ぶ
argmin𝑥
max𝑦
𝑃 𝑦 𝑥
• Margin Sampling
– (「1番目に確率の高いラベル」の確率-「2番目に確率の高いラベル」の確率) が最小のデータを選ぶ
argmin𝑥
𝑃 𝑦1 𝑥 − 𝑃 𝑦2 𝑥
Uncertainly Sampling
• Entropy-based Approach
– 予測分布のエントロピーが最大のデータを選
ぶ
argmax𝑥
− 𝑃 𝑦 𝑥 log 𝑃 𝑦 𝑥
𝑦
選択されるデータの違い
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手法の選ぶデータは同じ「分離平面に一番近い点」になる
実験しよう!
環境
• 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
データセット
• 20NewsGroups
– sklearn.datasets.fetch_20newsgroups_vectorized
– 56436 次元、tf-idf、L2 ノルム正規化済み
– training : 11314件、test: 7532件
• 原則 20クラス全て使うが、処理が重い手
法の場合は 3~4 クラスに制限する
準備
• モデルのパラメータ
– LogisticRegression : 正規化係数の逆数 C
– MultinomialNB : スムージング係数 alpha
• test data に対する精度が最高となるパラ
メータを黄金分割探索で見つける
– モデルの性能ではなく 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%)に近づきたい
実験の設定
• クラスごとにランダムにデータを1つ選び初期訓練データとする。正解付きデータの残りを pool とする
• 各手法によって pool から query を選び、訓練データに追加する
– 正解は無視していただけなので、明示的な oracle はいない
• これを訓練データが所定の個数になるまで繰り返す
• 各回でテストデータに対する正解率を測定する
• random sampling を baseline とする
– (Schein+ 2007) では “straw men” と呼んでいるw
• 分類器は MultinomialNB を用いる
実行結果(2000件まで)
横軸:訓練データ件数 縦軸:精度(正解数/テストデータ件数)
2000件まで行くと 手法の差は
ほぼなくなってくる
500件までを拡大
実行するたび結果が変わる
• 初期値に強く依存
• モデルの学習にも乱数が用いられている
箱ひげ図でばらつきを見てみる
• ランダム初期データ→300件まで追加を50
回繰り返し、20件ごとの精度のばらつき
を図示
• margin sampling だけ縦軸が違うことに注
意
300件目の精度のばらつき
ぷちまとめ
• margin sampling が安定かつ優秀
• entropy-based は期待はずれ
– random sampling を下回ることも
– 計算時間は一番多いのに……
• random sampling は総じて低調
– 瞬間風速なら他手法を圧倒することも
いろいろ伏線が……
2. Query-By-Committee
• 「多数決で票が一番割れたデータ」を選ぶ
– 「不確かなデータを選ぶ」のは Uncertainly
sampling と同様
– アンサンブル前提。精度の嵩上げも期待
• (Settles 2009) では2手法を紹介
– Vote Entropy
– Average Kullback-Leibler Divergence
Vote Entropy
• 投票結果情報のエントロピーを計算して、そ
れが一番大きいものを選ぶ
– つまり「票が一番割れたデータ」
– 各分類器は確率モデルでなくても良い
argmax𝑥
− 𝑉 𝑦
𝐶 log
𝑉 𝑦
𝐶𝑦
– ただし C: 分類器数、V(y): ラベル y を予測した分
類器数
Average Kullback-Leibler Divergence
• 学習器たちの予測分布それぞれと、それ
らを平均した分布との KL-divergence の平
均が一番大きいもの
– わかりにくい……
– 「各分類器の出力する予測分布同士が一番似
ていないデータ」
• 数式 (Settles 2009) などを見てね
実験の設定
• 基本は Uncertainly Sampling と同様
• 分類器は MultinomialNB, LogisticRegression
(L1 / L2) のアンサンブルとする
• random sampling と、平均分布に対する
margin sampling を baseline とする
実験結果の一例(300件まで)
300件目の精度のばらつき
• 約20回の試行を箱ひげ図にしたもの
ぷちまとめ
• Uncertainly sampling よりばらつきが小さい
– でも random すら大幅に性能向上。ほぼアンサンブルの恩恵か
– 分布の平均に対する margin sampling が最高性能……
– もう少し複雑な問題の方が効果が見込めるかも
• Vote Entropy は確率モデルでなくてもOK
– 今回は試してないが SVM, Random Forest, ...
• Average KL Divergence が random より悪い
– バグ? 本質的な問題?(NB と LR の予測分布が似てるわけない、みたいな)
3. Density-Weighted Methods
• Uncertainly Sampling も QBC も、各データ点ごとの評価しか行わない
– しかし学習して効果があるかは分布にもよるはず
• 下図の例:各点を赤か青に分類する問題で、次の
query は A と B のどちらにするべきか
– B の方が近い点(おそらく同じカテゴリ)が多いので、これを学習すれば正解率に貢献するだろうが、分離平面に近い
A が選ばれやすい
A
B
Information Density (Settles+ 2008)
• 𝜙𝐴 𝑥 : 手法 A におけるデータ x の評価関数
– argmax𝑥
𝜙𝐴(𝑥) または argmin𝑥
𝜙𝐴(𝑥) となる x を選ぶ
• 評価に類似度を加味した係数を掛ける
argm𝑎𝑥𝑥
𝜙𝐴(𝑥) ×1
𝑈 sim 𝑥, 𝑥𝑢
𝑈
𝑢=1
𝛽
– ただし U は pool サイズ、xu は pool 内の u 番目の点
• 「似ているデータ」が多いほど選ばれやすい
• 実験の設定は同様
• Uncertainly Sampling の3手法に Information Density を組み合わせる
• 類似度は余弦類似度を用いる(正規化済みなので内積を取るだけ)
• β=1 とする
300件時の精度のばらつき
ぷちまとめ
• Information Density は低コストながら効果大
– 特に entropy-based と組み合わせたときの性能は目を
見張るものが
– 類似度を導入可能なら選択肢の一つに
• least confident + ID は、序盤は低性能だがある程度
データが増えると entropy-based 並に良くなる印象
• margin sampling + ID はなぜか良くない……
• βをどのように決めるかが課題か
次の手法に行く前に……
Active Learning への不満
• 瞬間的に random sampling が他の手法を上
回ることも決して珍しくない
– 「最適な query」を選べていない
• もし「最適な query 」を選び続けることが
できたら、どれくらいの性能が出るんだ
ろう?
– 正解と test data を知っていれば……!
Oracle Sampling
• Err(X) :訓練データ X で学習したモデルにおける、テストデータに対するエラー率
• L:既知の訓練データ、U:正解無しプールとするとき、次のように query を定める
argmin𝑥𝑢∈𝑈
Err 𝐿 ∪ 𝑥𝑢, 𝑦𝑢
• ただし yu は xu の正解ラベルとする
– 知るはずのない正解とテストデータを知る
「神の Active Learning」
※ 中谷が勝手に思いついて oracle sampling と呼んでいるだけ。誰かがすでに別の名前付けてたらごめんなさい。
要は反則
性能は圧倒的(上限?)
• pool のデータ件数だけモデルの学習が必要→めちゃめちゃ重い
• クラス数=4に制限
– 正解付きデータ:2245件、テストデータ:1494件
(でも言うほど無敵でもないんだけどね)
• クラス数=2 のときの正解率推移
• Active Learning は本質的に Greedy ゆえ「大域最適解」は得られない
– かつ問題が易しいので、訓練データ数の寄与の方が大きいと推測
これを反則でなくすには……
4. Expected Error Reduction
• 未知である正解とテストデータをどうするか
– test set と development set に分ける手もあるけど
• そもそも訓練データ不足だから active learning がしたい
• 貴重な正解をテストに回すのすらもったいない
• 置き換え
– テストデータの誤差 → 期待誤差(risk)
– 正解ラベル → 推定値 or 期待値
• P(y|x;L) を、訓練データ L で学習したモデルにおいて、点 x におけるラベル y の確率とすると、訓練データに
(xi, yi) を追加した場合の log-loss は次の式で得られる
− 𝑃 𝑦 𝑥, 𝐿 ∪ 𝑥𝑖 , 𝑦𝑖 log 𝑃 𝑦 𝑥, 𝐿 ∪ 𝑥𝑖 , 𝑦𝑖𝑦
𝑥∈𝑈
• これを R(xi, yi; L) と書く。yi が未知なので、現在のモデルでの期待値を評価値とする
𝑬𝑦𝑖 𝑅 𝑥𝑖 , 𝑦𝑖; 𝐿 = 𝑃 𝑦𝑖 𝑥𝑖; 𝐿 𝑅(𝑥𝑖 , 𝑦𝑖; 𝐿)
𝑦𝑖
• これを最小とするような x_i を query とする
– 「学習後のエントロピーの総和を最小化」と同値
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 と同じ
実験(4クラス)
MM-MS (仮称)
• Expected Error Reduction はめちゃめちゃ重い
– (クラス数)×(pool size) 回 モデルを学習
– 4クラス、訓練データ 100件まで追加で一昼夜。
箱ひげ図は勘弁
• margin が小さい順に T(=30) 個抽出し、
MCMI[min] が最小のものを query とする
– 本資料での実験設定で MM+M の約 60 倍速
– MM+M と margin sampling のいいとこ取り
4クラス
4クラス、100件目
まとめ
• 今後いろいろ使ってみる
– 手軽に試すなら margin sampling
– ちょっと頑張るなら entropy-based + information density
• ラベル付けが超高コストなら Expected Error Reduction もあり
– でも重すぎ。せめて中規模データで動かしたい
• 時間と理解が足りなくてやれなかったが、 Variance Reduction
は理論的におもしろそう
– 計算量がヤバい。O(プールサイズ×(クラス数×特徴量数)^3 )
– オンライン学習の RFTL のようなフレームワークが active
learning にも出てくれば……! regret とか相性良さそう