美文网首页
语音关键词识别--量化前与量化后精度比对

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

作者: 教训小磊 | 来源:发表于2022-07-09 15:36 被阅读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()
    

    相关文章

      网友评论

          本文标题:语音关键词识别--量化前与量化后精度比对

          本文链接:https://www.haomeiwen.com/subject/rgxibrtx.html