C# 为什么Microsoft语音识别SemanticValue.Confidence值始终为1?
我正在尝试使用带有自定义语法的SpeechRecognitor来处理以下模式: “能否打开{item}?”其中{item}使用听写语法 我正在使用Vista和.NET4.0中内置的语音引擎 我希望能够获取返回的语义值的机密信息。见下面的例子C# 为什么Microsoft语音识别SemanticValue.Confidence值始终为1?,c#,.net,speech-recognition,speech,C#,.net,Speech Recognition,Speech,我正在尝试使用带有自定义语法的SpeechRecognitor来处理以下模式: “能否打开{item}?”其中{item}使用听写语法 我正在使用Vista和.NET4.0中内置的语音引擎 我希望能够获取返回的语义值的机密信息。见下面的例子 如果我只使用“recognizer.AddGrammar(new DictationGrammar())”,我就可以浏览e.Results.Alternates并查看每个alternate的置信值。如果听写语法是最高级的,那就行了 虚构的例子: 你能打开
如果我只使用“recognizer.AddGrammar(new DictationGrammar())”,我就可以浏览e.Results.Alternates并查看每个alternate的置信值。如果听写语法是最高级的,那就行了 虚构的例子:
- 你能打开Firefox吗。九十五
- 你能打开费尔法克斯吗。九十三
- 你能打开文件传真吗。七十二
- 你会写Firefox吗。八十五
- 你能锁定费尔法克斯吗。63
- 你能打开Firefox吗。91-Semantics={GrammarBuilder.Name=“您能打开吗”}
- 你能打开费尔法克斯吗。91-Semantics={GrammarBuilder.Name=“您能打开吗”}
- 你能打开文件传真吗。91-Semantics={GrammarBuilder.Name=“您能打开吗”}
- 你会写Firefox吗。85-语义=null
- 你能锁定费尔法克斯吗。63-语义=null
- 火狐1.0
- 费尔法克斯1.0
- 文件传真1.0
- Firefox.95
- 费尔法克斯,93
- 文件传真:85
我希望有一些内在的机制,这样我就可以做它的“正确”的方式 至于另一种可能有效的方法
。。。但这比我真正想做的要多。我认为听写语法只做转录。它在不提取语义的情况下实现了从语音到文本的转换,因为根据定义,听写语法支持所有单词,并且没有任何特定语义映射的线索。您需要使用自定义语法来提取语义。如果您提供SRGS语法或在代码中或使用SpeechServer工具构建SRGS语法,则可以为某些单词和短语指定语义映射。然后,识别器可以提取语义,并为您提供语义信心 您应该能够从识别器获取识别的置信度值,请尝试System.Speech.recognition.RecognitionResult.Confidence Microsoft Server Speech Platform 10.2 SDK附带的帮助文件包含更多详细信息。(这是用于服务器应用程序的Microsoft.Speech API,与用于客户端应用程序的System.Speech API非常相似)请参阅(http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4.)或Microsoft.Speech文档,网址为 对于SemanticValue类,它表示: 基于全语音平台的识别 引擎输出提供有效的实例 对于所有已识别的 输出,即使是没有显式 语义结构 的SemanticValue实例 短语是使用语义获取的 可识别短语上的属性 对象(或从中继承的对象) 它包括(例如识别结果) 为获取的SemanticValue对象 没有语义的已识别短语 结构的特点是: 没有子女(计数为0) Value属性为null 1.0的人工置信水平 (信心十足地返回) 通常,应用程序创建 间接语义值的实例, 通过以下方式将它们添加到语法对象 使用SemanticResultValue,以及 中的SemanticResultKey实例 连接、选择和 GrammarBuilder对象 直接构造 SemanticValue在测试过程中非常有用 强类型文法的创建 当您在语法中使用语义值功能时,您通常会尝试将不同的短语映射到单个意义。在您的情况下,“I.E”或“Internet Explorer”这两个短语应该对应相同的语义。在语法中设置选项,以理解每个可以映射到特定含义的短语。下面是一个简单的Winform示例:
private void btnTest_Click(object sender, EventArgs e)
{
SpeechRecognitionEngine myRecognizer = new SpeechRecognitionEngine();
Grammar testGrammar = CreateTestGrammar();
myRecognizer.LoadGrammar(testGrammar);
// use microphone
try
{
myRecognizer.SetInputToDefaultAudioDevice();
WriteTextOuput("");
RecognitionResult result = myRecognizer.Recognize();
string item = null;
float confidence = 0.0F;
if (result.Semantics.ContainsKey("item"))
{
item = result.Semantics["item"].Value.ToString();
confidence = result.Semantics["item"].Confidence;
WriteTextOuput(String.Format("Item is '{0}' with confidence {1}.", item, confidence));
}
}
catch (InvalidOperationException exception)
{
WriteTextOuput(String.Format("Could not recognize input from default aduio device. Is a microphone or sound card available?\r\n{0} - {1}.", exception.Source, exception.Message));
myRecognizer.UnloadAllGrammars();
}
}
private Grammar CreateTestGrammar()
{
// item
Choices item = new Choices();
SemanticResultValue itemSRV;
itemSRV = new SemanticResultValue("I E", "explorer");
item.Add(itemSRV);
itemSRV = new SemanticResultValue("explorer", "explorer");
item.Add(itemSRV);
itemSRV = new SemanticResultValue("firefox", "firefox");
item.Add(itemSRV);
itemSRV = new SemanticResultValue("mozilla", "firefox");
item.Add(itemSRV);
itemSRV = new SemanticResultValue("chrome", "chrome");
item.Add(itemSRV);
itemSRV = new SemanticResultValue("google chrome", "chrome");
item.Add(itemSRV);
SemanticResultKey itemSemKey = new SemanticResultKey("item", item);
//build the permutations of choices...
GrammarBuilder gb = new GrammarBuilder();
gb.Append(itemSemKey);
//now build the complete pattern...
GrammarBuilder itemRequest = new GrammarBuilder();
//pre-amble "[I'd like] a"
itemRequest.Append(new Choices("Can you open", "Open", "Please open"));
itemRequest.Append(gb, 0, 1);
Grammar TestGrammar = new Grammar(itemRequest);
return TestGrammar;
}
我举例说明了这个问题。评论中没有足够的空间,所以我把它放在上面。看,我想我是在试图使用错误的工具来解决问题。感谢您解释了语音中的整个语义设计是如何工作的。我要寻找的是支持通用模式匹配的东西,它能够1)识别模式,2)识别模式中的组件;“你能不能{动词}这个{名词}”,用一种语法来表示{动词}和另一种语法来表示{名词},然后计算出总的置信度值和过程,我想你可能已经了解了一些东西。我只是向你展示了最基本的使用方法。我现在明白你想做什么了。你可能会有一个创造性的解决方案。我不知道你需要运行音频