Amazon Lex のスロットタイプ AMAZON. Numberは、算用数字や漢数字など、どこまで認識してくれるか調査してみた

Lex のスロットタイプ AMAZON.Numberは、単語や数値を、10 進数を含む数値に変換するスロットタイプです。 算用数字や漢数字などの日本語の言葉をどこまで認識してくれるか調査してみました。
2023.02.08

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

はじめに

日本語で数字を表現する言葉として、算用数字(1,2など)、漢数字(一、二)、大字(壱、弐)、ひらがな(いち、に)などがあります。

Amazon LexのスロットタイプであるAMAZON.Numberでは、それらの言葉をどこまで認識してくれるか調査しました。

例えば、AMAZON.Numberをスロットに適用し、テストした場合、100、を入力すると、Lexは、「100」という数値として認識します。

下記は、テストしたときの画像です。

100が認識されています。

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

調査環境の作成

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

ボットの作成

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

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

インテントの作成

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

テスト方法

  1. [Test]をクリックし、「数字」と入力後、「数を教えて下さい」と問われるため、「100」などを入力すると、Lexが認識できた場合のみ、確認プロンプトが呼ばれます。

このインテントで、AMAZON.Numberのテストが行えます。

調査結果

調査結果を出します。

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

算用数字・漢数字・大字・ひらがな

表のLexの認識のうち-のところは、Lexが認識しなかった箇所です。

算用数字

入力内容 Lexの認識 判定
1 1
15 15
123 123

漢数字

入力内容 Lexの認識 判定
1
十五 15
百二十三 123
1000
- ×
一万 10000
- ×
一億 100000000

大字

入力内容 Lexの認識 判定
- ×
拾伍 - ×
壱佰弐拾参 - ×

ひらがな

入力内容 Lexの認識 判定
いち - ×
じゅうご - ×
ひゃくにじゅうさん - ×

漢数字と算用数字の組み合わせ

入力内容 Lexの認識 判定
1万 10000
1万5 10005
1万50 10050
1万5百 - ×
1万5千 - ×
120万 1200000
1億 100000000

「漢数字のみ」や「算用数字のみ」は、認識することが分かりました。

「大字」や「ひらがな」、「一部、漢数字と算用数字の組み合わせ」は、認識しないようですね。

AMAZON. Numberを利用する場合、例えば、料金をユーザーから聞く際に、ユーザーが漢数字と算用数字を組み合わせて答えないよう、工夫する必要がありますね。

単位をつけた数字

入力内容 Lexの認識 判定
1個 1
3個 3
100個 100
2.5個 - ×
1円 - ×
100円 - ×
1本 - ×
1羽 - ×
1秒 - ×

単位のうち「個」のみが、なぜか認識しました。

他の単位については、後述する方法で、他の単位も含めた数字を認識させることができます。

単位も含めた数字をLexに認識させる方法

「100円」を認識するように設定したいと思います。

  1. インテントのスロットから[詳細オプション]をクリックします
  2. サンプル発話に以下を追加し、スロットを更新します。
    • {number}円
  3. インテントのConfirmationのうち、確認プロンプトに「円」を加えた以下の通りに修正します。
    • {number}円でよろしいでしょうか?
  4. インテントを保存し、ビルドすると、以下の通り、円を加えた数字もLexの方で認識します。

JSONの応答でも、単位を除いた「100」という数字が認識したことを確認できます。

  "intent": {
   "name": "number_answer",
   "slots": {
    "number": {
     "value": {
      "originalValue": "100",
      "interpretedValue": "100",
      "resolvedValues": [
       "100"
      ]
     }
    }
   },

ドキュメントを見てみる

ドキュメントには、AMAZON.Numberについて、数行ですが説明がありました。

数値を表す単語または数値を、10 進数を含む数値に変換します。次の表は、AMAZON.NUMBER スロットタイプでの数値語の変換方法を示しています。

「数値を表す単語または数値を、10 進数を含む数値に変換します。」と記載がありますが、調査した通り、「1」「壱」「一」は、全て「1」に変換されたため、ドキュメント通りの仕様であると分かりました。

最後に

スロットタイプのAMAZON.Numberでは、「1万5千」など漢数字と算用数字の組み合わせが認識されないなど、Lexを使用する際に注意が必要だと分かりました。

他のスロットタイプもどこまで日本語を認識してくれるか調査してみてもよいですね。

Lexを使用する際に、参考になれば幸いです。