Hack & Sports

Microsoft エバンジェリスト&トライアスリート 大田 昌幸の個人ブログ

クラウド上の機械学習サービスを実案件に採用するときの経験談

マイクロソフトエバンジェリストをしている大田です。

この記事では、クラウド上で提供されている機械学習サービスを実案件に採用するときの経験談をまとめます。

自分のプロジェクトで活用する際の参考情報になれば幸いです。

//主観的な内容も含まれているかもしれませんが、ご容赦ください。また、技術的な詳細よりもわかりやすさを優先するため、「機械学習サービス」と統一した呼び方にします。

 

サービスの種類/適用範囲

最近様々なベンダーが提供している機械学習サービスを自社プロダクトに取り入れる場合、大きく分けて以下3つの方針があげられます。

  • API サービスの活用 (SaaS)
  • Tool の活用 (PaaS)
  • 独自作りこみ/外注 (IaaS)

 

API サービスの活用 (SaaS)

これから導入する人もいると思うので、「そもそも API サービスとは何でしょうか? 」というところから始めていきます。

API サービスの特徴は、下記のとおりです。

  • 特定用途に特化している
  • 使用料 (1000回呼び出しごとに xx円) に応じた課金
  • 実装コスト低い
  • 自分側でシステムを開発する必要がなく、あくまでマッシュアップ(組み合わせる)を前提としている

機械学習 API というのはどういうものかというと、下記のようなことが実現できます。

  • 顔認識
  • 性別/年齢の認識
  • 画像のアダルト度測定
  • 画像に含まれる文字列認識
  • 話している人の認識.. などなど

このカテゴリに該当するのは Microsoft であれば Project OxfordGoogle さんも最近 Google Cloud Machine Learning というサービスを出していて、この辺りが該当します(Google のサービスではまだ遊んでいないので、もしずれていたらフィードバックください)。

 

この手のものはサクッと始められて実装コストは低いので始めるのは容易です。一方で、ある程度用途は限られているので、自分のシナリオに合わない場合にはアイディアソン/ハッカソン止まりになってプロダクトには反映されないこともあります。合う場合は最高です。

 

Tool の活用 (PaaS)

 機械学習を取り入れるための、ある程度作りこみ可能なツールのことをここでは Tool と呼んでいます。

このカテゴリの特徴は下記のとおりです。

  • 賢い処理をするための脳みそ(モデル)が用意されている
  • 画像/動画/音声/文字列認識などではなく、価格予測やレコメンドなど数値を使った分析が得意
  • できる限りコードを書かなくて済むようになっている
  • 脳みそを賢くするために必要なデータのインポート/加工のためのツールも用意されている
  • データを可視化するツールが提供されている
  • 脳みそが本当に賢くなったかをテストするツールも用意されている
  • 別システムから呼び出すための機能が提供されている

なんだか便利そうですね。でも、はじめに紹介した API と異なり、使う側にも専門性が少し必要になってきます。また、案件では下記のような意識が必要です。

  • そもそもどのような結果を出したいか?という定義を自分でする
  • その結果を出すために機会に学習させられる規則性があるか?という仮定を自分で設定する
  • あくまで「開発」なので、Tool が提示してくる統計的な情報等を理解しながら自分でロジックを組む

 

このカテゴリに該当するのは、Azure Machine Learning Amacon Machine Learning が該当します(僕 Amazon ユーザーじゃないので、もし違っていたらフィードバックをください。)

 

この手のものは、APIサービスほど楽ではなくなりますが、自分ですべてコードを書き起こすよりは楽です。「機械学習に特化した会社にしたい」とかでなければ、使ってみるとよいと思います。例えば、医療系データを扱っている会社さんなどが、これまでとは異なる切り口で解析を進める際に使っており、成果が上がってきているようです(論文発表の関係があり、公表はできないですが・・)。

繰り返しになりますが、開発を補助するツールなので「自分で開発する」前提で進めましょう。なお、定義や仮説を立てられない際には、コンサル会社さんに頼ることが多く、例えばテクノスデータサイエンス・マーケティング様ブレインパッド様を紹介しています。

 

独自作りこみ/外注 (IaaS)

 上記2つの方針で実現できないときには、最後の砦「独自開発/外注」にやってきます。

