エンジニアの id:necojackarc です。
本エントリでは、機械学習における学習データ収集のスケール化についてお話したいと思います。
位置づけとしては、前回のエントリの続きです。
これまでの問題点
ピクスタでは素材のタグ翻訳に、教師あり学習 (Supervised Learning) の手法のひとつを採用していますが、この手法には学習データが欠かせません。
ピクスタではこれまで、この学習データを社内の人間が手作業で作成していました。 これでは、学習データを大量に用意することは困難です。
全くシステム化されておらず、スケール化*1とは程遠い状態でした。
ピクスタがどのように教師あり学習を素材のタグ翻訳に活用しているかについては、以下のエントリでご紹介しております。
スケール化への挑戦
学習データを効率的に収集するためのシステム化をスタートしました。
- 素早く効率的に
- 可能な限り費用を抑えて
- 信頼できる学習データを収集する
という、3点の達成を目指すことになりました。
クラウドソーシングの導入
クラウドソーシングを用いて、これらの目標が達成可能かの検証を行うことにしました。
クラウドソーシングとは、インターネットを利用して不特定多数の人に業務を発注したり、受注者の募集を行うこと。また、そのような受発注ができるWebサービス。
クラウドソーシングを用いたスケール化自体はよくあるアプローチであり、導入も容易です。しかし、クラウドソーシングにはいくつか注意するべき点があり、効果的に活用するためには工夫が必要だということがわかりました。
クラウドソーシングでの注意点
クラウドソーシングでは、不特定多数の人に業務を発注するため、主に2つの課題があります。
- 成果物の品質保証 (どうやって信用できる学習データを収集するか)
- 完了日の不確定性 (いかに効率的に学習データを収集するか)
これに関しては、Web ページを使ったアンケートを想像していただけるとわかりやすいと思います。
もし答えると報酬が貰える Web アンケートサイトでお小遣いを稼ぎたいと思ったら、できるだけコストパフォーマンスが良い物を探して沢山答えようとすると思います。
しかし、もしアンケートの内容が答えにくいものだったら、
- 面倒臭いので雑に回答する
- 時間がかかると判断して中断する
といったことをしてしまうと思います。
すると、意図した回答が集まらず効果を得られない(成果物の品質が悪い)、そもそも回答してもらえずタスクが終わらない(完了日が不確定)、という問題が発生すると思います。
これに加えて、端からまともに回答する気がない人もいるという問題もあります。
すなわち、クラウドソーシングで効果的に学習データを収集するためには、
- クラウドワーカーが短時間で回答しやすい設問形式
- クラウドワーカーが誤回答をしづらい設問形式
- クラウドワーカーの回答の信頼性を向上させるための仕組み
- クラウドワーカーが回答をしたいと思える報酬設定
をしっかり考える必要があります。
今回のクラウドソーシングでの工夫点
まずやるべきことは愚直なタスクのチューニングです。
- どのようなタスクが回答しやすいのか?
- どのような仕組みを導入すれば信頼できるデータになるのか?
を考えながら、チューニングを施していく必要があります。
具体的なチューニングの手順としては、
- クラウドソーシングに発注するタスクを考える
- タスクを発注する
- 得られたデータを分析する
- この際、分類器の正答率、適合率、再現率がどう変化するのかも同時に調べる
- 問題点を洗い出しタスクを考えなおす
ということを繰り返し行いました。とても普通です。
チューニング、トライ・アンド・エラーをひたすら繰り返すことで、各自の目標値に近づけるように調整していく必要があると思います。
なかなか回答が集まらないので報酬を増やしてみると、今度は予算オーバーしたり、回答に明らかなバラつきがあり、品質に問題が生じることもありました。
実際に、どのようなチューニングを行ったかを簡単にご紹介しています。
タスクの回答しやすさ
設問形式を「この画像に合うタグはどれですか?」という選択問題にしたことで、タスクの回答しやすさを向上させることができました。
また、タスクは1つの言語さえ理解できれば回答できるようになっています。
この問題形式にするためには、選択肢の作成が最も重要です。
選択肢は「翻訳候補」になるため、どうやって翻訳候補を集めるのか?その翻訳候補内に本当に正しい翻訳はあるのか?といった問題がでてきます。
例えばこれまでのエントリでは「タイ」の翻訳候補は “Sea bream”, “Thailand”, “tie” の3種類として扱ってきました。
しかし、ここには、
- なぜ、翻訳候補はこの3種類なのか?
- 本当にこの3種類で「タイ」の翻訳候補を網羅しているのか?
といった問題が含まれています。
この問題は、他の翻訳専門のクラウドソーシングや Web サービスを用いて翻訳候補を作成し、ピクスタ社内のタグデータを用いて翻訳候補をスクリーニングすることで解決しています。
このように、適切な翻訳候補を選ぶ工夫を施したことで、
- 全てが選択問題であるため、クラウドワーカーの負担が少ない
- タスクを行うには「問題文を読める*2」だけでよく、回答しやすい
というタスクを作成することができました。
データの信頼性向上
まず導入したのは、大手クラウドソーシングサービスが提供している、成果物クオリティの低いクラウドワーカーの回答を除外する機能です。
それに加えて、全てのタスクを1人に回答してもらうのではなく、3人回答してもらって2人以上が答えていたものを採用する、といった工夫も行いました。
この際当然、発注数が単純に3倍に増えてしまうため、費用対効果をしっかり測る必要があります。
両者の工夫を行った際の精度が最も高かったのですが、予算の関係から、最終的にはクラウドソーシングサービスが準備してくれている除外機能のみを利用することとなりました。
まとめ
上記のように、
- クラウドワーカーが回答しやすいタスクを作成する
- タスクに品質をあげる工夫を費用対効果を測定しながら施す
という工夫を施したことで、
- 素早く効率的に
- 可能な限り費用を抑えて
- 信頼できる学習データを収集する
ことが可能になり、学習データ収集が効率化されました。
クラウドソーシングでのデータ収集は、大量のデータを手早く集めたい時、非常に有用だと感じました。
企業での活用にかぎらず、多くのデータを必要とする学術的研究や、個人で何らかのデータを集めたいといった場面でも効果を発揮するのではないかと思います。
ただし、クラウドソーシングならではの注意点もあるので、使用時にはそこを理解して使う必要があると思います。
どのような形でタスクに落とし込めば良いのかを問題に応じて考える必要があります。
特に重要なのは、タスクを変更したことによる成果物の品質の変化を測定可能にしておくことだと思いました。
最後までお読みいただき、ありがとうございます。