インテント検出リクエストを実行するとき、必要に応じて phrase_hints を指定すると、音声認識装置にヒントを提供できます。これらのヒントは、特定の会話状態での認識を支援します。
自動音声適応
自動音声適応機能では、会話の状態を自動的に使用して、すべての検出インテント リクエスト用の音声コンテキスト ヒントとして関連するエンティティとトレーニング フレーズを渡すことで、エージェントの音声認識の精度が向上します。なお、この機能はデフォルトでは無効に設定されています。
自動音声適応を有効または無効にする
自動音声適応を有効または無効にするには、次の手順を実行します。
コンソール
- Dialogflow CX Console を開きます。
- GCP プロジェクトを選択します。
- エージェントを選択します。
- [エージェント設定] をクリックします。
- [音声と IVR] タブをクリックします。
- [Enable auto speech adaptation] をオンまたはオフに切り替えます。
- [保存] をクリックします。
API
Agent
型の get
メソッドと patch/update
メソッドをご覧ください。
エージェント リファレンスのプロトコルとバージョンを選択:
プロトコル | V3 | V3beta1 |
---|---|---|
REST | エージェント リソース | エージェント リソース |
RPC | エージェント インターフェース | エージェント インターフェース |
C++ | AgentsClient | 利用できません |
C# | AgentsClient | 利用できません |
Go | AgentsClient | 利用できません |
Java | AgentsClient | AgentsClient |
Node.js | AgentsClient | AgentsClient |
PHP | 利用不可 | 利用できません |
Python | AgentsClient | AgentsClient |
Ruby | 利用不可 | 利用できません |
音声認識の改善のためのエージェント設計
自動音声適応を有効にした後、それを有効活用するようにエージェントを構築できます。次のセクションでは、エージェントのトレーニング フレーズ、エンティティに一定の変更を加えると音声認識がどのように改善されるかを説明します。
トレーニング フレーズ
- 「stuffy nose」のようなフレーズを使ってトレーニング フレーズを定義した場合、ユーザーの発声は、よく似た発音の「stuff he knows」ではなく確実に「stuffy nose」と認識されます。
- 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
を使用します。
手動による音声適応
手動音声適応を使用すると、フローまたはページの音声適応フレーズを手動で構成できます。また、手動音声適応が有効になっている場合は、自動音声適応によって生成された暗黙的な音声コンテキストもオーバーライドされます。
フローレベルとページレベルの音声適応の設定には階層関係があります。つまり、デフォルトでは、ページはフローレベルから音声適応の設定を継承し、ページにカスタマイズされた設定がある場合、より細かいページレベルで常にフローレベルをオーバーライドします。
音声適応の設定の場合、フローレベルの設定とページレベルの設定を個別に有効にできます。 フローレベルの適応設定が有効でない場合でも、ページレベルで [Customize] を選択して、特定のページで手動音声適応を有効にできます。同様に、フローレベルの設定で手動音声適応を無効にした場合、[Customize] が選択されているフロー内のページには影響しません。
ただし、フローレベルの設定とページレベルの設定は個別に無効にすることはできません。フローで手動音声適応が有効になっている場合は、[Customize] での選択を通じて、フローの下のページを無効にすることはできません。そのため、フロー内のページで手動音声適応と自動音声適応を混在させる場合は、フローレベルで手動音声適応を有効にせず、ページレベルの適応設定のみを使用する必要があります。適応のケースに使用するフローとページの設定の組み合わせについては、次の表をご覧ください。
ターゲット効果 | 適応設定に推奨される使用 |
---|---|
フローの自動適応を無効にする | フレーズセットがない有効なフロー(フロー内のページはデフォルトでフロー設定を使用します)。 |
ページの自動適応を無効にする | フローが無効で、ページが有効([Customize] が選択されています)になっていて、フレーズセットがありません。 |
フロー内のすべてのページで手動音声適応のみを使用する | フローが有効です。フローとは異なるフレーズセットを使用する必要があるページをカスタマイズします。 |
フロー内で自動適応と手動適応を混在させる | フローが無効です。手動適応を適用するページをカスタマイズします。 |
フロー内のすべてのページで自動音声適応のみを使用する | フローが無効です。 |
手動音声適応を有効または無効にする
フローレベルまたはページレベルで手動音声適応を有効または無効にするには:
フローの設定
- Dialogflow CX Console を開きます。
- GCP プロジェクトを選択します。
- [Flows] セクションのフローにカーソルを合わせます。
- オプション ボタンをクリックします。
- プルダウン メニューで [フローの設定] を選択します。
- [Enable manual speech adaptation] チェックボックスオンするかオフにします。
- フレーズセット表でフレーズセットを編集、追加、削除する
- [保存] をクリックします。
ページ設定
- Dialogflow CX Console を開きます。
- GCP プロジェクトを選択します。
- [ページ] セクションでページにカーソルを合わせます。
- オプション ボタンをクリックします。
- プルダウン メニューで [Page Settings] を選択します。
- デフォルトでは [Use flow level] が選択されており、選択されている場合、このページに対してフローレベルの適応フレーズが再利用されます。[Customize] を選択して、フローレベル設定とは異なる適応フレーズを構成できます。フローレベルで手動音声適応が無効になっている場合でも、そのフロー内のページに対して [Customize] オプションを使用して手動音声適応を有効にして構成できます。
- 適応フレーズセットの表でフレーズセットを編集、追加、削除する
- [保存] をクリックします。
音声認識の改善のための手動フレーズセット構成
1. 単語とフレーズ
適応フレーズセットでは、音声クラストークンを参照して、1 つの単語または複数の単語のフレーズを定義できます。たとえば、「great rate」、「track number is $OOV_CLASS_ALPHANUMERIC_SEQUENCE」、「$FULLPHONENUM」などのフレーズを追加できます。これらの指定されたフレーズは、発音的に似ている他のフレーズよりも、音声文字変換される可能性が高くなります。ブーストなしで複数単語のフレーズを追加すると、バイアスはフレーズ全体とフレーズ内の連続する部分の両方に適用されます。一般に、フレーズの数を少なくして、音声適応なしで音声認識を正しくしようとしているフレーズのみを追加する必要があります。Speech-to-Text でフレーズがすでに正しく認識されている場合は、このフレーズを音声適応の設定に追加する必要はありません。ページまたはフローで Speech-to-Text によって誤って認識されるフレーズがいくつかある場合は、対応する適応設定に正しいフレーズを追加できます。
認識エラーの修正例
音声適応を使用して認識の問題を修正する方法の例を次に示します。スマートフォン デバイス取引エージェントを設計しているとします。エージェントが最初の質問「お困りの内容を選択してください。」を行った後に、ユーザーが「sell phones」や「cell phone」などと言うとします。音声適応を使用して両方のフレーズの認識精度を向上させるにはどうしたらよいでしょうか。
適応設定に両方のフレーズを含めた場合、音が類似していると Speech-to-Text が混乱する可能性があります。2 つのフレーズのうち 1 つだけを指定した場合、Speech-to-Text がもう 1 つのフレーズを誤って認識する可能性があります。両方のフレーズの音声認識の精度を向上させるには、「sell phones」と聞こえる場合と「cell phone」と聞こえる場合を区別できるように Speech to-Text により多くのコンテキスト上の手がかりを提供する必要があります。たとえば、「sell phones」を「how to sell phones」や「want to sell phones」や「do you sell phones」などの発話の一部として使用することがあり、「cell phone」を「purchase cell phone」、「cell phone bill」、「cell phone service」などの発話の一部として使用することがあることに気付くでしょう。元の短いフレーズ「cell phone」や「sell phones」ではなく、より正確なフレーズをモデルに提供すると、Speech-to-Text は、動詞フレーズとしての「sell phone」は「how to」、「want to」、「do you」などの語句の後に続く可能性が高く、名詞句としての「cell phone」は「purchase」の後に続いたり、「bill」や「service」の前に置かれたりする可能性が高いことを学習します。したがって、適応フレーズを構成する経験則として、通常は、「sell phone」のみを含めるよりも、「how to sell phones」や「do you sell phones」などのより正確なフレーズを提供する法が適切です。
2. 音声クラストークン
自然言語の単語とは別に、音声クラストークンへの参照をフレーズに埋め込むこともできます。音声クラストークンは、通常、文章作成で特定の形式に従う一般的なコンセプトを表します。たとえば、「123 Main Street」などの住所における住所番号の場合、通常、完全にスペルアウトされたバージョンの「one-hundred twenty-three」ではなく、数値形式の「123」が住所番号に表示されます。特に英数字シーケンスの場合、音声文字変換の結果に特定の書式設定が予想される場合は、サポートされているクラストークンのリストを参照して、お使いの言語とユースケースで使用可能なトークンを確認してください。
ページにシステム エンティティへの参照を含むインテント ルートまたはパラメータがすでに存在する場合は、以下に一般的なシステム エンティティと音声クラストークンのマッピングに関するリファレンス テーブルを示します。
システム エンティティ | 音声クラストークン |
---|---|
@sys.date |
$MONTH $DAY $YEAR |
@sys.date-time |
$MONTH $DAY $YEAR |
@sys.date-period |
$MONTH $DAY $YEAR |
@sys.time |
$TIME |
@sys.time-period |
$TIME |
@sys.age |
$OPERAND |
@sys.number |
$OPERAND |
@sys.number-integer |
$OPERAND |
@sys.cardinal |
$OPERAND |
@sys.ordinal |
$OPERAND |
@sys.percentage |
$OPERAND |
@sys.duration |
$OPERAND |
@sys.currency-name |
$MONEY |
@sys.unit-currency |
$MONEY |
@sys.phone-number |
$FULLPHONENUM |
@sys.zip-code |
$POSTALCODE または $OOV_CLASS_POSTALCODE |
@sys.address |
$ADDRESSNUM $STREET $POSTALCODE |
@sys.street-address |
$ADDRESSNUM $STREET $POSTALCODE |
@sys.temperature |
$OOV_CLASS_TEMPERATURE |
@sys.number-sequence |
$OOV_CLASS_DIGIT_SEQUENCE |
@sys.flight-number |
$OOV_CLASS_ALPHANUMERIC_SEQUENCE |
3. ブースト値
ブースト値なしでフレーズを追加しても、十分なバイアス効果が得られない場合は、ブースト値を使用して音声適応のバイアス効果をさらに強化できます。
ブーストは、0 より大きく 20 以下の値に設定すると、さらにバイアスが適用されます。ブーストが空または 0 の場合、デフォルトのバイアス効果により、フレーズ全体とフレーズ内の連続する部分が認識されやすくなります。たとえば、「are you open to sell phones」というブーストされていないフレーズは、そのフレーズを認識することに役立ち、「I sell phones」や「Hi are you open」のような類似フレーズの認識にも役立ちます。
ポジティブ ブーストが適用されると、バイアス効果はより強くなりますが、それは正確なフレーズにのみ適用されます。たとえば、ブーストされた「sell phones」というフレーズは、「can you sell phones」を認識する役に立ちますが、「do you sell any phones」は認識できません。
こうした理由から、ブーストがあるフレーズとないフレーズの両方を指定すると、最良の結果が得られます。
ブースト値を大きくすると、認識漏れ(音声に出現する単語や語句が Speech-to-Text で正しく認識されない)が少なくなります(アンダーバイアス)。ただし、ブーストを使用すると過剰検出(音声に出現していない単語や語句が音声文字変換に出力される)の可能性は高くなります(オーバーバイアス)。通常は、2 つのバイアスの問題の間で適切なトレードオフ ポイントを見つけるために、バイアスのフレーズを微調整する必要があります。
フレーズに対するブースト値を微調整する方法について詳しくは、ブーストに関する Cloud Speech のドキュメントをご覧ください。
自動音声適応と手動音声適応の使い分け
一般に、音声適応によってエージェントの音声認識品質が改善するかどうか不明な場合(明確な音声文字変換のエラーパターンを念頭に置いていない場合)は、手動音声適応に復元する前に、まず自動音声適応を試すことをおすすめします。より微妙な判断を行う場合は、自動音声適応と手動音声適応のどちらを選択するかを判断する際に、次の要素を検討してください。
1. フォーム入力
自動音声適応は、フォーム パラメータに ABNF 文法コンテキストを使用し、エンティティ タイプに基づいて文法ルールを適用するため、フォーム入力で十分に機能します。手動音声適応はまだ ABNF 文法をサポートしていないため、一般的にフォーム入力ページには手動音声適応よりも自動音声適応が優先されます。システム エンティティ パラメータと音声クラス トークンでサポートされている単純な正規表現エンティティのみを含むページの場合、手動音声適応を使用して、正規表現エンティティの調整を必要としない自動音声適応に似たバイアス効果を実現することもできます。
2. ページまたはフローの遷移の複雑さ
インテント ルートが少数のシンプルなページまたはフローの場合、自動音声適応によって代表的なバイアス フレーズが生成され、パフォーマンスが比較的良好になる可能性があります。
ただし、ページまたはフローに大量のインテント ルートがある場合(ページの場合は、フローレベルのルートの数も考慮する必要があります)、またはいずれかのインテントに過度に長いまたは短い重要ではないトレーニングがある場合(たとえば、文全体や、1 つまたは 2 つの音節のみがある 1 つの単語など)、音声適応モデルがこれらのフレーズでうまく機能しない可能性が極めて高くなります。まず、非常に複雑なオープンエンドのページでは、空のフレーズセットを使用して手動で音声適応を有効にすることで、音声適応を無効にする必要があります(空の適応のオーバーライド)。その後、認識品質を向上させるために Speech-to-Text に提供する必要がある特殊な曖昧さのないフレーズがあるかどうかを評価します。
この複雑さの問題のもう 1 つの兆候は、自動音声適応が有効になっている場合に、幅広いアンダーバイアスやオーバーバイアスの問題があることです。上記の場合と同様に、まず特定のページで音声適応を無効にしてテストする必要があります。音声適応を無効にしても誤った動作が続く場合は、修正するフレーズを音声適応の設定に追加できます。必要に応じてブースト値を追加して、バイアス効果をさらに強化することもできます。
音声適応のテスト
特定のトレーニング フレーズやエンティティ一致についてエージェントの音声適応機能をテストする場合は、会話の最初の音声による一致のテストをすぐに開始しないでください。一致をテストする前に、会話全体に対して音声のみまたはイベント入力のみを使用してください。この方法でテストした場合のエージェントの動作は、実際の本番環境における会話での動作と類似しています。
制限事項
次の制限が適用されます。
- 音声適応は、すべての音声モデルと言語の組み合わせで利用できるわけではないことにご注意ください。Cloud Speech の言語サポートページを参照して、音声モデルと言語の組み合わせに「モデル適応」を利用できるかどうかを確認します。
現在、手動音声適応では、カスタムクラスや ABNF 文法はサポートされていません。これらの適応機能を利用するには、自動音声適応を有効にするか、ランタイムのインテント検出リクエストを使用します。
同じブースト値でも音声モデルや言語によって動き異なる場合があるため、複数の言語や音声モデルを使用するエージェントに対して手動で構成する場合は注意が必要です。現在、手動による音声適応はエージェントのすべての言語に適用されるため、多言語エージェントでは言語に依存しないフレーズのみを使用するか、各言語を個別のエージェントに分割する必要があります。通常、デフォルトのバイアス動作(ブーストを提供しないか、ブーストを 0 にする)は、すべての言語に対して適切に機能するため、認識のユースケースにより強力なバイアスが必要でない限り、言語固有のブースト値を構成する必要はありません。ブースト値を微調整する方法について詳しくは、こちらの Cloud Speech-to-Text ガイドをご覧ください。
- 長い文字シーケンスを認識することは挑戦です。1 回のターンでキャプチャされる文字数は、入力音声の品質に直接関係します。正規表現エンティティのガイドラインのすべてに沿っており、手動音声適応の設定で関連する音声クラス トークンを使用しようとしても、シーケンス全体を 1 回のターンでキャプチャするのが難しい場合は、次のようなより対話型の代替手段を検討してください。
- データベースに対してシーケンスを検証する際は、日付、名前、電話番号など、その他の収集されたパラメータを相互参照し、不完全な一致を許容することを検討してください。たとえば、ユーザーに注文番号を尋ねるだけでなく、電話番号も尋ねます。これで、Webhook が注文ステータスに対してデータベースをクエリする際に、まず電話番号に依拠し、それからそのアカウントに最も近くマッチする注文を返すことができます。これにより、Dialogflow で「ABC」が「AVC」として誤って聴き取る可能性がありますが、それでも正しい注文ステータスを返します。
- 非常に長いシーケンスの場合は、途中で一時停止するようにエンドユーザーに促して、bot が期待どおりに確認できるようにするフローの設計を検討してください。