カスタム認識の制約の定義Define custom recognition constraints

音声認識のカスタム制約を定義して使う方法について説明します。Learn how to define and use custom constraints for speech recognition.

重要な API: SpeechRecognitionTopicConstraintSpeechRecognitionListConstraintSpeechRecognitionGrammarFileConstraintImportant APIs: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint

音声認識では、少なくとも 1 つの制約を使って、認識できるボキャブラリを定義する必要があります。Speech recognition requires at least one constraint to define a recognizable vocabulary. 制約が指定されていない場合、ユニバーサル Windows アプリで定義済みのディクテーション文法が使われます。If no constraint is specified, the predefined dictation grammar of Universal Windows apps is used. 音声認識」をご覧ください。See Speech recognition.

制約を追加するAdd constraints

SpeechRecognizer.Constraints プロパティを使って、音声認識エンジンに制約を追加します。Use the SpeechRecognizer.Constraints property to add constraints to a speech recognizer.

ここでは、アプリ内から使われる 3 種類の音声認識制約について取り上げます。Here, we cover the three kinds of speech recognition constraints used from within an app. (Cortana voice コマンドの制約については、「 cortana で音声コマンドを使用してフォアグラウンドアプリを起動する」を参照してください)。(For Cortana voice command constraints, see Launch a foreground app with voice commands in Cortana.)

音声認識エンジンはそれぞれ 1 つの制約コレクションを保持できます。Each speech recognizer can have one constraint collection. 制約は次の組み合わせのみが有効です。Only these combinations of constraints are valid:

  • 単一トピック制約 (ディクテーションまたは Web 検索)A single-topic constraint (dictation or web search)
  • Windows 10 Fall Creators Update (10.0.16299.15) 以降では、単一トピック制約は、一覧の制約と組み合わせることができますFor Windows 10 Fall Creators Update (10.0.16299.15) and newer, a single topic constraint can be combined with a list constraint
  • 一覧の制約または文法ファイルの制約の組み合わせ。A combination of list constraints and/or grammar-file constraints.

重要

認識プロセスを開始する前に制約をコンパイルするには、SpeechRecognizer.CompileConstraintsAsync メソッドを呼び出します。Call the SpeechRecognizer.CompileConstraintsAsync method to compile the constraints before starting the recognition process.

Web 検索文法の指定 (SpeechRecognitionTopicConstraint) Specify a web-search grammar (SpeechRecognitionTopicConstraint)

トピック制約 (ディクテーションまたは Web 検索文法) は音声認識エンジンの制約コレクションに追加する必要があります。Topic constraints (dictation or web-search grammar) must be added to the constraints collection of a speech recognizer.

注意

SpeechRecognitionListConstraintSpeechRecognitionTopicConstraint と共に使い、ディクテーション中に使うと予想されるドメイン固有の一連のキーワードを指定することにより、ディクテーションの精度を上げることができます。You can use a SpeechRecognitionListConstraint in conjunction with a SpeechRecognitionTopicConstraint to increase dictation accuracy by providing a set of domain-specific keywords that you think are likely to be used during dictation.

以下では、制約コレクションに Web 検索文法を追加しています。Here, we add a web-search grammar to the constraints collection.

private async void WeatherSearch_Click(object sender, RoutedEventArgs e)
{
    // Create an instance of SpeechRecognizer.
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // Listen for audio input issues.
    speechRecognizer.RecognitionQualityDegrading += speechRecognizer_RecognitionQualityDegrading;

    // Add a web search grammar to the recognizer.
    var webSearchGrammar = new Windows.Media.SpeechRecognition.SpeechRecognitionTopicConstraint(Windows.Media.SpeechRecognition.SpeechRecognitionScenario.WebSearch, "webSearch");


    speechRecognizer.UIOptions.AudiblePrompt = "Say what you want to search for...";
    speechRecognizer.UIOptions.ExampleText = @"Ex. 'weather for London'";
    speechRecognizer.Constraints.Add(webSearchGrammar);

    // Compile the constraint.
    await speechRecognizer.CompileConstraintsAsync();

    // Start recognition.
    Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();
    //await speechRecognizer.RecognizeWithUIAsync();

    // Do something with the recognition result.
    var messageDialog = new Windows.UI.Popups.MessageDialog(speechRecognitionResult.Text, "Text spoken");
    await messageDialog.ShowAsync();
}

プログラムによる一覧の制約の指定 (SpeechRecognitionListConstraint)Specify a programmatic list constraint (SpeechRecognitionListConstraint)

一覧の制約は音声認識エンジンの制約コレクションに追加する必要があります。List constraints must be added to the constraints collection of a speech recognizer.

