EN

龙芯业务

LOONGSON BUSINESS

栏目导航

Kaldi

LOONGSON SOLUTION

Kaldi

开源生态 2019-04-15 阅读次数:

请在下面红框内插入图片,不要放其它内容

  • 软件名称
    Kaldi
  • 软件版本
    提交号:8a87f53
  • 源码链接
    https://github.com/kaldi-asr/kaldi.git
  • 软件介绍
    Kaldi可以用来做语音识别。Kaldi诞生于2009年的JohnsHopkins University,刚开始项目重点是子空间高斯模型(SGMM)建模和词汇学习抽样调查,代码也是基于HTK进行的开发,以C++作为主要语言。但是随着更多参与者的加入,特别是对深度神经网络(DNN)的支持,让Kaldi的发展超过了其他几个著名开源项目。国外很多公司和研究机构也都在用Kaldi平台,当然国内更多的公司,其实也是基于这个平台做的改进,特别是最近几年新兴的公司和企业研究院。
  • 使用帮助
    在kaldi的egs目录下有许多脚本演示了如何使用Kaldi。结合语音的数据文件使用。例如kaldi/egs/yesno /s5目录下的脚本run.sh可以用来识别yes/no。
    Kaldi语音识别基本步骤:
    1.声学建模单元的选择
    2.输入特征
    3.区分性技术
    4.多音字如何处理?
    5.Noise Robust ASR
    6.Deep Learning[DNN/CNN替换GMM]
    7.在手机等资源受限设备
    Kaldi训练脚本针对不同的语料库,需要重写数据准备部分,脚本一般放在conf、local文件夹里;
    conf放置一些配置文件,如提取mfcc、filterbank等特征参数的配置,解码时的一些参数配置
    local一般用来放置处理语料库的数据准备部分脚本 > 中文识别,应该准备:发音词典、音频文件对应的文本内容和(文件标注)一个基本可用的语言模型(解码时使用)
    注:一般情况下,在模型训练阶段LM对ASR的参数训练没有影响,即不影响GMM、HMM、DNN/CNN的参数值;使用区分度模型训练会有影响[生成Lattice候选]
    1.声学建模单元的选择
    全音节[是否带声调]、声韵母[是否带声调]、音素? > 带声调的声韵母作为建模单元是比较常见的中文识别选择,也有一些文章指出,使用更细化的phones 集可以有更多的性能提升:
    2.输入特征
    MFCC、fbank、PLP
    使用对角协方差矩阵的GMM由于忽略了不同特征维度的相关性,MFCC更适合用来做特征DNN/CNN可以对更好的利用这些相关性,把MFCC的DCT省略,使用fbank特征可以更多地降低WER
    tips: Deep Learning更多是实验性质,解释多半是迎合实验现象
    甚至直接从语音波形图上直接提取特征
    3.区分性技术
    区别特征提取:LDA、MLLR、SAT、fbMMI
    区分度模型训练:MMI、MPE、MCE、smbr经验:并不是所有区分性技术都有正面效果4.多音字如何处理?
    假设我们的文本标注如下:
    spk001 我们 的 作品 为 第一名
    发音词典如下:
    的 d e0
    的 d e4
    的 d i2
    为 w ei2
    为 w ei4 的
    和为都是多音字,那么在模型训练阶段如何根据标注spk001联合phones的HMM模型呢?
    有两种解决策略:
    ①唯一化处理:更改文本标注和发音词典,将多音字唯一化标注
    如:
    的1 d e0
    的2 d e4
    为1 w ei2
    为2 w ei4
    spk001 我们 的1 作品 为1
    第一名 这样做的话,我们在解码阶段需要去除发音词典中的标识1、2,从而不会在解码结果中引入多余的1、2
    ②自动处理:Kaldi可以将多种选择(多音)编入spk001的fst,在Align阶段根据音频特征选择phone的标号这种处理可能不够精确,ML本来就不能100%准确;
    不过可能语料库的发音人并不能对所有的多音字都发正确的音,
    如果使用①需要校对每一个含有多音字的音频发音,人工大大的;
    英语单词也存在多音字,不过相比中文少得多.
    5.Noise Robust ASR
    从特征提取、模型层面把噪声考虑进去
    这一步“需要”先训练一个HMM+GMM,然后获得wav文件的alignment,即每一帧对应的phone->state
    这样我们就为DNN准备好了 train.data train.label
    注:我们可以使用为GMM提取的特征,也可以重新从wav提取特征,需要注意的是窗口大小、帧移要与alignment匹配;通常提取fbank特征作为DNN的输入,而且组合当前帧左右相邻的n帧成 2n+1帧特征作为输入
    Dropout、ReLU
    关于Dropout我在TIMIT做了不下20组实验,才看到WER的下降,更绝大多数文章的描述并不相同; ReLU做了几组实验,没看到更低的WER,有待继续。
    CNN
    根据实验CNN相比DNN会有5%-10%的WER下降,卷积层不同的实现[FFT vs 矩阵乘积]性能会有差异,这一层计算量略大 Tara N. Sainath发表了一系列的CNN on Speech的文章,我觉得质量是CNN on Speech的文章中最好的
    直接HMM+DNN混合训练
    参考:2014-google-GMM-FREE DNN TRAINING
    其他
    SVD低秩逼近W矩阵7.在手机等资源受限设备
    其它例如在./matrix/fft-speed-test单元测试,可以测试矩阵计算能力。
  • 详细帮助
    http://kaldi-asr.org/doc/
  •  

  •