Amazon Connect コンタクトフローでAmazon Lexを利用時、スロットタイプ AMAZON. AlphaNumericは、発話で英数字をどこまで認識してくれるか調査してみた

Amazon Connect(以降Connect)のコンタクトフロー上でAmazon Lex(以降Lex)を利用する場合、スロットタイプ AMAZON.AlphaNumericは、どこまで認識してくれるかブラックボックス化されていますので、調査しました。
2023.04.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

ConnectとLexでコンタクトセンター向けチャットボットを構築する場合、ユーザーから英数字を聞き取る場合は、LexのスロットタイプであるAMAZON.AlphaNumericの利用を検討されるかと思います。

このAMAZON.AlphaNumericでは、英字(アルファベット)と数字をどこまで認識するか、構築前に把握する必要がありますので、調査してみました。

具体的には、0から9までの数字や小数点つきの数字、数桁の数字、英字などを認識するかを検証しました。

まず、調査するための環境の作成方法をご説明します。

調査環境の作成

今回、調査するために、作成したボットとインテントの作成方法を説明します。

ボットの作成

  1. Lexのコンソール画面から、[ボットの作成]をクリックします。
  2. [空のボットを作成します]を選択し、ボット名を記載し、下記画像の通りに入力します。
  3. 日本語を選択し、音声はTakumiを選択し、[完了]をクリックします。

これでボットが作成できました。

インテントの作成

  1. インテントの[インテントを追加]から[空のインテントを追加]でインテントを作成します。
  2. インテント名を入力し、サンプル発話に「英数字」を追加します。
  3. [スロットを追加]から、スロットタイプ[AMAZON.AlphaNumeric]を選択します。プロンプトと名前も記載します。
    • スロット名をalphanumericとしました。
  4. [Confirmation]をアクティブにし、確認プロンプトに以下を記載します
    • {alphanumeric}、でよろしいでしょうか?
  5. インテントを保存後、Buildすると、インテントのテストが行えます。

コンタクトフローの作成

Connectインスタンスの作成や電話取得は、下記の記事を参考にしてください。

コンタクトフローの作成を解説します。

コンタクトフロー図は、下記になります。

音声の設定

音声は、Lexで設定した音声と同じにする必要があります。

今回は、Takumiを設定しております。

また、言語属性を設定にチェックをします。

顧客の入力を取得する

下記画像の通り、先程作成したLexボットインテントを指定します。

Lexボットが表示されない場合、Connectインスタンスの設定で、Amazon Lex ボットを追加されていない可能性がありますので、ご確認ください。

ループ

今回は、1回の通話で多くテストしたかったため、ループを10回設定しました。

テスト方法

上記のコンタクトフローを設定し、電話番号とコンタクトフローを紐付けるとテストができます。

電話をかけて英数字を発話して、Lexが認識するかテストができます。

調査結果

調査結果を出します。

調査日(2023年4月)時点でのLexの認識能力のため、時間が経てば認識能力が上がることで、より聞き取ってくれる可能性はあります。

ユーザー側の発話を「ひらがな」、Connect側の発話は、「カタカナ」で表記しています。

0~10の数字

表のLexの認識のうち×のところは、Lexが誤認識した箇所です。

発話内容 Lexの認識 判定
ぜろ 0
れい 0
いち 1
2
さん 3
よん 4
4
5
ろく 6
なな 7
しち 7
はち 8
きゅう 9
9
じゅう × ×
ろくじゅうさん × ×

二桁の数字は、聞き取れませんでした。必ず1桁ずつ伝える必要があるようです。

複数の数字

発話内容 Lexの認識 判定
ご ろく なな v67 ×
ぜろ ぜろ さん さん 0033
よん さん に いち 4321

うまく認識してくれたり、認識しなかったりしました。

精度はそこまで高くなさそうです。

複数の数字のConnect側の発話

「よん さん に いち」と発話すると、「4321」とLexが認識してくれますが、確認プロンプト時、Connect側からは、「ヨンセンサンビャクニジュウイチ」と4桁の数字で返されますので、注意しましょう。

「よん さん に いち」とConnect側で発話させる方法として、以下の2つが考えられます。

  • Lambdaで、確認プロンプト時、Connect側から1文字ずつ返すように設定する
  • カスタムスロットタイプで、0~9までの数字を作成し、必要な数のスロット(custom_slots) を作成し、確認プロンプトで、繋げる
    • 確認プロンプト:{custom_slots_1}、{custom_slots_2}、{custom_slots_3}、{custom_slots_4}でよろしいでしょうか

小数点付きの数字

