使用TensorFlow訓練自己的語音識別AI


這次來訓練一個基於CNN的語音識別模型。訓練完成后,我們將嘗試將此模型用於Hotword detection。

人類是怎樣聽懂一句話的呢?以漢語為例,當聽到“wo shi”的錄音時,我們會想,有哪兩個字是讀作“wo shi”的,有人想到的是“我是”,也有人覺得是“我市”。
我們可以通過”wo shi”的頻率的特征,匹配到一些結果,我們這次要訓練的模型,也是基於頻率特征的CNN模型。單純的基於頻率特征的識別有很大的局限性,比如前面提到的例子,光是聽到“wo shi”可能會導致產生歧義,但是如果能有上下文,我們就可以大大提高“識別”的成功率。因此,類似Google Assistant那樣的識別,不光是考慮到字詞的發音,還聯系了語義,就算有一兩個字發音不清,我們還是能得到正確的信息。
但是基於頻率特征的模型用作Hotword detection還是比較合適的,因為Horword通常是一兩個特定的詞,不需要聯系語境進行語義分析。

准備訓練數據集

開源的語言數據集比較少,這里我們使用TensorFlow和AIY團隊推出的一個數據集,包含30個基本的英文單詞的大量錄音:
下載地址
這個數據集只有1G多,非常小的語音數據集,不過用來實驗是完全夠的。

運行docker並掛載工作目錄

新建一個speech_train文件夾,並在其中創建子文件夾dataset,logs,train,它們將用於存放數據集,log和訓練文件。解壓數據集到dataset,然后運行docker:

1
2
docker run -it -v $(pwd)/speech_train:/speech_train 
gcr.io/tensorflow/tensorflow:latest-devel

使用默認的conv模型開始訓練

1
2
3
4
5
6
cd /tensorflow/
python tensorflow/examples/speech_commands/train.py
--data_dir=/speech_train/dataset/
--summaries_dir=/speech_train/logs/
--train_dir=/speech_train/train/
--wanted_words=one,two,three,four,five,marvin

在這里我們指定希望識別的label: one,two,three,four,five,marvin。數據集的其他部分將被歸為unknown

使用TensorBoard使訓練可視化

我們可以通過分析生成的log使訓練過程可視化:

1
大專欄  使用TensorFlow訓練自己的語音識別AI class="line">tensorboard --logdir /speech_train/logs

運行指令后,可以通過瀏覽器訪問本地的6006端口進入TensorBoard。下圖是使用conv模型完成18000 steps 訓練的過程圖:

訓練花了差不多15個小時。

生成pb文件

訓練完成后,我們需要將其轉化為pb文件:

1
2
3
4
python tensorflow/examples/speech_commands/freeze.py 
--start_checkpoint=/speech_train/train/conv.ckpt-18000
--output_file=/speech_train/conv.pb
--wanted_words=one,two,three,four,five,marvin

完成后,我們將得到一個名為conv.pb的文件,配合包含可識別label的txt文件就可以直接使用了。

測試

使用測試腳本進行測試:

1
2
3
4
python tensorflow/examples/speech_commands/label_wav.py 
--graph=/speech_train/conv.pb
--labels=/speech_train/conv_labels.txt
--wav=/speech_train/dataset/marvin/0b40aa8e_nohash_0.wav

訓練的模型應能正確識別出marvin。

使用准確度較低但是預測更快的low_latency_conv模型

我們可以使用另外一種准確度較低但是預測更快的low_latency_conv模型進行訓練:

1
2
3
4
5
6
7
8
python tensorflow/examples/speech_commands/train.py 
--data_dir=/speech_train/dataset/
--summaries_dir=/speech_train/logs/
--train_dir=/speech_train/train/
--model_architecture=low_latency_conv
--how_many_training_steps=20000,6000
--learning_rate=0.01,0.001
--wanted_words=one,two,three,four,marvin,wow

當使用該模型時,可以適當增加training steps和learning rate。在這種情況下,訓練的時間大大縮短了:

只花了不到3小時.

其他

也可以使用gpu版本的tensorflow進行訓練,速度可以提升不少哦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM