你是否在苦苦尋找能識別中文的語音識別模型?那認真看完本文,你也能實現,本文可能為您節省少則幾小時多則數天的工作時間。
DeepSpeech2由百度矽谷AI實驗室在2015年發布,是一個採用PaddlePaddle深度學習框架實現的端到端自動語音識別系統,它能通過簡單學習算法較準確的識別英語和中文。百度在DeepSpeech2之前發布過DeepSpeech,可通過pip直接安裝,但它用於主要用於識別英文。
DeepSpeech2的原理不在此論述,有興趣可自行查閱,它只支持python的2.x,並已開源,直接網上搜索很容易找到github網站,也可以關注我私信關鍵詞「語音識別」,你將收到開源網站和已下載好的github內容,解決你可能下載github資源慢的難題。
PaddlePaddle是百度開源的深度學習框架,雖然不及Tensorflow和Pytorch使用廣泛,但它是我國最流行的深度學習框架,在Github上Star有12K+,百度也是相當重視它的推廣,同時它推出了paddle系列產品,如paddleOCR、paddleSlim、paddleXpaddleLite、paddleHub等等,可滿足用戶不同的需求,它與Tensorflow相似度較高,如果你有相關框架基礎,學習起來也不難。
DeepSpeech系列在2017年推出Deep Speech 3,但目前開源了DeepSpeech2,接下來從安裝、運行、識別速度、識別準確率幾個方面探討。
1. 安裝
官方推薦直接下載docker鏡像安裝,docker類似於虛擬機,下載的文件已幫您安裝好各種依賴,但該鏡像是GPU環境,需要安裝nvidia-docker工具,該工具不能在Windows系統安裝,因此你只有兩種選擇:
(1)在本地為Linux系統下實現,如無可考慮安裝雙系統:首先確保命令nvidia-smi可正確執行,否則安裝nvidia驅動,然後安裝docker和nvidia-docker,接著導入docker鏡像,官方給出的鏡像中CUDA版本是9.0,CUDNN版本是7.5,鏡像大小10G左右,在docker中建立容器時建議加上參數-v,可將指定目錄映射到本地,避免docker空間太小帶來麻煩,必要時也可考慮修改docker默認路徑。
(2)在win系統中安裝虛擬機創建Linux環境,但此環境下不能使用GPU,無法下載官方docker鏡像,需要自己安裝依賴項,這比較麻煩,而且容易出錯,鑑於此我分享了python2安裝的dick-packages文件夾,可直接拿來使用,關注我私信關鍵詞「語音識別」獲取。注意DeepSpeech2不支持python3,官方說PaddlePaddle版本需 1.8.0以上,其實1.6也可用,但推薦用新版本,1.8有較大變動。
2. 運行
安裝好環境後別急著運行,官方提供了訓練好的模型文件,包括聲學模型和語言模型,可直接下載使用,兩者缺一不可,後者在前者的基礎上生成最終識別的文本。
百度提供了兩個聲學模型,分別基於數據集Aishell和百度收集的數據訓練生成,經測試後者效果更好,可在開源項目主頁搜索「BaiduCN1.2k Model」定位,點擊下載後解壓放到models/baidu_ch1.2k下,下載的文件中已包括開源項目頁的數據準備所需的多個文件。
百度也提供了兩個語言模型,文件大小相差巨大,經測試速度有十倍的差距,若你硬體配置一般,選擇小模型下載,搜索關鍵詞「Mandarin LM Small」可定位,解壓後放到models/lm下。
在運行test.py前還需要修改一些參數:
use_gpu默認為True,如果沒使用GPU,改為False;use_gru默認為False需改為True,因為下載的模型文件訓練時採用的是GRU算法;share_rnn_weights改為False,batch_size和beam_size根據你的電腦配置調下點,不然可能出現內存溢出錯誤;修改幾個模型相關的文件路徑為自己電腦上對應的路徑;error_rate_type改為CER,表示字符錯誤率,用於評價識別精度,WER用於英文識別;關於網絡層尺寸和個數別修改,需與模型文件保持一致;cutoff_prob調為0.99試試;alpha和beta需要後續調節,介於0-5之間。
接下來可運行test.py試試,如可計算出CER則可以繼續後面的工作;實際使用過程中往往一次只會識別一句話,原項目是運行deploy/demo_server.py和demo_client.py等實現。你可以考慮將test.py改為實現一條音頻,腳本中的result_transcripts欄位就是識別結果,在此基礎上按自己的需求改造,可搭配Flask或者Django框架實現Web服務的後端,前端利用瀏覽器錄音功能上傳音頻文件可採用Ajax方法實現。
3. 識別速度
我的硬體配置如下:顯卡MX250,內存16G,而虛擬機8G.
經優化後最終在虛擬機中實現6S識別一句話;而GPU環境下的Linux系統2S識別,在公司伺服器上的GPU環境下可1S識別。
識別速度太慢會導致無法投入使用,以下幾個優化方向可供參考:
下載的聲學模型解壓後,需在models/baidu_ch1.2k下保留壓縮文件,但可以隨便用一個小文件代替,只需文件名為baidu_cn1.2k_model_fluid.tar.gz,你也可以考慮更改腳本;將ds2_model.logger.info("start recognize...")前面的部分腳本移到函數外面,避免多次加載模型內容;將model_utils/model.py中exe.run(startup_prog)注釋,避免每次初始化,但這樣處理有一定風險,可能導致識別結果有變,需慎重考慮實施。4. 識別精度
利用AiShell數據集測試,精度可達92%,可參考以下方式提高精度。
非常重要:將音頻文件的採樣率改為8k,利用wave模塊判斷是否8k,sox模塊修改為8k,精度經明顯提升;調節參數alpha和beta,根據CER結果來微調,可先按0.5間隔變化調整,鎖定大致範圍後再精調;對識別結果再進行智能糾錯調整,有時候識別文本錯誤,但拼音是對的或者很接近。DeepSpeech2的使用就介紹到這裡,如果你使用過程中遇到問題,可在評論區留言或私信我。