Я пытаюсь использовать SpeechRecognizer с пользовательской грамматикой для обработки следующего шаблона:Почему значение распознавания речи Microsoft SemanticValue.Confidence всегда 1?
«Можете ли вы открыть {item}?" где {item} использует DictationGrammar.
Я использую речевой движок, встроенный в Vista и .NET 4.0.
Я хотел был бы иметь возможность получить доверительные отношения для возвращаемого SemanticValues. См. Пример ниже.
Если я просто использовать «recognizer.AddGrammar (новый DictationGrammar())», я могу просматривать e.Results.Alternates и просматривать доверительные значения каждого заместителя. Это работает, если DictationGrammar находится на верхнем уровне .
Состоящая пример:
- Можете ли вы открыть Firefox? .95
- Можете ли вы открыть Fairfax? .93
- Можете ли вы открыть факс факсом? .72
- Можете ли вы создать Firefox? .85
- Можете ли вы связаться с Fairfax? .63
Но если построить грамматику, который ищет "Может вы открыты {semanticValue Key = 'пункт' GrammarBuilder = новый DictationGrammar()}?", То я получаю это:
- Может вы открываете Firefox? .91 - Семантика = {GrammarBuilder.Name = "вы можете открыть"}
- Можете ли вы открыть Fairfax? .91 - Семантика = {GrammarBuilder.Name = "вы можете открыть"}
- Можете ли вы открыть факс? .91 - Семантика = {GrammarBuilder.Name = "вы можете открыть"}
- Можете ли вы создать Firefox? .85 - Семантика = null
- Можете ли вы прикрепить Fairfax? .63 - Семантика = null
0,91 показывает мне, насколько уверенно, что он соответствует шаблону «Можете ли вы открыть {item}?». но не различает дальше.
Однако, если я потом посмотреть на e.Result.Alternates.Semantics.Where (s => s.Key == "элемент"), а также просматривать их доверие, я получаю это:
- Firefox 1,0
- Fairfax 1,0
- файл по факсу 1,0
Который не помогает мне много.
То, что я действительно хочу что-то вроде этого, когда я осматриваю Уверенность согласующих SemanticValues:
- Firefox +0,95
- Фэйрфакс.93
- файл факс .85
Похоже, что это должно работать таким образом ...
Я делаю что-то не так? Есть ли способ сделать это в рамках Speech?
Я надеюсь, что есть некоторые встроенные механизм, так что я могу сделать это «правильный» путь.
Что касается другого подхода, который, вероятно, работы ...
- Используйте SemanticValue подход, чтобы соответствовать по образцу
- Для чего-либо, что соответствует по этому образцу, извлекать необработанное аудио для {пункта } (используйте RecognitionResult.Words и RecognitionResult.GetAudioForWordRange)
- Run необработанный звук для {п} через SpeechRecognizer с DictationGrammar, чтобы получить доверие
... но это больше обработки, чем я действительно хочу.
Сколько различных элементов вы хотите поддержать? Это известный конечный список? Использование грамматики диктовки означает, что вы не знаете, что кто-то может захотеть открыть, поэтому вы готовитесь к тому, чтобы они говорили что-нибудь «вы можете открыть Foobar», «Можете ли вы открыть мороженое». Функция распознавания не может дать вам семантический анализ на {item}, потому что грамматика диктовки не определяет никакого. Вам необходимо построить грамматику для идентификации {item} и добавить к ней информацию семантического сопоставления с помощью SemanticResultValue(). –
См. Примеры на http://msdn.microsoft.com/en-us/library/microsoft.speech.recognition.semanticresultvalue.aspx –
За исключением того, что реакция свободной формы - именно то, что я хочу. Я создаю интерактивную систему, которая распознает то, что она «знает», а что нет, а затем запрашивает разъяснения для неизвестных. Например, «Можете ли вы открыть Chrome?» «Извините, я не знаю, как открыть хром. Можете ли вы сказать, как его открыть?» «Нажмите на меню« Пуск », программы, Google, затем запустите Google Chrome». –