DMM.comの、一番深くておもしろいトコロ。

Google Cloud Platformを活用したMachine Learningハンズオン

Google Cloud Platformを活用したMachine Learningハンズオン

f:id:ornew:20180903163504j:plain

こんにちは! CTO室、兼AI部の古川です。DMMでは、社内の業務効率や顧客向けサービスの品質改善のためにMachine Learning(ML)を活用しており、そこでAI部は、専門性の高いML技術の研究開発や、社内のML活用推進活動をしています。

しかし、徐々に導入を進めてはいるものの、そもそもどのような課題をMLで解決できるのかについて、ビジネスサイドでもエンジニアサイドでも理解が浸透しているとは言えません。そこで、先日8月24日にGoogle CloudのData Analytics Technical Specialistである下田倫大さんをお招きし、Google Cloud Platform(GCP)を活用したML導入を検討するハンズオンを開催するに至りました。

Google Cloud AIの提供するツール

MLを活用したAIの活用事例は年々増加しています。その一方で、MLモデルを1から作ることのできる専門家の数は非常に少ないと言われています。下田さんによれば、データサイエンティストと呼ばれる技術者は2100万人のエンジニアにつき100万人以下であり、その中でもディープラーニングについて詳しい技術者はさらに数が少ないそうです。ビジネスの現場では当然AIを活用したくてもMLの専門家が足りない、いないというケースが非常に多くなるというわけです。

そこで、Google Cloud AIでは、「あらゆる企業や開発者がAIを迅速・便利に活用できるようにする」として、「AIの民主化」を掲げ、そのための数多くのツールをGCPで提供しています。Google Cloud AIで提供されるツールは、「専門性」によって異なるソリューションを有しており、大きく3段階に分けられます。

f:id:ornew:20180903164708p:plain
Google Cloud AI のプロダクトマップ (当日資料より)

ML Building Blocks

一つは、事前にMLモデルが構築されたAPIサービス群です。具体的には、ML Building Blocksと呼ばれる以下のAPIが提供されています:

  • Cloud Vision API: 画像のタグ付けや物体認識など
  • Cloud Speech API: 音声の文字変換、不適切な用語のフィルタリングなど
  • Cloud Natural Language API: テキストからの情報抽出や感情分析、分類など
  • Cloud Translation API: 多言語に対応した翻訳
  • Cloud Video Intelligence API: 動画のラベル検出やシーン検索など

これらは、Webを使ったAPIの呼び出しが実装できればすぐに利用できます。MLの知識を必要としないため、一般のエンジニアが簡単に利用できるサービスです。

他社による実際の導入事例の紹介では、これらのAPIを利用するだけでも、アイディア次第で様々な業務効率化が可能であることがわかりました。

しかし、汎用性が高い一方で、提供されていない機能は当然使えません。独自の機能を持ったモデルや、独自のドメインに特化したモデルが欲しい場合は、他のツールを検討する必要があります。

Cloud Machine Learning Engine

事前に用意されたAPIは非常に便利ですが、実際にはその機能では足りないこともあります。例えば、Vision APIでは、車の画像から「車」というタグ情報を検出することはできますが、「車種」や「型番」などの情報を得ることはできません。あるいは、車の画像を入力すると「色違いの車の画像」を生成する、といったこともできません。

  • 独自のドメイン
    • 画像の車に関する詳細なドメイン情報を識別したい、など
  • 独自のタスク
    • 画像の車の色を変える機能が欲しい、など

これらは、汎用的な機能を持ったML Building Blocksでは解決できないもので、独自のドメインまたは独自のタスクを解決する必要がある専門性の高い機能です。この場合、独自のMLモデルを構築する必要があります。GCPでは、モデル構築を支援するためのプラットフォームであるCloud Machine Learning Engine(ML Engine)が提供されています。ML Engineを用いることで、独自の機能を持ったモデルを構築し、APIとしてデプロイすることができるわけです。

あらゆるモデルを構築できる柔軟性がありますが、扱うにはMLに関する専門的な知識が必要となります。しかし、専門家が少ないのですから、どうにかして一般のエンジニアでもモデルを作れることが望ましいですよね。そこで、GCPではAutoMLというソリューションを提供しています。

Cloud AutoML

Cloud AutoMLは、MLについての専門的な知識を必要とせずとも、独自のドメインデータでカスタムされたモデルを作れるようにするためのツールです。

学習用にラベル付けされたデータを用意し、タスクを選択すると、自動でモデルを学習することができます。例えば、車の画像と車種や型番のラベルデータさえあれば、車の画像から車種や型番を検出するオリジナルのモデルを作ることが可能です。

プログラミングを必要としないため、非エンジニアでも簡単に利用することができます。ML Engineのように独自のタスクを実装するほどの柔軟性はありませんが、サポートされるタスクは徐々に増えており、本記事の執筆現在では以下の3つがサポートされています:

  • AutoML Natural Language:
  • AutoML Translation
  • AutoML Vision

ビジネス活用に向けた検討ロジック

GCPではML活用に柔軟に対応するため、必要なツールを段階的なレイヤーで提供していることがわかりました。では、これらを利用して実際にビジネスでAIを活用する場合、どれをどうやって使うか、どのように検討していけば良いでしょうか。一般的な答えとしては、専門的な方法ほどコストがかかるわけですから、「簡単な方法」で解決できる課題であればそれを利用するほうが良いでしょう。まずは検討に必要な準備を行い、簡単な方法から実現の可能性を検討するアプローチとして、下田さんからは以下のようなロジックを提案していただきました。

