Почему мои результаты распознавания Microsoft Speech имеют уровень достоверности, всегда равный -1? - PullRequest
3 голосов
/ 07 марта 2011

Я использую Microsoft Speech SDK для реализации программного обеспечения, использующего распознавание голоса.

Я передаю движку распознавания вполне нормальную грамматику, но при запуске движка и правильном произнесении он распознает то, что я говорюно возвращенный объект Result имеет значение достоверности -1.

Кроме того, все объекты SemanticValue, содержащиеся в результате, также имеют достоверность -1.

Я не могу найти след значениятакой результат на связанных страницах MSDN, и на самом деле просто написано, что типичные значения достоверности должны быть между 0 и 1.

Что означает значение -1?Это как-то связано с грамматикой?

Редактировать: Дополнительная информация:

  • Я использую классы System.Speech для взаимодействия с механизмом распознавания голоса.
  • Механизм распознавания - Microsoft English Recognizer v5.1.
  • Я запускаю программу на XP, и поэтому Speech SDK также имеет 5.1.
  • Вход - это микрофонный вход: я не нашел следов возможности подать этот механизм распознавания с помощьюфайл, хотя это бы мне очень помогло.

1 Ответ

2 голосов
/ 16 марта 2011

В SAPI SREngineConfidence - это попытка передать фразу доверия от речевого механизма, специфичного для поставщика, независимому от механизма клиенту SAPI. У SREngineConfidence есть интересное поведение, описанное в «Руководстве по портированию ядра SR Microsoft SDK версии 5.1 SR»

http://msdn.microsoft.com/en-us/library/ee431799(v=VS.85).aspx#_Toc503606917 говорит:

Это возможно для уверенности в себе информация для включения в результаты признания. На каждую фразу элемент есть две уверенности поля, которые может установить двигатель. Эти есть уверенность (трехуровневая) поле и SREngineConfidence (с плавающей запятой) поле. Если двигатель явно не устанавливает ни один из этих значения, SAPI будет пытаться производить разумные значения по умолчанию для них. Это будет производить значения доверия усреднение уровней для каждого из слова в фразе или свойстве, и установит SREngineConfidence значения до -1.0.

и позже говорит:

Если это поле не используется, двигатель устанавливает это доверие -1,0.

Еще один ресурс, который может дать вам некоторое представление: http://gotspeech.net/forums/thread/3613.aspx. В одном сообщении говорится:

В принципе, SREngineConfidence оценка - это значение от 0,0 до 1,0 {более высокое значение означает более высокое доверие}. Но старые версии Двигатели SR, такие как 5.1, не соблюдают это контракт точно, и я не думаю, значение действительно может быть использовано с эти двигатели. Только Привет, Средний, и низкие оценки в другой уверенности поле можно использовать.

Если я правильно помню, вам нужно больше последняя версия двигателя SR, вроде версии, которые поставляются с Microsoft Office 2003 или Vista, чтобы получить значимое число в Поле SREngineConfidence.

Редактирование:

Я считаю, что System.Speech.Recognition действительно является оболочкой .net для SAPI (см. http://msdn.microsoft.com/en-us/magazine/cc163663.aspx).. Я подозреваю, что приведенные выше комментарии, описывающие уровни достоверности -1, могут по-прежнему применяться к вам при использовании System.Speech. Я предполагаю, что -1, который вы видите - это та же самая проблема, о которой говорилось.

Насколько я понимаю, в XP не было распознавателя. Версии Microsoft Office пришли с ним. Итак, я не уверен, какой двигатель распознавателя вы действительно используете. У вас установлен Office 2003? или у вас установлен сторонний движок типа Dragon?

Вы говорите, что у вас установлен распознаватель 5.1. Ссылка GotSpeech.NET выше говорит:

Но более старые версии двигателей SR как 5.1 не соблюдайте этот контракт точно, и я не думаю, что ценность действительно может использоваться с этими двигателями.

Я бы предложил попробовать следующее:

Еще один кусок, чтобы добавить. Вот короткий пример для распознавания из файла WAV:

    SpeechRecognitionEngine myRecognizer = new SpeechRecognitionEngine();
    Grammar myGrammar = CreatePizzaGrammar();       // uses GrammarBuilder to create a pizza ordering grammar
    myRecognizer.LoadGrammar(myGrammar);
    myRecognizer.SetInputToWaveFile("LargeCheese.wav");     // recording of ordering a pizza
    RecognitionResult result = myRecognizer.Recognize();
    string s = result.Text;
    float confidence = result.Confidence;
...