C# .Net Framework 4语音识别&x2013;使用小语法时出现误报

C# .Net Framework 4语音识别&x2013;使用小语法时出现误报,c#,.net,vb.net,speech-recognition,speech-to-text,C#,.net,Vb.net,Speech Recognition,Speech To Text,我正在使用System.Speech.Recognition中的类来开发一个应用程序,它使用一个非常小的语法,只包含几个句子。用户说出其中一句话,应用程序应该识别用户说了哪句话。但是,如果用户说了一些不同的话,而不是这些句子中的一句,应用程序应该什么也不识别 在使用SpeechRecognitionEngine类进行实验时,我注意到一个问题:当用户只说出句子的开头,然后继续使用其他单词时,识别引擎将其识别为预定义的句子之一。例如,假设语法只有两个句子: “狗吃它的食物” “猫坐在沙发上” 如果用

我正在使用System.Speech.Recognition中的类来开发一个应用程序,它使用一个非常小的语法,只包含几个句子。用户说出其中一句话,应用程序应该识别用户说了哪句话。但是,如果用户说了一些不同的话,而不是这些句子中的一句,应用程序应该什么也不识别

在使用SpeechRecognitionEngine类进行实验时,我注意到一个问题:当用户只说出句子的开头,然后继续使用其他单词时,识别引擎将其识别为预定义的句子之一。例如,假设语法只有两个句子:

  • “狗吃它的食物”
  • “猫坐在沙发上”
  • 如果用户说“狗在睡觉”,识别引擎会将其识别为“狗在吃它的食物”。我想让引擎认识到这不是上面两句话中的一句。承认“没有”

    我已经按照建议尝试添加了听写语法。然而,在此之后,应用程序在识别预定义的句子时遇到了问题。用户说“狗吃了它的食物”,但识别引擎识别出其他东西,比如“狗很粗鲁”

    最后一件事并不让我感到惊讶,因为当我使用windows附带的语音识别软件(当然,它使用System.speech)时,我听写时的识别效果非常差,即使在我对它进行了培训之后(我使用win 7)

    有什么建议吗

    更新: 正如NineBerry指出的,检查结果的置信度(RecognitionResult.Confidence)非常有用。当用户说预定义的句子“狗吃它的食物”时,我得到的置信水平比他说“狗在睡觉”时要高(分别为0.9和0.7)


    然而,如果最后一个词是错的,比如“狗吃它的腿”,我会得到与预定义的“狗吃它的食物”一样的信心。所以我仍然有一个问题。

    如果你想验证语音中是否存在关键字,语音识别并不是一个好的解决方案,因为它不能可靠地过滤其他语音。在有其他语言的情况下很难识别小语法。有一些特定的关键字定位算法,这些算法的设计是有目的的。这样的算法允许您为关键字配置一个阈值,以便在假警报和误检测之间取得平衡

    例如,请参见的相应部分

    关键词定位算法的一个例子是谷歌在Android上使用的“Ok Google”关键词短语。请注意,这是一个静态的关键字短语,而不是语法,因为即使是谷歌也不能可靠地实现语法识别


    一旦识别出关键词,您就可以切换到语法识别和peform用户任务。

    您是否查看了语音识别结果的“置信度”属性,以确定是否可以使用阈值来确定命中率?@NineBerry-您给了我一个很好的建议。查看我的更新。相关:我认为关键字定位不适合我的应用程序,因为用户每次只需说一句话(从一组三句话中)。该应用程序与许多其他语音控制应用程序类似,但有一个很大的区别:我不需要只识别用户说的是哪句话;我还需要核实他说的是否正确。不幸的是,在试图识别句子时,SpeechRecognitionEngine似乎更重视句子的开头而不是结尾。