[アップデート]Amazon Lexは、Bedrock の Claudeを利用することで、ヒアリング性能が大幅に向上しました #AWSreInvent

2023.11.30

はじめに

Amazon Lexは、Amazon Bedrock の Claude を利用することで、ヒアリング性能(スロットタイプの精度)が大幅に向上しました

精度の向上を説明する前に、従来のLexのスロットタイプの課題について説明します。

従来の課題

Lexインテントにスロットを追加する時、スロットタイプを選択します。 スロットタイプには、あらかじめ提供されている組み込みスロットタイプがあり、日付に対応するAMAZON.Date、数に対応するAMAZON.Numberなどがあります。

例えば、AMAZON.Dateを利用し、「12月4日」と入力すると日付を認識し、スロットには「2023-12-04」が入ります。

具体的な日付だけでなく、「明日」と入力すると、スロットには次の日である「2023-11-30」が入ります。

ただし、日付以外の言葉である「明日です」と入力すると、「です」が入ることで、スロットには日付と認識されずエラーとなります。

AMAZON.Dateの場合、日付以外の言葉が入るとエラーになりますが、一部例外を除いて、他の組み込みスロットタイプも、不要な文字が入ると認識できずエラーになります。

「です」を明示的に除外する方法はありますが、「になります」「でした」など他の言い回しをされると、同じくエラーになります。

従来の対応

それでは、どのように対応していたかというと、私の場合、自由形式の入力を受け付けるスロットタイプのAMAZON.FreeFormInputとAWS Lambda、生成AI(BedrockのClaudeやChatGPT)を組み合わせて対応していました。

AMAZON.FreeFormInputを用いて、「明日です」をスロット内に入れた後、「明日です」という言葉から、日付の抽出をLambda(+生成IA)で処理します。

下記の記事で、Amazon ConnectとLexを組み合わせた電話の無人対応で、同様のことを行っているので、ご参考ください。(例えば、発話から、生年月日を抽出しています。)

アップデートによって

今回のアップデートにより、AWS側で生成AIを利用することで、スロットの精度が向上し、「明日です」など日付以外の不要な言葉が入った場合でも認識してくれるようになりました。

それによって、先程紹介した日付を抽出するLambdaの処理が不要になり、ノーコードで開発できる点がうれしいですね。

ドキュメントには、Amazon BedrockのClaudeモデルと明記があるため、現時点は、Claudeしか選べません。

また、今回のアップデートで生成AIを利用したスロットの精度向上は、組み込みスロットタイプの内、下記のみが対象です。

  • AMAZON.Alphanumeric (正規表現のサポートなし)
  • AMAZON.City
  • AMAZON.Country
  • AMAZON.Date
  • AMAZON.Number
  • AMAZON.PhoneNumber
  • AMAZON.Confirmation

AMAZON.Timeもよく使われるのですが、サポートしていないようです。残念。

現時点では米国東部 (バージニア北部) および米国西部 (オレゴン) 地域の英語のみの対応です。

アップデート内容を試してみます。

事前準備

  • Amazon BedrockでClaudeが利用できるように設定します。

Lexボットの設定

英語 (US)でボットを作成しておきます。既存のボットでも構いません。

英語 (US)には、Generative AI Configurationsという生成AI設定が新たに追加されていますので、クリックします。

Assisted slot resolutionを有効にします。モデルはClaude V2Claude Instantが選択できます。Claude V2のほうが良い結果を得ることができるとドキュメントに記載があるため、Claude V2を選択しました。

インテントの作成

インテント名は、BookTripとし、スロットは、下記の通りに設定します。

  • 名前:numberOfNightsStayed
  • プロンプト:AMAZON.Number
  • スロットタイプ:How many nights did you stay for the trip?

スロットの[詳細オプション]を選択し、今回のアップデート内容であるEnable assisted slot resolution - GenAIにチェックをつけます。

確認プロンプトでは、{numberOfNightsStayed}を入れます。スロットで取得した値のみが出力されます。

これで設定は完了です。

試してみた

AMAZON.Number

何泊したかと聞かれ、「丸一週間の7泊」と伝えると、エラーにならずに、のみが出力されました。

他にも「明後日まで滞在します」という数字ではなく「明後日」という伝え方でも2日と認識してくれます。(未来形で答えるのはおかしいですが)

AMAZON.Date

スロットタイプをAMAZON.Dateにして、再度試してみます。

予約日を聞かれ、来月の1日と伝えると、2023-12-01と認識してくれました。

利用しない場合

Enable assisted slot resolution - GenAIのチェックを外してみます。

A whole week, 7 nights.だと、認識してくれず、7のみを伝えると認識してくれます。

最後に

今回のアップデートにより、Lexのスロットタイプの精度が向上しました。

現時点では米国東部 (バージニア北部) および米国西部 (オレゴン) 地域の英語のみの対応です。

Amazon BedrockのClaude V2は、東京リージョンでは利用できませんが、Claude Instantであれば、利用できますので、早く東京リージョンでも利用できるとよいですね。

参考