カスタム音声用の表示テキスト形式のトレーニング データを準備する方法

Azure AI 音声サービスは、音声認識と表示テキスト形式の 2 つのコンポーネントとして表示できます。 音声認識では、音声を語彙テキストに書き起こし、その語彙テキストを表示テキストに変換します。

テキストを表示する字句に対する音声認識フローのダイアグラム。

表示テキスト形式機能をサポートしているロケールを次に示します: da-DK、de-DE、en-AU、en-CA、en-GB、en-HK、en-IE、en-IN、en-NG、en-NZ、en-PH、en-SG、en-US、es-ES、es-MX、fi-FI、fr-CA、fr-FR、hi-IN、it-IT、ja-JP、ko-KR、nb-NO、nl-NL、pl-PL、pt-BR、pt-pt、sv-SE、tr-TR、zh-CN、zh-HK。

既定の表示テキストの書式設定

表示テキスト パイプラインは、一連の表示形式ビルダーで構成されます。 各ビルダーは、ITN、大文字化、不適切表現フィルターなどの表示形式タスクに対応しています。

  • テキストの逆正規化 (ITN) - 音声フォーム番号のテキストを表示形式に変換します。 例: "I spend twenty dollars" -> "I spend $20"
  • 大文字化 - エンティティ名、頭字語、または文の最初の文字を大文字にします。 例: "she is from microsoft" -> "She is from Microsoft"
  • 不適切表現フィルター - 文から不適切な単語をマスクまたは削除します。 たとえば、"abcd" が不適切な単語だと仮定すると、その単語は不適切表現フィルターによってマスクされます: "I never say abcd" -> "I never say ****"

Microsoft は汎用表示処理タスクのため表示テキスト パイプラインのベース ビルダーを保守しています。 音声サービスを利用する場合は、既定でベース ビルダーを入手できます。 すぐに利用できる書式設定に関する詳細については、「表示テキスト形式」を参照してください。

カスタム表示テキストの書式設定

Microsoft が保守しているベース ビルダーのほかに、カスタム表示テキスト書式設定ルールを定義して、特定のシナリオ用に表示テキスト書式設定パイプラインをカスタマイズできます。 カスタム表示テキスト書式設定ルールは、カスタム表示テキスト書式設定ファイルに定義されます。

  • カスタム ITN - 顧客からのルール ベースのカスタム ITN モデルを適用することで、ベース ITN の機能を拡張します。
  • カスタム書き換え - 顧客からのルール ベースのモデルに基づいて、あるフレーズを別のフレーズに書き換えます。
  • カスタム不適切表現フィルター - 顧客からの不適切な単語リストに基づいて、不適切な表現の処理を行います。

表示テキスト書式設定パイプラインの順序をこの図に示します。

表示形式ビルダーのダイアグラム。

カスタム ITN

パターン ベースのカスタム ITN の理念は、確認したい最終的な出力を指定できることです。 音声サービスは、単語がどのように話されるかを予測し、予測される話し言葉の表現を指定された出力形式にマップします。

カスタム ITN モデルは、一連の ITN ルールで構築されます。 ITN ルールとは、次で説明するパターン文字列のような正規表現です。

  • 入力文字列の一致パターン
  • 出力文字列の必要な形式

Microsoft で提供される既定の ITN ルールが最初に適用されます。 既定の ITN モデルの出力は、カスタム ITN モデルの入力として使用されます。 カスタム ITN モデル内の一致アルゴリズムでは、大文字と小文字は区別されません。

カスタム ITN ルールを使用したパターン一致には 4 つのカテゴリがあります。

リテラルを含むパターン

たとえば、開発者が JO:500 という英数字フォームで名前を付けたアイテム (製品など) を持っているとします。 音声サービスは、ユーザーが文字の部分を J O と言う場合、joe と言う場合、数字の部分を five hundredfive zero zerofive oh oh または five double zero と言う場合を把握し、これらの可能性をすべて JO:500 にマップするモデルを構築することです (コロンの挿入など)。

表示テキスト書式設定ファイルで 1 行に 1 つのルールを指定することで、パターンを並行して適用できます。 2 つのルールを指定した表示テキスト書式設定ファイルの例を次に示します:

