语音关键词识别--量化前与量化后精度比对
2022-07-09 本文已影响0人
教训小磊
最近被老大安排去做了语音关键词检测,在出版本前需要有一组精度数据,故对此编写了一组量化前与量化后的精度比对代码。
这个比对代码分为两部分:1.去除叠词,2.滑动窗口逐一比对,窗口大小为4X1,步长为1,只记录匹配正确的词,滑动窗口大小依据具体关键词的组成个数而定,我这边都是4个字。
实现代码如下:
# encoding=gbk
import os
menu=[
['xian', 'shi', 'qian', 'lu'],
['xian', 'shi', 'hou', 'lu'],
['xian', 'shi', 'zuo', 'lu'],
['xian', 'shi', 'you', 'lu'],
['da', 'kai', 'ping', 'mu'],
['guan', 'bi', 'ping', 'mu'],
['da', 'kai', 'quan', 'jing'],
]
IntFile='./150/int.txt'
FloatFile='./150/float.txt'
alphaslistIs=[]
alphaslistFs=[]
#读取int数据 文件名与数据之间是冒号的形式
with open(IntFile,'r') as fI:
for intline in fI.readlines():
id,alphas=intline.split(':')
alphaslistI=alphas.split()
alphaslistIs.append(alphaslistI)
#读取float数据 文件名与数据之间是空格的形式
with open(FloatFile,'r') as fF:
for floatline in fF.readlines():
alphaslistF=floatline.split()[1:]
alphaslistFs.append(alphaslistF)
#用于保存文本结果
f=open(os.path.join(os.path.split(IntFile)[0],'result.txt'),'w')
FloatSum=0
IntSum=0
errorid=[]
errorNum=0
for k in range(len(alphaslistIs)):
new_alphalist = []
for i in range(len(alphaslistIs[k]) - 1): #消除叠词
if (alphaslistIs[k][i] != alphaslistIs[k][i + 1]):
new_alphalist.append(alphaslistIs[k][i])
if (i == (len(alphaslistIs[k]) - 2)): #对最后2个字进行判断
if (alphaslistIs[k][i] != alphaslistIs[k][i + 1]):
new_alphalist.append(alphaslistIs[k][i + 1])
else:
new_alphalist.append(alphaslistIs[k][i])
# 滑动窗口取数据,每次取4个字
intN = 0
for i in range(len(new_alphalist) - 3):
tmp = []
tmp.append(new_alphalist[i])
tmp.append(new_alphalist[i + 1])
tmp.append(new_alphalist[i + 2])
tmp.append(new_alphalist[i + 3])
if (tmp in menu):
intN += 1
IntSum+=intN
# 滑动窗口取数据,对float文件操作,防止float文件有其他词
floatN = 0
for j in range(len(alphaslistFs[k]) - 3):
tmp = []
tmp.append(alphaslistFs[k][j])
tmp.append(alphaslistFs[k][j + 1])
tmp.append(alphaslistFs[k][j + 2])
tmp.append(alphaslistFs[k][j + 3])
if (tmp in menu):
floatN += 1
FloatSum+=floatN
#判断float与int的正确数是否相等
if(intN !=floatN):
print('{}:int=<{}>-------float=<{}> '.format(k+1, intN, floatN))
errorNum+=1
errorid.append(k+1)
f.writelines('{}:int=<{}>-------float=<{}> '.format(k+1, intN, floatN) + '\n')
print("准确率:{:.2f}%".format((IntSum/FloatSum)*100))
print('错误文件/总文件:{}/{}'.format(errorNum,len(alphaslistIs)))
f.writelines("准确率:{:.2f}%".format((IntSum/FloatSum)*100) + '\n')
f.writelines('错误文件/总文件:{}/{}'.format(errorNum,len(alphaslistIs)) + '\n')
f.close()