System.Speech.Recognition替代匹配和置信度值

时间:2016-05-01 09:37:25

标签: c# .net speech-recognition

我使用System.Speech.Recognition命名空间来识别口语句子。我对识别器提供的替代句子以及他们的置信度分数感兴趣。来自[RecognitionResult.Alternates][1]属性的文档:

  

识别替代品按其信心值排序   属性。给定短语的置信度值表示   短语与输入匹配的概率。用这个短语   最高置信度值是最有可能匹配的短语   输入

     

每个置信度值应单独评估,不得进行评估   参考其他替代品的置信度值。

但是,当我以自信的方式打印识别出来的文本,以及替代方案与他们的信心匹配时,我面临两个我无法理解的属性:首先,替代品不是根据信心排序的(尽管第一个是匹配公认的文本),其次,对我来说这是一个更大的问题,公认的文本不是具有最高分数的替代方案,这似乎与我上面引用的文档相矛盾。

我在SpeechRecognized事件处理程序中的(不完整)代码示例:

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

和相应的输出:

Recognized text =  She had said that fit and Gracie Wachtel are all year, score = 0.287724
alt(0.287724) She had said that fit and Gracie Wachtel are all year
alt(0.287724) she had said that fit and gracie wachtel are all year
alt(0.2955212) she had said that faith and gracie wachtel are all year
alt(0.287133) she had said that fit and gracie Wachtell are all year
alt(0.1644379) she had said that fit and gracie wachtel earlier
alt(0.3254312) jihad said that fit and gracie wachtel are all year
alt(0.2726361) she had said that fit and gracie wachtel are only are
alt(0.2867217) she had said that fail and gracie wachtel are all year
alt(0.2565451) she had said that fit and gracie watchful are all year
alt(0.2854537) she had said that fate and gracie wachtel are all year

编辑要澄清置信度分数的含义,并指出我的结果与文档相矛盾的原因,请参阅RecognizedPhrase.Confidence Property文档中的以下信息。大胆的部分是我的补充:

  

信心分数并不表示a的绝对可能性   短语被正确识别。相反,置信度得分提供了一个   比较多重识别的相对准确性的机制   替换给定输入。这有利于返回最多   准确的识别结果。例如,如果识别的短语具有   置信度为0.8,这并不意味着这句话有80%   有可能成为输入的正确匹配。这意味着   短语比其他短语更可能是输入的正确匹配   结果的置信度小于0.8。

     

除非你有,否则信心分数本身没有意义   替代结果可以与之相比较   识别操作或从先前识别的相同输入。   这些值用于对返回的替代候选短语进行排名   RecognitionResult对象上的Alternates属性

     

置信度值相对且对每个识别引擎都是唯一的。   两个不同的识别引擎返回的置信度值不能   进行有意义的比较。

     

语音识别引擎可以为其分配低置信度分数   由于各种原因,包括背景干扰,   言语不清,或者是意料之外的单词或单词序列。如果你的   应用程序正在使用SpeechRecognitionEngine实例,您可以   修改接受语音输入的置信度或   使用UpdateRecognizerSetting方法之一拒绝。置信度   由SpeechRecognizer管理的共享识别器的阈值是   与用户配置文件关联并存储在Windows注册表中。   应用程序不应该为注册表写入更改   共享识别器的属性。

     

RecognitionResult对象的Alternates属性包含一个   有序的RecognizedPhrase对象集合,每个对象都是一个   可能匹配识别器的输入。 替补是   从最高到最低置信度排序

2 个答案:

答案 0 :(得分:2)

我只能给你一个通用答案(我不知道微软语音识别的代码) 识别使用许多算法来获得最佳解决方案。在一个完美的世界中,每个算法应该能够加权转换的句子的置信度分数。事实上,情况几乎从未如此:

每种算法都存在缺陷,并且对转换的信心产生精确影响可能是一个真正令人头痛的问题。

全球句子置信度是其各个部分的算术组合。通常远比内部置信度模式简单。

使用的某些算法,如专有名词识别,并不一定能明显改变信心(特别是在单个孤立的句子中)。

在许多层面(语音,单词,句子结构......)测量置信度。对于句子结构不一致的完美语音识别的信心是什么?

排序算法在列表顶部移动更好的识别通常不会改变置信度,只会排序/排除交替。

所以文档是正确的,不能在替补之间比较信心。

信心的潜在用途是什么(除了作者想要说明的事实:我们可以让您轻松使用非常复杂和近似的技术)。几乎没有。您可能可以消除过低的置信水平(低于某个阈值),除非没有信心达到此阈值。

答案 1 :(得分:2)

此处的置信度属性是来自内部模型的“likelihood”输出值(通常语言建模由“人工智能数学模型”组成,如Hidden Markov ModelsMFCC)。< / p>

但语音识别SDK会根据获取模型输出并验证其他附加参数,根据不同的置信度为您提供列表。对于此SDK,在其语法中符合格式良好的规则。