(レポート) BDT302: Amazon Machine Learningを使ったリアルワールドスマートアプリケーション #reinvent

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

最近は仕事でAmazon Machine Learningを触っているので、Amazon MLのセッションスライドを読んでみました。

概要

Amazon MLの利用例として、Twitter上で@awscloudにmentionが届いた際にAWSのカスタマーサービス担当者が対応する必要があるかどうかを判断するアプリケーションを作ってみるという内容でした。

bdt302-realworld-smart-applications-with-amazon-machine-learning_1

利用しているAWSのサービス

利用しているAWSのサービスは以下の通りです。ソースコードもGitHub上に公開されており、実際に試すことが出来そうです。なにより、GitHub上にサンプルの教師データも用意されているので、Amazon Mechanical Turk!を使った教師データの作成についてはスキップ可能となっています(Mechanical Turkを触ったことがないので安心しました)。

bdt302-realworld-smart-applications-with-amazon-machine-learning_2

モデルの作成

カスタマーサービスがアクションを起こすかどうかを判定するモデルを作ります。そのため、Amazon MLで利用するモデルは二項分類(Yes/No)になります。判定に利用する説明変数はtweetのテキスト本文とメタデータになります。

機械学習ではまず教師データを使ってモデルを作成します。そのため、Twitter APIを使って学習用のデータを取得します。次に、このデータに対して正解データとしてアクションを起こす/起こさないのラベルをつけるためMechanical Turkでタスクを作成します。

学習データができたので、このデータを使ったAmazon MLで二項分類のモデルを作成します。

アプリケーションの作成

bdt302-realworld-smart-applications-with-amazon-machine-learning_3

最終的に@awscloudに対するtweetを読み込んで1件ずつカスタマーサービスが反応すべきか判定し、対応すると判定した場合はSNSに通知するアプリケーションを作成します。

まず、Lambdaから予測APIを呼び出せるようにするためAmazon MLのRealtime Endpointを作成します。次にLambdaを呼び出すためのKinesis streamを作成します。最後にLambda Functionを作成します。

最後に@awscloudのtweetを読み込んでKinesisにputするスクリプトを作成して完成です。このスクリプトを実行すると@awscloudの直近のtweetをKinesisにputするので、実際に判定可能か試すことが出来ます。

まとめ

Amazon MLを使ったアプリケーションの作り方についてイメージがわいたのではないでしょうか。Amazon MLの手前にLambdaを置くというのはありがちなパターンだと思います。

個人的にはMechanical Turkで教師データのラベル付をするというのは話としては知っていたんですが、実際にre:Inventのセッションで使ったのは衝撃でしたw