5年ほど取り組んでわかった機械学習プロジェクトの進め方

「AI」や「機械学習」という言葉も、広く聞かれるようになって早数年となります。 初めは敷居が高かったそれらの技術も、最近ではクラウド環境の充実により、大袈裟な準備を必要とすることなく、気軽に開始できるようになりました。

例えば、環境構築などは、ボタンを何回か押して少し待つだけで簡単に行えるようになりましたし、一番肝の部分である機械学習モデルの構築ですら、設定さえ行えば勝手に色々なモデルを作成した上で最適なものを自動で選択してくれる、AutoMLと呼ばれる領域も進化してきています。

このように、機械学習を利用したプロジェクトに取り組むハードルはどんどん下がってきています。しかし機械学習プロジェクトの進め方はよくある開発プロジェクトと大きく異なるため、その性質をしっかり理解しないと、せっかくコストを投入して取り組んでも失敗してしまう可能性があります。

PLAN-Bでは、5年ほど前から機械学習領域に取り組み始めました。実際に機能として組み込まれるに至ったものから、途中で挫折したものなど、大小様々な機械学習プロジェクトを経験してきました。

本記事では、それらの経験を経て得た機械学習プロジェクトの対する知見を、まとめていきます。

例とするプロジェクトの概要

ここから機械学習プロジェクトについて論じていくことになりますが、単純に抽象化した論だけつらつら書いても分かりづらいものとなってしまうので、実際にPLAN-Bで取り組んだ機械学習プロジェクトの例を合わせて説明させていただきます。

まずはその例とするプロジェクト「検索インテント判定モデル作成プロジェクト(以下、インテントプロジェクト)」について説明いたします。

プロジェクト名
検索インテント判定モデル作成プロジェクト(インテントプロジェクト)
概要

ある人物がGoogle検索エンジンを用いて検索行為を行った際に、その人物が”検索した意図”=インテントを判定するモデルを作成する。
(本サイト内参考記事: 検索インテント(検索意図)とは?重要性と調べ方、活用法まで解説! )

体制
プロジェクトマネージャー:1名
データサイエンティスト:2名
他、事業側ステークホルダー数名
詳細
例えばGoogle検索で「ラーメン」と検索した際、その人はどのような意図で検索を行っているのでしょうか。
  1. ラーメンという単語の意味を知りたい
  2. ラーメンを通販サイトで購入したい
  3. 近くにあるラーメン屋を比較検討したい
もちろん、人によって意図は違うと思われますが、多くの人は3の意図であることが多いのではないでしょうか。
このように、ある「検索単語」に対してどのような意図で検索しているかを、検索結果などのデータを元に判定する機械学習モデルの作成が、本プロジェクトのゴールとなります。
(実際の検索意図は例ほど詳細ではなく、「買いたい」「比べたい」など抽象化したものとなります。)

こちらは実際にあったプロジェクトで、弊社が提供するSEOツール「SEARCH WRITE」にて機能の一部として組み込まれております。

インテントプロジェクト参考図

本記事では、機械学習プロジェクトについて、私が考えるプラクティスとともに、「インテントプロジェクト」における例を記載していきます。

機械学習プロジェクトの特徴

ではまず最初に、冒頭でも触れた通り、機械学習プロジェクトとよくある開発プロジェクトの違いについて説明していきます。

その違いとは、主に大きく分けて二つあります。

1.技術的不確実性が高い

機械学習プロジェクトでは、「実現できるか分からないことを、機械学習という帰納的な手段を用いて実現を目指す」のが基本となります。

例えばインテントプロジェクトでも、そもそも「検索を行った人の意図をデータから機械的に判定する」ことが可能かどうか、データを集めればいけそうな気はしますが、実際に可能かどうかはどこまでいっても不確実です。

もちろん、開発プロジェクトでも不確実性が高いプロジェクトは数多くありますが、機械学習プロジェクトでは「不確実なことが前提」となります。

開発プロジェクトと機械学習プロジェクトでは技術的不確実性が異なる

2.説明がしづらい ≒ 結果を評価しづらい

機械学習は、帰納的にロジックを構築する手段です。 場合によっては、「なぜ、そのような結果になったか」を説明しづらい場合が存在します。

演繹的なアプローチと機能的なアプローチ

