[アップデート]Amazon Lexは、Bedrock の Claudeを利用することで、ヒアリング性能が大幅に向上しました #AWSreInvent
はじめに
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 V2
かClaude 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泊」と伝えると、エラーにならずに、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であれば、利用できますので、早く東京リージョンでも利用できるとよいですね。