【初心者でも試せる】Amazon lexのサンプルチャットボットに触ってみた

#「Amazon lex」とは？

まだ自然言語処理も機械学習も習得してないけど、チャットボットアプリ作ってみたいなぁなんて呟いてたら
Amazonに実現できそうなサービス、ありました！

以下Amazon Lexの概要から引用
>音声やテキストを使用して、アプリに対話型インターフェイスを構築するサービス
音声のテキスト変換には自動音声認識 (ASR)、テキストの認識には自然言語理解 (NLU) という
高度な深層学習機能が使用でき、リアルな会話を実現するアプリを開発できます。
Amazon Alexa に使われている深層学習技術と同じ技術を利用でき、自然言語での高度な対話ボット (チャットボット) を短時間で簡単に構築できます。

どちらかというと「音声対話アプリケーションをつくる」という点に強みがあるそう。

###■使いやすい
- 数分でオリジナルのチャットボットを作成
- 会話型インターフェイスを、アプリケーションに組み込むために使いやすいコンソール
- いくつかのフレーズの例を提供するだけで、 音声やテキストを使用して対話できる優れた自然言語モデルを構築し、質問したり、答えたりする
- 深層学習や機械学習の前提知識はなくてOK

###■AWSと統合できる
- AWS Lambda、AWS MobileHub、および Amazon CloudWatch との組み込み統合を提供
- Amazon Cognito や Amazon DynamoDB など AWS プラットフォームの他の多くのサービスと簡単に統合できる
- AWS プラットフォームのセキュリティ、モニタリング、ユーザー認証、ビジネスロジック、ストレージ、モバイルアプリケーション開発を活用できる

###■一般的なユースケース


**情報ボット** – 質問に回答する、顧客サポート用の自動化されたボットを構築する
**アプリケーション用ボット** – ピザの注文ボットまたは旅行予約ボットを構築する
**企業の生産性ボット** – 企業のデータに接続するカスタムボットを構築する
**デバイス制御ボット** – 接続済みの機器に、Amazon Lex を使って制御コマンドを発行

#チャットボットでレンタカーの予約をしてみよう

まずAmazon lexのトップページから**「Book trip」**を選択。Bot Nameは好きな名前で。
![2019-12-06_10h52_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/de919f1a-c605-b7be-1fae-f3ab56d2a325.png)

ページ下部にテキスト、音声入力のセンチメント分析をする「Sentiment analysis」の選択がありますが、今回は使わないでシンプルに試します。
IAMロールは自動で作られるようです。 

COPPAは、13歳未満の子供のプライバシーを守る法律のことなので一応成人の筆者はNoを選択して
右下の**「Create」**ボタンを押して進んで行きます。
![2019-12-06_10h54_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/c45e64d7-66f6-4c6d-ea88-600b8c940bb1.png)

チャットボットの中身の編集画面が出てくるのでサンプルを試すだけであれば**「Build」**をクリックして
![2019-12-06_14h28_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/c98ac19b-3563-56fb-cda3-97af0df74801.png)

![2019-12-06_14h42_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/b05ef425-8efb-6afe-ed10-6e4631d5b3ee.png)

数秒待てばbotが作成されるのでこのまま使うことができます。

「Sample utterances」に予め用意されている、和訳すると「車を予約したい」を投げれば問題なくbotが答えてくれます。

![2019-12-06_11h03_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/c74174a2-cb3c-a51b-e5b2-e913374820db.png)

上にある入力項目に要望の言葉を＋ボタンを押して追加することができるようです。
試しに日本語で追加してみました。
![2019-12-06_14h41_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/563fc87f-58c3-261d-7857-3ddcf24d6ede.png)

では右にあるbotにレンタカーの予約をお願いしてみます。
![2019-12-06_15h02_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/0e01873f-74e8-0811-d51a-3926ed1fee1d.png)

ちゃんと返ってきましたね。「どこで車をレンタルしますか？」と聞かれています。
サンプルの５つのスロットの中の「PickUpCity（都市の選択）」に当たります。

※スロット（Amazon概要から）
>インテントを実現するためにはユーザーからの情報が必要。この情報は "スロット" に取得されます。例えば、予約のインテントに対しては名前と時間を定義します。

![2019-12-06_15h57_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/b47ed24f-d292-dafc-85e2-2ea51c05c878.png)

質問に答えると「何日からレンタルを開始しますか？」「何歳の方が運転されますか？」とサクサク次のスロットの質問が返ってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/ab3521a8-6924-b296-ce81-ce8cc468bbfe.png)

このようにして５つのスロットのやりとりを手軽に試すことができました！

###日本語で返答させてみる
promptの応答もSlot typeに合わせて好きな言葉に編集できるみたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/c9712dd5-32c5-ed4b-0342-2f2b979039b4.png)
![2019-12-11_17h56_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543340/b761d5a4-a1d9-a556-b207-7de2e679e892.png)


###■料金
- 最初の 1 年間は、1 か月あたり最大で 10,000 回のテキストリクエストと 5,000 回の音声リクエストが無料枠
- 無料枠を超えると使用した分のみ料金が発生
- ボットにより処理されたテキストリクエスト、または音声リクエストの数に基づいて課金される
- 音声リクエストは 1 回あたりの料金は 0.004 USD、テキストリクエスト 1 回あたりの料金は 0.00075 USD 
- 使用量は「処理されたリクエスト」単位として測定され、その値を月末に合計してその月の請求額が計算される

#終わりに
サンプルでは必要なかったのですがちゃんとbotを作るときにはLambda関数も書く必要があるようです。
まだ日本語には対応していませんが、AWSの新しいサービスのリリースはとても早いので、東京リージョンで使えるようになるのもそう遠くはないはず。

SDK(Java、JavaScript、Python、CLI、NET、Ruby on Rails、PHP、Go、CPP) を使用すれば、iOS および Android などのモバイル向けの Amazon Lex ボットを開発できます。
AWS Mobile Hub を使用すれば、モバイルプラットフォーム用ボットの構築、テスト、およびモニタリングができ、Amazon Lex ボットをテンプレートから自動的に構築できます。
ぜひお試しください。

#公式サイトリンクはこちら
[Amazon Lex]
(https://aws.amazon.com/jp/lex/?nc=sn&loc=0)
[Amazon Lex よくある質問]
(https://aws.amazon.com/jp/lex/faqs/?nc=sn&loc=6)