次の点に留意してください。Keep the following points in mind:

  • 制約コレクションには、複数の一覧の制約を追加できます。You can add multiple list constraints to a constraints collection.
  • IIterable<String> を実装する任意のコレクションを文字列値に使用できます。You can use any collection that implements IIterable<String> for the string values.

以下では、プログラムによって一覧の制約として単語の配列を指定し、それを音声認識エンジンの制約コレクションに追加しています。Here, we programmatically specify an array of words as a list constraint and add it to the constraints collection of a speech recognizer.

private async void YesOrNo_Click(object sender, RoutedEventArgs e)
{
    // Create an instance of SpeechRecognizer.
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // You could create this array dynamically.
    string[] responses = { "Yes", "No" };


    // Add a list constraint to the recognizer.
    var listConstraint = new Windows.Media.SpeechRecognition.SpeechRecognitionListConstraint(responses, "yesOrNo");

    speechRecognizer.UIOptions.ExampleText = @"Ex. 'yes', 'no'";
    speechRecognizer.Constraints.Add(listConstraint);

    // Compile the constraint.
    await speechRecognizer.CompileConstraintsAsync();

    // Start recognition.
    Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();

    // Do something with the recognition result.
    var messageDialog = new Windows.UI.Popups.MessageDialog(speechRecognitionResult.Text, "Text spoken");
    await messageDialog.ShowAsync();
}

SRGS 文法の制約の指定 (SpeechRecognitionGrammarFileConstraint)Specify an SRGS grammar constraint (SpeechRecognitionGrammarFileConstraint)

SRGS 文法ファイルは音声認識エンジンの制約コレクションに追加する必要があります。SRGS grammar files must be added to the constraints collection of a speech recognizer.

SRGS Version 1.0 は、音声認識用に XML 形式の文法を作るための業界標準のマークアップ言語です。The SRGS Version 1.0 is the industry-standard markup language for creating XML-format grammars for speech recognition. ユニバーサル Windows アプリでは、SRGS 以外にも音声認識文法を作るための手段が用意されていますが、SRGS を使って文法を作ると、複雑な音声認識シナリオの場合は、特に優れた結果が得られます。Although Universal Windows apps provide alternatives to using SRGS for creating speech-recognition grammars, you might find that using SRGS to create grammars produces the best results, particularly for more involved speech recognition scenarios.

SRGS 文法は、アプリの複雑な音声操作を構築するときに役立つ機能をすべて備えています。SRGS grammars provide a full set of features to help you architect complex voice interaction for your apps. たとえば、SRGS 文法を使って以下を実行できます。For example, with SRGS grammars you can:

  • 認識する単語と語句の発声順序を指定します。Specify the order in which words and phrases must be spoken to be recognized.
  • 認識される複数のリストと語句から単語を組み合わせるCombine words from multiple lists and phrases to be recognized.
  • 他の文法にリンクするLink to other grammars.
  • 音声入力に一致させるために使用される可能性を高くするか低くするために、別の単語または語句に重みを割り当てるAssign a weight to an alternative word or phrase to increase or decrease the likelihood that it will be used to match speech input.
  • オプションの単語または語句を含めるInclude optional words or phrases.
  • 文法に一致しない不規則な音声や背景の雑音など、指定していない入力や予期していない入力を除外する特別な規則を使う。Use special rules that help filter out unspecified or unanticipated input, such as random speech that doesn't match the grammar, or background noise.
  • セマンティクスを使って、音声認識がアプリにもたらす意味を定義します。Use semantics to define what speech recognition means to your app.
  • 文法内で、または用語集へのリンクを通じて発音を指定するSpecify pronunciations, either inline in a grammar or via a link to a lexicon.

SRGS の要素と属性について詳しくは、XML 文法の SRGS リファレンスに関するページをご覧ください。For more info about SRGS elements and attributes, see the SRGS Grammar XML Reference . SRGS 文法の作成を開始するには、「 基本的な XML 文法を作成する方法」を参照してください。To get started creating an SRGS grammar, see How to Create a Basic XML Grammar.

次の点に留意してください。Keep the following points in mind:

  • 制約コレクションには、複数の文法ファイルの制約を追加できます。You can add multiple grammar-file constraints to a constraints collection.
  • SRGS 規則に準拠した XML ベースの文法ドキュメントには .grxml ファイル拡張子を使います。Use the .grxml file extension for XML-based grammar documents that conform to SRGS rules.

この例では、srgs.grxml という名前のファイル (後述) に定義された SRGS 文法を使います。This example uses an SRGS grammar defined in a file named srgs.grxml (described later). ファイルのプロパティで、[パッケージ アクション][コンテンツ] に設定され、[出力ディレクトリにコピー][常にコピーする] に設定されています。In the file properties, the Package Action is set to Content with Copy to Output Directory set to Copy always:

