この記事は CrowdWorks Advent Calendar 2017 の7日目の記事です。
2017年はAI・人工知能といったキーワードが非常に盛り上がった一年でもありました。表題の「うちのサービスに人工知能を使って何か面白いことやってよ」なんて言葉を受け取った人も居るのではないでしょうか1。最近盛り上がりを見せた「機械学習案件を納品するのは、そんなに簡単な話じゃないから気をつけて」のような話も含めて、こういった場面で何をどのように考えるべきかという観点で、クラウドワークスにおける取り組みの過程で得た学びを整理してみようと思います。
真の目的は何か。誰にどんな価値を届けるのか。
「人工知能で〜」とか「機械学習で〜」という話をしていると、手段に目がいってしまうことが多いようです。大事にすべきなのは、その先の「誰にどんな価値を届けるか」ということであり、違う言葉を使えば「受け入れ条件を明確にする」ということだと思っています。
流行りの手法にとらわれない
先日行われたDataRobot社のイベントにおける、DataRobot CEOのJermy Achin氏の発言に次のようなものがありました。
世の中の人工知能に関する報道の95%は深層学習と画像処理に関するものである。
世の中の人工知能に関する価値の95%は数字やテキストを対象とした、(深層学習ではない)教師あり学習によって生み出されている。
昨今のAI・人工知能の報道を見ていると、深層学習など先進的なアプローチに目が向かいがちですが、実際に大部分の価値を生み出しているのは、従来から存在する古典的なアルゴリズムである、という主張です。
最新の手法を使うことへのこだわりを捨てて、どのような目的を達成する必要があるのかに立ち返り、そのために最適な手法は古典的なものまで含めて何なのかを考える必要性を説いていると思います。
人工知能は銀の弾丸ではない
人工知能・機械学習を使えば、サービスのどんな課題でも瞬く間に解決してくれる....ようなことは、2017年の現在ではまだ(残念ながら)夢物語です。サービスの課題をどのようなアプローチで解決していくかは、私たち人間が考える必要があります。
「なんかいい感じにoooという条件にマッチするやつを見つけてよ」というフンワリした課題を、「条件Aと条件Bに合致し、さらに条件C,D,E,Fのいずれか2つ合致するもの」というルールに置き換える部分は人間が行う必要があります。このとき、条件E,Fに合致するか否かを判定する部分に機械学習や自然言語処理を取り入れることで、精度を向上させるというアプローチは、確実性高く成果に繋げられるでしょう。
フンワリした課題を定式化する際にも、機械学習の手法が役立つ場面があるでしょう。例えば、k-means等のクラスタリングアルゴリズムを適用することによって、人間が気づいていなかった分類特徴が見つかるかもしれません。人間にとっては分かりにくいけれど、機械には分かりやすい指標があるならば、それを活用することによって、従来よりも良い性能を発揮させることができるでしょう。
クラウドワークスでの事例
クラウドワークスにおける昨期のAI関連の取り組みの1つに、「悪質案件自動検出AIの開発・実装」というものがあります。この事例を題材に、ここまで述べてきた観点に当てはめて整理してみます。
流行りの手法にとらわれない
昨期、悪質案件の自動検出を目指して、幾つかの取り組みを行いました。その内容は、人工知能学会全国大会においてクラウドソーシングサービスにおける課題改善への取組みと今後の展望というタイトルで発表させて頂きました。
この取り組みは、クラウドワークスに投稿される仕事の文面を元に、「利用規約」や「仕事依頼ガイドライン」に反するものか否かを判定する処理を自動化するものです。この中で、私たちはサポートベクターマシン(SVM)を用いて判定を行い、そのベクトル生成方法としてWord2VecやDoc2Vecを用いる方法を試みました。幾つかのデータセットに対して適用してみたところ、稀に良い性能を出すことがあるものの、殆どの場合はランダム程度の性能しか実現できず、採用には至りませんでした。予稿には記載していませんが、LSTMなど、いわゆる「流行り」の手法も幾つか試みましたが、同様に期待するパフォーマンスが得られない結果となりました。
そんな状況で試行錯誤している中で当たったのが「ベイジアンフィルタ」です。ベイジアンフィルタは2002年にポール・グレアムが発表した論文“A Plan for Spam”が元になって開発されたもので、スパムメールの判定アルゴリズムとして利用されています。私たちの取り組んでいた悪質案件の検出という課題は、スパムメールの検出と構図は同じであることから適用してみると、非常に良いパフォーマンスを安定して出すことができました。
悪質案件の自動検出プロジェクトは、昨年実施した「CSP(クラウドワークスの整地をしようプロジェクト)2」において、「AIを使って何かやってみよう!」という思いが発端だったこともあり、比較的新しい手法からスタートしていたのですが、実際には古典的な手法であるベイジアンフィルタが最も安定して高い性能を出すことが出来ました。解決すべき課題に対して適切な手法を選択することが重要であり、その手法が新しいか古いかは関係ない、ということを(当たり前のことではあるのですが)再認識させられました。
目的を達成するためのアプローチ
「機械学習」や「人工知能」といったキーワードに振り回されることなく、しっかり成果を出すために、常に目的に立ち返り、自分たちが今どこに居るのかを捉えながらプロセスを進めていくことが重要です。
- 目的を達成するためのシンプルな「ルール」を作る
- 「機械学習」や「人工知能」といったキーワードは一旦忘れる
- 人の手で、手作業で実現するとしたらどういった条件にするかを考え、定式化する
- 実際のデータ、サービスに適用してみて、乖離のある箇所を見つける
- 頭の中で考えた「ルール」と現実世界は違うもの。そのギャップを見つける。
- ギャップを埋めるようなルールを作れないか考えてみる
- 人間の連想力や暗黙知をルールに落とせないか考えてみる
- ルールでうまく表現できない箇所に対して、機械学習や自然言語処理の適用を考える
- シンプルなルールで表現できない箇所を、機械学習・自然言語処理を活用することでパフォーマンス改善に繋げる
シンプルな「ルール」で試行錯誤をすることで、Try&Errorのコストを小さくアタリを付けておき、その後の性能改善に機械学習を活用する、という流れで進めることが、プロジェクト全体を確実に成果に導く重要なポイントだと考えています。
まとめ
クラウドワークスでは機械学習や自然言語処理を活用したサービス改善に取り組んでいます。そのプロセスの中で試行錯誤しながら迷ったところ、こうすれば良かった、と振り返ったところを整理してみました。
機械学習や自然言語処理の力を使って、Webサービスを大きな成長・成果に向かえるようにするために、どういった考え方・捉え方をすればよいか、一つのヒントになれば幸いです。
クラウドワークスの今期の挑戦については「クラウドワークスの技術戦略とアドベントカレンダー始めますのご紹介 - クラウドワークス エンジニアブログ」や、アドベントカレンダーの他の記事でも感じて頂けるかと思います。機械学習に関連するトピックも複数あるので、よければそちらも読んでみて下さい。
-
実際に自分自身がこの言葉をかけられたわけではないのですが、「人工知能」や「機械学習」といったキーワードに振り回されてしまった(チームを振り回してしまった)記憶があるので、自戒を込めてこのようなタイトルを付けてみました。 ↩
-
詳しくは昨年のブログ 【レポート】総勢27名!クラウドワークス開発合宿を行いました!@湯河原温泉旅館 おんやど恵 - クラウドワークス エンジニアブログ を御覧ください ↩