[转]Kaldi语音识别

转:http://ftli.farbox.com/post/kaldizhong-wen-shi-bie

Kaldi语音识别
1.声学建模单元的选择
1.1对声学建模单元加入位置信息
2.输入特征
3.区分性技术
4.多音字如何处理?
5.Noise Robust ASR 6.Deep Learning[DNN/CNN替换GMM]
7.在手机等资源受限设备
author:Feiteng
Email:[email protected]
date:2014/08/10

Kaldi训练脚本针对不同的语料库,需要重写数据准备部分,脚本一般放在conf、local文件夹里;

conf放置一些配置文件,如提取mfcc、filterbank等特征参数的配置,解码时的一些参数配置
local一般用来放置处理语料库的数据准备部分脚本 > 中文识别,应该准备:发音词典、音频文件对应的文本内容和(文件标注)一个基本可用的语言模型(解码时使用)
注:一般情况下,在模型训练阶段LM对ASR的参数训练没有影响,即不影响GMM、HMM、DNN/CNN的参数值;使用区分度模型训练会有影响[生成Lattice候选]
1.声学建模单元的选择

全音节[是否带声调]、声韵母[是否带声调]、音素?
> 带声调的声韵母作为建模单元是比较常见的中文识别选择,也有一些文章指出,使用更细化的phones 集可以有更多的性能提升:
中文连续语音识别系统音素建模单元集的构建——包叶波等
基于发音特征的汉语普通话语音声学建模——颜永红等
基于发音特征的汉语声调建模方法及其在汉语语音识别中的应用——刘文举等
1.1对声学建模单元加入位置信息

For instance, we‘d have:
AA AA_B AA_E AA_I AA_S
for (B)egin, (E)nd, (I)nternal and (S)ingleton
and in the case of silence
SIL SIL SIL_B SIL_E SIL_I SIL_S
仍然要注意,中英文的差别,中文声学建模单元可能不含有全部的_B _E _I _S

2.输入特征

MFCC、fbank、PLP

使用对角协方差矩阵的GMM由于忽略了不同特征维度的相关性,MFCC更适合用来做特征
DNN/CNN可以对更好的利用这些相关性,把MFCC的DCT省略,使用fbank特征可以更多地降低WER
tips: Deep Learning更多是实验性质,解释多半是迎合实验现象 

甚至直接从语音波形图上直接提取特征 

IBM-Tara N. Sainath-2014-IMPROVEMENTS TO FILTERBANK AND DELTA LEARNING 

Tara N. Sainath发表了一系列的CNN on Speech的文章,我觉得质量是CNN on Speech的文章中最好的

中文是带声调的语言,声调不同,差别很多,因此可以在特征上加入声调信息

2014-A DNN-BASED ACOUSTIC MODELING OF TONAL LANGUAGE AND ITS APPLICATION TO MANDARIN PRONUNCIATION TRAINING 

2014-AUTOMATIC PHONETIC SEGMENTATION IN MANDARIN CHINESE BOUNDARY MODELS, GLOTTAL FEATURES AND TONE

Noise Robust feature?

LiDeng2013-An Overview of Noise-Robust Automatic Speech Recognition

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

从特征提取、模型层面把噪声考虑进去 可参考:
综述文章:LiDeng2013-An Overview of Noise-Robust Automatic Speech Recognition
6.Deep Learning[DNN/CNN替换GMM]

这一步“需要”先训练一个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.在手机等资源受限设备

参考 雷欣 的两篇文章,针对数值存储、模型等做优化,在资源暂用与识别率下降方面做权衡

1.2013-Accurate and Compact Large Vocabulary Speech Recognition on Mobile Devices
2.FINE CONTEXT, LOW-RANK, SOFTPLUS DEEP NEURAL NETWORKS FOR MOBILE SPEECH RECOGNITION
时间: 2024-12-20 10:25:30

[转]Kaldi语音识别的相关文章

Kaldi 语音识别基础教程

