Amazon Web Services ブログ

Amazon Lex Conversation ログを使った、ユーザとのやり取りをモニタリングおよび改善

会話のインターフェースを提供する製品のオーナーにとって、それに対応する可視性やテレメトリーなしでユーザーエクスペリエンスを解釈し向上しようとするのは、目隠ししながら自動車を運転するのと同じだと言えるでしょう。ご使用になっているボットとユーザーの間のやり取りを理解することは重要です。やり取りの履歴に基づいて継続的な改善を行うことができます。こういった実用的な洞察は、ボットが行った会話をモニタリングすることで取得することが可能です。ユーザー入力のキャプチャーであれば、アプリケーションにカスタムロジックを書き加えることで実現できます。しかし、追加コードと関連するインフラストラクチャの構築や管理といった作業は、扱いが難しく作業時間も消費するものです。さらに、このカスタムロジックが、エンドユーザー側のレイテンシーを増加しないようにする必要もあります。

今回、Amazon Lex 用の Conversation logs の発表により、ボットとユーザー間のやり取りをネイティブに保存できるようになったことを、とても喜ばしく思います。これにより、テキスト入力は Amazon CloudWatch Logs に、音声入力 Amazon S3 にログ記録するよう定義できます。このログには、ユーザーからの入力とボットによる応答に加え、適用したインテントや取りこぼした発言に関する情報も記述されます。スロットの値としてキャプチャーされた機密データを保護するためには、スロットを難読化し、ログに対しその値をマスクすることもできます。

この会話ログは、定義済みのインテントにマップされていない発言を追跡するために利用できます。こういった取りこぼした発言により、ボットの設計を改善できるようになります。今回から、セッション全体の会話についてのトランスクリプションが利用可能になりました。会話の流れをより良く分析し、そのデザインを改善しながら、ユーザーエンゲージメントの向上をはかることができます。

今回の記事では、会話ログの有効化、機密を含むスロットの難読化、ボットに関する先進的なモニタリング機能のセットアップなどの方法を解説します。

ボットの構築

この記事では、自動車ローン向けボットをモデリングするために、次のような会話を使用します。

ユーザー: 自動車ローンの未払い残高を確認したいのですが。
エージェント: 承知しました、お客様のアカウント番号をお教えいただけますか?
ユーザー: 12345678 です。
エージェント: 確認のため、SSN の最後の 4 桁をお伝えいただけますか?
ユーザー: 1234 です。
エージェント: ご協力ありがとうございました。アカウント番号 12345678 の自動車ローンには、12,345 USD の残高があります。
ユーザー: どうもありがとう。

次のようなインテントを使い、AutoLoanBot (download) という名の Amazon Lex ボットを構築します。

  • ApplyLoan – 名前や SSN といった必要な情報を聞きだし、リクエストを新たに作成します。
  • PayInstallment – ユーザーのアカウント番号、ユーザーの SSN の最後の 4 桁、支払いに関する情報などをキャプチャーし、毎月の支払額を計算します。
  • CheckBalance – ユーザーからアカウント番号と SSN の最後の 4 桁を聞き出し、未払い残高を伝えます。
  • Fallback – 定義済みインテントでボットが処理できなかったすべての入力をキャプチャーします。

Prod というエイリアスを作成し、そのエイリアスを使うバージョンのボットを公開します。

会話ログの有効化

会話ログは、テキストと音声両方で作成できます。

テキストログ

会話テキストログの定義を行う前に、CloudWatch Logs の中で car-loan-bot-text-logs という新しいロググループを作成します。オプションとして、このテキストログを暗号化することもできます。詳細情報については「AWS KMS を使用した CloudWatch Logs でのログデータの暗号化」をご参照ください。以上に加えて、ロググループ car-loan-bot-text-logs への書き込み許可を付与する、LexCarLoanBotRole という IAM ロールを作成します。

