前言
Kaldi 是自动语音辨识(Automatic Speech Recognition, ASR)的工具箱,它是以 C/C++ 语言开发的,安装有点複杂,笔者在安装后,两次都发生开不了机,惨痛的经验与大家分享,希望读者得以避免重蹈覆辙。
Kaldi 安装
Kaldi官网文件写的非常模糊,笔者主要参考Install Kaldi (ASR) on Ubuntu这一篇,分为几个段落:
前置安装Kaldi tools 安装Kaldi 原始程式码建置及 irst 语言模型安装kaldi_lm 语言模型安装前置安装
开启终端机,执行下列指令:
sudo apt-get updatesudo apt-get upgradesudo apt-get install gitsudo apt-get install bcsudo apt-get install g++sudo apt-get install zlib1g-dev make automake autoconf bzip2 libtool subversionsudo apt-get install libatlas3-base
其中 g++ 会安装 v9.3.0,但编译 Kaldi 只能是 v8.x版,还好,g++ 允许多版本并存,可参考How to Install GCC (build-essential) on Ubuntu 20.04,先安装各种版本 g++:
sudo apt install gcc-8 g++-8 gcc-9 g++-9 gcc-10 g++-10
指定预设版本,例如v8:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcov gcov /usr/bin/gcov-8
可指定预设版本,kaldi并不需要此步骤:
sudo update-alternatives --config gcc
依选单指定版本。
Kaldi tools 安装
下载程式码:git clone https://github.com/kaldi-asr/kaldi.git kaldi --origin upstream
检查依赖的套件:cd kaldi/toolsextras/check_dependencies.sh
会出现多个套件需安装,包括 Python 2.7,按指示安装,例如:
sudo apt-get install sox gfortran python2.7
程式建置:make
Kaldi 原始程式码建置及 irst 语言模型安装
install MKL (Intel math library),参阅『Ubuntu 使用 Intel MKL 加速 Numpy』及『Installing Intel® Performance Libraries and Intel Distribution for Python Using APT Repository』:# 下载金钥wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB# 安装金钥apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB# 删除档案rm GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB# 设定下载的仓库sudo wget https://apt.repos.intel.com/setup/intelproducts.list -O /etc/apt/sources.list.d/intelproducts.list# 下载sudo apt-get updatesudo apt-get install intel-mkl-2020.0-088
Kaldi 原始程式码建置cd ~/kaldi/src./configure --sharedmake dependmake
make 要执行很久,耗时数个小时。
kaldi_lm 语言模型安装
cd ~/kaldi/toolsextras/install_kaldi_lm.sh
测试
执行範例程式,检查最后一行是否得到正确结果:
cd ~/kaldi/egs/yesno/s5run.sh
结果如下:
%WER 0.00
悲剧发生了
安装及测试顺利,满心欢喜,重开机后,竟然发生黑画面,只有左上角游标闪动,放个一阵子,一动也不动。第一次以为是硬碟过热,只好重灌,再次发生,就觉得不是偶然了。找到这一篇『How to Fix an Ubuntu System When It Won’t Boot』,依步骤修复Ubuntu,先按 Alt+Ctrl+Del,进入选单,选择
Advanced options for Ubuntu -> recovery mode
出现另一个选单如下,执行clean及其下每一项,发现GPU显示卡有问题,应该是跟Kaldi有关,因为它会设定GPU。
修复后重开机,可以顺利进入Ubuntu,但是另一个问题发生了,萤幕不断闪动,应该还是显示卡的问题,运气不错,找到这一篇『Ubuntu Linux Install Nvidia Driver』,发现上一步骤安装过新的GPU驱动程式版本--470,执行以下指令,安装较旧版本。
# 检查GPU驱动程式版本sudo lshw -C display# 安装GPU驱动程式 460 版本sudo apt install nvidia-driver-460
重开机后,就一切正常了,阿弥陀佛。
结语
Ubuntu 号称是最稳定的作业系统,好像不是这样啊 !!