Amazon ConnectとAmazon Lexを利用し、発話によるフルネームのヒアリング精度を確認してみた
はじめに
Amazon ConnectのコンタクトフローでAmazon Lexのスロットタイプ AMAZON.LastNameとAMAZON.FirstNameを利用し、発話による名前(フルネーム)のヒアリング精度を確認してみました。
Amazon LexのスロットタイプであるAMAZON.LastNameは、一般的に使用される名字を認識します。一方、AMAZON.FirstNameは、は、名前(ファーストネーム)を認識します。
ヒアリング精度の確認方法は、以下の図の通り、発話によってフルネームを伝えた際、2つのスロットタイプで名字と名前を正しく認識するかで判断します。
前提
- 2024年3月11日時点での検証内容です。
- 発話のイントネーションや速度などの複数の変数によって結果が異なる可能性がありますので、ここでの結果は一例とご認識ください。
- 今後のバージョンアップによって、改善される可能性があり、恒久的な結果ではありません。
Lexボット構築
ボットの作成
- Lexのコンソール画面から、[ボットの作成]をクリックします。
- [空のボットを作成します]を選択し、ボット名を記載し、下記画像の通りに入力します。
- 日本語を選択し、[完了]をクリックします。
これでボットの作成が完了しました。
インテントの作成
- インテント名を入力し、サンプル発話に「
{lastName} {firstName}
」を追加します。{lastName}
と{firstName}
の間には、必ず半角スペースを開けて下さい。私の場合、スペースがないと1度に聞き取ってくれませんでした。
- [スロットを追加]から、スロットタイプ[AMAZON.LastName]を選択します。プロンプトとスロット名も記載します。
- 同様に、[スロットを追加]から、スロットタイプ[AMAZON.FirstName]を選択します。プロンプトと名前も記載します。
- [Confirmation]の確認プロンプトに、以下を記載します
お名前は{lastName}{firstName}ですね。
- インテントを保存後、Buildすると、インテントのテストが行えます。
会話ログ
会話のログを取得するため、CloudWatch Logs ロググループを事前に作成し、Lexの[エイリアス]から会話ログを有効化します。
フルネームのヒアリングテストする際、発話内容は、ロググループにテキストで保存されます。
コンタクトフローの作成
コンタクトフローの作成をします。
フローは、以下の通りです。
[顧客の入力を取得する]ブロックでは、以下の通り、先程作成したLexボットとインテントを指定します。
上記のコンタクトフローを作成後、電話番号とコンタクトフローを紐付けるとテストができます。
電話をかけてフルネームを発話することで、Lexが正しく認識するかテストします。
テスト内容と結果
名前のサンプルは、ChatGPTで名前を考えてもらったものになります。
結果は以下の通りです。
発話内容 | AMAZON.LastName | AMAZON.FirstName | 判定 |
---|---|---|---|
さとう だいすけ | サトウ | ダイスケ | ◯ |
すずき たかし | スズキ | タカシ | ◯ |
たなか ゆうま | タナカ | ユウ マ | ◯ |
いとう そうた | イトウ | ショウタ | ✕ |
やまもと しょうた | ヤマモト | ショウタ | ◯ |
たかはし みさき | タカハシ | ミサ キ | ◯ |
こばやし ゆい | コバヤシ | ユヒ | ✕ |
わたなべ かおり | ワタナベ | カホリ | ✕ |
なかむら まゆみ | ナカムラ | マユミ | ◯ |
よしだ あいみ | ヨシダ | アユミ | ✕ |
いのうえ りょうや | イノウエ | ジョウ ヤ | ✕ |
さいとう しゅうへい | サイトウ | シュウヘイ | ◯ |
まつもと ひろき | マツモト | ヒロキ | ◯ |
たけうち まもる | タチ ウチ | マモル | ◯ |
いしかわ ようこ | イシカワ | ヨウコ | ◯ |
ささき かな | ササキ | カナ | ◯ |
やまだ はなこ | ヤマダ | ハナコ | ◯ |
たなか りこ | タナカ | リコ | ◯ |
まつだ れな | マツダ | レイナ | ✕ |
はやし みほ | ハヤシ | ミホ | ◯ |
はせがわ そら | ハセガワ | ソラ | ◯ |
かとう りく | カトウ | リク | ◯ |
かねこ あん | カネコ | アン | ◯ |
もちづき ひろと | モチヅキ | ヒロト | ◯ |
おおさわ しおり | オオ サワ オリ | シ | ✕ |
あさお ゆいな | ア サオ | ユ イナ | ◯ |
かわむら きよし | カワ ムラ | キヨシ | ◯ |
みうら えいた | ミ ウラ | エイ タ | ◯ |
やぎさわ こういち | ヤギ サワ | コウイチ | ◯ |
みぞの りんか | ミゾ ノベ | リンカ | ✕ |
たけだ えみ | タケダ | エミ | ◯ |
かわむら あおい | カワ ムラ | アオイ | ◯ |
にしだ かなえ | ニシダ | カナ エ | ◯ |
もり じろう | オリ | ジロウ | ✕ |
やました ちから | ヤマシタ | チカラ | ◯ |
しみず さぶろう | シミ ズ サブロウ | サブロウ | ✕ |
いしかわ しげる | イシカワ | シゲル | ◯ |
おがわ つとむ | オガワ | ツトム | ◯ |
えんどう かずこ | デン ドウ | カズコ | ✕ |
ふくだ ゆうこ | フクダ | ユウコ | ◯ |
おかもと きよこ | オカモト | キヨコ | ◯ |
ふじもと ひろこ | クジ モト | ヒコ | ✕ |
なかの ようこ | ナカノ | ヨウコ | ◯ |
うえだ みのる | ウエダ | ミノル | ◯ |
くぼ まさる | クゴ | マサル | ✕ |
しまだ しげまさ | シマダ | シゲ マサ | ◯ |
すぎもと しょういち | スギモト | ショウイチ | ◯ |
きくち えつこ | キクチ | エツコ | ◯ |
こまつ はる | コマツ | ハル | ◯ |
ほんだ まこと | オン | ダ マコト | ✕ |
以下が総評です。
- 認識率は、72%(◯が36/50)
- カタカナでスロットに入ります
- 判定が✕の箇所で、認識が惜しい例もありました
- 「そうた」 → 「ショウタ」
- 「ゆい」 → 「ユヒ」
- 「かおり」 → 「カホリ」
- 「あいみ」 → 「アユミ」
- 「りょうや」 → 「ジョウ ヤ」
- 「れな」 → 「レイナ」
- 1スロットに半角スペースが入ることがありました
- 「ユウ マ」
- 「ミサ キ」
- 「ジョウ ヤ」
- 「ジョウ ヤ」
- AMAZON.LastNameに名前の一部が入ることがありました
- 「オオ サワ オリ」「シ」
- AMAZON.LastNameに、フルネームが入ることがありました
- 「シミ ズ サブロウ」「サブロウ」
- AMAZON.FirstNameが空になるため、AMAZON.FirstNameを聞き返されました
- 「シミ ズ サブロウ」「サブロウ」
- 発話からレスポンスが返るまでの時間が2秒以下で短く、ユーザー体験はよいと感じました
名前に「です。」をつけて発話
通常、名前を聞かれた際には「です。」をつけて答えることが多いため、「名前」 + 「です。」で発話し、認識精度に影響があるかを確認しました。
以下が結果です。
発話内容 | AMAZON.LastName | AMAZON.FirstName | 判定 |
---|---|---|---|
さとう だいすけ です | サトウ | ダイスケ | ◯ |
すずき たかし です | スズキ | タカシ | ◯ |
たなか ゆうま です | タナカ | ユウ マ | ◯ |
いとう そうた です | イ | トウ ショウタ | ✕ |
やまもと しょうた です | ヤマモト | ショウタ | ◯ |
たかはし みさき です | タカ ハシ | ミサ キ | ◯ |
こばやし ゆい です | コバヤシ | ユイ | ◯ |
わたなべ かおり です | ワタナベ | カオリ | ◯ |
なかむら まゆみ です | ナカムラ | マユミ | ◯ |
よしだ あいみ です | ヨシダ | アユミ | ✕ |
スロットに「で」や「です」が含まれていないため、「です。」の影響は特にないと推測されます。
「です。」がない先程の結果と異なる部分がありますが、おそらく発話時の速度やイントネーションの微細な違いによる影響と考えます。
- 「イ」 「トウ ショウタ」に分かれている
- 「コバヤシユイ」と「ワタナベカオリ」が◯になった
ゆっくりと発話してみる
判定が✕だった名前を再度、ゆっくりとはっきり、名字と名前の間に一拍置いて発話してみました。
発話内容 | AMAZON.LastName | AMAZON.FirstName | 判定 |
---|---|---|---|
よしだ あいみ | ヨシダ | ア イ ミ | ◯ |
まつだ れな | マツダ | レイ | ◯ |
もり じろう | モリ | ジロウ | ◯ |
えんどう かずこ | エンドウ | カズコ | ◯ |
ふじもと ひろこ | フジモト | ヒロコ | ◯ |
くぼ まさる | クボ | マサル | ◯ |
いとう そうた | イ トウ | ショウタ | ✕ |
いのうえ りょうや | イノウエ | ジョウ ヤ | ✕ |
おおさわ しおり | オオ サワ オリ | シ | ✕ |
みぞの りんか | ミゾ ノベ | リンカ | ✕ |
しみず さぶろう | シミ ズ サブロウ | サブロウ | ✕ |
ほんだ まこと | オン | ダ マコト | ✕ |
一定の効果はありましたが、それでも認識しないフルネームがあることが分かりました。
- AMAZON.LastNameに名前の一部が入る
- 「オオ サワ オリ」「シ」
- AMAZON.LastNameに、フルネームが入る
- 「シミ ズ サブロウ」「サブロウ」
- AMAZON.FirstNameが空になるため、AMAZON.FirstNameを聞き返される。
- 「シミ ズ サブロウ」「サブロウ」
名字と名前を分けてヒアリング
AMAZON.LastNameが名前の一部やフルネームを取り込んでしまうことがあるため、判定が×だったケースについて、名字と名前を別々にヒアリングするアプローチを試みました。
設定変更は、Lexのサンプル発話を{lastName} {firstName}
」から{lastName}
の変更のみです。
発話内容 | AMAZON.LastName | AMAZON.FirstName | 判定 |
---|---|---|---|
いのうえ りょうや | イノウエ | リョウ ヤ | ◯ |
おおさわ しおり | オオ サワ | シオリ | ◯ |
しみず さぶろう | シミ ズ | サブロウ | ◯ |
ほんだ まこと | ホンダ | マコト | ◯ |
いとう そうた | イ トウ | イ ソウ | ✕ |
みぞの りんか | ミソ ノ | リンカ | ✕ |
この結果から、一定の改善効果があることがわかりました。
ただし、単純に文字起こしの精度の性能の問題?で正しく聞き取れない名前や名字があることも分かりました。
認識精度を上げるには
AMAZON.LastNameとAMAZON.FirstNameスロットタイプを利用した名前の認識精度向上について考えてみます。
1点目は、Amazon Lexでカスタム語彙を利用することで、名前の文字起こし精度を上げることが可能です。ただし、英語のみしか対応しておりません。
日本語での対応が実現すれば、さらなる精度向上が期待できるでしょう。
2点目は、ユーザーに対してゆっくりとはっきりと発話するよう促すことで、今回のテストでは一定の認識精度の向上が見られました。しかし、これはユーザーの協力が必要なため、最適な解決策とは言いにくいです。
3点目は、名字と名前を分けてヒアリングすることも一定の効果がありました。ただし、これによりユーザーが名字と名前を別々に発話する必要が生じ、ユーザー体験が低下するというデメリットがあります。
最後に
Amazon Lexによる名前認識の精度検証で、AMAZON.LastName と AMAZON.FirstName スロットタイプが一定の認識率を示しましたが、まだ完璧ではありません。
ユーザー体験を損なわずに精度を向上させる方法を考えつつ、今後のスロットタイプ自体の認識性能の向上やカスタム語彙の日本語対応のアップデートに期待しましょう。