JO:500
MM:760

ワイルドカードを含むパターン

複数の方法ですべての可能性を完全につづることなく、一連の英数字項目 (JO:500JO:600JO:700 など) を参照できます。

文字範囲は [...] という表記で指定できるため、JO:[5-7]00 は 3 つのパターンを書き出すことと同じです。

使用できるワイルドカードの一連のアイテムもあります。 このうち、\d は任意の数字を意味します。 つまり、JO:\d00JO:000JO:100、その他 JO:900 までをカバーします。

正規表現と同様に、ITN ルールには次のような複数の事前定義済み文字クラスがあります:

  • \d - '0' to '9' までの数字に一致し、直接出力します
  • \l - 文字に一致 (大文字と小文字は区別されません) し、小文字に変換します
  • \u - 文字に一致 (大文字と小文字は区別されません) し、大文字に変換します
  • \a - 文字に一致 (大文字と小文字は区別されません) し、直接出力します

また、構文的に特別な意味を持つ文字を参照するための次のようなエスケープ表現もあります。

  • \\ - 一致し、文字 \ を出力します
  • \( および \)
  • \{ および \}
  • \|
  • \+\? および \*

正規表現スタイルの表記を含むパターン

パターン書き込みの柔軟性を高めるため、正規表現に似た、代替手段と Kleene-closure を持つフレーズの構文がサポートされてます。

  • フレーズは (...) のようにかっこで示されます - かっこは文字どおりには一致する文字としてカウントされません。
  • (AB|CDE) のように、| 文字でフレーズ内の代替手段を示すことができます。
  • ? でフレーズに接尾辞を付けて省略可能であることを示し、+ で繰り返し可能であることを示し、* でその両方を示すことができます。 これらの文字ではフレーズにのみ接尾辞を付けることができ、個々の文字に付けることはできません (これは多くの正規表現の実装よりも厳しい制限です)。

(AB|CD)-(\d)+ のようなパターンは、「AB-9」や「CD-22」のようなコンストラクトを表し、A B nineC D twenty two (または C D two two) のような話し言葉に展開されます。

明示的な置換を含むパターン

一般的な理念は、"出力がどのように見える必要があるかを示し、音声サービスはユーザーでそれをどのように言うか明らかにする "というものです。ただし、シナリオによっては予測不可能な言い方があったり、音声サービスの背景にあるルールにギャップがあったりするため、必ずしもうまくいくとは限りません。 たとえば、頭文字や頭字語には口語的な発音があります - ZPIzippy として話される場合があります。 この場合、ZPI-\d\d のようなパターンは、ユーザーが zippy twenty two と言った場合には機能しない可能性があります。 このような状況の場合、表示テキスト形式の表記 {spoken>written} があります。 この特殊なケースは {zippy>ZPI}-\d\d と書き込むことができます。

これは、音声マッピング ルールでまだサポートされていないものを処理するのに便利です。 たとえば、\d0-\d0 というパターンを書き込むと、システムは "-" が範囲を意味することを理解し、twenty to thirty のように to と発音することが期待されている場合があります。 しかし、そうではない可能性もあります。 そのため、\d0{to>-}\d0 のようにより明示的なパターンを書き込んで、ダッシュがどのように読み取られるかを指定できます。

また、> 以降を省略すると、認識されるが無視される単語を示すこともできます。 つまり、{write} (\u.)+ のようなパターンは write A B CA.B.C 出力を認識します-- write パーツがドロップします。

カスタム ITN の例

数字のグループ化

6 桁の数字を 2 つのグループに分け、その間に '-' 文字を追加するには、次の操作を行います。

ITN ルール: \d\d\d-\d\d\d サンプル: "cadence one oh five one fifteen" -> "cadence 105-115"

フィルム名の書式設定

Space: 1999 は、次の内容をサポートする有名なフィルムです。

ITN ルール: Space: 1999 サンプル: "watching space nineteen ninety nine" -> "watching Space: 1999"

置換を含むパターン

ITN ルール: \d[05]{ to >-}\d[05] サンプル: fifteen to twenty -> 15-20

カスタム書き換え

