Amazon Lexの拡張型組み込みスロットタイプAMAZON. AlphaNumericは、文字数の範囲を指定した英数字を認識できます
はじめに
お問い合わせ番号などの複数の英数字をAmazon Lexで認識させたい場合、拡張型の組み込みスロットタイプAMAZON. AlphaNumericが利用できます。
(正式名称は分かりません。以降、拡張型のAMAZON. AlphaNumeric)
例えば、お問い合わせ番号が「小文字の英字3文字 + 数字3文字」の場合、拡張型のAMAZON. AlphaNumericで設定すると、「gher234」は認識しますが、指定した文字数でない「awsge12」などは、認識せずLex側で聞き返してくれます。
また、文字数は範囲指定も可能で、「小文字の英字3~5文字 + 数字2~3文字」と拡張型のAMAZON. AlphaNumericで設定すると、「awsge12」も正しく認識してくれるようになります。
文字数の範囲を指定することで、間違った値の場合、Lex側で聞き返してくれるメリットがあります。
今回は、拡張型のAMAZON. AlphaNumericの構築方法についてご説明します。
使用用途
拡張型のAMAZON. AlphaNumericを使う用途としては、以下をヒアリングしたいケースが挙げられます
- 複数の英数字を絡めたお問い合わせ番号
- 6桁から12桁の数字が羅列する電話番号
- 7桁の郵便番号
- 車両識別番号
- 運転免許証の番号
また、Lexには会話のログを残すことができますが、後述するスロットの難読化の設定を行うことで、機密情報をマスクしてログを残すことができ、セキュリティを高めることができます。
調査環境の作成
今回、作成したボットとインテントの作成方法を説明します。
ボットの作成
- Lexのコンソール画面から、[ボットの作成]をクリックします。
- [空のボットを作成します]を選択し、ボット名を記載し、下記画像の通りに入力します。
- 日本語を選択し、音声はTakumiを選択し、[完了]をクリックします。
これでボットが作成できました。
拡張型組み込みスロットタイプを作成
文字数の範囲を指定しつつ、英数字の文字列を認識するスロットタイプを作成します。
今回は、「小文字の英字3文字 + 数字3文字」で設定します。
- [スロットタイプの追加]から、[組み込み型を使用]を追加します。
- 組み込みスロットタイプは、
AMAZON. AlphaNumeric
にし、スロットタイプ名を記載します。 - 正規表現を
[a-z]{3}[0-9]{3}
と入力し、スロットタイプを保存します。
正規表現
Lexでは、正規表現で次の文字がサポートされています。
- A~Z
- a~z
- 0~9
例として、以下の正規表現が設定できます。
- 「大文字の英字3文字 + 数字3文字」
[A-Z]{3}[0-9]{3}
- 「大文字の英字3~5文字 + 数字3文字」
[A-Z]{3,4,5}[0-9]{3}
- 「大文字の英字のA~G、Y~Zを3文字 + 数字3文字」
[A-GY-Z]{3}[0-9]{1,3}
- 「JA + 大文字の英字3文字 + 数字3文字」
JA[A-Z]{3}[0-9]{3}
アスタリスク(*)は、使用できないようでした。
インテントの作成
- インテントの[インテントを追加]から[空のインテントを追加]をクリックします。
- インテント名を入力し、サンプル発話に「番号」を追加します。
- [スロットを追加]から、先程作成したスロットタイプ
3_alphabet-3_number
を選択します。プロンプトと名前も記載します。- スロット名を
Inquiry
としました。
- スロット名を
- [Confirmation]をアクティブにし、確認プロンプトに以下を記載します
{Inquiry}、でよろしいでしょうか?
- インテントを保存後、Buildすると、インテントのテストが行えます。
テスト
番号と入力後、例として、「drf276」と入力すると、Lex側で認識してくれました。
ちなみに、「sed12345」「sdr1234」などの指定した文字数でない場合、Lex側で聞き返してくれることも確認できました。
スロットの難読化設定
冒頭でご説明しました、Lexで認識したスロットが機密情報の場合、スロットの難読化を行うことで、Lexの会話のログをマスクできます。
- スロットの[詳細オプション]をクリックし、スロットの難読化を有効にするにチェックをいれます。
- スロットを更新後、Buildします
これで設定完了です。設定したスロットのみマスクされます。
マスク設定前
ログは、CloudWatch Logsに出力されています。
スロット値のdrf276
がログとして確認できますね。
"sessionState": { "sessionAttributes": {}, "originatingRequestId": "a3b47eeb-e787-4b96-bab8-b58d939ff592", "intent": { "name": "Inquiry_number", "state": "InProgress", "confirmationState": "None", "slots": { "Inquiry": { "value": { "originalValue": "drf276", "interpretedValue": "drf276", "resolvedValues": [ "drf276" ] }, "shape": "Scalar" } } }, "dialogAction": { "type": "ConfirmIntent" } }, "interpretations": [ { "intent": { "name": "Inquiry_number", "state": "InProgress", "confirmationState": "None", "slots": { "Inquiry": { "value": { "originalValue": "drf276", "interpretedValue": "drf276", "resolvedValues": [ "drf276" ] }, "shape": "Scalar" } } } },
マスク設定後
スロット値のdrf276
が{Inquiry}
に変換されて、マスクされていることを確認できました。
"sessionState": { "sessionAttributes": {}, "dialogAction": { "type": "ConfirmIntent" }, "originatingRequestId": "0d626042-8cfe-4126-a955-8d000569eba1", "intent": { "name": "Inquiry_number", "state": "InProgress", "confirmationState": "None", "slots": { "Inquiry": { "value": { "originalValue": "{Inquiry}", "interpretedValue": "{Inquiry}", "resolvedValues": [] }, "shape": "Scalar" } } } }, "interpretations": [ { "intent": { "name": "Inquiry_number", "state": "InProgress", "confirmationState": "None", "slots": { "Inquiry": { "value": { "originalValue": "{Inquiry}", "interpretedValue": "{Inquiry}", "resolvedValues": [] }, "shape": "Scalar" } } } },
Connectのコンタクトフロー内では利用できませんでした。
Connectのコンタクトフロー内でLexを連携させて、英数字を聞き取れるか検証しましたが、連携してもうまくいきませんでした。
理由は、英字3文字「DPC」を発話すると、inputTranscript
内は、d. p. c.
が入りますが、Lexで認識されないためです。
数字も同様で、「123」と発話すると、inputTranscript
内は、イチ に サン
が入りますが、Lexで認識されませんでした
原因は、拡張型のAMAZON. AlphaNumericでは、指定した文字列以外の「.」や「イチ に サン」の文字が入っているためだと推測します。
ただし、今回使用した拡張型のAMAZON. AlphaNumericではなく、通常のスロットタイプAMAZON. AlphaNumericだと、「DPC」を発話すると、Lexで認識してくれます。
以下の記事で設定方法を記載していますので、参考になればと思います。
最後に
拡張型のAMAZON. AlphaNumericで、英数字を組み合わせた文字列をLexで認識してくれることが確認できました。
チャットでの問い合わせ等で利用できるかと思いますので、参考になればと思います。