语音识别准确率的计算:CER

1. WER 与 CER

WER 表示词错率,CER 表示字错率。一般来说,在汉语语音识别中,字就是最小单位,所以通常用 CER,而英文或手写公式的识别中通常用 WER。

虽然两者略有不同,但核心的计算方式是一样的。


2. 计算方式

CER 计算公式如下: C E R = S + D + I N CER=\frac{S+D+I}{N} CER=NS+D+I其中, N N N 是原字符串的长度, S S S 是替换掉的字符数量, D D D 是删除掉的字符数量, I I I 是额外插入的字符数量。

因此,字错率的取值范围是 [ 0 , ∞ ) [0,\infin) [0,)

字正确率
此外,还有字正确率 C . A c c C.Acc C.Acc 这么个东西,它的公式就是 1 − C E R 1-CER 1CER 因此它可能是负数。


3. 公式推导

直接计算 S , D , I S,D,I S,D,I 很困难,但是有一个显而易见的方法就是动态规划,使用动态规划的方法可以不用直接求出三者的数量,而直接计算 S + D + I S+D+I S+D+I(取最小值),下面来看看推导过程:

首先设 r r r 为原字符串, h h h 为识别字符串。 f [ i ] [ j ] f[i][j] f[i][j] 表示 r r r 到第 i i i 个字符, h h h 到第 j j j 个字符时的 S + D + I S+D+I S+D+I 是多少。

然后进行状态转移,此时我们判断 r [ i + 1 ] r[i+1] r[i+1] h [ j + 1 ] h[j+1] h[j+1],如果它们两个相同,那它就不是 替换 / 删除 / 插入,状态转移方程可以直接写为: f [ i + 1 ] [ j + 1 ] = f [ i ] [ j ] f[i+1][j+1] = f[i][j] f[i+1][j+1]=f[i][j]
而如果这两个字符不相同,那就有 替换 / 删除 / 插入 三种可能:

  1. 对于替换 S S S f [ i + 1 ] [ j + 1 ] f[i+1][j+1] f[i+1][j+1] 可以看作从 r [ i ] r[i] r[i] h [ j ] h[j] h[j] 分别同时增加一个不同的字符,且 S + = 1 S+=1 S+=1,所以此时的值为 S u b = f [ i ] [ j ] + 1 Sub=f[i][j]+1 Sub=f[i][j]+1
  2. 对于删除 D D D f [ i + 1 ] [ j + 1 ] f[i+1][j+1] f[i+1][j+1] 可以看作 h [ i ] h[i] h[i] 没变, r [ i ] r[i] r[i] 增加了一个字符,也就是 f [ i + 1 ] [ j + 1 ] f[i+1][j+1] f[i+1][j+1] 这个状态是由 f [ i ] [ j + 1 ] f[i][j+1] f[i][j+1] 转移过来,所以 D e l = f [ i ] [ j + 1 ] + 1 Del=f[i][j+1]+1 Del=f[i][j+1]+1
  3. 对于插入 I I I,和删除类似,只不过状态是由 f [ i + 1 ] [ j ] f[i+1][j] f[i+1][j] 转移而来,所以 I n s = f [ i + 1 ] [ j ] + 1 Ins=f[i+1][j]+1 Ins=f[i+1][j]+1

考虑以上三种可能,总的状态转移方程就可以写成: f [ i + 1 ] [ j + 1 ] = min ⁡ ( S u b , D e l , I n s ) f[i+1][j+1]=\min(Sub,Del,Ins) f[i+1][j+1]=min(Sub,Del,Ins)因为我们想尽量找到更多相同的字符,也就是找最大匹配,所以取最小值,最后的 CER 就是: C E R = f [ l e n ( r ) ] [ l e n ( h ) ] / l e n ( r ) CER=f[len(r)][len(h)]/len(r) CER=f[len(r)][len(h)]/len(r)


4. 代码实现

import numpy

