Amazon Connect コンタクトフローでAmazon Lexを利用時、スロットタイプ AMAZON. AlphaNumericは、発話で英数字をどこまで認識してくれるか調査してみた
はじめに
ConnectとLexでコンタクトセンター向けチャットボットを構築する場合、ユーザーから英数字を聞き取る場合は、LexのスロットタイプであるAMAZON.AlphaNumeric
の利用を検討されるかと思います。
このAMAZON.AlphaNumeric
では、英字(アルファベット)と数字をどこまで認識するか、構築前に把握する必要がありますので、調査してみました。
具体的には、0から9までの数字や小数点つきの数字、数桁の数字、英字などを認識するかを検証しました。
まず、調査するための環境の作成方法をご説明します。
調査環境の作成
今回、調査するために、作成したボットとインテントの作成方法を説明します。
ボットの作成
- Lexのコンソール画面から、[ボットの作成]をクリックします。
- [空のボットを作成します]を選択し、ボット名を記載し、下記画像の通りに入力します。
- 日本語を選択し、音声はTakumiを選択し、[完了]をクリックします。
これでボットが作成できました。
インテントの作成
- インテントの[インテントを追加]から[空のインテントを追加]でインテントを作成します。
- インテント名を入力し、サンプル発話に「英数字」を追加します。
- [スロットを追加]から、スロットタイプ[AMAZON.AlphaNumeric]を選択します。プロンプトと名前も記載します。
- スロット名を
alphanumeric
としました。
- スロット名を
- [Confirmation]をアクティブにし、確認プロンプトに以下を記載します
{alphanumeric}、でよろしいでしょうか?
- インテントを保存後、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が認識できる方法を探してみます。。
参考になれば幸いです。