インテント検出リクエストを実行するとき、必要に応じて音声コンテキストを指定すると、音声認識装置にヒントを提供できます。これらのヒントは、特定の会話状態での認識を支援します。
自動音声適応機能では、会話の状態を自動的に使用して、すべての検出インテント リクエスト用の音声コンテキスト ヒントとして関連するエンティティとトレーニング フレーズを渡すことで、エージェントの音声認識の精度が向上します。この機能はデフォルトで有効になっています。
自動音声適応を有効または無効にする
自動音声適応を有効または無効にするには、次の手順を実行します。
- Dialogflow ES コンソールに移動します。
- 左側のサイドバー メニューの上部付近でエージェントを選択します。
- エージェント名の横にある設定 settings ボタンをクリックします。
- [Speech] タブを選択します。
- [Improve Speech Recognition Quality] セクションまでスクロールします。
- [Enable Auto Speech Adaptation] をオンまたはオフに切り替えます。
音声認識の改善例
自動音声適応を有効にした後、それを有効活用するようにエージェントを構築できます。次のセクションでは、エージェントのトレーニング フレーズ、コンテキスト、エンティティに一定の変更を加えると音声認識がどのように改善されるかを説明します。
トレーニング フレーズとコンテキスト
- 「stuffy nose」のようなフレーズを使ってトレーニング フレーズを定義した場合、ユーザーの発声は、よく似た発音の「stuff he knows」ではなく確実に「stuffy nose」と認識されます。
セッションにアクティブなコンテキストがある場合、自動入力適応は、すべての入力コンテキストがアクティブなインテントのトレーニング フレーズに対してかなりバイアスをかけます。たとえば、2 つのアクティブなコンテキスト「pay-bill」と「confirmation」がある場合、次のインテントはすべて自動音声適応に影響を与えます。つまり、単一入力コンテキスト「pay-bill」を持つインテント、単一入力コンテキスト「confirmation」を持つインテント、2 つの入力コンテキスト「pay-bill」と「confirmation」を持つインテント。
セッションにアクティブなコンテキストがない場合、自動音声適応は、入力コンテキストを持たないインテントのトレーニング フレーズに対してかなりバイアスをかけます。
- Dialogflow に Dialogflow にスロット入力を促すことを強制するような必須パラメータがある場合、自動音声適応は入力対象エンティティに対して強いバイアスをかけます。
すべてのケースで、自動音声適応は音声認識にバイアスをかけるのみで、制限することはありません。たとえば、Dialogflow がユーザーに必須パラメータを促している場合でも、トップレベルの「エージェントと話したい」インテントなどの他のインテントを依然としてトリガーできます。
システム エンティティ
@sys.number
システム エンティティを使用するトレーニング フレーズを定義した場合、エンドユーザーが「two」と発声すると、それが「to」、「too」、「2」、「two」と認識される可能性があります。
自動音声適応を有効にすると、Dialogflow は音声認識時に @sys.number
エンティティをヒントとして使用し、このパラメータは「2」として抽出される可能性が高くなります。
カスタム エンティティ
企業が提供するプロダクト名やサービス名のエンティティを定義すると、エンドユーザーがそれら用語を発声したときに認識される可能性が高くなります。@product エンティティとしてアノテーション付けされているトレーニング フレーズ「I love Dialogflow」は、「I love Dialogflow」、「I love Cloud Speech」、@product エンティティにある他のすべてのエントリにバイアスをかけるように自動音声適応に指示します。
Dialogflow を使用して音声を検出する際には、クリーン エンティティの同義語を定義することが特に重要です。「Dialogflow」と「Dataflow」という 2 つの @product エンティティのエントリがあるとします。「Dialogflow」の類義語としては、「Dialogflow」、「dialogue flow」、「dialogue builder」、「Speaktoit」、「speak to it」、「API dot AI」が考えられます。最も一般的なバリエーションをカバーしていることから、これらは妥当な類義語です。「dialogue flow」によってすでにカバーされているため、「dialogue flow builder」を追加する必要はありません。
- ユーザーが、連続して異なる数のエンティティを発話すると、あいまいになる可能性があります。たとえば、「I want two sixteen packs」は、16 パックの 2 つ分、または 216 パックを意味する可能性があります。音声適応は、スペルアウトされた値のエンティティを設定する場合に、これらの曖昧さを取り除くのに役立ちます。
- 以下のエントリを使用して
quantity
エンティティを定義しますzero
one
...
twenty
- 以下のエントリを使用して
product
またはsize
エンティティを定義しますsixteen pack
two ounce
...
five liter
- 音声適応ではエンティティの類義語のみが使用されるため、参照値
1
と単一の類義語one
を使用してエンティティを定義し、フルフィルメント ロジックを簡素化できます。
- 以下のエントリを使用して
正規表現エンティティ
正規表現エンティティは、正しく構成された場合、「ABC123」や「12345」のような英数字と数字のシーケンス用の自動音声適応をトリガーできます。NLP でエンティティを抽出する任意の正規表現を使用できますが、特定の正規表現のみ、自動音声適用が音声の認識の際にスペルアウトした英数字または数字のシーケンスにバイアスをかけるようにします。シーケンスを音声で認識する場合は、次の要件をすべて満たしていることを確認してください。
正規表現エンティティ エントリの少なくとも 1 つが、以下のすべてのルールに従います。
- 文字セット
[]
を使用できます - 繰り返し数量子(
*
、?
、+
、{3,5}
など)を使用できます - 空白文字や
\s
は含みませんが、\s*
と\s?
は許されます - キャプチャ グループ
()
は含みません ` ~ ! @ # $ % ^ & * ( ) - _ = + , . < > / ? ; ' : " [ ] { } \ |
のような特殊文字や句読点とマッチしないようにしてください
- 文字セット
インテントで、正規表現エンティティを必須パラメータとしてマークし、スロット入力中に収集できるようにします。これにより、インテントとシーケンスを同時に認識しようとするよりも、自動音声適応がシーケンス認識に強くバイアスをかけることができます。そうしないと「Where is my package for ABC123」が「Where is my package 4ABC123」と誤認識される可能性があります。
- 受信音声の品質が 8 kHz の電話の通話品質である場合は、拡張音声モデルを有効にして、4 文字または 5 文字より長い英数字のシーケンスまたは 10 文字より長い数字のシーケンスを確実に認識する必要があります。または、フォローアップ インテントまたは高度な Webhook ロジックを使用して、小規模なサブシーケンスを収集して、一緒にすることを検討します。
たとえば、単一のエントリが ([a-zA-Z0-9]\s?){5,9}
の正規表現エンティティは、キャプチャ グループを含んでいるため、音声シーケンス認識機能をトリガーしません。これを修正するには、ただ [a-zA-Z0-9]{5,9}
の別のエントリを追加するだけです。これで、音声で「ABC123」とスロット入力する場合にシーケンス認識機能を利用できますが、スペースを許可する元のルールにより、NFL は「ABC 123」のような入力ともマッチします。
以下の正規表現の例は、英数字シーケンスに適用されます。
^[A-Za-z0-9]{1,10}$ WAC\d+ 215[2-8]{3}[A-Z]+ [a-zA-Z]\s?[a-zA-Z]\s?[0-9]\s?[0-9]\s?[0-9]\s?[a-zA-Z]\s?[a-zA-Z]
以下の正規表現の例は、数字シーケンスに適用されます。
\d{2,8} ^[0-9]+$ 2[0-9]{7} [2-9]\d{2}[0-8]{3}\d{4}
また、任意の数字シーケンスを受け入れる場合は、@sys.number-sequence
を使用し、ローカライズされた電話番号認識ツールを使用する場合は @sys.phone-number
を使用することも検討してください。システム エンティティと非正規表現カスタム エンティティは、スロット入力を促すことを必要としない自動音声適応でも機能します。
制限事項
次の制限が適用されます。
- 自動音声認識は Dialogflow へのデータ送信前に Actions on Google で実行されるので、自動音声適応は Actions on Google(Google アシスタント)では機能しません。
長い文字シーケンスを認識することは困難です。たとえば、8kHz 音声のスマートフォン チャンネルでは、16 桁または 10 桁の英数字より長いシーケンスを連続して認識することはできません。これは、拡張音声モデルを使用する場合にも適用されます。たとえば、次のように会話の代替手段を検討します。
- データベースに対してシーケンスを検証する場合は、日付、名前、電話番号など、他のパラメータと相互参照して、不完全な一致でも受け入れるようにします。たとえば、ユーザーに注文番号を尋ねるだけでなく、電話番号も尋ねます。Webhook がデータベースに対して注文ステータスをクエリすると、まず電話番号を信頼し、そのアカウントに最も一致する注文を返します。この場合、Dialogflow は「ABC」を「AVC」と誤認識することがありますが、ユーザーに対して正しい注文ステータスを返します。
- 非常に長いシーケンスの場合は、途中で一時停止するようにエンドユーザーに促して、bot が期待どおりに確認できるようにするフローの設計を検討してください。詳細については、このチュートリアルをご覧ください。
自動音声適応のシステムおよび正規表現エンティティに対する組み込みサポートは、言語によって異なります。サポートされている言語については、Speech クラストークンの
$OOV_CLASS_ALPHANUMERIC_SEQUENCE
と$OOV_CLASS_DIGIT_SEQUENCE
を確認してください。使用している言語がリストにない場合でも、この制限を回避できます。たとえば、3 文字の後に 3 桁の数字が続く従業員 ID を正確に認識させる場合、次のエンティティとパラメータを使用してエージェントを構築できます。- 10 個のエンティティ エントリを含む
digit
エンティティを定義します(同義語を含む)。0, 0
1, 1
...
9, 9
- 26 個のエンティティ エントリを含む
letter
エンティティを定義します(同義語を含む)。A, A
B, B
...
Z, Z
- 単一のエンティティ エントリを含む
employee-id
エンティティを定義します(同義語なし)。@letter @letter @letter @digit @digit @digit
- トレーニング フレーズのパラメータとして
@employee-id
を使用します。
- 10 個のエンティティ エントリを含む