Amazon Lex Automated Chatbot Designerをためしてみた

2022.01.02

いわさです。

re:Invent 2021でAmazon Lex Automated Chatbot Designerが発表されました。
現在プレビューですが、Lexがサポートされている全リージョンで利用可能です。
ただし、本日時点では英語(US)のみ対応しています。

先日Lexを触ったので、ついでに試してみました。

先にまとめ

  • 会話のトランスクリプトファイルを分析してLexのボットの雛形を作成してくれる機能
  • メインターゲットとしてはおそらくAmazon Connectで、Contact Lens for Amazon Connectが出力したトランスクリプトファイルのフォーマットに対応しており、そのまま取り込むことが出来る
  • ボットのすべてを自動で作成してくれるわけではなく、インテントとスロットの抽出を行ってくれる。(スロットを取得するための会話やプロンプトは用意する必要がある。)
  • Connectに蓄えられたビッグデータから、「インテント抽出されたけど、確かにこの部分ボット化したら良さそう」なんて気づきを得ることが出来そう

使い方

流れとしては以下です。

  • 規格に沿ったトランスクリプトファイルを用意してS3へアップロード
  • Lexの言語追加(あるいは新規ボット作成)時にStart with transcriptsから作成
  • 分析終わるのを待つ

ファイルを指定するだけであとは待つだけで良いです。
ただ、私はConnectのトランスクリプトを用意できず、今回はファイルを自前で用意したのでそこが少し大変でした。

規格に沿ったトランスクリプトファイルを用意してS3へアップロード

Input transcript format - Amazon Lex

ファイルは以下の条件があります。

  • 上記形式のJSON形式であること(単一ファイルでも複数ファイルでも良い。ファイル制限なし)
  • 最低1000件の会話(ターン)が含まれていること
  • ファイル名が会話の一意な識別子で始まり年月日が含まれていること

冒頭触れたようにContact Lens for Amazon Connectが出力したトランスクリプトファイルがそのまま利用出来ます。
なので、Contact Lensでテキスト書き起こししている場合はそのまま対象S3バケットを指定するのみで利用可能です。

お花のやつを参考に会話を用意し、それを100ファイル複製しました。

CON001_2021-12-30.json

{
    "Participants": [
        {
            "ParticipantId": "C001",
            "ParticipantRole": "CUSTOMER"
        },
        {
            "ParticipantId": "A001",
            "ParticipantRole": "AGENT"
        }
    ],
    "Version": "1.1.0",
    "ContentMetadata": {
        "Output": "Raw"
    },
    "CustomerMetadata": {
        "ContactId": "CON001"
    },
    "Transcript": [
        {
            "Id": "101",
            "ParticipantId": "C001",
            "Content": "I would like to pick up flowers"
        },
        {
            "Id": "102",
            "ParticipantId": "A001",
            "Content": "What type of flowers would you like to order?"
        },
        {
            "Id": "103",
            "ParticipantId": "C001",
            "Content": "roses"
        },
        {
            "Id": "104",
            "ParticipantId": "A001",
            "Content": "What day do you want the roses to be picked up?"
        },
        {
            "Id": "105",
            "ParticipantId": "C001",
            "Content": "tommorow"
        },
        {
            "Id": "106",
            "ParticipantId": "A001",
            "Content": "At what time do you want the roses to be picked up?"
        },
        {
            "Id": "107",
            "ParticipantId": "C001",
            "Content": "pm"
        },
        {
            "Id": "108",
            "ParticipantId": "A001",
            "Content": "Okay, your roses will be ready for pickup by PM on 2022-01-01. Does this sound okay?"
        },
        {
            "Id": "109",
            "ParticipantId": "C001",
            "Content": "okay"
        },
        {
            "Id": "110",
            "ParticipantId": "A001",
            "Content": "bye"
        }
    ]
}

サンプルファイルと複製スクリプトを一応以下に置いておきます。
Tak1wa/aws-lex-transcript-sample

任意のS3バケットへアップロードしておきましょう。
本機能はS3バケットからのみ取り込みが可能です。

Lexの言語追加(あるいは新規ボット作成)時にStart with transcriptsから作成

ボットの新規作成、あるいはボットへの言語の追加時にStart with transcriptsが選択出来ます。
こちらを選択し、トランスクリプトファイルの指定を行います。

こちらを選択すると、言語は自動的に英語(US)のみ選択可能になります。
日本語(JP)対応が待ち遠しいですね。

デフォルトだとバケット内のパスがデフォルト指定されておりよく確認せずこのまま分析を進めると、There isn't a valid transcript file in the specified S3 bucketのエラーが発生します。今回はバケットのルートに配置したのでこのオプションは空にしました。

分析が終わるのを待つ

取り込み開始したら分析が終わるのを待つだけです。

今回使った、シンプルなやり取り10ターンx100ファイルで15分程度分析完了まで時間がかかりました。
このあたりがおそらく最低時間なのかなという個人的な感覚ですが、ドキュメントではトランスクリプトの量と会話の複雑さによって変化するとの記載がありました。
通常は15,000行で30分ほどで分析されるとのこと。

Importing conversation transcripts - Amazon Lex

分析されたトランスクリプトからインテントとスロットタイプが抽出されますのでボットへ追加して完了です。
今回は同じ会話しかしてないのでスロットタイプの値はrosesしかないですね。

作成されたボット

インテントの発話やスロットを確認してみましょう。

発話については、同じ内容のトランスクリプトで作成したので1パターンのみですね。

スロットは期待どおり作成されています。タイプをちゃんと判定してくれてるのすごいですね。
メッセージが固定で設定されてるような内容になっているのと、スロットの順序がバラバラになっていました。
よく見ると確認プロンプトも設定されていないですね。

ここで気づいたのですが、このAutomated Chatbot Designerはボットのインテントとスロットを抽出してくれる機能であって、それを使ってボットがどのようにユーザーと対話するか、スロットの値をユーザーからどう引き出すかについては通常の開発フローと同様に設計する必要があります。

解析直後のボットで実行

試しに使ってみましょう。

この時点では何もスロットの値を取得せずにインテントが履行されますね。

調整

ひとまず必須スロットの設定と順序の変更だけしてみます。

今度はそれっぽい対話フローになりました。

後は各スロット確認時のメッセージや確認プロンプトを定義してやることでサンプル相当のものが完成しそうですね。
あと、カスタムスロットタイプはトランスクリプトから抽出された実績値のみ含まれているので、許容パターンに不足がある場合は手動で追加することも忘れないようにしましょう。今回のトランスクリプトから生成したボットでいうと、バラしか注文できない状態です。

さいごに

本日は、re:Invent 2021で発表されたプレビュー機能のAmazon Lex Automated Chatbot Designerを試してみました。

実際に使ってみるとやってくれること、やってくれないことが明確になって良いですね。
とはいえ大量の会話データからボット化できるものを抽出するための業務分析は中々大変なので、本機能を使ってインテント候補を抽出して叩き台として利用するのはとても有効なアプローチだと思います。

日本語対応が楽しみですね。