原文博客:Doi技術團隊
鏈接地址:https://blog.doiduoyi.com/authors/1584446358138
初心:記錄優秀的Doi技術團隊學習經歷
語音識別
本項目是基於PaddlePaddle的DeepSpeech項目修改的,方便訓練中文自定義數據集。
本項目使用的環境:
- Python 2.7
- PaddlePaddle 1.6.0
目錄
環境搭建
- 請提前安裝好顯卡驅動,然後執行下面的命令。
# 卸載系統原有docker
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新apt-get源
sudo apt-get update
# 安裝docker的依賴
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 添加Docker的官方GPG密鑰:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 驗證擁有指紋
sudo apt-key fingerprint 0EBFCD88
# 設置穩定存儲庫
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 安裝Docker
# 再次更新apt-get源
sudo apt-get update
# 開始安裝docker
sudo apt-get install docker-ce
# 加載docker
sudo apt-cache madison docker-ce
# 驗證docker是否安裝成功
sudo docker run hello-world
- 安裝nvidia-docker
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb
- 下載 PaddlePaddle Docker 鏡像
sudo nvidia-docker pull hub.baidubce.com/paddlepaddle/deep_speech_fluid:latest-gpu
- git clone 本項目源碼
git clone https://github.com/yeyupiaoling/DeepSpeech.git
- 運行 PaddlePaddle Docker 鏡像
sudo nvidia-docker run -it -v $(pwd)/DeepSpeech:/DeepSpeech hub.baidubce.com/paddlepaddle/deep_speech_fluid:latest-gpu /bin/bash
- 安裝 PaddlePaddle 1.6.0,因爲這個項目必須要在 PaddlePaddle 1.6.0 版本以上纔可以運行。
pip2 install paddlepaddle-gpu==1.6.0.post107 -i https://mirrors.aliyun.com/pypi/simple/
搭建本地環境
- 並不建議使用本地進行訓練和預測,但是如何開發者必須使用本地環境,可以執行下面的命令。因爲每個電腦的環境不一樣,不能保證能夠正常使用。首先需要正確安裝 PaddlePaddle 1.6.0 的GPU版本,並安裝相關的CUDA和CUDNN。
pip2 install paddlepaddle-gpu==1.6.0.post107 -i https://mirrors.aliyun.com/pypi/simple/
- 切換到
DeepSpeech/setup/
目錄下,執行setup.sh
腳本,注意在執行之後需要輸入root用戶密碼,等待安裝即可
cd DeepSpeech/setup/
sh setup.sh
數據準備
- 首先進行到本項目的腳本文件夾中,我們所有程序都使用腳本執行。
cd DeepSpeech/run/
- 本項目提供了下載公開的中文普通話語音數據集,分別是Aishell,Free ST-Chinese-Mandarin-Corpus,THCHS-30 這三個數據集,總大小超過28G。
sh download_public_data.sh
- 如果開發者有自己的數據集,可以使用自己的數據集進行訓練,當然也可以跟上面下載的數據集一起訓練。自定義的語音數據需要符合一下格式:
- 語音文件需要放在
DeepSpeech/dataset/audio/
目錄下,例如我們有個wav
的文件夾,裏面都是語音文件,我們就把這個文件存放在DeepSpeech/dataset/audio/
。 - 然後把數據列表文件存在
DeepSpeech/dataset/annotation/
目錄下,程序會遍歷這個文件下的所有數據列表文件。例如這個文件下存放一個my_audio.txt
,它的內容格式如下。每一行數據包含該語音文件的相對路徑和該語音文件對應的中文文本,要注意的是該中文文本只能包含純中文,不能包含標點符號、阿拉伯數字以及英文字母。
- 語音文件需要放在
./dataset/audio/wav/0175/H0175A0171.wav 我需要把空調溫度調到二十度
./dataset/audio/wav/0175/H0175A0377.wav 出彩中國人
./dataset/audio/wav/0175/H0175A0470.wav 據克而瑞研究中心監測
./dataset/audio/wav/0175/H0175A0180.wav 把溫度加大到十八
- 然後執行下面的數據集處理腳本,這個是把我們的數據集生成三個JSON格式的文件,分別是
manifest.dev、manifest.test、manifest.train
。然後計算均值和標準差用於歸一化,腳本隨機採樣2000個的語音頻譜特徵的均值和標準差,並將結果保存在mean_std.npz
中。建立詞表。最後建立詞表,把所有出現的字符都存放子在zh_vocab.txt
文件中,一行一個字符。以上生成的文件都存放在DeepSpeech/dataset/
目錄下。
sh prepare_train_data.sh
訓練模型
- 在執行訓練之前,我們先來下載官方的預訓練模型和官方提供的超大語言模型文件,這些文件將存放在
DeepSpeech/models
目錄下。
sh download_model.sh
- 執行訓練腳本,開始訓練語音識別模型, 每訓練一輪保存一次模型,模型保存在
DeepSpeech/models/checkpoints
目錄下。
sh train.sh
評估和預測
- 在訓練結束之後,我們要使用這個腳本對模型進行超參數調整,提高語音識別性能。
sh hyper_parameter_tune.sh
- 我們可以使用這個腳本對模型進行評估,通過字符錯誤率來評價模型的性能。
sh eval.sh
- 使用下面的腳本執行預測,獲取預測的情況。
sh infer.sh
項目部署
- 啓動語音識別服務,使用Socket通訊。需要注意的是
host_ip
參數是電腦本機的IP地址,其他使用默認就可以。
sh start_server.sh
- 測試服務,執行下面這個程序調用語音識別服務。在控制檯中,按下
空格鍵
,按住並開始講話。講話完畢請釋放該鍵以讓控制檯中顯示語音的文本結果。要退出客戶端,只需按ESC鍵
。
python deploy/client.py \
--host_ip='192.168.1.130' \
--host_port=10086