インテント検出リクエストを実行するとき、必要に応じて音声コンテキストを指定すると、音声認識装置にヒントを提供できます。これらのヒントは、特定の会話状態での認識を支援します。
自動音声適応
自動音声適応機能では、会話の状態を自動的に使用して、すべての検出インテント リクエスト用の音声コンテキスト ヒントとして関連するエンティティとトレーニング フレーズを渡すことで、エージェントの音声認識の精度が向上します。この機能はデフォルトで有効になっています。
自動音声適応を有効または無効にする
自動音声適応を有効または無効にするには、次の手順を実行します。
- 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 がユーザーに必須パラメータを促している場合でも、トップレベルの「エージェントと話したい」インテントなどの他のインテントを依然としてトリガーできます。
システム エンティティ
@sys.number
システム エンティティを使用するトレーニング フレーズを定義して、エンドユーザーが「I want 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」のような英数字や数字のシーケンス用の自動音声適応をトリガーできます。これらのシーケンスを音声で認識するには、次の要件の 4 つすべてを実装してください。
1. 正規表現エントリの要件
任意の正規表現を使用してテキスト入力からエンティティを抽出できますが、特定の表現のみが、音声を認識するときにスペルアウトされた英数字または数字シーケンスのバイアスに自動音声適応を伝えます。
正規表現エンティティでは、少なくとも 1 つのエントリが次のルールすべてに従う必要があります。
- 英数字である必要があります(例:
\d
、\w
、[a-zA-Z0-9]
)。 - 空白
\s
を含めることはできません(ただし、\s*
と\s?
は含めることができます) - キャプチャ グループまたは非キャプチャ グループ
()
を含めることはできません ` ~ ! @ # $ % ^ & * ( ) - _ = + , . < > / ? ; ' : " [ ] { } \ |
のような特殊文字や句読点と一致しないようにしてください
このエントリには、文字セット []
と繰り返し数量子(*
、?
、+
、{3,5}
など)を含めることができます。
例をご覧ください。
2. パラメータ定義の要件
正規表現エンティティを必須のインテント パラメータとしてマークし、スロット入力中に収集できるようにします。これにより、インテントとシーケンスを同時に認識しようとするよりも、自動音声適応がシーケンス認識に強くバイアスをかけることができます。そうしないと「Where is my package for ABC123」が「Where is my package 4ABC123」と誤認識される可能性があります。
3. トレーニング フレーズのアノテーションの要件
インテントのトレーニング フレーズのアノテーションには、正規表現エンティティを使用しないでください。これにより、スロット充填の一部としてパラメータが解決されます。
4. テストの要件
音声適応のテストをご覧ください。
例
たとえば、単一のエントリが ([a-zA-Z0-9]\s?){5,9}
の正規表現エンティティは、キャプチャ グループを含んでいるため、音声シーケンス認識機能をトリガーしません。これを修正するには、ただ [a-zA-Z0-9]{5,9}
の別のエントリを追加するだけです。これで、「ABC123」と一致する場合にシーケンス認識機能を利用できますが、スペースを許可する元のルールにより、NLU は「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}
正規表現の回避策
自動音声適応の正規表現エンティティに対する組み込みサポートは、言語によって異なります。サポートされている言語については、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
を使用します。
音声適応のテスト
特定のトレーニング フレーズやエンティティ一致についてエージェントの音声適応機能をテストする場合は、会話の最初の音声による一致のテストをすぐに開始しないでください。一致をテストする前に、会話全体に対して音声のみまたはイベント入力のみを使用してください。この方法でテストした場合のエージェントの動作は、実際の本番環境における会話での動作と類似しています。
制限事項
次の制限が適用されます。
- 音声適応は、すべての音声モデルと言語の組み合わせで利用できるわけではないことにご注意ください。Cloud Speech の言語サポートページを参照して、音声モデルと言語の組み合わせに「モデル適応」を利用できるかどうかを確認します。
- 自動音声認識は Dialogflow へのデータ送信前に Actions on Google で実行されるので、自動音声適応は Actions on Google(Google アシスタント)では機能しません。
- 長い文字シーケンスを認識することは挑戦です。1 回のターンでキャプチャされる文字数は、入力音声の品質に直接関係します。たとえば、統合が電話の音声で動作する場合、拡張音声モデルを有効にして、4 文字または 5 文字を超える英数字シーケンス、または 10 文字を超える数字シーケンスを確実に認識できるようにする必要があります。正規表現エンティティのガイドラインのすべてに沿っていても、シーケンス全体を 1 回のターンでキャプチャするのが難しい場合は、次のようなより対話型の代替手段を検討してください。
- データベースに対してシーケンスを検証する際は、日付、名前、電話番号など、その他の収集されたパラメータを相互参照し、不完全な一致を許容することを検討してください。たとえば、ユーザーに注文番号を尋ねるだけでなく、電話番号も尋ねます。これで、Webhook が注文ステータスに対してデータベースをクエリする際に、まず電話番号に依拠し、それからそのアカウントに最も近くマッチする注文を返すことができます。これにより、Dialogflow で「ABC」が「AVC」として誤って聴き取る可能性がありますが、それでも正しい注文ステータスを返します。
- 非常に長いシーケンスの場合は、途中で一時停止するようにエンドユーザーに促して、bot が期待どおりに確認できるようにするフローの設計を検討してください。詳細については、このチュートリアルをご覧ください。