Advertisement

More Related Content

Slideshows for you(20)

Similar to Active Learning 入門(20)

Advertisement

More from Shuyo Nakatani(20)

Advertisement

Active Learning 入門

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