このカテゴリの特徴は下記のとおりです。

  • 自分で実装をする
  • 専門性高い会社は、論文読みながら独自実装している (開発と研究両方の側面が必要)
  • 目的に合わせたライブラリの選定や実装を行う
  • (頑張れば) 自社プロダクトに最適化した実装が可能

なんか大変そうですね。大変です。このカテゴリを実現できる会社は、コンピューターサイエンスの素養のある方々が集まって開発していることが多いので、競争するのは大変です。アプリケーション開発とは全く異なる専門性が必要になります。

 

このカテゴリに該当するのは、以下のようなツールです。

独自開発しているエンジニアさんたちには頭が上がらないです。お会いするみなさん研究力・開発力本当に高い。

 

この手のものは、自力で実装したければそれなりの人的・時間的・金銭的リソースをそろえていく必要があります。

ただ、実案件になると、「自分たちの実現したいことが実現できればOK」ということが多いので、作りこみをやってくれるパートナー企業を紹介していたりします。自分達目標が「機械学習特化」というわけでなく、例えば「業界一のERPパッケージ開発のための差別化要因追加」「製品品質を機械の力で省力化」などであれば、外注してくれるパートナーさんと組むのが良いと思います。

餅は餅屋と考えないと、実担当者的には「終わらない残業」が始まる一方で、経営サイドからすると「予算積んで目的達成できるのであればそれでよいのに」という不幸なすれ違いも起きるので。

「やらない方が良い」というわけではなく、「どこにフォーカスするか」意思決定することで方向性が変わりますということを言いたいです。

 

まとめ

 様々な機械学習サービスの特徴と、実案件での経験談を書いてみました。図にまとめると下記のような感じでしょうか(以前発表したスライドを参照)。

f:id:NT-D:20160328111515p:plain

SaaS (API)はピンポイントだけど「期待した結果」までたどり着きやすく、PaaS, IaaS となると適用範囲は広がるが、「期待した結果」までの距離がある。

案件進めるときは以下のように進めることが多いですが、それぞれの強み、弱みを理解しながら、実案件では意思決定をしてみてください。

  1. 画像/音声などのインテリジェントな処理の場合、API (SaaS) でできるか検証してみる
  2. 数値解析系なら Tool (PaaS) 試してみる
  3. 無理なら作りこみ or 外注

 

 

個別に作りこみが必要な場合には

 

 で、外注できるパートナーさんってどこさ?って話になるのですが、現在リクルーティングしており、4月末ごろに発表予定です(このブログに記載します。)

画像/文字列/音声解析分野で、製品品質要求の厳しい大企業と案件をこなしてきたパートナーさんのソリューションや技術を紹介していきます。

 

それでは、良い1日を!

 

 

 

 

クラスタリング アルゴリズムを学びつつ Azure Machine Learning で実装するための情報

こんにちは、Microsoft  テクニカル エバンジェリストの大田です。

先日機械学習関連のセミナーを開催したのですが、その際の資料や動画の準備が整ったのでここにログしておきます。

 

セミナーのコンセプト

データ解析・機械学習に関して、様々な入門者向け情報を提供してきましたが、やはり実案件になると色々と躓くことが増えてきました。

どんなところで躓くかというと、下記のポイントが多いです。

  1. どんな成果を求めて、どんなデータを使うかという「ゴール設定力」
  2. 期限を決めて根気よく繰り返すための「精神力(というか慣れ)」
  3. データを貯めたり定期的に処理しするための「インフラ構築力」
  4. 解析をする際のモデル手法の選定や、その内容を理解するための「統計解析力」
  5. そのモデルを実現するための「実装力」

# もちろん、案件で経験を積めばさらに課題が見えるかもしれないです。

 

そのため、このポイントを「みんなで解決していこう」というコンセプトでセミナーを開催しました。いきなり全部はできないので、今回は「インフラ構築力」「統計解析力」「実装力」を鍛えるためのコンテンツを共有しました。

 

セミナー資料と動画

セミナー資料はそれぞれ下記に公開しています。

 

上坂さん、清水さんのは「インフラ構築力」に特化しています。

上坂さんは Hadoop の解説と Azure ML との連携方法を紹介しています。

