現(xiàn)狀
人與之間通過聲音來直接溝通交流,人與機(jī)器之間的交流也漸漸脫離了傳統(tǒng)的溝通模式,進(jìn)入了語音交流時(shí)代。語音交流更是拉近了人和機(jī)器之間情感,現(xiàn)在的語音技術(shù)就是為了使機(jī)器更好的識別人聲、并合成接近人類的聲音以達(dá)到更好的交流。
目前國內(nèi)研究語音相關(guān)的團(tuán)隊(duì)主要包括科研院所、語音技術(shù)公司以及互聯(lián)網(wǎng)公司三部分:
科研院所主要包括高校和科學(xué)院,比如科學(xué)院里有聲學(xué)所、自動化所,高校里面研究比較多的清華、北大、西工大、科大、上海交大等,這些都是在語音圈里占有較高位置的老牌隊(duì)伍。
語音技術(shù)公司包括我們比較熟悉的科大訊飛、云知聲、思必馳、極限元等。
互聯(lián)網(wǎng)公司包括BAT、搜狗等擁有強(qiáng)大的語音技術(shù)團(tuán)隊(duì)來支撐著其本身的很多業(yè)務(wù)。
測試方案
接觸語音識別、語音合成項(xiàng)目的測試將近一年,認(rèn)識還非常淺薄,大家有更好的想法或者技術(shù)方案可以多多溝通交流。下面分別從語音識別、語音合成談?wù)勔恍┪以陧?xiàng)目中用的測試方案。
語音識別

語音識別的整體流程如上,站在測試角度思考,測試最簡單的切入點(diǎn)就是最終生成文本內(nèi)容的校驗(yàn)上。
目前的測試方案是事先標(biāo)注一批語音的文本內(nèi)容,與識別出的文本內(nèi)容做對比,獲取識別的準(zhǔn)確率。但是這種準(zhǔn)確率統(tǒng)計(jì)脫離了實(shí)際使用場景,比如車載模式下的噪音、與麥克風(fēng)的距離都會影響識別準(zhǔn)確率。
另外,從上圖流程可以看出,識別準(zhǔn)確率還會受聲學(xué)模型、解碼器的影響。語音信號經(jīng)過特征提取得到聲學(xué)特征,再通過聲學(xué)特征訓(xùn)練得到聲學(xué)模型,聲學(xué)模型結(jié)合語言模型以及發(fā)音辭典構(gòu)建聲碼器以后進(jìn)行解碼來輸出文本,所以聲學(xué)模型的訓(xùn)練結(jié)果一定是正確的嗎?這也是測試的一個(gè)切入點(diǎn)。
語音合成
測試考慮從以下兩方面入手:
服務(wù)端的文本分析
合成效果的評測
文本分析
語音合成的測試前期工作主要放在前端文本分析上,用python中的Snownlp及pypinyin將文本進(jìn)行分分詞及注音后輸出注音及音調(diào),服務(wù)端的前端模塊輸出注音及音調(diào),將腳本輸出的結(jié)果和服務(wù)端輸出的結(jié)果做對比。這種方式可以對比出音調(diào)、多音字的差異。
frompypinyin import pinyin#pinyin將漢字轉(zhuǎn)為拼音。可以用于漢字注音、排序、檢索fromsnownlp importnormal#snownlp 轉(zhuǎn)換成拼音,繁體轉(zhuǎn)簡體,提取文本關(guān)鍵詞fromsnownlp import seg#分詞text_normal =normal.zh2hans(text_path)sent_normal =normal.get_sentences(text_normal)words= seg.seg(sent_normal.decode('utf-8'))#匹配多音字word= SnowNLP(words_list)word=word.sim(sim_word.decode('utf-8'))#注音txt_zhuyin = pinyin(word, style=pypinyin.TONE3)
合成效果評測
成功效果評測的方式也有兩種:一種方式眾包評測,這種方式是靠人的主管感受去評測合成的語音是否流暢、自然、發(fā)音正確等,這種方式的結(jié)果更有說服力,但是人力成本較大。
另一種方式是對比語音的波形圖,python中的wave模塊支持將語音轉(zhuǎn)為波形圖,python中還有其他模塊如eyeD3,PyAudio,Audacity等等可以處理語音暫且不介紹這些模塊。先介紹wave中的一些方法:
getparams()
獲取wav文件的參數(shù)(以tuple形式輸出),依次為(聲道數(shù),采樣精度,采樣率,幀數(shù)等)
readframes()
得到每一幀的聲音數(shù)據(jù),返回的值是二進(jìn)制數(shù)據(jù),在python中用字符串表示二進(jìn)制數(shù)據(jù)。
步驟如下:
通過wav庫獲得night.wav的頭文件中的信息,如采樣率/聲道數(shù)等等.
提取出DATA區(qū)域的信息,用numpy將string格式數(shù)據(jù)轉(zhuǎn)化為數(shù)組
通過判定聲道數(shù)將DATA區(qū)域數(shù)據(jù)進(jìn)行處理(對數(shù)組矩陣進(jìn)行轉(zhuǎn)換)
得到每個(gè)繪制點(diǎn)的時(shí)間(x坐標(biāo))
用matplotlib庫提供的方法繪制出波形圖
對波形的信息進(jìn)行對比分析,可以從中得到很多有效信息,但是這些信息是否能有效過濾掉不同的口音、情緒、呼吸等的差異,去提取自己想要的信息如音調(diào)差異、錯(cuò)別字的差異還在探索中。