発話内容 Lexの認識 判定
ぜろてんにいご × ×
にいてんご × ×

小数点のついた数字は、認識されませんでした。

マイナスの数字

入力内容 Lexの認識 判定
まいなすさん -3
まいなすごじゅうさん -53
まいなすごーさん -53
まいなすに まいなすに -2-2 ?
まいなすに まいなすに まいなすに -2-2-2 ?
まいなすにからに × ×

マイナスの数字は、認識されるようです。

ただし、「まいなすに まいなすに」と発話した場合、Lexのログでは、「-2-2」と認識していますが、確認プロンプト時、Connect側から「マイナス 二 カラ 二(-2から2)」と答えが返ってきました。

「まいなすに まいなすに まいなすに」の場合、確認プロンプト時、Connect側から「マイナス 二 カラ 二 カラ 二(-2から2から2)」と答えが返ってきました。

下記が実際のslots内のログです。

"slots": {
    "alphanumeric": {
        "value": {
            "originalValue": "マイナス 二 マイナス 二 マイナス 二",
            "interpretedValue": "-2-2-2",
            "resolvedValues": [
                "-2-2-2"
            ]
        },
        "shape": "Scalar"
    }
}

下記が確認プロンプトのメッセージ内容です。

"messages": [
    {
        "contentType": "PlainText",
        "content": "-2-2-2、でよろしいでしょうか"
    }
],

おそらく、Connect側で「マイナス 二 カラ 二 カラ 二」と発話された理由は、-2-2-2は、最初の-は、「マイナス」、他の2つの-は、「カラ」と認識したと推測します。

単位をつけた数字

入力内容 Lexの認識 判定
いっこ(1個) × ×
にこ(2個) × ×
にわ(2羽) × ×
にほん(2本) × ×

単位付きの数字は、認識しませんでした。

英字

発話内容 Lexの認識 判定
えー A
びー B
しー 4 ×
すぃ 4 ×
すぅぃ 4、S5 ×
でぃー D
でぇい D
いー E
えふ IF、F
じー G
えいち A1 H
えっち H
あい I
じぇい J
けー K
える L
えむ M
えぬ N
おー A ×
おう O
ぴー P
きゅー 9 ×
あーる R
えす S
てぃー T
ゆー U
ぶい V
ゔぃー V
だぶりゅー W
だぶる W
えくす e9s ×
えっくす X
わい Y
ぜっと Z

「C」と「Q」は、数字の4、9に誤認識しました。発音がよければ、認識してくれるかもしれません。

「F」は、「IF(いふ)」と誤認識することがありました。

英数字の組み合わせ

発話内容 Lexの認識 判定
あーるえすてぃー rst
さんじーご 3g5

色々な英数字の組み合わせで調査しましたが、認識の能力は、そこまで高くない印象でした。

同じ組み合わせでも認識できたり、できなかったりしました。

Connect側での発話

ちなみに、Connect側で発せられる数字の発話は、以下になります。

数字 Connectの発話
0 レイ
1 イチ
2
3 サン
4 ヨン
5
6 ロク
7 ナナ
8 ハチ
9 キュウ

「0」や「4」のことをConnect側では、「レイ」、「ヨン」と発話するようです。

「Q(キュー)」と「9(キュウ)」は、どちらのことを言っているか判断できないですね。

Connect側での発話では、「C(シー)」と「4(ヨン)」に、別れているので、聞き取りやすいですね。

「ゼロ」と発話させたい場合、AWS LambdaとLexを連携する必要があります。

最後に

Connectのコンタクトフロー内でLexのAMAZON.AlphaNumericを使用する際、英数字をどこまで認識してくれるかある程度把握できました。

AMAZON.AlphaNumericは、1文字の場合、精度は高いですが、複数の文字ですとあまり精度が高い印象ではありませんでした。

「C」と「4」の発話を聞き分けることは、人間でも難しいので、使いにくいかと思いました。

実運用する方法として、以下の方法が考えられます。

  • 英数字を分けて、数字のみ、英字のみ、を聞き取るようにする。
    • 英字のみの場合
      • カスタムスロットタイプで英字を1文字ずつ計26個作成し、1文字ずつ聞くスロットを作成
    • 数字のみの場合
      • カスタムスロットタイプで数字を0~9計10個作成し、1文字ずつ聞くスロットを作成
      • スロットタイプのAMAZON.Numberを利用する
      • Lexは使わず、スマホの物理キーで数字を入力してもらうフローに変える

英数字を混ぜて、精度良くLexが認識できる方法を探してみます。。

参考になれば幸いです。