また、誰も答えをもっていない課題を解決するべく利用することが多いため、「どのような結果が出たら実際に機能として組み込んでいいのか」などの評価の仕方を考慮しつづける必要があります。

こちらもインテントプロジェクトで考えると、仮に「インテントを判定できる機械学習モデル」が完成したとします。そのモデルが「ラーメン」という検索語句に対して「比べたい」という検索意図を導き出したとしても、何故そのような結果になったのかの説明は、強いて言うなら「機械学習の結果そうなったから」以上の説明が難しいものがあります。

また、モデルの評価について、仮に「精度90%」だったとしても、それはあくまでその精度評価テストでの値です。実際に世の中に出した際は、母集団が違う可能性があるため同じ精度が出るとは限らないです。そもそも「正解がないものに精度とは?」という話もあります。(「ラーメン」と検索した人がみな「近くにあるラーメン屋を比較検討したい」という意図であるとは限らない)

このように、答えの無い、曖昧な事に対して評価を行う必要があるのが、機械学習プロジェクトの難しさの一つです。

演繹的なアプローチは説明可能、機能的なアプローチは説明不能

機械学習プロジェクトの進め方ポイント

機械学習プロジェクトの概要はある程度説明できたので、ここからはプロジェクトを進める上でのポイントを紹介していきます。

機械学習プロジェクトのサイクル

ポイントその1:機械学習はあくまで手段

ここまで、「機械学習プロジェクト」と何度も書いてきましたが、機械学習はあくまで手段でしかありません。機械学習という手段を用いて解決したい課題は何か、というのをまず最初に明確にする必要があります。

解決したい課題によっては、機械学習を使わないやり方もあるかもしれません。選択肢として、機械学習を利用することを考慮に入れることは大事ですが、機械学習を使うことが目的にならないようにしましょう。(アカデミックな現場ではまた話が変わってくるかもしれません。あくまでサービスを開発する立場です。)

なぜなら、前項で述べたように、機械学習は評価が難しく、また、機械学習を利用したからと言って思うような結果を出せるとは限らないからです。逆に、機械学習を利用することでより問題を複雑にしてしまう危険性があります。

例えば、「ルールベースのロジックでも目標とする精度が出せた=無駄に機械学習を利用するコストをかけてしまった」であったり、「機械学習により目標精度は出せたものの、実装面で難易度が上がってしまいサービスとしてリリースできなかった」などの問題が起こる可能性があります。

インテントプロジェクトでも、機械学習を利用したモデル作成と並行して、辞書を用いたルールベースのロジックも考慮して検証を行っていました。例えば、「検索結果画面に『○選』などの単語がよく出てくる検索単語は、『比べたい』という意図である」などのルールなどを検討していました。「たいていの自然言語処理はgrepで事足りる」が座右の銘である自然言語処理の研究者もいるようです。

ポイントその2:数値目標の設定

機械学習プロジェクトでは数値目標を設定することが重要です。
「評価データでの精度X%」など、スマートに設定できる場合はもちろんのこと、そうでなく数値で測りにくいような機能を実現しようとしている場合も、ある程度無理矢理でもいいので、数値目標を設定してあげることが望ましいです。

理由としては、プロジェクトの進捗がよいのか悪いのか、新しく作ったロジックは前回のものと比べてどうなのかなどを客観的に把握するためです。

数値目標なしの場合とありの場合

またその数値目標は、状況に応じてステークホルダーとの合意の上変化してもよいと考えています。

例えば、最初に「用意された評価データでの精度80%を目指します」と設定したとします。試行錯誤の上、その目標を達成したとしても、実際に使ってみると「思っていたより的外れなアウトプットも多く出してしまうな」と感じることもあるでしょう。

数値目標はあくまで指標で、重要なのはあくまで「課題を解決できたか」であるので、その場合は「やっぱり90%目指さないと実用化出来ないな」「評価データをもっと汎用的なものを用意しよう」など、柔軟に変更すればよいです。

ただ、自由に変化させてよいとしてしまうと、プロジェクト終盤にひっくり返ってしまうなど節操がなくなってしまいます。レビューを通して適切な目標をステークホルダーと合意し設定していくようにしましょう。

大事なのは、先が見えていない段階でもとりあえず数値目標を設定することで、進捗把握や比較を可能にすることと、逆に数値目標にひっぱられて課題解決の本質を見失わないことです。

