Определение настраиваемых ограничений распознаванияDefine custom recognition constraints

Из этой статьи вы узнаете, как определять и использовать настраиваемые ограничения для распознавания речи.Learn how to define and use custom constraints for speech recognition.

Важные API-интерфейсы: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraintImportant APIs: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint

Для распознавания речи требуется по крайней мере одно ограничение, чтобы определить распознаваемый словарь.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.

Здесь мы рассмотрим три вида ограничений распознавания речи, используемых в пределах приложения.Here, we cover the three kinds of speech recognition constraints used from within an app. (Для ограничений по голосовым командам Кортаны см. статью Запуск приложения переднего плана с голосовыми командами в Кортане.)(For Cortana voice command constraints, see Launch a foreground app with voice commands in Cortana.)

Распознаватель речи может иметь одну коллекцию ограничений.Each speech recognizer can have one constraint collection. Только эти комбинации ограничений являются допустимыми:Only these combinations of constraints are valid:

  • Ограничение по одной теме (диктовка или веб-поиск)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.

Задание грамматики веб-поиска (SpeechRecognitionTopicConstraint)Specify a web-search grammar (SpeechRecognitionTopicConstraint)

Ограничения по теме (грамматика диктовки или веб-поиска) необходимо добавить к коллекции ограничений распознавателя речи.Topic constraints (dictation or web-search grammar) must be added to the constraints collection of a speech recognizer.

Примечание

Вы можете использовать SpeechRecognitionListConstraint вместе с SpeechRecognitionTopicConstraint для повышения точности диктовки путем предоставления набора ключевых слов конкретного домена, которые с большой вероятностью будут использоваться во время диктовки.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.

Здесь мы добавляем к коллекции ограничений грамматику веб-поиска.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) версии 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.
  • Используйте расширение GRXML для документов грамматик на базе XML, соответствующих правилам SRGS.Use the .grxml file extension for XML-based grammar documents that conform to SRGS rules.

В данном примере используется грамматика SRGS, определенная в файле с именем srgs.grxml (описано далее).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. Грамматики должны соответствовать спецификации семантической интерпретации консорциум W3C (W3C) для распознавания речи (СИСР) 1,0 .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.

Чтобы предложить пользователю, что сказать, используйте свойства SpeechRecognizerUIOptions.AudiblePrompt и SpeechRecognizerUIOptions.ExampleText, которые задаются с помощью свойства SpeechRecognizer.UIOptions.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