一般的には、入力文字列の場合、書き換えモデルは、入力文字列の original phrase を各書き換えルールの new phrase に対応する入力文字列に置き換えようとします。 書き換えモデルは書き換えルールの集合体です。

  • 書き換えルールは、元のフレーズと新しいフレーズの 2 つのフレーズのペアです。
  • 2 つのフレーズはタブ文字で区切られます。 例: original phrase{TAB}new phrase
  • 元のフレーズは一致し (大文字と小文字は区別されません)、新しいフレーズに置換されます (大文字と小文字は区別されます)。 元のフレーズ内の文法上の句読文字は一致時に無視されます。
  • 書き換えルールに競合が発生した場合、original phrase の長い方が一致として使用されます。

書き換えモデルは、既定で文法上の大文字化をサポートしており、en-US のようなロケールでは文の最初の文字が大文字化されます。 音声認識要求で、表示テキスト書式設定の大文字化機能がオフになっている場合、この機能はオフになります。

文法上の句読点

文法上の句読文字は、文やフレーズを区切り、文やフレーズの読み方を明確にするために使用します。

. , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ،

文法上の句読点のルールを次に示します。

  • サポートされている句読文字は、スペースが続く場合、または文やフレーズの先頭や末尾にある場合の文法上の句読点用です。 たとえば、x. y. (.y の間にスペースを含みます) は文法上の句読点です。
  • 単語の途中にある句読文字 (zh-cnja-jp を除く) は文法上の句読点ではありません。 その場合は通常文字になります。 たとえば、x.y. は文法上の句読点ではありません。
  • zh-cnja-jp (スペースなしのロケール) では、句読文字が文字の間にある場合でも、常に文法上の句読点として使用されます。 たとえば、中.文. は文法上の句読点です。

カスタム書き換えの例

スペリングの修正

COVID-19 という名前は covered 19 と認識される可能性があります。 covered 19 is a virus の代わりに COVID-19 is a virus が表示されるようにするには、次の書き換えルールを使用します。

#rewrite
covered 19{TAB}COVID-19

名前の大文字化

Gottfried Wilhelm Leibniz はドイツの数学者です。 Gottfried Wilhelm Leibniz が大文字化されるようにするには、次の書き換えルールを使用します。

#rewrite
gottfried leibniz{TAB}Gottfried Leibniz

カスタムの不適切な表現

カスタムの不適切な表現モデルは、カスタムの不適切な表現フレーズ リストを使用する場合以外は、基本の不適切な表現モデルと同じ動作をします。 さらに、カスタムの不適切な表現モデルは、表示テキスト書式設定ファイルで定義されたすべての不適切な表現フレーズと一致させようとします (大文字と小文字は区別されません)。

  • 不適切な表現フレーズは一致します (大文字と小文字は区別されません)。
  • 不適切な表現フレーズ ルールに競合が発生した場合、最も長いものが一致として使用されます。
  • これらの句読文字は不適切な表現フレーズではサポートされていません: . , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ،
  • zh-CN および ja-JP ロケールの場合、英語の不適切な表現フレーズはサポートされていません。 英語の不適切な表現フレーズはサポートされています。 zh-CN および ja-JP ロケール用の不適切な表現フレーズがサポートされています。

音声認識要求設定に応じて、不適切な表現は削除されるかマスクされます。

表示テキスト形式ルール ファイルに不適切な表現が追加され、カスタム モデルのトレーニングが行われると、バッチ音声テキスト変換とリアルタイムの音声テキスト変換の既定の出力に使用されます。

カスタムの不適切な表現の例

こちらは、表示テキスト書式設定ファイルで、不適切な単語やフレーズをマスクする方法の例です。

1 つの不適切な表現の単語のマスクの例

xyz が不適切な単語であるとします。 これを追加するには、次の操作を行います。

#profanity
xyz

テスト サンプルを次に示します。Turned on profanity masking to mask xyz -> Turned on profanity masking to mask ***

不適切なフレーズをマスクする

abc lmn が不適切なフレーズであるとします。 これを追加するには、次の操作を行います。

#profanity
abc lmn

テスト サンプルを次に示します。Turned on profanity masking to mask abc lmn -> Turned on profanity masking to mask *** ***

次のステップ