Alexaに聞いたらDatalakeからKPIを抽出して答えてくれますよというWorkshop受講してきた

re:Invent 2018、今日は私の日程の最終日でした、明日は帰りの飛行機早いので、このブログ書いたら寝ようと思って書いています。

ちょうど今、ChatBotもDatalakeも別々のプロジェクトで手がけてますが、まさかそれが合わさったセッションがあるとは思いませんでした。しかもChatBot部分はAlexaなので、音声認識です。

当然ワークショップ両方の要素とも基礎的な部分しか使っていなくて、やっていることは、そんなに難しくないのですが、なかなか面白かったのでご紹介。

セッション情報

セッション情報の引用です。

セッション名

SRV240-R1 - [REPEAT 1] Voice-Powered Serverless Analytics

概要

つまりは、Alexaに聞いたらDatalakeからKPIを抽出して答えてくれますよ。というセッションでした。

As a business manager, imagine asking Alexa within a skill that was specifically built for your organization for key insights into your business, such as “Who is our largest customer in Northern California?” or “How has our sales volume grown between Q1 and Q2 in our Asian markets?” In this workshop, you build an Alexa skill that queries metrics from a data lake that you define. The goal is for you to understand how to uncover key performance indicators (KPIs) from a dataset, build and automate queries with AWS Lambda, and access them via Alexa voice-enabled devices. Startups can make available voice-powered analytics to query at any time, and enterprises can deliver these types of solutions to stakeholders so they can have easy access to the business KPIs that are top of mind.

手順やら資料やら

こちらのレポジトリに公開されています。

github.com

中でもre:Inventで使われたのはこちらのディレクトリのものです。

voice-powered-analytics/reinvent2018 at master · awslabs/voice-powered-analytics · GitHub

以下のようなGIF動画などを織り交ぜながら、かなり詳しく解説されています。簡単なPythonのコードも出てきますが手順上はコピペするだけなので開発できない人でも、設定可能だと思います。

https://github.com/awslabs/voice-powered-analytics/raw/master/media/images/Alexa_lab_lambda-create-function.gif

ワークショップ内容を簡単に説明

上のRepositoryから引用しながら簡単にワークショップで作る仕組みの説明していきます。

処理の概要

機能の全体像です。(ワークショップの部屋の照明のせいかキレイに撮れずです)

f:id:yomon8:20181130131935j:plain

  • 真ん中にS3があります。これがDatalake。
  • DatalakeへのIngestion側
    • CloudWatch Eventで一定時間ごとにLambda起動
    • LambdaはTwitterからハッシュタグなどを通してツイートを抽出
    • 抽出されたツイートはKinesis Firehoseを通してS3(Datalake)に格納
  • Analysis側(Alexa)
    • CloudWatch Eventで一定時間ごとにLambda起動
    • LambdaはAthenaを実行してS3のデータを抽出
    • 抽出されたKPI(関連ツイート数)はDynamoDBに格納
    • Alexaから呼ばれたLambdaはDyanamoDBからKPIを取得し回答

Datalakeの中身を用意する

f:id:yomon8:20181130134553p:plain

この部分。今回はTwitterから抽出部分、開発者登録など時間かかるので飛ばしてあって、元々S3上に用意されていた、ツイートのデータセットを使いました。

PC(Linux)からなら以下のようなコマンド実行すれば、Twitterの情報が収集されているのがわかると思います。このデータがS3上に蓄積されていると見立てます。

$ aws s3 cp s3://aws-vpa-tweets-euw1/tweets/sample/2017/11/06/04/aws-vpa-tweets-sample.gz - | gzip -d | tail -n 1 | jq
{  
  "id": 1047277515281064000,  
  "text": "I am spending an insane amount of time trying to find which subnets I can launch my @awscloud Directory Connector i  https://t.co/v7cR5xhzcW", 
  "created": "2018-10-03 00:09:51",
  "screen_name": "mda590",
  "screen_name_followers_count": 356,
  "place": "none",  "country": "none",
  "retweet_count": 0,
  "favorite_count": 0
}

KPIをAthenaで抽出

f:id:yomon8:20181130134802p:plain

KPI(といってもツイート数)をAthenaを使って抽出してみます。

f:id:yomon8:20181130135001p:plain

これが今回の見立てKPIの数値です。 f:id:yomon8:20181130135118p:plain

定期実行のLambdaからAthenaを実行

Lambdaを定期実行して上のAthenaのクエリを実行します。

Athnaからデータを取得しているので、Lambdaの実行結果も同じ件数になっています。 f:id:yomon8:20181130135211p:plain

この際にLabmdaの処理の一部としてDynamoDBに同様の数値を最新KPIとして格納します。 f:id:yomon8:20181130135904p:plain

AlexaからKPIを呼び出し

Alexsaスキルに紐付いたLambdaが実行されてDynamoDBからKPIを取得するフローです。 f:id:yomon8:20181130140011p:plain

実際に呼び出しているところです。本当はマイクボタンクリックしながらPCに話しかければ音声もいけるのですが、下手な発音聞かれるのが嫌なので、文字入力でAlexaをテストしています。 ※上の画像でAthenaやLambdaで取得していた数値と違うのは、動画取るタイミングと数時間の誤差があったからです

youtu.be

最後に

Datalakeやチャットボット、音声認識と込み入った複数の事柄を、極限までにシンプルに圧縮した内容でした。一つのアイデアとして面白いと思いました。

最後の最後の時間にMGMという一番遠いホテルで開かれたワークショップでしたが参加して良かったです。