①MLによって解決したいタスクを明確にする

  • 解決したいタスクによって、実現可能性や利用するツールは変わります
  • まずは必要なタスクを明確にするためにケース検討をしましょう

②利用するデータを集める

  • どのアプローチであっても、多くの場合はデータを必要とします
  • ML Building Blocksであっても、評価をするためにデータが必要です
  • まずは、必要なデータを集めましょう

③ML Building Blocksの検討

  • まず、既存のAPIで実現可能かどうかを検討しましょう
  • 車輪の再発明はコストに見合いません
  • 機能や性能が要件を満たせば、プロトタイピングしましょう

④AutoMLの検討

  • もしML Building Blocksが要件を満たさなければ、AutoMLを検討しましょう
  • 要件を満たさなかった理由がドメインに起因するものであれば、AutoMLで解決できるかもしれません
  • 機能や性能が要件を満たせば、プロトタイピングしましょう

⑤ML Engineの検討

  • もしAutoMLが要件を満たせなければ、ML Engineを検討しましょう
  • ここからは、専門的なMLの開発になります

ハンズオン: 本人確認書類のチェック自動化の検討

実際にML活用を検討するための"検討ステップ"と、ML Building Blockの体験のために擬似的な課題を設定し、ハンズオンで解決しました。

タスクの明確化

解決したい擬似的なタスクを『ユーザのサービス登録時の本人確認チェックを人力で行っているので、自動化したい』と設定します。自動化により、ユーザの本人確認を高速化し、チェックに要する人件費の削減を狙っているとします。

データの確認

本人確認に使うデータは、以下の2つとします。

  • 本人確認書類として提出された写真画像(免許証、学生証など)
  • 申請フォームの入力内容(生年月日、名前など)

ML Building Blocksの検討

本人確認のフローは、下記2点の確認であるとします。

  • 画像の内容とフォーム内容が一致するか
  • 画像に顔が写っているか

自動化したいフローの中で、MLを活用することができそうな機能を洗い出します。今回の場合、以下の2つが考えられました。

  • 画像内の文字検出(OCR)
  • 画像内の顔検出

ML Building Blocksで実現可能であるかを検討します。Cloud Vision APIにはテキスト検出と顔検出のAPIが用意されているので、それを活用すれば必要な機能を実現できそうです。

検証してみる

実装には、Google Cloud Client Library for Pythonを使い、Pythonで書きます。

用意した免許証の画像のパスと、フォームデータの代わりとして姓、名、住所を変数で定義します。

IMAGE_FILE = './data/fake_driver_licence.jpg'
LAST_NAME = '山田'
FIRST_NAME = '太郎'
ADDRESS = '東京戸港区六本木3-2-1' # 「戸」は「都」の入力ミスとします

パッケージを読み込みます。

from google.cloud import vision

画像ファイルを読み込み、image変数に代入します。

with open(IMAGE_FILE, 'rb') as f:
  image = vision.types.Image(content=f.read())

Cloud Vision APIを使い、画像から顔を検出します。

faces = vision.ImageAnnotatorClient()\
              .face_detection(image=image)\
              .face_annotations
print('Found {} face'.format(len(faces))

免許証の写真を入力し、Found 1 faceと表示されれば成功です。facesには検出された顔に関する情報(位置など)がリストで格納されています。

次に、テキストの検出を行います。

text = vision.ImageAnnotatorClient()\
             .text_detection(image=image)\
             .text_annotations
print(text[0].description)

免許証の写真を入力すると、以下のような結果が表示されます(内容はダミーです)。

'氏名山田\n本籍 東京都港区六本木3-2-1\n住所 東京都港区六本木3-2-1\n交付平成17年01月21日 99999\n太郎\n|迢和60年8\n3日生\n平成22年09月03日まで有効\n運\n転\n免\n刊第999999999999号許\n証\n中型車は𢃇車(8t)に限る\nの\n条件\n優良\n平成00年00月00日[\n平成17年01月21日\n東京都\nas安委\n員会\n東京都\n'

若干おかしいところがあるものの、おおむね正しく文字が検出されることが実行でわかりました。単純な文字比較で、姓名と住所が含まれているか確認してみます。

# 名字が含まれているか
print(LAST_NAME in text[0].description) # True
# 名前が含まれているか
print(FIRST_NAME in text[0].description) # True
# 住所が含まれているか
print(ADDRESS in text[0].description) # False

フォームの内容の住所(ADDRESS)は、東京都を間違えて東京戸として定義されているため、Falseになりました。

検証結果

実際にCloud Vision APIを使い、免許証の画像入力などを行ってみた結果から、簡単に顔や文字の検出が行えることを確認しました。このハンズオンで設定したタスクについては、Cloud Vision APIで実現できる可能性が高いと言えます。

f:id:ornew:20180903170704j:plain
ハンズオンの様子。ステップ・バイ・ステップでMLを利用するアプリケーションを実装しました。

まとめ

Google Cloudが提供する最新のML系APIの紹介と、ビジネス課題での検討方法を体験しました。各ツールの違いや、ビジネス視点を持った検討手順などが体系的に整理されており、ハンズオン体験を通して動作を理解することで、短い時間ながらもML活用の全体像が俯瞰できたセミナーでした。エンジニアだけでなく、ビジネスサイドの参加者からも、「"MLを活用したいけど、何から始めれば良いのかわからない"という状態から一歩前進できた」という声を得られました。今後もDMMでMLを活用していくための良いきっかけになったと思います。

DMMでは、MLを始めとした様々な技術に関するエンジニアを募集しています! 興味のある方はぜひ下記募集ページをご確認下さい!

dmm-corp.com