Kaldi 介绍 Kaldi 是由 C++ 编写的语音识别工具,其目的在于为语音识别研究者提供一个研究和使用的平台. Kaldi 环境搭建 本文主要通过使用 Docker 和 Nvidia-docker 构建 Ubuntu 环境对 Kaldi 进行搭建.Docker 针对的是无 GPU 的环境,Nvidia-docker 针对的是需要使用 GPU 计算的环境,如果读者机器上存在 GPU 计算资源,请使用 Nvidia-docker,使用 Nvidia 官方提供的 CUDA 镜像,可以省去安装 C

调用kaldi的模型进行解码

At the moment Kaldi is targeted more at people who are building ASR systems than those who just want to use them. We may in future cater to needs such as yours. 目前Kaldi面向构建ASR系统的人而不是使用ASR系统的人,以后可能会有API. Regarding API, the idea is that you would write

在ubuntu下安装kaldi基本步骤

注:最近在学习kaldi语音识别工具,在安装过程中遇到了许多问题,为了解决问题,我把ubuntu和一些软件装了又卸,卸了又装,解决了旧问题,又出现新问题,所以在此记录,以备后需. 在一开始,我看了这篇博客(http://blog.topspeedsnail.com/archives/10013),该博客中的kaldi是在github上下载的,所以要先下载git. 按照步骤进行,可以顺利下载kaldi源码,安装过程也可以按照其中的INSTALL文件进行, 在tools中编译使用到的工具以及在src

在visual studio 2013中编译语音识别库kaldi

在visual studio 2013中编译kaldi的主要困难的地方在于正确编译kaldi的依赖库,主要是:openfst,ATLAS, pthreadVC2,其中又属ATLAS最难编译,因此,为求整个编译逻辑清晰简洁,在此将忽略kaldi所有依赖库的编译,如果有时间,我会直接提供其所依赖的库. 编译环境: 操作系统:windows8 (推荐) 编译工具:visual studio2013 其他:要安装完整的CygWin环境 编译步骤: 新建解决方案:打开visual studio 2013,

开源语音识别工具kaldi

Kaldi是一个非常强大的语音识别工具库,主要由Daniel Povey开发和维护.目前支持GMM-HMM.SGMM-HMM.DNN-HMM等多种语音识别的模型的训练和预测.其中DNN-HMM中的神经网络还可以由配置文件自定义,DNN.CNN.TDNN.LSTM以及Bidirectional-LSTM等神经网络结构均可支持. 目前在Github上这个项目依旧非常活跃,可以在 https://github.com/kaldi-asr/kaldi 下载代码,以及在http://kaldi-asr.o

kaldi使用cvte模型进行语音识别

操作系统 : Unbutu18.04_x64 gcc版本 :7.4.0 该模型在thch30数据集上测试的错误率只有8.25%,效果还是不错的. 模型下载地址: http://www.kaldi-asr.org/models/m2 选择模型:CVTE Mandarin Model V2 测试文本: 自然语言理解和生成是一个多方面问题,我们对它可能也只是部分理解. 在线识别 测试脚本 ./online2-wav-nnet3-latgen-faster --do-endpointing=false

我们基于kaldi开发的嵌入式语音识别系统升级成深度学习啦

先前的文章<三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的>说我们花了不到三个月的时间搭了一个基于kaldi的嵌入式语音识别系统,不过它是基于传统的GMM-HMM的,是给我们练手用的,通过搭这个系统我们累积了一定的语音识别领域的经验,接下来我们就要考虑做什么形态的产品了.语音识别可以分大词汇量连续语音识别(Large Vocabulary Continuous Speech Recognition, LVCSR)和关键词识别(Keyword Spotting, KWS)

语音识别开源项目

语音识别项目: http://www.oschina.net/project/tag/203/tts-speech sf.net http://www.codesoso.net/Search?q=%D3%EF%D2%F4%CA%B6%B1%F0&l=c http://search.codesoso.com/Search?q=%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB http://simon-listens.blogspot.com/2012/12/simon-04

Ubuntu中安装编译并测试HTK语音识别库

1.在网上看到首先必须确保电脑上安装了g++和libx11 g++ --version //检测g++版本 sudo apt-get install libx11-dev:i386 2.然后可从HTK官网 上 下载 HTK语音识别库 3.解压:sudo tar xzf HTK-3.4.1.tar.gz 4.打开文件夹:cd htk 5.在/usr/local/目录下安装文件:sudo ./configure --prefix=/usr/local/ 出现: setting config.stat