前言
当我们测试语音识别相关的系统,衡量性能是非常重要的,一般语音识别准确性最常用的度量标准是字错误率,比如录音笔中的转写功能或者输入法语音输入等等,其实就是语音识别提供的服务,因此也需要测试相关的指标。
今天在这里要给大家介绍的是语音识别率到底有哪些指标以及如何计算
正文
测试语音识别系统时,系统可能会产生三种类型的错误
- 替换:其中一个单词被错误地识别为另一个单词
- 删除:其中原文中有一个单词漏识别
- 插入:识别出一个在原文中不存在的单词
那么常用的度量标准字错误率是怎么计算的呢,除了字错误率还有没有其他度量标准
1、字错率(WER/CER)
WER:Word Error Rate,词错率,
CER:Character Error Rate,字符错误率
这两个有什么区别呢?
- 如像英文一样的语言,被测的最小单元是一个word,不是一个字符,所以应该用WER,举个例子 “hello” 表示一个词作对比,不应该h,e,l,l,o拆分出来再做对比,同样比如法语,俄语,德语,西班牙语等;
- 那么另外一种语言,像中文一样的语言,被测的最小单元是一个字符,所以应该用CER,举个例子 “你好” 表示两个字符,同样比如韩语,日语,泰语等;
但是计算方法是一样的。计算公式如下
WER = (S D I ) / N
= (S D I ) / (S D C )
- S为替换的字数
- D为删除的字数
- I为插入的字数
- C为正确的字数
- N为 (替换 删除 正确)的字数,以原文为参考
* N的计算方式,很容易误以为是 识别结果总字数
2、字正确率(Word Correct)
一般国内宣传用的多的识别率达到多少就是用这个
计算公式
W.Corr = C / N
* 只计算了识别正确的字,没有管多出来的字(插入)
3、字准确率 (Word Accuracy)
其实字准确率才是更具有代表语音识别系统的性能评测标准
计算公式如下
W.Acc = (C - I)/ N
* 当 I(插入)= 0 时,W.Acc = W.Corr
在实际demo测试中可能会碰到WER会大于100%的时候,这是因为有插入字,所以理论上WER有可能大于100%,可能被测的场景下样本量太少或者就是无用暴力型测试对比导致的问题,一般实际场景下特别是大样本量的时候基本不太可能出现。如果WER真的太大了就表示此系统就不可用了,所以一般可用的ASR系统都在一个比较低的值。
4、句错误率(Sentence Error Rate)
句子识别错误的个数,除以总的句子个数即为SER
计算公式如下
SER = 错误句数 / 总句数
但这是不太常用的评估指标,它将每个句子视为正确或不正确的单个样本。
如果句子中的任何单词被错误假设,则改句子被判断为错误。SER被简单地计算为错误句子占总句子的比例
5、OOV rate (Out-of-vocabulary)
percent of word tokens in test data that are not contained in the ASR system dictionary
实在抱歉只能粘贴英文原文,大概意思就是无法识别出系统词库外的词的百分比
计算公式如下
OOV = OOV words / N = D / N
* 如有解释有误,请指出并改正
那接下来已举几个例来看不同场景下的识别率便于大家了解(识别数据非实际语音测试结果,仅供举例)
只有删除的情况
原文:今天天气怎么样明天天气好吗
识别:今天天气怎么 明天 气好吗
存在替换和删除的情况
原文:这是虽在北方的风雪的压迫下却保持着倔强挺立的一种树
识别:这是谁在北方 风雪的压迫下却保持着觉强听力的一种书
替换 删除 插入的情况
原文:如果美是专指婆娑或横斜逸出之类而言那么白杨树算不得树中的好女子
识别:如果美 专指婆娑或从协议出之类而言啊那么白杨树算不得数猪的好女子
全部错误(结果字数 < 语料字数)
原文:那是力争上游的一种树
识别:异中输
全部错误(结果字数 > 语料字数)
原文:哪怕只有碗来粗细罢
识别:婆娑的姿态屈曲盘旋的虬枝
顺便举一个英文转写的准确率
小编在这里使用的是python的difflib库,脚本代码大致的思路是
- 预处理 - 符号换行空格处理和两种语言分类处理(比如中文和英文)
- 对比并输出 - difflib库功能
- 匹配计算 - 输出html结果进行匹配过滤
或者还可以使用其他库或者工具也可,顺便列举一下,供参考
代码依赖库或者工具
- python的difflib自带库 (基于Gestalt Pattern Matching算法,是一个串匹配算法用于确定所述相似性两者的字符串)
- python的Lenvenshtein第三方库
- HResults 现成的HTK工具
还有别的方法或者工具的话推荐一下,期待小伙伴们留言
注:参考
https://en.wikipedia.org/wiki/Word_error_rate
https://en.wikipedia.org/wiki/Gestalt_Pattern_Matching
https://en.wikipedia.org/wiki/Levenshtein_distance
https://labrosa.ee.columbia.edu/doc/HTKBook21/node142.html