语音关键词识别--量化前与量化后精度比对

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()
上一篇下一篇

猜你喜欢

热点阅读