清水さんは、定期的な処理・データの移動・可視化について紹介しています。

 

三上さんは「統計解析力」に特化した情報を提供しています。具体的にはクラスタリングの全体像や K-means クラスタリングについて解説してくれています。

大田は「実装力」に特化した資料になっており、K-means クラスタリングを Azure ML で実現する方法を紹介しました。

 

アルゴリズムから学ぶAzure ML モジュールの使いこなし方 -- Azure Machine Learning との連携について学ぶ -- HDInsight編
株式会社ネクストスケープ エバンジェリスト
上坂 貴志

 

K meansによるクラスタリングの解説と具体的なクラスタリングの活用方法の紹介
フリーランス
三上 威

 

Azure Machine Learning でのK-means 法の具体的な活用方法
日本マイクロソフト テクニカル エバンジェリスト
大田 昌幸

 

未来を見据える Power BI! Azure Machine Learning との連携
日本マイクロソフト サポート エンジニア
清水 磨

 

資料の詳細な解説・デモを見たい場合には、Chennnl 9 というMS動画サイトで公開しているので活用してください。

channel9.msdn.com

 

 

 

 

 

Azure Blob ストレージへのファイルアップロード方法

Azure Blob ストレージへのファイルアップロード方法をご質問いただくことがありますので、アクセス方法をメモしておきます。

なお、Azure ストレージの概要については過去記事をご参照ください

nt-d.hatenablog.com

 

データをアップロードする方法

ストレージへのデータのアップロード方法にはいくつかの方法があります。

  1. (イチオシ!)Microsoft Azure Storage Explorer (Windows,Mac, Linux)
  2. Azure CLI というコマンドラインツール (Windows,Mac, Linux)
  3. AzCopy ツール (Windows)
  4. 各社様の開発されている独自ツールをご利用いただく。
  5. 自作

Microsoft Azure Storage Explorer の利用  

プラットフォームを選ばないツールで、これが一番便利です。

ここからダウンロードできるので、活用してみてください。

 

Azure CLI というコマンドラインツールのご利用 (Mac, Linux, Windows でご利用いただけます。)

Azure CLI というツールをご活用いただくことで、コマンドラインで Azure の操作が可能です。下記情報を参考に、Azure CLI の活用をご検討ください。

 

Azure CLI のインストールと構成

https://azure.microsoft.com/ja-jp/documentation/articles/xplat-cli/

 

Azure Storage での Azure CLI の使用

https://azure.microsoft.com/ja-jp/documentation/articles/storage-azure-cli/

 

なお、上記 API の場合には並行処理は実装していないため、

まずはこのツールをお試しいただき、実業務内で利用に耐えうるパフォーマンスかをご確認ください。

# これが一番簡易な方法ですが、データ量によってはパフォーマンスに難があると考えており、上記のように案内させていただきました。

#並行処理に関する情報は文末に記載しました。

 

Windows 環境をご用意いただき、AzCopy ツールをご利用いただく。

弊社正式のツールとして AzCopy というツールがございます。

Windows 限定ではございますが、高速にデータのアップロードができますので、ご検討ください。

https://azure.microsoft.com/ja-jp/documentation/articles/storage-use-azcopy/

 

 

各社様の開発されている独自ツールをご利用いただく。

Cyberduck というツールで Azure へデータをアップロードすることが可能です。

並行してアップロードする実装を行っているか?という内部実装については不明ですが、選択肢の一つとして案内させていただきました。

https://trac.cyberduck.io/wiki/help/en/howto/azure

 

自作する際にご確認いただきたいこと

大量のデータをアップロードする場合、アップロード方法を工夫する必要があります。

Blob Storage の場合、高速にデータをアップロードするツールの実装は下記のようになります。

  1. クライアント側でデータをブロック単位に分ける。
  2. ブロック ID を付与して、Azure Blob Storage へ”並行して”アップロードする

 

上記のように、いくつかのブロックを並行してアップロードすることにより、

大きなデータであっても高速にアップロードできるようになります。

AzCopy も並行してアップロードするようになっており、高速にデータを転送可能になっています。

 

参考情報: Blob Parallel Upload and Download

http://blogs.microsoft.co.il/applisec/2012/05/14/blob-parallel-upload-and-download/