インテントプロジェクトでも、最初に精度目標をおいた後、レビューを通して修正しながら最終的なサービスとしてのリリースまで持っていくことができました。

数値目標が適切に設定できている場合

ポイントその3:レビューの設計が重要

プロジェクトを進めていく上で、作ったものを事業/ビジネスサイドのステークホルダーにレビューしていただくタイミングが出てきます。

レビューの目的は、事業/ ビジネスサイドと開発サイドのアウトプットの擦り合せになってくると思いますが、このレビューの設計がとても重要になってきます。

まず一つは、レビューは高頻度で行うほうがよいと考えます。

もちろん、擦り合せが目的ではあるので、開発者が完全にビジネスの意図を理解していたら完成したものを見せるだけで大丈夫かもしれませんが、現実はそんなにうまくいかないことが大半です。なので、できる限り小さく区切って逐一レビューを行っていくことが望ましいです。

次に、できるだけ動くものを見せられるようにしましょう。

特に機械学習のプロジェクトでは、「目標精度何%に対して現在何%です」のような形の報告になりがちですが、この報告の仕方だと実際にどのようなアウトプットになるかは想像がしづらくなってしまいます。その結果「いいんじゃない?」「ちょっと精度低いね」のような反応しか得られず、「いいんじゃない?」と言われて安心しサービスとして実装した段階で「思っていたものと違う」という結果になってしまう危険性があります。

そうならないために、できる限り実際に使われる形と同じようなものをレビューしてもらうことが好ましいです。これは決して作り込まなければならないわけではなく、例えば機械学習のモデル作成であれば、実際にどういうインプットがきた際にどういうアウトプットになるのかステークホルダーが分かることが重要です。

インテントプロジェクトでは、長くても1週間、早ければ3日程度の間隔でレビュー会を開催していました。またレビュー会では実際に検索キーワードを入力してもらい、判定されたインテントを見てもらうデモを行っていました。(裏では、プログラムを手で回す、のような泥臭い作業を行っていたこともあります)

結果的にではありますが、そのようにレビューを進めていたおかげで、モデル作成が完了した後、実際にサービスへの組み込みまでスムーズに行えましたし、ビジネスサイドからの「イメージと違う」などのフィードバックもなくリリースまで迎えることができました。

動くものを見せておりレビュー精度も高い

ポイントその4:実装は終わりではなく始まり

最終のレビューが終わったら、いよいよサービスへの組み込み実装を行い、プロジェクトの終了となります。

機械学習で解決したい課題は「答えがない」ことが多いですが、サービスへの実装まで至った時点である程度結論づけられた「答えのような何か」が出せたということだと思います。

そのことは素晴らしいことですが、「答えがない」以上、まだまだ改善の余地があるということです。実際にサービスとして出した上で見えてくることも多くあります。

また時間が経過するにつれて状況やロジックが変わることもあるので、

  • 継続的に新たなデータを収集する仕組み
  • 集まったデータを元に新たな機械学習モデルを作成する仕組み
  • 新たなモデルの性能を評価して既存のモデルと比較した上でデプロイする仕組み

などのような、機械学習のモデルを定期的に作成し改善していく仕組みをつくっていきたいです。この一連の流れが自動化までなされていると最高です。

サービスを利用したユーザーからのフィードバックをもらえる仕組みもいれていけると、それを元に改善もできるのでなおよしです。

インテントプロジェクトでも、データを定期的に収集してのモデル更新や、社内利用またはお客様からのお問い合わせ・フィードバックを参考に、ちょっとした変更などを行っています。今後、そのような仕組みも自動化していく予定です。

機械学習プロジェクトではリリース後も改善サイクルをまわす

さいごに

機械学習のプロジェクトを任せられるようになってから、大小様々なプロジェクトに取り組んできましたが、今回お話に組み込ませていただいた「インテントプロジェクト」が、自分で進め方として一番上手くいった実感があり、ステークホルダーの方々からもお褒めの言葉をいただいたプロジェクトでした。

何故、インテントプロジェクトがそのように成功したプロジェクトとなったのかをふりかえりながら自分なりに改めて整理したのが本記事となります。

記載した進め方のポイントが絶対に正しい・必要だとは限りませんが、機械学習を利用したプロジェクトと開発プロジェクトの進め方の違いに悩まれている方には、事例として参考にしていただけますと幸いです。