基于Levenshtein计算asr准确率

ASR常用测试指标

字正确率、字准确率、字错率、句错率等

  • 方法一:基于Levenshtein原理统计
  • 方法二:基于“最小代价匹配”原则运用动态规划算法

设正确文本字数为 N,识别结果文本字数为 M,按照识别结果文本与正确文本根据“最小代价匹配(Levenshtein)”原则运用动态规划算法,得到正确识别字数 Mc、删除错误字数 D、插入错误字数 I, 和替换错误字数 S,则有:

N=Mc+S+D
M=Mc+S+I
定义以下性能指标:

1.句错率(SER)

句错误率:Sentence Error Rate
解释:句子识别错误的的个数,除以总的句子个即为SER

SER = 错误句数 / 总句数

2.句正确率(S.Corr)

句正确率:Sentence Correct
S.Corr = 1 - SER = 正确句数 / 总句数

3.字错率(WER/CER)

WER,Word error rate,词错率,但一般称为字错率,是语音识别领域的关键性评估指标,WER越低表示效果越好!
CER,Character Error Rate,字符错误率,中文一般用CER来表示字错率

WER = (S + D + I ) / N = (S + D + I ) / (S + D + Mc)

5.字正确率(W.Corr)

字正确率,Word Correct,一般国内宣传用的多,识别率(识别正确率)达到多少多少(请见1.7)。

W.Corr = ( N - D - S ) / N = Mc / N

问题:只计算了识别正确的字,没有管多出来的字(I插入),当然一般情况下不会有什么问题

6.字准确率(W.Acc)

字准确率,Word Accuracy

W.Acc = 1 - WER = ( N - D - S - I ) / N = (Mc - I) / N
特殊情况:当 I=0 时, W.Acc = W.Corr

import pandas as pd
import Levenshtein 
import re
data=pd.read_excel(r'/Users/atsushi/Desktop/nlp/data.xlsx')
data.head()
filenamelabel_txtzy_txt
0br1我什么意思我就是这个意思
1br2你跳高哟你好高呀呀
2br2你得到的你的
data.fillna('NAN',inplace=True)
pattern=re.compile('[,;\.\?:!!?,。;:“”/s+\n]')
data['label_txt']=data.apply(lambda x:re.sub(pattern,'',x['label_txt']),axis=1)
data['zy_txt']=data.apply(lambda x:re.sub(pattern,'',x['zy_txt']),axis=1)
data.head()
filenamelabel_txtzy_txt
0br1我什么意思我就是这个意思
1br2你跳高哟你好高呀呀
2br2你得到的你的
def get_edit(label_txt,asr_txt):
    result_dict={'S':0,'D':0,'I':0,'N':0,'ser':0}
    label_txt=label_txt.replace('NAN','')
    asr_txt=asr_txt.replace('NAN','')
    result=Levenshtein.editops(label_txt,asr_txt)
    for row in result:
        if 'replace' in row:
            result_dict['S']+=1
        if 'delete' in row:
            result_dict['D']+=1
        if 'insert' in row:
            result_dict['I']+=1
    result_dict['N']=len(label_txt)
    return result_dict
data['zy_I']=data.apply(lambda x:get_edit(x['zy_txt'],x['label_txt'])['I'],axis=1)
data['zy_D']=data.apply(lambda x:get_edit(x['zy_txt'],x['label_txt'])['D'],axis=1)
data['zy_S']=data.apply(lambda x:get_edit(x['zy_txt'],x['label_txt'])['S'],axis=1)
data['N']=data.apply(lambda x:get_edit(x['zy_txt'],x['label_txt'])['N'],axis=1)
data['zy字准率']=data.apply(lambda x:(x['N']-x['zy_I']-x['zy_D']-x['zy_S'])/x['N'],axis=1)
data['zy字正率']=data.apply(lambda x:(x['N']-x['zy_D']-x['zy_S'])/x['N'],axis=1)
data.head()
filenamelabel_txtzy_txtzy_Izy_Dzy_SNzy字准率zy字正率
0br1我什么意思我就是这个意思02270.4285710.428571
1br2你跳高哟你好高呀呀01250.4000000.400000
2br2你得到的你的20020.0000001.000000
data.to_excel('/Users/atsushi/Desktop/nlp/data.xlsx',encoding='gbk')
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
符串匹配准确率可以通过比较两个符串的相似度来计算。一种简单的方法是使用编辑距离算法(Levenshtein距离)。 编辑距离算法是一种用于计算两个符串之间的距离的算法,它计算的是将一个符串转换为另一个符串所需的最少操作数。这些操作包括插入、删除和替换符。通过计算两个符串之间的编辑距离,可以确定它们之间的相似度。 假设你有两个符串s1和s2,它们的长度分别为n和m。编辑距离算法使用一个n+1行、m+1列的矩阵来计算它们之间的距离。矩阵的第一行和第一列为0到m和0到n的整数。对于矩阵中的每个元素,它的值等于在进行一系列插入、删除或替换操作后将s1的前i个符转换为s2的前j个符所需的最少操作数。 通过计算矩阵的最后一个元素,可以确定两个符串之间的编辑距离。编辑距离与符串匹配的准确率成反比关系,因此准确率可以通过将编辑距离除以两个符串的长度之和来计算。 下面是一个使用Python实现编辑距离算法计算符串匹配准确率的示例代码: ```python def levenshtein_distance(s1, s2): n = len(s1) m = len(s2) distance = [[0] * (m + 1) for _ in range(n + 1)] for i in range(n + 1): distance[i][0] = i for j in range(m + 1): distance[0][j] = j for i in range(1, n + 1): for j in range(1, m + 1): if s1[i - 1] == s2[j - 1]: cost = 0 else: cost = 1 distance[i][j] = min(distance[i - 1][j] + 1, # deletion distance[i][j - 1] + 1, # insertion distance[i - 1][j - 1] + cost) # substitution return distance[n][m] def string_matching_accuracy(s1, s2): distance = levenshtein_distance(s1, s2) length = len(s1) + len(s2) accuracy = (length - distance) / length return accuracy ``` 你可以使用`string_matching_accuracy`函数计算两个符串之间的匹配准确率,例如: ```python s1 = 'hello world' s2 = 'hello python' accuracy = string_matching_accuracy(s1, s2) print(accuracy) ``` 输出: ``` 0.6666666666666666 ``` 这表示`s1`和`s2`之间的匹配准确率为66.67%。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值