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.
手順やら資料やら
こちらのレポジトリに公開されています。
中でもre:Inventで使われたのはこちらのディレクトリのものです。
voice-powered-analytics/reinvent2018 at master · awslabs/voice-powered-analytics · GitHub
以下のようなGIF動画などを織り交ぜながら、かなり詳しく解説されています。簡単なPythonのコードも出てきますが手順上はコピペするだけなので開発できない人でも、設定可能だと思います。
ワークショップ内容を簡単に説明
上のRepositoryから引用しながら簡単にワークショップで作る仕組みの説明していきます。
処理の概要
機能の全体像です。(ワークショップの部屋の照明のせいかキレイに撮れずです)
- 真ん中にS3があります。これがDatalake。
- DatalakeへのIngestion側
- Analysis側(Alexa)
- CloudWatch Eventで一定時間ごとにLambda起動
- LambdaはAthenaを実行してS3のデータを抽出
- 抽出されたKPI(関連ツイート数)はDynamoDBに格納
- Alexaから呼ばれたLambdaはDyanamoDBからKPIを取得し回答
Datalakeの中身を用意する
この部分。今回は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で抽出
KPI(といってもツイート数)をAthenaを使って抽出してみます。
これが今回の見立てKPIの数値です。
定期実行のLambdaからAthenaを実行
Lambdaを定期実行して上のAthenaのクエリを実行します。
Athnaからデータを取得しているので、Lambdaの実行結果も同じ件数になっています。
この際にLabmdaの処理の一部としてDynamoDBに同様の数値を最新KPIとして格納します。
AlexaからKPIを呼び出し
Alexsaスキルに紐付いたLambdaが実行されてDynamoDBからKPIを取得するフローです。
実際に呼び出しているところです。本当はマイクボタンクリックしながらPCに話しかければ音声もいけるのですが、下手な発音聞かれるのが嫌なので、文字入力でAlexaをテストしています。 ※上の画像でAthenaやLambdaで取得していた数値と違うのは、動画取るタイミングと数時間の誤差があったからです
最後に
Datalakeやチャットボット、音声認識と込み入った複数の事柄を、極限までにシンプルに圧縮した内容でした。一つのアイデアとして面白いと思いました。
最後の最後の時間にMGMという一番遠いホテルで開かれたワークショップでしたが参加して良かったです。