【发布时间】:2015-11-15 16:09:00
【问题描述】:
我正在使用 System.Speech.Recognition 中的类来开发一个应用程序,该应用程序使用的语法非常小,仅由几句话组成。用户说出这些句子中的一个,应用程序应该识别出用户说的是哪一个。但是,如果用户说了一些不同的东西,而不是这些句子之一,那么应用程序应该什么都不会识别。
在尝试 SpeechRecognitionEngine 类时,我注意到一个问题:当用户只说出句子的开头,然后继续说其他单词时,识别引擎会将其识别为预定义句子之一。例如,假设语法只有两个句子:
- “狗吃它的食物”。
- “猫坐在沙发上”。
如果用户说“狗在睡觉”,识别引擎会将其识别为“狗在吃东西”。我希望引擎能够识别出这不是上述两句话之一。识别“无”。
按照here 的建议,我尝试添加一个 DictationGrammar。但是,在此之后,该应用程序在识别预定义句子时遇到了问题。用户说“狗吃了它的食物”,但识别引擎识别出其他内容,例如“狗很粗鲁”。
最后这件事并不让我感到惊讶,因为当我使用 windows 附带的语音识别软件(当然,使用 System.Speech)时,我在听写时得到的识别结果很差,即使我已经训练了它(我用的是win 7)。
有什么建议吗?
更新:
正如 NineBerry 所指出的,检查结果的 Confidence 级别 (RecognitionResult.Confidence) 非常有帮助。当用户说出预定义的句子“狗吃它的食物”时,我得到的置信度比他说“狗在睡觉”时更高(分别为~0.9 vs ~0.7)。
但是,如果只有 最后一个词是错误的,例如“狗吃掉它的腿”,我会得到与预定义的“狗吃掉它的食物”相同的置信度。所以我还是有问题。
【问题讨论】:
-
您是否查看了语音识别结果的“置信度”属性,看看您是否可以使用阈值来确定命中?
-
@NineBerry - 你给了我一个很好的建议。查看我的更新。
标签: c# .net vb.net speech-recognition speech-to-text