Speech recognition 为什么我的Microsoft语音识别结果的置信度始终等于-1?

Speech recognition 为什么我的Microsoft语音识别结果的置信度始终等于-1?,speech-recognition,Speech Recognition,我正在使用MicrosoftSpeechSDK实现一个使用语音识别的软件 我给识别引擎提供了一个非常正常的语法,但是当启动引擎并说出正确的话时,它会识别我说的话,但是返回的结果对象的置信值为-1 此外,结果中包含的所有语义值对象也具有-1置信度 我在相关的MSDN页面中找不到这样一个结果的含义,事实上,它只是写了典型的置信值应该在0和1之间 a-1值是什么意思?这和语法有关吗 编辑:其他信息: 我正在使用System.Speech类与语音识别引擎进行交互 识别引擎是Microsoft英语识别器

我正在使用MicrosoftSpeechSDK实现一个使用语音识别的软件

我给识别引擎提供了一个非常正常的语法,但是当启动引擎并说出正确的话时,它会识别我说的话,但是返回的结果对象的置信值为-1

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

我在相关的MSDN页面中找不到这样一个结果的含义,事实上,它只是写了典型的置信值应该在0和1之间

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

编辑:其他信息:

  • 我正在使用System.Speech类与语音识别引擎进行交互
  • 识别引擎是Microsoft英语识别器v5.1
  • 我在XP上运行这个程序,因此SpeechSDK也是5.1
  • 输入是一个麦克风输入:我没有找到任何可能为这个识别引擎提供文件的线索,尽管这会对我有很大帮助

在SAPI中,SREngineConfidence是一种尝试,将短语confidence从特定于供应商的语音引擎传递给独立于引擎的SAPI客户端。Srengine自信在“Microsoft Speech SDK 5.1版SR引擎供应商移植指南”中描述了一些有趣的行为

说:

信心评分是可能的 将列入报告的资料 识别结果。每句话 有两种信心 引擎可以设置的字段。这些 兼有自信(三级) 字段和一个srengineccidence (浮点)字段。如果发动机 不显式设置任何这些 价值观,SAPI将尝试并产生 它们的合理默认值。信息技术 将通过以下方式生成置信值: 平均每个测试的水平 短语或属性中的词语,以及 它将设置srengineccidence 值为-1.0。

后来说:

如果未使用此字段,则 引擎将该置信度设置为-1.0。

另一个可能给你一些见解的资源是。一篇帖子说:

原则上,SRengineccidence 分数是介于0.0和1.0之间的值 {越高的值意味着越高 信心}。但是旧版本的 像5.1这样的高级引擎不支持这一点 合同是精确的,我不认为 该值确实可以用于 那些引擎。只有Hi,Middle, 在另一个方面得分很低 字段是可用的

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

编辑:

我相信System.Speech.Recognition实际上是围绕SAPI的.net包装(请参阅)。我怀疑上面引用的描述-1置信度的评论可能仍然适用于使用System.Speech的用户。我猜你看到的-1和上面提到的是同一个问题

我的理解是XP不包括识别器。它附带了微软Office的版本。因此,我不确定您真正运行的是哪个识别器引擎。您是否安装了Office 2003?或者您是否安装了像Dragon这样的第三方引擎

您说您安装了识别器5.1。上面的GotSpeech.NET链接说:

但是SR引擎的旧版本 比如说5.1不履行这个合同 准确地说,我不认为这有什么价值 真的可以和那些引擎一起使用

我建议尝试以下方法:

  • 在较新的机器上测试相同的代码,可能是Vista或Windows 7,看看条件级别是否正常工作。Vista和更高版本包括识别器引擎
  • 尝试安装较新版本的识别器。您可以安装UCMA或。请注意,它们使用名称空间Microsoft.Speech,而不是System.Speech。看
再加一块。下面是从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还是Microsoft.Speech?您运行的操作系统版本是什么?您运行的识别器版本是什么?您使用的是共享识别器还是inproc识别器?你的语法是如何产生的?您使用的是麦克风输入还是wav文件?我不知道问题是什么,但是更多的信息可能会帮助你得到一些答案。谢谢你的评论和回答。但是,我没有使用SAPI。我正在使用System.Speech。我更新了答案以提供您要求的详细信息。要使用wav文件输入运行识别器,请使用SpeechRecognitionEngine.SetInputToWaveFile()-哦,天哪,你是我的天才。。我找了这么久了!!我的问题没有解决,但是你给我看
SetInputToWaveFile()
对我来说同样值得。然而,如果你有办法用我目前的系统解决这个问题。语音课,我会很高兴收到你的来信!请尝试较新版本的识别器。我打赌你的代码会正常工作,你只是看到一个旧识别器的SAPI工件。这是我的猜测。