この記事では、クラウド上で提供されている機械学習サービスを実案件に採用するときの経験談をまとめます。
自分のプロジェクトで活用する際の参考情報になれば幸いです。
//主観的な内容も含まれているかもしれませんが、ご容赦ください。また、技術的な詳細よりもわかりやすさを優先するため、「機械学習サービス」と統一した呼び方にします。
サービスの種類/適用範囲
最近様々なベンダーが提供している機械学習サービスを自社プロダクトに取り入れる場合、大きく分けて以下3つの方針があげられます。
API サービスの活用 (SaaS)
これから導入する人もいると思うので、「そもそも API サービスとは何でしょうか? 」というところから始めていきます。
API サービスの特徴は、下記のとおりです。
- 特定用途に特化している
- 使用料 (1000回呼び出しごとに xx円) に応じた課金
- 実装コスト低い
- 自分側でシステムを開発する必要がなく、あくまでマッシュアップ(組み合わせる)を前提としている
機械学習 API というのはどういうものかというと、下記のようなことが実現できます。
- 顔認識
- 性別/年齢の認識
- 画像のアダルト度測定
- 画像に含まれる文字列認識
- 話している人の認識.. などなど
このカテゴリに該当するのは Microsoft であれば Project Oxford、Google さんも最近 Google Cloud Machine Learning というサービスを出していて、この辺りが該当します(Google のサービスではまだ遊んでいないので、もしずれていたらフィードバックください)。
この手のものはサクッと始められて実装コストは低いので始めるのは容易です。一方で、ある程度用途は限られているので、自分のシナリオに合わない場合にはアイディアソン/ハッカソン止まりになってプロダクトには反映されないこともあります。合う場合は最高です。
Tool の活用 (PaaS)
機械学習を取り入れるための、ある程度作りこみ可能なツールのことをここでは Tool と呼んでいます。
このカテゴリの特徴は下記のとおりです。
- 賢い処理をするための脳みそ(モデル)が用意されている
- 画像/動画/音声/文字列認識などではなく、価格予測やレコメンドなど数値を使った分析が得意
- できる限りコードを書かなくて済むようになっている
- 脳みそを賢くするために必要なデータのインポート/加工のためのツールも用意されている
- データを可視化するツールが提供されている
- 脳みそが本当に賢くなったかをテストするツールも用意されている
- 別システムから呼び出すための機能が提供されている
なんだか便利そうですね。でも、はじめに紹介した API と異なり、使う側にも専門性が少し必要になってきます。また、案件では下記のような意識が必要です。
- そもそもどのような結果を出したいか?という定義を自分でする
- その結果を出すために機会に学習させられる規則性があるか?という仮定を自分で設定する
- あくまで「開発」なので、Tool が提示してくる統計的な情報等を理解しながら自分でロジックを組む
このカテゴリに該当するのは、Azure Machine Learning や Amacon Machine Learning が該当します(僕 Amazon ユーザーじゃないので、もし違っていたらフィードバックをください。)
この手のものは、APIサービスほど楽ではなくなりますが、自分ですべてコードを書き起こすよりは楽です。「機械学習に特化した会社にしたい」とかでなければ、使ってみるとよいと思います。例えば、医療系データを扱っている会社さんなどが、これまでとは異なる切り口で解析を進める際に使っており、成果が上がってきているようです(論文発表の関係があり、公表はできないですが・・)。
繰り返しになりますが、開発を補助するツールなので「自分で開発する」前提で進めましょう。なお、定義や仮説を立てられない際には、コンサル会社さんに頼ることが多く、例えばテクノスデータサイエンス・マーケティング様やブレインパッド様を紹介しています。
独自作りこみ/外注 (IaaS)
上記2つの方針で実現できないときには、最後の砦「独自開発/外注」にやってきます。
このカテゴリの特徴は下記のとおりです。
- 自分で実装をする
- 専門性高い会社は、論文読みながら独自実装している (開発と研究両方の側面が必要)
- 目的に合わせたライブラリの選定や実装を行う
- (頑張れば) 自社プロダクトに最適化した実装が可能
なんか大変そうですね。大変です。このカテゴリを実現できる会社は、コンピューターサイエンスの素養のある方々が集まって開発していることが多いので、競争するのは大変です。アプリケーション開発とは全く異なる専門性が必要になります。
このカテゴリに該当するのは、以下のようなツールです。
- Python や R のライブラリ
- 大規模データ使う際に活用される Spark MLlib
- Deep Learning ライブラリである Chainer, Cafee, TensorFlow, CNTK
独自開発しているエンジニアさんたちには頭が上がらないです。お会いするみなさん研究力・開発力本当に高い。
この手のものは、自力で実装したければそれなりの人的・時間的・金銭的リソースをそろえていく必要があります。
ただ、実案件になると、「自分たちの実現したいことが実現できればOK」ということが多いので、作りこみをやってくれるパートナー企業を紹介していたりします。自分達目標が「機械学習特化」というわけでなく、例えば「業界一のERPパッケージ開発のための差別化要因追加」「製品品質を機械の力で省力化」などであれば、外注してくれるパートナーさんと組むのが良いと思います。
餅は餅屋と考えないと、実担当者的には「終わらない残業」が始まる一方で、経営サイドからすると「予算積んで目的達成できるのであればそれでよいのに」という不幸なすれ違いも起きるので。
「やらない方が良い」というわけではなく、「どこにフォーカスするか」意思決定することで方向性が変わりますということを言いたいです。
まとめ
様々な機械学習サービスの特徴と、実案件での経験談を書いてみました。図にまとめると下記のような感じでしょうか(以前発表したスライドを参照)。
SaaS (API)はピンポイントだけど「期待した結果」までたどり着きやすく、PaaS, IaaS となると適用範囲は広がるが、「期待した結果」までの距離がある。
案件進めるときは以下のように進めることが多いですが、それぞれの強み、弱みを理解しながら、実案件では意思決定をしてみてください。
個別に作りこみが必要な場合には
で、外注できるパートナーさんってどこさ?って話になるのですが、現在リクルーティングしており、4月末ごろに発表予定です(このブログに記載します。)
画像/文字列/音声解析分野で、製品品質要求の厳しい大企業と案件をこなしてきたパートナーさんのソリューションや技術を紹介していきます。
それでは、良い1日を!