ユーザフィードバックと機械学習Machine Learning Casual Talks #6
View Slide
Naomichi AgataSoftware engineer at Wantedly, Inc.Server side + Machine learning @ Wantedly PeopleGitHubTwitter@agatan@agatan_
サービスにおける機械学習システムにはユーザフィードバックが重要
フィードバック● ユーザからのフィードバック○ レビューやお問い合わせだけではなく、「ふつうにサービスを使うなかでの行動」から得られる○ e.g. 「検索結果をクリックした」「購入せずに戻った」「誤情報を訂正した」● ユーザへのフィードバック○ より良いサービスを提供する○ e.g. 「あなたへのおすすめ」「全体の精度が向上する」
何を持ってそのモデルを「良い」と判断するか機械学習をサービスに活用するためには1. モデル自体の精度(オフラインで測れる精度)2. KPI / ユーザ体験への影響(オンラインでしか測れない精度)の 2 面から「良さ」を判断する必要があるユーザ体験への影響は「ユーザからのフィードバック」でしか測れない
サービスの成長とモデルの成長● サービスが大きくなるにつれてできることは増えていくはず○ e.g. パーソナライズ● フィードバックループを繰り返して改善していきたい 、というのは機械学習も一緒良い機械学習によってサービスの成長を加速する→ データが増える→ 精度があがる and/or できることが増える→ 成長を加速→ …
理想良い体験を実現するほど、使ってもらえる↑↓使ってもらうほど、改善がすすむ使う改善より良い体験の提供
現実● どの程度フィードバックを得られるかは、問題とサービスの性質に依存する○ たとえば、推薦はフィードバックを得やすい● 「サービスの拡大とともに使える情報が増える」ことは期待できない場合もある○ 学習データにするには壁がある■ より高度な annotation 作業が必要, ノイズが多い, …● 機械学習システムだけ成長に置いていかれるわけにはいかない
どんな対応ができるか
前提...● フィードバックを逃さないログ基盤などはとても重要○ 「なにかがおかしい」を察知できないと改善の余地がない○ 継続的に評価できないと新しいことに挑戦できなくなる● フィードバックを受けやすい UX 設計も重要になってくる(?)○ 予測が間違っているときにそれを伝えられる○ 予測が正しかったときにそれを伝えられる○ 機械学習エンジニアも UX 設計に参加する必要がある
半教師あり学習として解く● 「少量の教師ありデータ + 大量の教師なしデータ」● 教師なしでもできることを組み合わせたシステムにするのが一番うまくいった○ たとえば、word embedding layer を教師なしデータで事前学習しておく
データの分布に注目する● annotate されていないデータでも、現実のデータの分布を反映している● 活用できていなかったデータも、細かく分析することで使えるようになる(こともある)● 分布さえわかればできることもある○ たとえば、bi-gram の出現頻度を見ながら sequence 全体での尤度が最大になるようにdecode する○ たとえば、出現頻度の多いパターンにはアドホックにルールベースで対処する■ e.g. 高い頻度・確率で「m」が「nn」に訂正されている● より現実に近い data augmentation ができる○ データの分布から教師データを作る
ノイズを許容する● ノイズを許容してでも大きなデータで学習したほうが良い場合もある○ とはいえ単純につっこんでもうまくいかない(はず)● 地道に分析してノイズを取り除くのが(可能なら)一番よさそう● 教師データのノイズに耐性を持つようなモデルも提案されている
まとめ● サービスの成長にあわせてモデルも改善したい○ モデル改善 → サービス向上 → 使ってもらえる → 改善 → … のループが回せると幸せ○ 問題・領域によっては、モデルの改善に直接使えるデータは集まらない● どうやってモデルの改善を進めるか○ そもそも UX としてユーザフィードバックが得られる構造になっているか?○ 半教師あり的に扱う○ ひたすら分析 + パターンを見出して改善する