在语音识别期间是否可以看到剩余的有效选择?

时间:2013-06-03 04:29:08

标签: .net voice-recognition system.speech.recognition

我正在使用System.Speech.Recognition.Choices类,我希望有一种方法向用户呈现给定语音会话剩余的可能选择(我不确定这里是否正确的术语) 。

例如,如果选择是“热”,“热”和“关”,那么我想显示所有三个列表。如果用户启动“th”声音,我想只显示前两个声音,并且当用户继续时,其他选择会下降。基本上,我想显示剩余的可能选择。

这可能吗?

谢谢! 埃里克

1 个答案:

答案 0 :(得分:2)

根据您的语法,System.Speech.Recognition.RecognitionResult应具有Alternate属性,该属性显示有序识别列表,这些识别是最有信心的识别替代方案。许多支持语音的应用程序使用它来消除可能的错误识别歧义。

// Handle the SpeechRecognized event. 
void SpeechRecognizedHandler(object sender, SpeechRecognizedEventArgs e)
{
  if (e.Result == null) return;

  // Display the recognition alternates for the result.
  foreach (RecognizedPhrase phrase in e.Result.Alternates)
  {
    Console.WriteLine(" alt({0}) {1}", phrase.Confidence, phrase.Text);
  }
}

另一种可能的解决方案(在某些情况下运行良好)是使用语法中的垃圾规则充当外卡(这不适用于上面的示例)。由于通配符(又名GARBAGE规则),以下内容会识别出“请打开我的消息”之类的内容。

<rule id="WildcardExample" scope="private">
    <item>open</item>
    <ruleref special="GARBAGE"/>
    <item>message</item>
    <ruleref special="GARBAGE"/>    
</rule>

另一种选择是在语法中指定选择(使用一个标签)并使用替代选项。例如:

<rule id="ListExample" scope="private">
    <item>I'd like a</item>
    <one-of>
        <item>chocolate</item>
        <item>coco</item>
        <item>vanilla</item>
    </one-of>
    <item>please</item>
</rule>

如果用户说“我喜欢巧克力请”,您可以使用替代品的置信度值来检查并查看是否需要显示一个询问“你想要巧克力或可可吗?”的对话框。

// Handle the SpeechRecognized event. 
    void SpeechRecognizedHandler(object sender, SpeechRecognizedEventArgs e)
    {
      if (e.Result == null) return;

      // Display the recognition alternates for the result.
      foreach (RecognizedPhrase phrase in e.Result.Alternates)
      {
        if (.2 > Math.Abs(e.Result.Confidence-phrase.Confidence && phrase.Text.Equals("coco"))
        {
           //Set chocolate or coco grammar/rule
           Console.WriteLine(" Did you mean chocolate or coco?");
           break;
        }
      }
    }

您的最终选项(尽管没有详细记录)是使用Hypothesis events。语音引擎在生成识别结果的过程中基本上调用此回调。这适合你上面的TH例子。然而,在实践中,很难设计一个能够跟上这些事件并仍能提供良好(又非缓慢)用户体验的UI。