ボットのエイリアスにテキストログをセットアップするには、次の手順を実行します。

  1. Amazon Lex コンソールで、[AutoLoanBot] をクリックします。
  2. [Settings] をクリックします。
  3. [Conversation logs] をクリックします。
  4. Prod に対応する歯車アイコン [Settings] をクリックします。
  5. [Log type] の下で [Text logs] を選択します。
  6. [Log group name] のドロップダウンリストから、[car-loan-bot-text-logs] を選択します。
  7. [IAM role] のドロップダウンリストから、[LexCarLoanBotRole] を選択します。
  8. [Save] をクリックします。

音声ログ

会話音声ログの定義を行う前に、car-loan-bot-audio-logs という S3 バケットを作成します。オプションとして、KMS におけるカスタマー管理の CMK を使用して、音声ログを暗号化することもできます。それには、car-loan-bot-audio-logs-kms-key という新しい KMS キーを作成します。加えて、書き込み許可を S3 バケット car-loan-bot-audio-logs に、アクセス許可を car-loan-bot-audio-logs-kms-key に対しそれぞれ付与する、LexCarLoanBotRole という IAM ロールを作成します。

音声ログ記録を有効化するには、次の手順を実行します。

  1. Amazon Lex コンソールで、[AutoLoanBot] をクリックします。
  2. [Settings] をクリックします。
  3. [Conversation logs] をクリックします。
  4. Prod に対応する歯車アイコン [Settings] をクリックします。
  5. [Log type] で [Audio logs] を選択します。
  6. [S3 bucket] のドロップダウンメニューから、[car-loan-bot-audio-logs] を選択します。
  7. [KMS key] のドロップダウンメニューから、[car-loan-bot-audio-logs-kms-key] を選択します。
  8. [IAM role] のドロップダウンメニューから、[LexCarLoanBotRole] を選択します。
  9. [Save] をクリックします。

エイリアスごとの会話ログは、歯車アイコン [Settings] をクリックすることで、修正や無効化ができます。テキストと音声の両方でログを有効化する場合は、LexCarLoanBotRole に、ロググループ car-loan-bot-text-logs と、S3 バケット car-loan-bot-audio-logs への書き込み許可が必要です。

難読化された機密スロットのマーキング

スロットの値としてキャプチャーされた機密データを保護するためには、スロットを難読化し、ログに対しその値をマスクすることもできます。会話ログに現れる SSN もしくは、SSN の最後の 4 桁をマスクするには、これらを難読化するように、ApplyloanPayInstallmentCheckBalance の中でマークしておきます。次の手順を実行します。

  1. Amazon Lex コンソールで、[AutoLoanBot] をクリックします。
  2. [Intents] の下で [CheckBalance] をクリックします。
  3. スロット [SSNFourDigit] に対応した歯車アイコン [Settings] をクリックします。

[SSNFourDigit settings] というポップアップが表示されます。

  1. [Slot Obfuscation] セクションで [Store as {SSNFourDigit}] をオンにします。
  2. [Save] をクリックします。
  3. [Build] をクリックします。
  4. エイリアス Prod のための [Publish] をクリックします。

これで、ボットがデプロイ可能になりました。

会話ログデータのレビュー

エイリアス Prod 用の会話ログを有効化すると、ユーザーからの入力は、CloudWatch Logs ロググループの中に次のような形式で、SSN のスロットが難読化されながら保存されるようになります。

{
    "messageVersion": "1.0",
    "botName": "AutoLoanBot",
    "botAlias": "Prod",
    "botVersion": "2",
    "inputTranscript": "Yes",
    "botResponse": "Thank you, your application for a car loan of $50000 has been submitted.",
    "intent": "ApplyLoan",
    "slots": {
        "DateOfBirth": "1990-01-01",
        "LoanAmount": "50000",
        "Address": "1234 First Avenue",
        "FirstName": "John",
        "PhoneNumber": "1234567890",
        "LastName": "Doe",
        "SSN": "{SSN}"
    },
    "missedUtterance": false,
    "inputDialogMode": "Speech",
    "requestId": "24fcb5b5-fb84-4fb0-90ad-3e13a3e7bada",
    "s3PathForAudio": "<bucket-name>/aws/lex/AutoLoanBot/Prod/2/5f13cab7-cac2-42ff-a382-3918d21239fa/2019-12-17T18:32:23.435Z-iMfpxOMK/ae3954d6-f999-4668-bf14-0671ab2f10ea.wav"
    "userId": "User4",
    "sessionId": "2019-12-15T02:55:45.746Z-ztLBPmkJ"
}

