【问题标题】:Why does my Microsoft Speech recognition results come with confidence levels always equal to -1?为什么我的 Microsoft 语音识别结果的置信度始终等于 -1?
【发布时间】:2015-11-10 03:22:17
【问题描述】:

我正在使用 Microsoft Speech SDK 来实现一个使用语音识别的软件。

我为识别引擎提供了一个非常正常的语法,但是当启动引擎并说出正确的内容时,它会识别我所说的内容,但返回的 Result 对象的 Confidence 值为 -1。

此外,结果中包含的所有 SemanticValue 对象也具有 -1 置信度。

我在相关的MSDN页面中找不到这种结果的含义,实际上只是写了典型的置信度值应该在0到1之间。

-1 值是什么意思?和语法有关系吗?

编辑:附加信息:

  • 我正在使用 System.Speech 类与语音识别引擎进行交互。
  • 识别引擎是Microsoft English Recognizer v5.1。
  • 我在 XP 上运行程序,因此 Speech SDK 也是 5.1。
  • 输入是麦克风输入:我没有发现向这个识别引擎提供文件的可能性,尽管它对我有很大帮助。

【问题讨论】:

  • 您可能想澄清一些事情。您使用的是 SAPI 还是 System.Speech 或 Microsoft.Speech?你在哪个操作系统版本上运行?您正在运行什么识别器版本?您是否使用共享或 inproc 识别器?你的语法是如何创建的?您使用的是麦克风输入还是 wav 文件?我不知道问题出在哪里,但更多信息可能会帮助您获得一些答案。

标签: speech-recognition


【解决方案1】:

在 SAPI 中,SREngineConfidence 尝试将短语置信度从供应商特定的语音引擎传递到与引擎无关的 SAPI 客户端。 SREngineConfidence 在“Microsoft Speech SDK Version 5.1 SR Engine Vendor Porting Guide”中描述了一些有趣的行为

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 score 是一个介于 0.0 和 1.0 之间的值 {更高的价值意味着更高 信心}。但是旧版本的 像 5.1 这样的 SR 引擎不尊重这一点 精确地合同,我不认为 该值确实可以与 那些引擎。只有 Hi、Medium、 其他信心得分低 字段可用。

如果我没记错的话,你需要更多 最新版本的 SR 引擎,例如 Microsoft 附带的版本 Office 2003 或 Vista 获得 中有意义的数字 SREngineConfidence 字段。

编辑:

我相信 System.Speech.Recognition 确实是一个围绕 SAPI 的 .net 包装器(请参阅http://msdn.microsoft.com/en-us/magazine/cc163663.aspx)。我怀疑上面引用的描述置信度为 -1 的 cmets 可能仍然适用于使用 System.Speech 的您。我猜您看到的 -1 与提到的问题相同。

我的理解是 XP 不包含识别器。 Microsoft Office 的版本随之而来。因此,我不确定您真正运行的是哪个识别器引擎。你有没有安装Office 2003?或者您是否安装了像 Dragon 这样的 3rd 方引擎?

你说你安装了识别器 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;

【讨论】:

  • 感谢您的评论和回答。但是我没有使用 SAPI。我正在使用 System.Speech。我更新了答案以提供您要求的详细信息。
  • 要使用 wav 文件输入运行识别器,请使用 SpeechRecognitionEngine.SetInputToWaveFile() - msdn.microsoft.com/en-us/library/…
  • 天哪,你是我的天才……我找了这么久!!
  • 我的问题没有解决,但你给我看SetInputToWaveFile() 对我来说同样值得。但是,如果您有解决我当前 System.Speech 课程问题的想法,我将很高兴收到您的来信!
  • 尝试更新版本的识别器。我敢打赌,您的代码会正常工作,而您只是看到来自旧识别器的 SAPI 工件。这是我的猜测。
猜你喜欢
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多