.Net Framework 4语音识别–使用小语法时出现误报
本文关键字:语法 Framework 语音识别 Net | 更新日期: 2023-09-27 18:21:56
我正在使用System.Speech.Recognition中的类来开发一个使用非常小的语法的应用程序,该语法只由几个句子组成。用户说出其中一句话,应用程序应该识别用户说了哪句话。然而,如果用户说了一些不同的话,而不是这些句子中的一句,那么应用程序应该不会识别任何内容。
在试用SpeechRecognitionEngine类时,我注意到一个问题:当用户只说句子的开头,然后继续说其他单词时,识别引擎会将其识别为预定义的句子之一。例如,假设语法只有两个句子:
- "狗吃它的食物"
- "猫坐在沙发上"
如果用户说"狗在睡觉",识别引擎就会将其识别为"狗在吃它的食物"。我想让引擎认识到这是上面两句话中的而不是。承认"一无所有"。
我试着按照这里的建议添加了一个DictationGrammar。然而,在这之后,该应用程序在识别预定义的句子方面出现了问题。用户说"狗吃了它的食物",但识别引擎会识别出其他东西,比如"狗很粗鲁"。
最后一件事并不让我感到惊讶,因为当我使用windows附带的语音识别软件(当然,它使用System.speech)时,即使在我训练过之后,我在听写时也会得到非常差的识别结果(我使用win7)。
有什么建议吗?
更新:
正如NineBerry所指出的,检查结果的置信度级别(RecognitionResult.Confidence)非常有用。当用户说预定义的句子"狗吃了它的食物"时,我得到的信心水平高于他说"狗在睡觉"时的信心水平(分别为~0.9和~0.7)。
然而,如果只有最后一个词是错误的,比如"狗吃它的腿",我会得到与预定义的"狗吃他的食物"相同的信心。所以我还是有个问题。
如果您想验证语音中是否存在关键字,语音识别并不是一个很好的解决方案,因为它无法可靠地过滤其他语音。在有其他语音的情况下,很难识别小语法。有一些特定的关键词识别算法,设计时考虑到了目的。这样的算法允许您为关键字配置一个阈值,以在错误警报和错误检测之间取得平衡。
例如,请参阅CMUSphinx文档的相应部分。
关键词识别算法的一个例子是谷歌在安卓系统上使用的"Ok Google"关键词。请注意,这是一个静态的关键短语,而不是语法,因为即使是谷歌也无法可靠地实现语法识别。
一旦识别出关键字,您就可以切换到语法识别和peform用户任务。