引言—语音识别ASR
参考博客.
在基于GMM-HMM的传统语音识别里,比音素(phone)更小的单位是状态(state)。一般每个音素由三个状态组成,特殊的是静音(SIL)由五个状态组成。这里所说的状态就是指HMM里的隐藏的状态,而每帧数据就是指HMM里的观测值。每个状态可以用一个GMM模型表示(这个GMM模型的参数是通过训练得到的)。在识别时把每帧数据对应的特征值放进每个状态的GMM里算概率,概率最大的那个就是这帧对应的状态。再从状态得到音素(HMM负责),从音素得到词(字典模型负责),从词得到句子(语言模型负责),最终完成识别。
1. kaldi的编译流程
第一次编译kaldi很可能会缺各种东西,最好有管理员权限来安装。
## 下载
git clone https://github.com/kaldi-asr/kaldi.git kaldi --origin upstream
cd kaldi
## 编译tools
cd tools
extras/check_dependencies.sh //缺什么就安装什么,需要管理员权限
make
## 编译src
cd ../src
./configure --shared
make depend -j 8
make -j 8
2. librispeech示例
kaldi本身内置了很多个语料库的asr示例,librispeech示例是一个英语的常用语料库,总共有960小时的数据。此外,中文常用语料库为aishell2,需要申请。以下按照训练流程来查看生成的文件。
打开kaldi/egs/librispeech/s5,其中cmd.sh为集群相关的配置,若为单机训练,则改为
export train_cmd=run.pl
export decode_cmd=run.pl
export mkgraph_cmd=run.pl
然后就是主要的训练脚本,run.sh,第一行的 data 修改为自己准备存放的语料库路径。
该脚本由 20 个 stage 组成,可以一个一个 stage 自己放到命令行跑,观察生成了什么。
步骤1,下载语料库和词典,也可自己在 openslr 下载,有很多开源的ASR语料库。
if [ $stage -le 1 ]; then
for part in dev-clean test-clean dev-other test-other train-clean-100; do
local/download_and_untar.sh $data $data_url $part
done
local/download_lm.sh $lm_url data/local/lm
fi
步骤2,将数据重构成kaldi所需的形式,将对每个集生成一个文件夹.
if [ $stage -le 2 ]; then
for part in dev-clean test-clean dev-other test-other train-clean-100; do
local/data_prep.sh $data/LibriSpeech/$part data/$(echo $part | sed s/-/_/g)
done
fi
每个文件夹里,比较重要的文件有 text、wav.scp、utt2spk、spk2utt、feats.scp、cmvn.scp。
其中,前三项需要手动准备,后面的可以根据前三项自动生成。
$ls data/train_clean_100
cmvn.scp conf feats.scp frame_shift spk2gender spk2utt split20 text utt2dur utt2num_frames utt2spk wav.scp
# text <utterance-id> <text>
# 第一个为句子的id,若有说话人信息应该把说话人的编号(speaker-id)作为话语编号的前缀,以便排序;
# 第二个为转录文本,这些词不一定都在词典里,不在的词会被映射到data/lang/oov.txt文件的特定词。
$head -3 train_clean_100/text
103-1240-0000 CHAPTER ONE MISSUS RACHEL LYNDE IS SURPRISED MISSUS RACHEL LYNDE LIVED
103-1240-0001 THAT HAD ITS SOURCE AWAY BACK IN THE WOODS OF THE OLD CUTHBERT
103-1240-0002 FOR NOT EVEN A BROOK COULD RUN PAST MISSUS RACHEL LYNDE'S DOOR
# wav.scp <recording-id> <extended-filename>
# 第一个为记录的语音id,当没有segments文件时它等于utterance-id;
# 第二个为文件路径,也可以是提取路径的命令。
$head -3 train_clean_100/wav.scp
103-1240-0000 flac -c -d -s /home/fwq/Project/kaldi/kaldi/data/LibriSpeech/LibriSpeech/train-clean-100/103/1240/103-1240-0000.flac |
103-1240-0001 flac -c -d -s /home/fwq/P

本文详细介绍了Kaldi的编译流程,包括下载源码、编译tools和src,以及如何使用librispeech语料库进行ASR训练。从数据预处理到模型训练,涉及数据结构如text、wav.scp、utt2spk等,以及词典和语言模型的准备。通过20个stage逐步完成模型训练,包括单音素、三音素、LDA+MLLT及LDA+MLLT+SAT模型。
最低0.47元/天 解锁文章
3472

被折叠的 条评论
为什么被折叠?



