语音识别简介
语音识别(speech recognition)技术,也被称为自动语音识别(英语:Automatic Speech Recognition, ASR)、盘算机语音识别(英语:Computer Speech Recognition)或是语音转文本识别(英语:Speech To Text, STT),其方针是以盘算机自动将人类的语音内容转换为响应的翰墨。
依照不同纬度以下分类:
- 按辞汇量(vocabulary)巨细分类:
- 小辞汇量:几十个词;
- 中等辞汇量:几百个到上千个词
- 大辞汇量:几千到几万个
- 案说话的方式(style)分类:
- 孤立词(isolated words)
- 连续(continously)
- 按声学(Acoustic)情况分类:
- 录音室
- 不同水平的乐音情况
- 案说话人(Speaker)分类:
- 说话人相关(Speaker depender)
- 说话音素(Phoneme):单词的发音都是由音素组成,对于英语,常用的音素集是 CMU 的 39 个音素组成的音素集。而对于汉语,一样平常间接用全数声母和韵母作为音素集,此外汉语识别还要考虑音调。
- 声学模子 :是将声学和发音学(phonetics)的常识举行整合,以特征提取部分天生的特征作为输入,并为可变长特征序列天生声学模子分数。
- 说话模子 :经过从练习语料(凡是是文本形式)进修词之间的相互关系,来估量假定词序列的大要性,又叫说话模子分数。
- GMM :Gaussian Mixture Model, 高斯混淆模子,描摹基于傅里叶频谱语音特征的统计模子,用于传统声学模子的建模中。
- HMM :Hidden Markov Model, 隐马尔科夫模子,是一种用来描摹含有隐含未知参数的马尔科夫进程,其难点是从可观察的参数中肯定该进程的隐含参数。然后利用这些参数来作进一步的分析,例如形式识别。
- MFCC :Mel-Frequency Cepstral Coefficients, 梅尔频次倒谱系数,是组成梅尔频次倒谱的系数。衍生自消息片断的倒频谱(cepstrum)。倒谱与梅尔频次倒谱的区分在于,梅尔频次倒谱的频带别离是在梅尔刻度上等距分此外,它比用于一般的对数倒频谱中的线性间隔的频带更靠近人类的听觉系统。普遍利用于语音识别中。
- Fbank :Mel Frequency Filter Bank, 梅尔频次滤波器组。
- WER :Word Error Rate, 词毛病率,是最多见的权衡语音识别系统性能的目标。
GNN-HMM底子道理
一个语音识别系统重要包含信号处置赏罚和特征提取、声学模子练习、说话模子练习以及识别引擎等几个焦点部分,下图为语音识此外道理框图:
- 特征提取 :语音识别第一步就是特征提取,去撤除语音信号中对于语音识别无用的冗余信息(如背景乐音),保存可以大要反应语音本质特征的信息(为后背的声学模子提取合适的特征向量),并用必定的形式表示出来;较常用的特征提取算法有 MFCC。
- 声学模子练习 :按照语音库的特征参数练习作声学模子参数,在识此外时候可以将待识此外语音的特征参数同声学模子举行婚配,从而获得识别结果。现在支流的语音识别系统多采纳 HMM 举行声学模子建模。
- 说话模子练习 :就是用来盘算一个句子出现的几率模子,重要用于决议哪个词序列的大要性更大。说话模子分为三个条理:字典常识、语法常识、句法常识。对练习文本库举行语法、语义分析,经过基于统计模子练习获得说话模子。
- 语音解码与搜索算法 :其中解码器就是针对输入的语音信号,按照已经练习好的声学模子、说话模子以及字典建立一个识别收集,再按照搜索算法在该收集合根究一条最好途径,使得可以大要以最大要率输出该语音信号的词串,这样就肯定这个语音样本的翰墨。
DNN-HMM(基于神经收集)
但随着神经收集技术的成长,后背又出现了基于DNN-HMMs的语音识别模子,一句话概括就是用DNN取代之前的GMMs,有更好的建模本事。
支流的DNN模子,包含FFDNN、CDDNN、TDNN、RNN等,以及一些练习中可以利用的trick等。
本文档模子练习方式采纳的是GNN-HMM
为什么调研kaldi工具
Kaldi 的架构以下图:
kaldi安排
依靠情况
Gcc 4.8及以上
Patch
Make .
automake
Autoconf
zlib zlib-devel
gdbm
bzip2
sqlite
openssl-devel
Readline
python3
这里我是编译安装,没有更换之前的2.7; /usr/bin下间接建立的python3的软连
Kaldi安装
解压 kaldi-master.zip
[root@localhost mnt]# cd kaldi-master/tools/
检察情况要求
[root@localhost tools]# cat INSTALL
依靠情况满足的情况下 运转检查剧本 会 回执 OK 以下图
检察 cup 内核数
确认内核数 起头编译
[root@localhost tools]# make -j 8
[root@localhost tools]# ./extras/install_irstlm.sh
安装说话模子
安装编译安装,时候会有些长, 大要会出现一些编译失利的毛病信息,可以按照现实报错内容举行逐一排查,
[root@localhost tools]# cd ../src/
[root@localhost src]# ./configure
[root@localhost src]# make depend
[root@localhost src]# make
检查编译乐成后的尝试文件
[root@localhost kaldi-master]# cd src/bin
[root@localhost bin]# ls
kaldi目录分析
- ./tools目录下是kaldi依靠的包
- ./src目录寄存kaldi的源代码
- ./egs目录保存着一些kaldi在公共语音数据集上的练习步伐(shell剧本)以及测试的结果
- s5/run.sh包含了在这个数据集上全数的练习步伐,包含数据预处置赏罚、练习以及测试gmm/dnn/lstm/tdnn等模子、尝试结果统计在内的各类剧本。理论上来说只要相关情况设备正确,运转run.sh就能完成全部练习步伐。
- s5/RESULTS里面保存着近来的尝试结果
- s5/conf就是一些练习所要用到的设备文件
- s5/{local, steps, utils}里面则是run.sh所要用到的一些剧本文件
在kaldi中,现在针对深度神经收集供给三种代码库。第一个是"nnet1"(位于nnet/和nnetbin/下),最初由Karel Vesely保护;第二个"nnet2"(位于nnet2/和nnet2bin/下)最初由Daniel Povey保护;第三个"nnet3"(位于nnet3/和nnet3bin/下)由Daniel的nnet2转化而来
考证底子demo
[root@localhost kaldi-master]# cdegs/yesno/s5/
[root@localhost s5]# ./run.sh
起头下载进修集并起头建造
输出后的结果,运转到这里,分析kaldi 已经正确安装好。
WER(WordError Rate)是字毛病率,是一个权衡语音识别系统的正确水平的怀抱。其盘算公式是WER=(I+D+S)/N,其中I代表被插入的单词个数,D代表被删除的单词个数,S代表被更换的单词个数。也就是说把识别出来的结果中,多认的,少认的,认错的全都加起来,除以总单词数。这个数字固然是越低越好。
[root@localhost s5]# cd waves_yesno/
[root@localhost waves_yesno]# ll
天生的音频
建造第一个练习模子thchs30
Kaldi中文语音识别公共数据集一共有4个(据我所知),别离是:
1.aishell: AI SHELL公司开源178小时中文语音语料及底子练习剧本,见kaldi-master/egs/aishell
2.gale_mandarin: 中文消息广播数据集(LDC2013S08,LDC2013S08)
3.hkust: 中文电话数据集(LDC2005S15,LDC2005T32)
4.thchs30: 清华大学30小时的数据集,可以在http://www.openslr.org/18/下载
这里利用thchs30数据集举行练习
已下载的数据包
数据集
| 音频时长(h)
| 句子数
| 词数
| train(练习)
| 25
| 10000
| 198252
| dev(开辟)
| 2:14
| 893
| 17743
| test(测试)
| 6:15
| 2495
| 49085
| 数据包简介
另有练习好的说话模子word.3gram.lm和phone.3gram.lm以及响应的辞书lexicon.txt。
其中dev的感化是在某些步伐与train举行交织考证的,如local/nnet/run_dnn.sh同时用到exp/tri4b_ali和exp/tri4b_ali_cv。练习和测试的方针数据也分为两类:word(词)和phone(音素)
1.local/thchs-30_data_prep.sh重要工作是从$thchs/data_thchs30(下载的数据)三部分别离天生word.txt(词序列),phone.txt(音素序列),text(与word.txt类似),wav.scp(语音),utt2pk(句子与说话人的映照),spk2utt(说话人与句子的映照)
2.#produce MFCC features是提取MFCC特征,分为两步,先经过steps/make_mfcc.sh提取MFCC特征,再经过steps/compute_cmvn_stats.sh盘算倒谱均值和方差归一化。
3.#prepare language stuff是构建一个包含练习息争码用到的词的辞书。而说话模子已经过王东教员处置赏罚好了,假如不筹划改说话模子,这段代码也不需要点窜。
a)基于词的说话模子包含48k基于三元词的词,从gigaword语料库中随机挑选文本信息举行练习获得,练习文本包含772000个句子,总计1800万词,1.15亿汉字
b)基于音素的说话模子包含218个基于三元音的中文声调,从只要200万字的样本练习获得,之所以挑选这么小的样本是由于在模子中尽大要少地保存说话信息,可以使获得的性能更间接地反回声学模子的质量。
c)这两个说话模子都是由SRILM工具练习获得。
建造起头
[root@localhost ~]# mkdir -p /DATA/works/
上传进修包并解压
[root@localhost ~]# cd/mnt/kaldi-master/egs/thchs30/s5/
点窜内容以下:
export train_cmd=run.pl
export decode_cmd="run.pl --mem4G"
export mkgraph_cmd="run.pl --mem8G"
export cuda_cmd="run.pl --gpu 1"
[root@localhost s5]# vim cmd.sh
[root@localhost s5]# vim run.sh
起头建造模子
[root@localhost s5]# ./run.sh
我们没有DNN(无GPU)来跑,所以运转起来会比力慢。//后续有资本的情况尝试大数据
模子天生目录分析
模子天生后寄存的途径thchs30/s5/exp/tri1
final.mdl 就是练习出来的可以利用的模子,此外,在 graph_word 下面的 words.txt 和 HCLG.fst 别离为字典以及有限状态机。零丁先容这三个文件,是由于我们下面的示例重要基于这三个文件来识此外。
考证模子
将建造好的模子复制到以下途径
/mnt/kaldi-master/egs/thchs30/online_demo/online-data/models/tri1
/mnt/kaldi-master/egs/thchs30/online_demo
[root@localhost online_demo]# vim run.sh
[root@localhost online_demo]# ./run.sh 模子识此外是
/mnt/kaldi-master/egs/thchs30/online_demo/online-data/audio途径下全数的单音频文件
识此外结果内容
算法进程描摹
大要有几个进程:数据预备,monophone单音素练习, tri1三身分练习, trib2举行lda_mllt特征变更,trib3举行sat自然说话顺应,trib4做quick(这个我也不懂),后背就是dnn了
Run 脚天职析
这个剧本的输入参数有三个:1.data/mfcc/train 2.exp/make_mfcc/train 3.mfcc/train
1.data/mfcc/train中稀有据预处置赏罚后的一些文件:phone.txt spk2utt text utt2spk wav.scp word.txt
2.exp/make_mfcc/train中应当是要保存步伐运转的日志文件的
3.mfcc/train中是提取出的特征文件
待研讨的偏向
Kaldi在线识别方式
用的捏造机,没有音频进口
后续补充
Kaldi封装实时语音翻译
后续补充
基于Kaldi+GStreamer搭建线上的实时语音识别器
https://www.jianshu.com/p/ef7326b27786
Kaldi结合GPU的模子练习
后续补充
Kaldi结合CNN的模子练习
https://blog.csdn.net/DuishengChen/article/details/50085707?locationNum=11&fps=1
后续补充
Kaldi 声纹识别ivector模子
后续补充
https://blog.csdn.net/u011930705/article/details/85340905
https://blog.csdn.net/monsieurliaxiamen/article/details/79638227
Kaldi中文识别开源模子CVTE
后续补充
https://www.jianshu.com/p/d64e70faaf1d
https://blog.csdn.net/snowdroptulip/article/details/78952428
Kaldi 练习叫醒词模子
后续补充
https://blog.csdn.net/cj1989111/article/details/88017908
FAQ
模子建造报错:/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
[root@localhost ~]# find / -name libstdc++.so.6 当地看看能否有此库
这里可以看到,我当地是存在的,应当是调不到的原因原由
[root@localhost ~]# vim /etc/ld.so.conf
/usr/lib64/
/usr/local/lib
/usr/local/lib64
/usr/lib
加入依靠库途径
重新加载
[root@localhost ~]# ldconfig
假如不成,就用编译的gcc里的库做个软毗连
[root@localhost online_demo]# ln -s/mnt/gcc/gcc-5.4.0/gcc-build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6/usr/lib64/libstdc++.so.6
[root@localhost online_demo]# ll /usr/lib64/libstdc++.so.6
免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作! |