同様に、s3PathForAudio にある S3 バケットのパスに移動すると、音声ログを確認することもできます。次のスクリーンショットは、S3 バケット内に保存された音声ファイルを表示しています。

取りこぼした発言を活用してボットのパフォーマンスを改善する

会話ログのセットアップと、保存されたユーザー入力の確認が完了したので、これらのログを、会話エクスペリエンスの改善に役立てられるようになりました。会話ログからは、ボットが認識しなかった、ユーザー入力に関する詳細な情報が得られます。これらの、取りこぼされた発言は、ボットをより良くトレーニングするための、有用な洞察となり得ます。また、ボットの新機能に対する優先順位付けにも利用できます。

AutoLoanBot が取りこぼした発言に関するリストは、次の手順を実行することで生成できます。

  1. AWS マネジメントコンソールで [CloudWatch] をクリックします。
  2. [Logs] の下にある [Insights] を選択します。
  3. ドロップダウンリストから [car-loan-bot-text-logs] を選択します
  4. 次のクエリを実行し、Fallback インテントにマップされたすべての発言を抽出します。
    fields inputTranscript 
    | filter (intent == "Fallback")
    

    Fallback がご使用のボットで定義されていない場合、替わりに次のようなコードを使って、missedUtterance フィールドにクエリすることもできます。

    fields inputTranscript 
    | filter (missedUtterance == 1)

会話内容の考察

会話ログでは、そのセッション中に行われた、やり取りの全体を見ることができます。やり取りを考察することで、存在するギャップを発見し、設計に変更を加え、より良いフローをデプロイできます。

Amazon Lex では、1 つのセッションにおける全エントリーログに対し、sessionId という属性を付与します。この sessionId を使うと、単独の会話を詳しく見ることが可能です。

異なるセッションでの会話全体をモニタリングするには、次の手順を実行します。

  1. コンソールで [CloudWatch] をクリックします。
  2. [Logs] の下にある [Insights] を選択します。
  3. ドロップダウンリストから [car-loan-bot-text-logs] を選択します
  4. 一意の sessionId と、会話ごとの役割変更回数に関するリストは、次のクエリを実行して生成します。
    fields sessionId
    | stats count(sessionId) as NumberOfUtterances by sessionId

    次のスクリーンショットに、このクエリの返す結果を示します。複数の sessionId クエリと、そこにログ記録された発言回数が表示されています。

  5. 次のクエリを実行すると、ここにリストアップされた各 sessionId に関する完全な会話内容を表示できます。
    fields inputTranscript, botResponse 
    | filter sessionId == "session id" 
    | sort @timestamp asc

    次のスクリーンショットに、このクエリの返す結果を示します。ここでは、ユーザーとボット、両方の発言内容が表示されています。

まとめ

会話ログを利用すると、ユーザーとのやり取りから有用な洞察をキャプチャできます。また、ボットの性能を強化しユーザーエクスペリエンスを改善するために、それらの洞察を活用できます。また、監査の目的に、こういった会話データを使うことも可能です。今すぐ、会話ログの活用を開始しましょう!


著者について

Anubhav Mishra は AWS のプロダクトマネージャーです。彼は、お客様を理解して製品エクスペリエンスを設計することに時間を惜しまず、ビジネスでの課題に取り組んでいます。

 

 

 

Hammad Mirza は、Amazon AI のソフトウェア開発エンジニアです。彼は、Amazon Lex 向けの分散型スケーラブルシステムの構築と保守のために働いています。余暇においては、友人や家族と充実した時間を過ごしています。

 

 

 

Goutham Venkatesan は、Amazon AI のソフトウェア開発エンジニアです。彼の任務は、大規模な分散型システムを構築することで、Lex でのユーザーエクスペリエンスを強化することです。余暇での彼は、明るい日差しの下、ビーチに繰り出してココナツを味わっています。