日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

用100行python代码发现语音识别文本错误词,并将结果和正确词一一对应

發(fā)布時間:2024/9/30 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用100行python代码发现语音识别文本错误词,并将结果和正确词一一对应 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在做nlp任務(wù)時,我們常常和語音結(jié)合起來,即將語音轉(zhuǎn)為文本,然后將文本做一系列任務(wù)。
但是語音轉(zhuǎn)換成文本,肯定有一系列錯誤。
我們可以文本糾錯
文本糾錯見我的另一篇博客。
中文文本糾錯 算例實現(xiàn)(有算例完整代碼)
這篇博客中提到要準備一個 正確詞的txt。
那究竟什么是正確詞,對于特殊任務(wù)怎么辦,
于是我們得首先發(fā)現(xiàn)語音識別對那些詞容易識別錯誤。
然后將那些經(jīng)常錯誤的詞對于的正確詞添加進文本糾錯系統(tǒng)里的正確詞txt中。
然后再文本糾錯。

本文講解如何發(fā)現(xiàn)語音轉(zhuǎn)換中 錯誤詞和正確詞

代碼

#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Author: yudengwu # @Date : 2020/10/6 #endcoding: utf-8import numpy as npdef correct_error(sentence1,sentence2):""":param sentence1: 正確文本:param sentence2:語音轉(zhuǎn)換的文本:return: 正確字周圍的詞數(shù)組,錯誤字周圍的詞數(shù)組"""correct = []for i in range(len(sentence1)):#bianif sentence1[i] not in sentence2:correct1 = sentence1[i - 2:i + 2] # 存在錯誤的正確字,附近的詞 (i - 2:i + 2,我取長度為4即一個成語的長度correct.append(correct1)error = []for j in range(len(sentence2)):if sentence2[j] not in sentence1:error1 = sentence2[j - 2:j + 2] # 存在錯誤的錯誤字,附近的詞error.append(error1)return correct,error#余弦距離計算相似度 def cosine_similarity(sentence1: str, sentence2: str) -> float:""":param sentence1: 正確詞:param sentence2:錯誤詞:return: 兩個詞 的相似度"""seg1 = [word for word in sentence1]seg2 = [word for word in sentence2]word_list = list(set([word for word in seg1 + seg2]))#建立詞庫word_count_vec_1 = []word_count_vec_2 = []for word in word_list:word_count_vec_1.append(seg1.count(word))#文本1統(tǒng)計在詞典里出現(xiàn)詞的次數(shù)word_count_vec_2.append(seg2.count(word))#文本2統(tǒng)計在詞典里出現(xiàn)詞的次數(shù)vec_1 = np.array(word_count_vec_1)vec_2 = np.array(word_count_vec_2)#余弦公式num = vec_1.dot(vec_2.T)denom = np.linalg.norm(vec_1) * np.linalg.norm(vec_2)cos = num / denomsim = cos#return simdef result(sentence1,sentence2):correct,error=correct_error(sentence1,sentence2)finally_result=[]#存放[[正確詞1,錯誤詞1],[正確詞2,錯誤詞2]]similarity = []for str1 in correct:#遍歷每一個候選正確詞for str2 in error:#遍歷每一個候選錯誤詞similarity1 = cosine_similarity(str1, str2)#計算候選正確詞 與候選錯誤詞之間的相似度similarity.append(similarity1)#相似度存放進數(shù)組print('相似度',similarity)if max(similarity)==0.0:breakelse:max_index = similarity.index(max(similarity)) # 相似度最大的錯誤詞所在索引# print(str1, error[max_index])finally_result.append([str1, error[max_index]]) # 存放【正確詞i,錯誤詞i】similarity = [] # 匹配掉了一個正確詞,清空相似度數(shù)組用于存放下一個正確詞和各個錯誤詞之間的相似度return finally_resultif __name__=='__main__':sentence1 = "重慶是中國的四大火爐之一,風景秀麗,是人間天堂。 "sentence2 = "重慶是中國的四大火爐之一,風景銹麗,是人間天棠。"print('正確文本sentence1: ',sentence1)print('語音文本sentence2:',sentence2)#sentence1=input('請輸入正確文本:')#sentence2=input('請輸入語音文本:')correct, error=correct_error(sentence1,sentence2)print('corret',correct)print('error',error)finally_result=result(sentence1,sentence2)print(finally_result)

結(jié)果

第一種情況:
給出一段文本,說話的人照著文本說完全部。(即不缺字少字)

第二種情況:
給出一段文本,說話的人少讀了(少字)

少讀部分不參與計算(即人間天堂沒有經(jīng)過語音,不能直接認為有錯)

第三種情況:
給出一段文本,說話的人多讀了(多字)
多讀部分不參與計算(即人間天堂 經(jīng)過語音,即使我明知道有錯 ,但多讀部分我們并不關(guān)心。不認為有錯)

在這個代碼的基礎(chǔ)上,可以自己結(jié)合業(yè)務(wù)修改代碼。用于批量處理數(shù)據(jù)。然后整理成表格,一列正確候選詞,一列錯誤候選詞。
然后篩選高頻詞。
還需要點人工處理(因為如果一個字出現(xiàn)語音轉(zhuǎn)換錯誤,那么它會出現(xiàn)多次,并且在表格中是相鄰的)
人為刪除一些重復(fù)的吧。

對比
原始人工

給出一個表格,表格里有很多文本,成百上千。
兩列數(shù)據(jù),第一列正確文本,第二列語音轉(zhuǎn)換文本。
一個文本長度幾十字,幾百字。
人得讀完一條正確文本,再讀對應(yīng)的語音文本,尋找正確詞和錯誤詞,再復(fù)制到另一個表格中。

現(xiàn)在
應(yīng)用程序,直接生成 正確詞-錯誤詞 表格
表格共兩列
第一列正確字詞,第二列錯誤字詞。
人需要做的就是 將相鄰幾行刪除只保留一行()
如圖所示,刪除相鄰多余的慶,信訪

時間成本縮小幾倍。

(此圖是我很久以前用其他代碼跑出來的結(jié)果,現(xiàn)在也忘啦那份代碼寫的是哈,數(shù)據(jù)集也丟啦,總之這個代碼跑出來的結(jié)果和此圖類似,自己刪除相鄰重復(fù)項就可以。)

因為原始數(shù)據(jù)肯定有很多文本,信訪肯定在不同文本中出現(xiàn),
在結(jié)果表格中,信訪可能在不同位置出現(xiàn),然后可以應(yīng)用表格統(tǒng)計詞頻。
最后發(fā)現(xiàn)高頻錯誤詞。
將結(jié)果寫入文本糾錯的 正確字詞txt中,進行文本糾錯。
文本糾錯前面有鏈接,不再發(fā)啦。

此方法是我自己想的,可能不是很好,如果你有更好的方法請告訴我,讓我學(xué)習一下。


電氣專業(yè)的計算機萌新:余登武。
寫博文不容易。如果你覺得本文對你有用,請點個贊支持下。

總結(jié)

以上是生活随笔為你收集整理的用100行python代码发现语音识别文本错误词,并将结果和正确词一一对应的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。