Tensorflow官方語音識別入門教程|附新數據集

李林 編譯整理

量子位 報道 | 公眾號 QbitAI

Google今天推出了一個語音指令數據集,其中包含30個詞的65000條語音,wav格式,每條長度為一秒鐘。

這30個詞都是英文的,基本是yes、no、up、down、stop、go這類。

這個數據集由Google TensorFlow團隊和AIY團隊共同推出的,AIY就是之前推出樹莓派DIY智能音箱的那個團隊:

Tensorflow官方語音識別入門教程|附新數據集

所以說,也別指望用這個數據集訓練模型然後做個App什麼的,它其實和那個DIY的音箱差不多,主要供初學者/愛好者練手用。

語音識別教程

Google還配合這個數據集,推出了一份TensorFlow教程,教你訓練一個簡單的語音識別網絡,能識別10個詞,就像是語音識別領域的MNIST(手寫數字識別數據集)。

雖然這份教程和數據集都比真實場景簡化了太多,但能幫用戶建立起對語音識別技術的基本理解,很適合初學者使用。

教程中要帶你識別的詞包括:yes、no、up、down、left、right、on、off、stop、go。

訓練:

開始訓練前,要先裝好TensorFlow,然後在source tree運行這行命令:

python tensorflow/examples/speech_commands/train.py

上面提到的語音指令數據集會自動開始下載,下載完成後會看到這樣的提示信息:

I0730 16:53:44.766740 55030 train.py:176] Training from step: 1

這表示初始化已經完成,訓練開始了。

其中,Step #1表示我們正處在training loop的第1步,後面是三個指標:學習率(learning rate),控制著網絡的權重調整速度;精確度(accuracy),表示在當前step下模型的識別準確率是多少;以及交叉熵(cross entropy),是損失函數的結果。

100步之後,會看到一行這樣的結果:

I0730 16:54:41.813438 55030 train.py:252] Saving to "/tmp/speech_co

這表示正在存檔當前的權重。

混淆矩陣:

400步後,你會看到一個混淆矩陣:

Tensorflow官方語音識別入門教程|附新數據集

想要理解這個矩陣,要先知道它對應的標籤。上面矩陣從左到右每一列分別表示:靜音、未知、yes、no、up、down、left、right、on、off、stop、go。

每一行是一組樣本,在這個例子中,每一組樣本實際上是一個詞,第一行是沒有聲音的,第二行是未知詞,第三行是yes,等等。

每一箇中括號“[]”中,標註了一組樣本被識別為各個標籤的數量。比如最後一行,表示有11個被識別為沒聲音、一個被識別為、6個被識別為yes、151個no……

通過混淆矩陣,很容易看出算法錯在哪了

驗證:

訓練之前,最好把數據集分成三份:訓練集、驗證集和測試集。在訓練過程中,神經網絡可能會對輸入數據產生記憶,為了確保訓練出來的模型可以用在它沒見過的數據上,需要留出一個驗證集,而測試集是一個附加的安全保障,以防訓練出來的模型剛好能搞定訓練集和測試集,確沒法用在更多數據上。

在這份教程的數據集中,訓練集佔約80%,驗證集和測試集分別佔10%。

見過混淆矩陣之後,應該會看到這樣一行:

I0730 16:57:38.073777 55030 train.py:245] Step 400: Validation accuracy = 26.3% (N=3093)

其中的Validation accuracy表示模型在驗證集上的準確率。如果訓練中的準確率一直在提高,而validation accuracy不變,就說明可能發生了過擬合。

Tensorboard:

如果想將訓練過程可視化,可以用Tensorboard,它的腳本默認會將事件存到/tmp/retrain_logs,運行下面一行命令就能加載出來:

tensorboard --logdir /tmp/retrain_logs

然後在瀏覽器中打開http://localhost:6006,就能看到模型訓練情況的圖表:

Tensorflow官方語音識別入門教程|附新數據集

完成訓練:

腳本訓練完18000步之後,會顯示一份最終的混淆矩陣和一個根據測試集得出的準確率得分。如果你按照默認設置進行訓練,準確率應該在80%到90%之間。

訓練完成後,可以運行下面命令行,導出這個語音識別模型:

python tensorflow/examples/speech_commands/freeze.py \

然後可以用label_wav.py腳本,讓這個固定的模型識別音頻試試:

python tensorflow/examples/speech_commands/label_wav.py \

如果你識別的剛好是left,就會得到三個標籤:

left (score = 0.81477)

這份教程所用的架構,在論文Convolutional Neural Networks for Small-footprint Keyword Spotting中有更詳細的說明。論文地址:http://www.isca-speech.org/archive/interspeech_2015/papers/i15_1478.pdf

其他

量子位摘錄了教程的要點,更詳細的版本(英文)見:https://www.tensorflow.org/versions/master/tutorials/audio_recognition

如果你想在其他地方用上文提到的數據集,可以單獨下載它。下載地址(1GB):https://download.tensorflow.org/data/speech_commands_v0.01.tar.gz

如果你想先熟悉/預覽一下這些語音指令,可以下載這個Android App:

http://ci.tensorflow.org/view/Nightly/job/nightly-android/lastSuccessfulBuild/artifact/out/tensorflow_demo.apk

打開“TF Speech”,可以看到一組10個詞的列表,你對著麥克風說哪個詞,哪個詞就會亮起來。

Tensorflow官方語音識別入門教程|附新數據集

鑑於這是個練習用的小數據集,有時候也可能識別不是那麼準……

另外,Google同時還開源了製作這個數據集的工具:https://github.com/petewarden/open-speech-recording

— 完 —

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回覆“招聘”兩個字。

量子位 QbitAI

վ'ᴗ' ի 追蹤AI技術和產品新動態

相關推薦

推薦中...