語音識別--kaldi環境搭建(基於Ubuntu系統)
語音識別--kaldi環境搭建(基於Ubuntu系統)
最近開始接觸語音識別,又在師兄那裡瞭解到kaldi這個模型,於是就想著去試驗一下,找找感覺。好了,廢話不多說。幹就完了!!!期間遇到了不少問題,於是就將內容記錄了下來。
1.準備一個ubuntu環境
方式很多,這裡我列出了四種,其中本人推薦使用方式3:
方式1:我使用的是vm 創 建 的 虛 擬 機 \color{#FF3030}{建立的虛擬機器} 創建的虛擬機,當然大家也可以使用VitureBox建立,本質都一樣,沒啥差別。經過測試,在虛擬機器中建立就很容易出現虛擬網路停止服務的問題,不光如此,在編譯成功之後也是會出現很多問題呀。
方式2:如果你是win10系統的話,也可以使用 w i n 10 自 帶 的 u b u n t u 子 系 統 \color{#FF3030}{win10自帶的ubuntu子系統} win10自帶的ubuntu子系統功能,需要在應用商店下載ubuntu即可。但是考慮到後續的可持續性,還是建議使用方法3.
方式3:裝一個 u b u n t u 的 雙 系 統 \color{#FF3030}{ubuntu的雙系統} ubuntu的雙系統來進行實驗,步驟還是一樣的,但是這裡環境搭建的過程我還是採用的之前的截圖。對於後邊的例子驗證部分,我將會採用雙系統的內容操作。這裡我沒有展示雙系統的搭建過程,網上有很多教程,大家可以自行搜尋。
方式4: 將 電 腦 的 w i n 系 列 系 統 改 為 u b u n t u 系 統 \color{#FF3030}{將電腦的win系列系統改為ubuntu系統} 將電腦的win系列系統改為ubuntu系統,而不是雙系統共存。
2.下載前的準備
2.1 安裝必要的依賴庫
sudo apt-get install git wget make
其執行結果如下:
2.2 官網下載kaldi
首先放出官網的下載文件:參考網址
也可直接使用如下下載命令:
git clone https://github.com/kaldi-asr/kaldi.git kaldi-trunk --origin golden
以下就是下載結果:
結果顯示失敗,老是不成功或者網路連結失敗,所以我就在別的地方下載了下來,然後將檔案上傳到虛擬機器。就不非得在一棵樹上吊死了。如果大家也遇到了下載困難的問題,可以下載我儲存在百度雲盤的內容:
好了下載完成後將資料夾改名字
mv kaldi-trunk kaldi
ls
3.原始檔編譯及依賴安裝
3.1 編譯MKL
在編譯之前首先介紹一下MKL是幹啥的吧:
MKL全稱是Intel Math Kernel Library也稱作英特爾數學核心函式庫,用於提供經過高度優化和大量執行緒化處理的數學例程,面向效能要求極高的科學、工程及金融等領域的應用。MKL是一款商用函式庫,提供C、Fortran、Fortran 95的支援,但是僅支援Intel自家旗下的CPU。
cd kaldi/tools/extras/
ls
./check_dependencies.sh
執行之後就會檢視到這裡邊進行編譯需要安裝的依賴,此處是我的返回結果,不同的機器其結果或許不同,單操作方法一致。
這裡它已經給出了下載的語句,就是上邊紅框標識的部分,我們就需要執行以下命令進行一下安裝。
sudo apt-get install zlib1g-dev automake autoconf sox gfortran libtool subversion
#再次檢視一下依賴是否都安裝好了
./check_dependencies.sh
其結果如下,還需要我們自己編譯一個Intel MKL的檔案
上圖中紅框部分給出了編譯安裝的語句,執行以下語句以安裝
sudo apt-get update
#在執行下一步之前先檢測一下upadte是否可以進行,如果出現類似於錯誤4.1,也好直接解決了!
sudo ./install_mkl.sh
#注意這裡一定加sudo獲取最高許可權啊,我就是因為沒加sudo,重複了此步驟兩次,血的教訓啊,如果不加,後邊編譯的時候會提示某些檔案許可權不夠,而終止編譯
這是其編譯過程:
如果此處出現格式錯誤,可見4.2解決方案。
這裡檔案編譯比較大,需要152M,所以下載過程和編譯過程或許就挺長時間的。
執行中間需要設定一下,輸入N,此過程是在虛擬機器的編譯過程中出現的,後來我又重新嘗試的ubuntu16.04的雙系統中我並沒有看到這個選項。
在這裡插入圖片描述,此過程一樣是在虛擬機器的編譯過程中出現的
中間還需要下載572M大小的檔案去升級,如下所示:
執行成功之後會出現如下圖所示,顯示安裝mkl成功
再次檢查還需要啥以來,雙系統也沒有出現這個問題,這個問題僅在ubuntu的虛擬機器中出現
不知道為啥這個之前安裝了的,又給解除安裝了,好吧這裡再重新來一下吧
最後再來檢查一下,出現這個結果說明都已經編譯好了。
3.2編譯Tools
首先說明一下,該tools資料夾下都是kaldi所要依賴的包,其中也就主要包括以下幾個內容:
- OpenFST (Weighted Finite State Transducer library):是用來構造有限狀態自動機的庫。我們知道隱馬爾可夫模型就可以看作一個有限狀態自動機的,這也是編譯過程需要的一個比較重要的一個包。
- ATLAS:這是一個在C++下的線性代數運算庫。在機器學習中是經常需要進行矩陣運算的。
- IRSTLM:這是一個統計語言模型的工具包
- sph2pipe:這是賓夕法尼亞大學 Linguistic Data Consortium(LDC)開發的一款處理sphere_formatted數字音訊檔案的軟體,它可以將LDC的sph格式的檔案轉換成其他格式。
以下就是其編譯的過程計結果:
cd ..
sudo make -j 2
#解釋一下,這裡的2,表示的是處理器的數目,因為我此次編譯使用的是一個比較老的機器,只有兩個處理器
#具體的數目大家可以根據自己電腦而定
其結果如下所示:
編譯結果如下所示:
注:此過程也需要十幾分鍾,具體多長時間根據電腦處理器的編譯速度。
因為在編譯過程中會向tools資料夾下下載以下四個檔案,於是,但是下載過程或許不會順暢,於是我就把我下載完的檔案整理到了百度 網盤。這樣對於後邊的也比較方便。
連結:https://pan.baidu.com/s/1tYZiTWfnxUnJ1eT0cLQC4w
提取碼:w3vy
裡邊檔案是這四個,如下所示:
3.3 編譯src
這裡邊啊儲存的是Kaldi的一些原始碼,還有一些語音識別演算法的演算法編譯,也是整個kaldi的核心部分。
cd ..
cd src
cat INSTALL
#用於檢視需要執行的步驟,一下就是執行這句後的結果
./configure --shared
make depend -j 8
make -j 8
#這裡8的意思與上邊的意思一致,當你的數目大於本機器的處理器數目時,
#它會使用預設的一個處理器進行編譯及運算。
執行cat INSTALL命令檢視安裝的步驟及流程
我們可以看到,這裡其實是已經給了接下來的操作步驟的
那我們就按照這個流程來走。
make depend -j 8
#可以根據自己的電腦適當修改處理器數目
正確結果:
make -j 2
#可以適當修改處理器數目
漫長的等待,我編譯了兩個多小時,將近三個小時。注,這個需要消耗的時間也與處理器的個數和處理器的能力相關,因為我的電腦有點渣,所以消耗時間比較長,其中出現錯誤詳見4.6和4.7
注,在使用雙系統編譯的過程中並沒有出現4.6,4.7的錯誤
4.出現問題
注:如果你使用的是雙系統進行編譯安裝的kaldi環境,或許此章節的問題你不會出現,因此可以選擇性忽略,以下問題可能會在虛擬機器的編譯過程中出現。哈哈~~咯
4.1 Err:AppStream cache update completed, but some metadata was ignored due to errors.
在執行sudo apt-get update的時候出現錯誤,如下所示:
解決辦法:
sudo rm /var/lib/dpkg/lock
4.2 sh指令碼檔案格式錯誤及解決方案
形式1:
形式2:
形式3:
解決方案:參考地址
4.3 Err:Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
錯誤形式:
解決方案:
參考網址:參考網址地址連結
4.4 解決虛擬機器訪問谷歌的問題
錯誤描述:
+ apt-key --keyring /usr/share/keyrings/intel-sw-products.gpg add -
在檔案的下載過程中需要一些檔案支援,這就需要技術支援。
解決方案:點進去試試
4.5 DNS解析錯誤
參考方案,不知道奏不奏效
4.6
再執行make depend -j 8的時候可能會出現問題如下所示
其實這個的解決方案和4.2一致,解決此問題,我們只需要再重新編輯一下以下檔案即可
4.7 編譯出錯尋找錯誤
說明這裡在執行make命令的時候出錯了,我們可以去找出裡邊的錯誤,看看對應資料夾下的Makefile檔案,並且檢視裡邊的make命令,是否存在執行.sh檔案的內容,如果存在,就再去按照錯誤4.2去修改。
4.8 version.h報錯
編譯時報錯說版本資訊出錯,網上也找不到任何同樣的錯誤,其內容如下:
我的解決辦法就是將這兩個地方對應行的程式碼註釋掉,我實在找不到其它好的方法。
5.測試例子
說明:後來進行了驗證,發現還是有錯誤,於是就又把上邊的步驟在我的雙系統ununtu上進行了測試。
5.1 測試例子yesno
該例子內的訓練樣本都是.wav格式的音訊檔案,是一個老男人連續不斷的說yes或者no,每個wav檔案說八次,其中檔名字是由0和1組成的8位數字序列,
0代表的是no
1代表說的yes
這個簡單的例子沒有單獨的標註檔案,而是直接採用的這個方法來對檔案進行命名的。
接下來就是這個例子的測試環節了:
cd ..
ls
cd egs/yesno/s5
ls
./run.sh
這是執行run.sh檔案後的執行結果,它首先會連線kaldi官網下載yesno例子的wav檔案,然後再對其進行訓練和識別:
其運算中間過程如下所示;
最後很快就會出現其對於yesno的識別結果:
我們在最後的結果中可以看到顯示WER 0.00,表示其識別結果還是 非常準確的。那麼或許我們又會疑問,WER代表的是什麼意思呢?
WER(Word Error Rate)代表的是字錯誤率,是衡量語音識別系統的準確程度的標準。其計算公式為
W
E
R
=
(
I
+
D
+
S
)
N
WER=\frac{(I+D+S)}{N}
WER=N(I+D+S)
其中各字母含義如下所示:
I 代表被插入的單詞個數
D 代表被刪除的單詞個數
S 代表被替換的單詞個數
N 代表總共的單詞個數
簡單的理解就是把識別過程中出現的多認的、少認的、認錯的單詞數加起來,除以總共測試的單詞總數。按照我們的識別要求來說的話,這個數越小越好。
6.總結
對於這個kaldi環境的搭建確實走了不少彎路,從一開始的使用vm虛擬機器搭建,再到win10子系統,然後再到雙系統的安裝,其中在雙系統的安裝過程也遇到不少挫折,一度以為要失去windows上的全部學習資料,變得恐慌不已,好在後來找到了方法恢復了win10系統,後來也是不停的找原因。
多方查閱資料才得知,原來是和自己的膝上型電腦的品牌有關,因為我的膝上型電腦品牌為戰神,顯示卡為GTX960M,在自己的膝上型電腦中安裝雙系統很多次都未能成功,到最後反倒學會了給別人裝雙系統。說起來也算是“因禍得福”。哈哈~~
寒假回到家後,正值肺炎疫情無法走親訪友,坐在屋裡也只能在默默的為武漢人民祈福,為全國人民祈福,索性不如將家中的老電腦拿來重新搞個雙系統,沒想到竟然一次成功。趁著這股熱乎勁,就將這篇部落格完善了一下,並發表了出來。希望對於自己後面的探索有些幫助。加油~,奧裡給!!!
7.參考部落格
感謝一下部落格對於此篇部落格的幫助,沒有這些部落格給予的幫助,我相信我到現在也很難搭建成功kaldi環境。
相關文章
- Kaldi搭建語音識別系統—發音詞典相關檔案準備
- 基於ubuntu如何搭建TensorFlow環境Ubuntu
- 基於語音識別的會議記錄系統
- kaldi環境搭建 | yesno 測試
- 語音識別開源工具PyTorch-Kaldi:兼顧Kaldi效率與PyTorch靈活性開源工具PyTorch
- ubuntu系統中java開發環境的搭建UbuntuJava開發環境
- MacOS系統基於VMware Fusion配置Ubuntu 22.04LTS環境MacUbuntu
- ubuntu系統環境配置檔案的區別Ubuntu
- 新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!JavaScript
- 基於Ubuntu+Python+Tensorflow+Jupyter notebook搭建深度學習環境UbuntuPython深度學習
- 基於vscode搭建freertos環境VSCode
- Linux系統環境搭建Linux
- Django之Ubuntu環境搭建DjangoUbuntu
- 基於ECS快速搭建Docker環境Docker
- ubuntu環境下搭建以太坊開發環境Ubuntu開發環境
- ubuntu16.04 搭建java 環境UbuntuJava
- Ubuntu下Java環境的搭建UbuntuJava
- ubuntu16.04搭建java環境UbuntuJava
- ubuntu16.04 搭建java 環境UbuntuJava
- linux開發環境搭建(ubuntu)Linux開發環境Ubuntu
- 基於Ubuntu16.0.4版本linux系統下的騰訊雲伺服器java後臺環境搭建UbuntuLinux伺服器Java
- 基於Webpack搭建React開發環境WebReact開發環境
- 基於 Xcode 搭建 OpenCV 開發環境XCodeOpenCV開發環境
- Windows10系統如何禁用語音識別功能Windows
- 自然語言處理之:搭建基於HanLP的開發環境自然語言處理HanLP開發環境
- 語音直播系統原始碼開發語音直播系統部署搭建原始碼
- 5 款不錯的開源語音識別/語音文字轉換系統
- Ubuntu環境搭建svn伺服器Ubuntu伺服器
- Ubuntu 18.04.1 搭建Java環境和HelloWorldUbuntuJava
- Ubuntu 18.04 深度學習環境搭建Ubuntu深度學習
- Ubuntu系統-FFmpeg安裝及環境配置Ubuntu
- ubuntu-設定系統環境變數Ubuntu變數
- 基於滴滴雲搭建 Ceph 開發環境開發環境
- 搭建基於 Mac 的 Flutter 開發環境MacFlutter開發環境
- go語言環境搭建Go
- 【MySQL資料庫】認識資料庫+環境搭建--------Windows系統MySql資料庫Windows
- 零報錯基於Virtualbox虛擬機器搭建Linux(Ubuntu)的Android開發環境虛擬機LinuxUbuntuAndroid開發環境
- 語音識別模型模型