【问题标题】:Accuracy of MS System.Speech.Recognizer and the SpeechRecognitionEngineMS System.Speech.Recognizer 和 SpeechRecognitionEngine 的准确性
【发布时间】:2013-09-16 06:24:51
【问题描述】:

我目前正在通过从 xml 文件加载一个非常简单的规则来测试 SpeechRecognitionEngine。实际上它是(“解密电子邮件”,“删除加密”)或(“加密电子邮件”,“添加加密”)之间的简单关系。

我已经训练了我的 Windows 7 PC,并且还添加了加密和解密这两个词,因为我意识到它们非常相似。识别器在区分这两者时已经存在问题。

我遇到的问题是它过于频繁地识别事物。我将置信度设置为 0.93,因为当我在安静的房间里说出确切的话时,我的声音有时只能达到 0.93。但是,如果我打开收音机,播音员的声音或歌曲可能意味着这个识别器认为它以超过 0.93 的信心听到了“解密电子邮件”这个词。

也许 Lady Gaga 正在隐藏 Applause 以秘密解密电子邮件 :-)

任何人都可以帮助弄清楚如何做一些事情来使这个识别器可用。

事实上,识别器也将键盘噪音作为“解密电子邮件”。我不明白这怎么可能。

除了我的编辑伙伴之外,MS Speech Microsoft.Speech 和 System.Speech 至少有两个托管命名空间 - 对于这个问题,知道它是 System.Speech 很重要。

【问题讨论】:

  • 这很正常。你没有说你使用的麦克风,它can be critical
  • 我正在使用 Polycom cx100 polycom.com/products-services/products-for-microsoft/… 的麦克风。我训练了桌面引擎,还在记事本上听写了单词,我的准确性得到了提高,但现在它可以在我打字时识别文本。
  • 切换到耳机麦克风。扬声器因拾取外来噪音而臭名昭著。
  • 好的。这是一款很酷的设备,但我意识到,虽然免提很适合通过电话或交流器通话,但它可能不适合语音识别。
  • @darbid - SR 的有趣之处之一是引擎信心!= 准确性。即,引擎可以对 reco 非常有信心,但它仍然是错误的。相反,引擎对 reco 的信心可能很低,但它仍然是正确的。在实践中,我从不使用置信度值(除非它足够高以通过拒绝阈值)。

标签: c# .net vb.net speech-recognition


【解决方案1】:

如果 System.Speech 识别器正在侦听的唯一是“加密电子邮件”,那么识别器将产生 很多 的误报。 (特别是在嘈杂的环境中。)如果您并行添加 DictationGrammar(特别是发音语法),DictationGrammar 将拾取噪音,您可以在事件处理程序中检查语法的(例如)名称以丢弃虚假认可。

一个(子集)例子:

    static void Main(string[] args)
    {
        Choices gb = new Choices();
        gb.Add("encrypt the document");
        gb.Add("decrypt the document");
        Grammar commands = new Grammar(gb);
        commands.Name = "commands";
        DictationGrammar dg = new DictationGrammar("grammar:dictation#pronunciation");
        dg.Name = "Random";
        using (SpeechRecognitionEngine recoEngine = new SpeechRecognitionEngine(new CultureInfo("en-US")))
        {
        recoEngine.SetInputToDefaultAudioDevice();
        recoEngine.LoadGrammar(commands);
        recoEngine.LoadGrammar(dg);
        recoEngine.RecognizeCompleted += recoEngine_RecognizeCompleted;
        recoEngine.RecognizeAsync();

        System.Console.ReadKey(true);
        recoEngine.RecognizeAsyncStop();
        }
    }

    static void recoEngine_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e)
    {
        if (e.Result.Grammar.Name != "Random")
        {
            System.Console.WriteLine(e.Result.Text);
        }
    }

【讨论】:

  • 非常感谢您的建议,我会尝试一下,然后再回复您,但这听起来是个好主意。我正在使用一个 XML 文件和一个包含更多单词或短语的规则,“加密文档”只是其中之一。但我仍然认为你的建议会奏效。
  • 是的,这极大地改善了事情。识别现在不是猜测。对于因类似情况而来到这里的任何人,我认为这是使事情正常进行或在我的情况下工作/识别更少的必要条件。非常感谢你。我浏览了您的博客,并会就您的一篇文章提出一个新问题。
  • 我正在使用 System.Speech.Recognition 并按照您的建议减少误报,效果很好。但是,现在我在识别 20 分钟后遇到了 TargetInvocationException。我想尝试 Microsoft.Speech.Recognition 但没有 DictationGrammar 类。 Microsoft.Speech.Recognition 中是否有与 DictationGrammar 等效的内容?
  • @DiegoSahagun No. Microsoft.Speech.Recognition 使用不同的 SR 引擎that does not support dictation
  • 谢谢@EricBrown,你知道有没有办法减少 Microsoft.Speech.Recognition 的误报?也许我应该为我的桌面版本问题创建一个问题,我还没有找到任何相关的东西。
猜你喜欢
  • 2015-10-22
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多