Speech Recognition套件會連接各大廠的 api 進行辨識,而那些 api 到底是怎麼訓練出來的? 本篇就是要說明訓練的過程,讓我們也擁有自已的模型或 api,這樣就不會讓這些大廠隨意收錢。
要訓練當然要有資料集,資料集的收集相當龐大。本例的資料集可以辨識 30 個單字指令。
本篇使用 tensorflow 模型,所以會啟動 GPU 運算。
語音處理概念
人類聲音可以用示波器 (Oscilloscope) 形成一個隨時間變化的波形訊號,這個訊號對時間的關係稱為時域 (Time Domain)。電腦對訊號進行分析時,會使用傅立葉變換 (Fourier transform) 將訊號轉成不同頻率下的振幅及相位,稱為頻域 (Frequency Domain)。訊號每隔一段時間取樣,取得數位音檔,也就是 .wav 檔,就可以進行分析。
取樣的方式是固定的,每25ms 切成一個幀 (Frame),幀與幀之間重疊 10ms。然後對高頻訊號加強,加窗消除兩端可能造成的訊號不連續,最後去除雜訊,這樣取得的格式稱為 wav 。wav 的容量非常大,600M 大約只能儲存10首歌曲,所以後續還要壓縮成 mp3 格式再儲存。

mp3 會去除人類聽不到的高頻及低頻,而這些資訊對訓練模型是很重要的資訊,所以資料集最好是 wav 格式。 接下來抽取每個 wav 音檔的特徵,目前有FBank及 MFCC(Mel frequency cepstral coefficients) 二種方式。本例使用 librosa 套件將音檔轉成 MFCC 特徵向量,最後才進行分析。
MFCC 梅爾頻譜
人類在高頻的反應較不敏感,比如 2000Hz 跟 3000Hz 都覺的差不多,而對低頻比較敏感。為了取得適當大小的聲音特徵,使用梅爾標度濾波器轉成梅爾頻譜。轉換的方法可用 librosa 套件,這個套件是音頻處理的萬能庫。
🔒 更多內容,請登入會員繼續閱讀。
立即登入聲音的處理及知識領域遠比我們想像的複雜,這個科目在研究所念個二年也讀不完,所以本篇只介紹基本的模型訓練。
安裝套件
若要自已訓練模型,請先安裝如下套件
🔒 更多內容,請登入會員繼續閱讀。
立即登入資料集下載
資料集可以到 Kaggle 下載,請參考 https://www.kaggle.com/competitions/tensorflow-speech-recognition-challenge/data,只要下載 train.7z 即可,檔案容量有 1.4G 。下載解壓縮,將裏面的 audio 目錄搬到專案下,最後要把 audio 裏面的 _background_noise_ 目錄刪除。
如果無法下載,可從本站下載 audio.zip 檔。
公用程式下載
公用程式 preprocess.py 用來製作 .npy 檔,分割資料,轉換成 MFCC 頻譜等功能。此公用程式本人已經修正,請由本站下載 preprocess.zip,解開後置於專案之下。如果 preprocess.py 檔是由別的網站下載的話,請將第 22 行更改成如下。
🔒 更多內容,請登入會員繼續閱讀。
立即登入如果preprocess.py 是由本站下載的,就不用改了。
最後請把 preprocess.py 打開,更改 DATA_PATH 的值為資料集存放的路徑。
DATA_PATH = "./audio/"
模型訓練
本例將 max_pax_len 由 11 改為 1200,訓練時將 batch_size 改為 300,訓練個 10000 epochs,正確率來到 76% 就上不去了,結果相當不錯。完整的訓練代碼如下。
🔒 更多內容,請登入會員繼續閱讀。
立即登入訓練 10000 epochs 約要二天,訓練好的模型會儲存成 asr.h5,接下來就可以載入此模型進行辨識。無法訓練的人,可以由本站下載 asr.h5。
語音辨識
辨識的完整碼如下
🔒 更多內容,請登入會員繼續閱讀。
立即登入執行時可以看到大約 76% 左右的檔案都可以正確的辨識。
Resume 訓練
如果想要繼續更多 epochs 的訓練,只要載入先前模型,然後再開始 model.fit(),此時可以看到 val_accuracy 會由上一次的數值繼續增加。
🔒 更多內容,請登入會員繼續閱讀。
立即登入增加語音資料
若要新增其它詞彙,只需將語音檔放在相對的目錄中,主程式碼只要修改 nc 數量。另外如果音檔太長,則要更改 max_pad_len。
放入中文詞彙也沒問題,因為此程式只是辨識頻率,根本不管是那一國的語言。
其它資料集
其它可用的資料集,比如 https://towardsdatascience.com/a-data-lakes-worth-of-audio-datasets-b45b88cd4ad ,在 LibriSpeech 裏的 train-other-500.tar.gz 就有500小時的英文演講資料,大約有 30G 。
另外還有一個可以免費下載資料集的地方 : https://commonvoice.mozilla.org/zh-TW/datasets,不過裏面都是 mp3的格式,辨識的效果非常不好。
分割資料
若由 https://commonvoice.mozilla.org/zh-TW/datasets 的下載單字目標字串,下載後的音檔可用如下程式將資料集檔案歸類
🔒 更多內容,請登入會員繼續閱讀。
立即登入不過這個網站提供的資料集是 mp3 格式,mp3 是去除高低音後的結果,所以訓練出來的模型,辨識率非常的低。
nVidia NeMo
nVidia NeMo 是由 nVidia 開發的原始碼,可以建構 Automatic Speech Recognition (ASR),Natural Language Processing (NLP),及 Text-to-Speech (TTS) 模型。請參考nVidia 官網 https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/main/starthere/intro.html。此專案可以支援 14 國語言。
請注意,此模型需在 Python 3.10 及以上的版本才能執行,請先安裝如下套件
🔒 更多內容,請登入會員繼續閱讀。
立即登入參考
更新的 :https://s123600g.medium.com/%E4%BD%BF%E7%94%A8edgetpu%E6%87%89%E7%94%A8%E5%9C%A8%E8%AA%9E%E9%9F%B3%E6%A8%A1%E5%9E%8B%E9%A0%90%E6%B8%AC%E4%B9%8B%E7%B0%A1%E5%96%AE%E5%AF%A6%E4%BE%8B-%E4%BA%8C-%E8%AA%9E%E9%9F%B3%E8%B3%87%E6%96%99%E9%9B%86%E8%99%95%E7%90%86-a9a1f4492bc0
人氣超高 : https://www.kaggle.com/code/araspirbadian/voice-command-detection
LSTM 語音辨識 : 需在Linux 之下執行,但好像不太可能完成
https://github.com/pannous/tensorflow-speech-recognition/tree/master
https://ithelp.ithome.com.tw/articles/10195763
https://ithelp.ithome.com.tw/articles/10195970
LSTM : https://wjohn1483.github.io/2021/07/18/speech-recognition-with-deep-learning/
LSTM : https://medium.com/ai-academy-taiwan/speech-recognition-using-neural-network-d1af6f482c9b