def CER(r: list, h: list): -> float
    # initialisation
    f = numpy.zeros((len(r) + 1) * (len(h) + 1), dtype=numpy.uint16)
    f = f.reshape((len(r) + 1, len(h) + 1))
    for i in range(len(r) + 1):
        for j in range(len(h) + 1):
            if i == 0:
                f[0][j] = j
            elif j == 0:
                f[i][0] = i
    
    # computation
    for i in range(1, len(r) + 1):
        for j in range(1, len(h) + 1):
            if r[i - 1] == h[j - 1]:
                f[i][j] = f[i - 1][j - 1]
            else:
                Sub = f[i - 1][j - 1] + 1
                Ins = f[i][j - 1] + 1
                Del = f[i - 1][j] + 1
                f[i][j] = min(Sub, Ins, Del)
    return f[len(r)][len(h)] / float(len(r))
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: OCR和语音识别中常用的指标是 CER,即字符错误率。这是因为在 OCR 和语音识别中,识别出来的文本通常是由字符组成的。因此,CER 能够量化错误的字符数量,从而评估识别的准确性。 CER计算方法是将识别出的文本与原始文本进行比较,统计不同字符的数量并除以总字符数。CER 范围通常在 0-1 之间,越接近 0 表示识别越准确。 虽然也有其他指标可以评估 OCR 和语音识别的准确性,但 CER 是最常用的指标之一,因为它能够直观地反映出识别结果的质量。 ### 回答2: OCR和语音识别是属于文本识别以及语音转文本的领域。CER(Character Error Rate)是一种常用的衡量OCR和语音识别性能的指标,其原因有以下几点。 首先,CER能够量化OCR和语音识别系统在字符级别上的识别准确度。在OCR中,识别结果与原始文本进行字符级对比,计算出识别错误的字符数量。同样的,在语音识别中,语音转文本的识别结果与真实文本进行字符级比较得到错误字符数。 其次,CER考虑了插入、删除和替换三种字符错误类型。OCR和语音识别系统往往会出现字符的插入、删除和替换错误,而CER指标能够统计这些不同类型的错误,从而全面评估识别系统的性能。 此外,CER相对于其他指标如Word Error Rate(WER)更为灵活和敏感。CER可以更细致地评估系统对于每个字符的准确率,而WER则以识别的单词为单位进行计算,无法反映系统在字符级别上的准确性。 最后,CER易于计算和比较。由于CER是基于字符级别的对比,可以通过简单的计数和比值计算得到。这样的计算方式使得CER成为了一种方便、直观的指标,便于比较不同系统或算法的性能差异。 综上所述,OCR和语音识别系统使用CER作为指标,主要是因为CER能够准确、全面地评估系统在字符级别上的识别准确度,还能够考虑不同类型的错误,具备灵活、易于计算和比较的特点。 ### 回答3: OCR(Optical Character Recognition,光学字符识别)和语音识别(Speech Recognition)是计算机视觉和自然语言处理领域的两个重要任务。由于其应用广泛,我们需要有一种评估算法准确性的指标来衡量它们的性能,因此采用了字符错误率(Character Error Rate,CER)作为评价指标。 CER计算OCR和语音识别的错误率的一种常用指标。它通过计算预测文本与真实文本之间的字符差异来评估准确性。CER是通过将插入、删除和替换字符的编辑距离除以真实文本的字符数来计算的。 为什么选择CER作为指标呢? 首先,CER能够客观地衡量OCR和语音识别系统的错误率,提供了一个统一的衡量标准。通过计算CER,我们可以准确地了解系统对输入文本的误识别程度。 其次,CER相对于其他指标更加灵活,可以适应不同性质的数据集。不同的OCR和语音识别任务可能面临不同的挑战,如噪声、口音、字体多样性等。CER可以同时考虑插入、删除和替换这三种类型的错误,对于这些挑战性数据集具有更好的适应性。 此外,CER也可以帮助我们比较不同的OCR和语音识别系统的性能。因为CER是一个通用的度量标准,不受具体算法或模型的限制,可以比较不同系统之间的性能差异。 总结起来,OCR和语音识别采用CER作为指标是因为它能够客观地评估系统的准确性,同时具备灵活性和普适性,有助于对不同的系统进行比较和评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SP FA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值