private async void Colors_Click(object sender, RoutedEventArgs e)
{
    // Create an instance of SpeechRecognizer.
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // Add a grammar file constraint to the recognizer.
    var storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Colors.grxml"));
    var grammarFileConstraint = new Windows.Media.SpeechRecognition.SpeechRecognitionGrammarFileConstraint(storageFile, "colors");

    speechRecognizer.UIOptions.ExampleText = @"Ex. 'blue background', 'green text'";
    speechRecognizer.Constraints.Add(grammarFileConstraint);

    // Compile the constraint.
    await speechRecognizer.CompileConstraintsAsync();

    // Start recognition.
    Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();

    // Do something with the recognition result.
    var messageDialog = new Windows.UI.Popups.MessageDialog(speechRecognitionResult.Text, "Text spoken");
    await messageDialog.ShowAsync();
}

この SRGS ファイル (srgs.grxml) は、解釈タグを含みます。This SRGS file (srgs.grxml) includes semantic interpretation tags. これらのタグは、文法に合致するデータをアプリに返すしくみです。These tags provide a mechanism for returning grammar match data to your app. 文法は、 音声認識 (SISR) 1.0 仕様の WORLD WIDE WEB コンソーシアム (W3C) セマンティック解釈に準拠している必要があります。Grammars must conform to the World Wide Web Consortium (W3C) Semantic Interpretation for Speech Recognition (SISR) 1.0 specification.

以下では、"yes" と "no" のバリエーションをリッスンします。Here, we listen for variants of "yes" and "no".

<grammar xml:lang="en-US" 
         root="yesOrNo"
         version="1.0" 
         tag-format="semantics/1.0"
         xmlns="http://www.w3.org/2001/06/grammar">

    <!-- The following rules recognize variants of yes and no. -->
      <rule id="yesOrNo">
         <one-of>
            <item>
              <one-of>
                 <item>yes</item>
                 <item>yeah</item>
                 <item>yep</item>
                 <item>yup</item>
                 <item>un huh</item>
                 <item>yay yus</item>
              </one-of>
              <tag>out="yes";</tag>
            </item>
            <item>
              <one-of>
                 <item>no</item>
                 <item>nope</item>
                 <item>nah</item>
                 <item>uh uh</item>
               </one-of>
               <tag>out="no";</tag>
            </item>
         </one-of>
      </rule>
</grammar>

制約の管理Manage constraints

制約コレクションが認識のために読み込まれると、アプリでは制約の IsEnabled プロパティを true または false に設定して、認識操作でどの制約を有効にするかを管理できます。After a constraint collection is loaded for recognition, your app can manage which constraints are enabled for recognition operations by setting the IsEnabled property of a constraint to true or false. 既定の設定は trueです。The default setting is true.

通常は、認識操作ごとに制約を読み込んでアンロードしコンパイルするよりも、いったん読み込んでから必要に応じて有効または無効にする方が効率的です。It's usually more efficient to load constraints once, enabling and disabling them as needed, rather than to load, unload, and compile constraints for each recognition operation. 必要に応じて IsEnabled プロパティを使います。Use the IsEnabled property, as required.

制約の数を制限すると、音声認識エンジンが音声入力の一致を探すときに必要となるデータ量を制限できます。Restricting the number of constraints serves to limit the amount of data that the speech recognizer needs to search and match against the speech input. これにより、音声認識のパフォーマンスと精度の両方が向上します。This can improve both the performance and the accuracy of speech recognition.

現在の認識操作のコンテキストでアプリが想定できる語句に基づいて、有効にする制約を決定します。Decide which constraints are enabled based on the phrases that your app can expect in the context of the current recognition operation. たとえば、現在のアプリのコンテキストが色を表示することである場合、おそらく動物の名前を認識する制約を有効にする必要はありません。For example, if the current app context is to display a color, you probably don't need to enable a constraint that recognizes the names of animals.

発声できる内容をユーザーに伝えるには、SpeechRecognizer.UIOptions プロパティを使って設定できる、SpeechRecognizerUIOptions.AudiblePrompt プロパティと SpeechRecognizerUIOptions.ExampleText プロパティを使います。To prompt the user for what can be spoken, use the SpeechRecognizerUIOptions.AudiblePrompt and SpeechRecognizerUIOptions.ExampleText properties, which are set by means of the SpeechRecognizer.UIOptions property. 音声認識の操作時に何を発声できるか準備しておくことによって、アクティブな制約に一致する語句をユーザーが発声する可能性が高まります。Preparing users for what they can say during the recognition operation increases the likelihood that they will speak a phrase that can be matched to an active constraint.

サンプルSamples