转: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:lifeiteng0422@gmail.com
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

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

  1. Kaldi语音识别快速入门

    一.简介 Kaldi是使用C++编写的语音识别工具包,Apache License v2.0许可.主要供语音识别研究人员使用.Kaldi的目标和范围与HTK类似.目标是拥有易于修改和扩展的现代而灵活的 ...

  2. 103、Linux 编译 Kaldi 语音识别工具

    由于这个开源的语音识别工具Kaldi只能在Linux下面成功编译, 所以这一小节来写如何成功地在Linux下面编译Kaldi工具 (1)第一步,去github 上面把 Kaldi下载下来 git cl ...

  3. 调用kaldi的模型进行解码

    At the moment Kaldi is targeted more at people who are building ASR systems than those who just want ...

  4. 在ubuntu下安装kaldi基本步骤

    注:最近在学习kaldi语音识别工具,在安装过程中遇到了许多问题,在此记录,以备后需. 在一开始,我看了这篇博客(http://blog.topspeedsnail.com/archives/1001 ...

  5. Ubuntu下kaldi安装

    该文章为博主原创,如若转载请注明出处:https://www.cnblogs.com/fengleixue/p/9482202.html 因公司业务需要需使用kaldi语音识别工具,现将kaldi环境 ...

  6. 用于数据科学的顶级 C/C++ 机器学习库整理

    用于数据科学的顶级 C/C++ 机器学习库整理 介绍和动机--为什么选择 C++ C++ 非常适合 动态负载平衡. 自适应缓存以及开发大型大数据框架 和库.Google 的MapReduce.Mong ...

  7. 三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的

    前面的博客里说过最近几个月我从传统语音(语音通信)切到了智能语音(语音识别).刚开始是学语音识别领域的基础知识,学了后把自己学到的写了PPT给组内同学做了presentation(语音识别传统方法(G ...

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

    操作系统 : Unbutu18.04_x64 gcc版本 :7.4.0 该模型在thch30数据集上测试的错误率只有8.25%,效果还是不错的. 模型下载地址: http://www.kaldi-as ...

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

    先前的文章<三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的>说我们花了不到三个月的时间搭了一个基于kaldi的嵌入式语音识别系统,不过它是基于传统的GMM-HMM的 ...

随机推荐

  1. docker mysql 主主同步

    转发自:https://blog.csdn.net/money9sun/article/details/85099134 第一步:安装docker   https://www.cnblogs.com/ ...

  2. 《Java从入门到精通》学习总结4

    1. 程序运行期间,大部分数据都在内存中进行操作,当程序结束时,这些数据将消失. 如果需要将数据永久保存,可使用文件输入流 / 文件输出流与指定的文件建立连接,将需要的数据永久保存到文件中. File ...

  3. 大数据学习(一)-------- HDFS

    需要精通java开发,有一定linux基础. 1.简介 大数据就是对海量数据进行数据挖掘. 已经有了很多框架方便使用,常用的有hadoop,storm,spark,flink等,辅助框架hive,ka ...

  4. Vue的从入门到放弃

    此贴仅记录vue学习路程中遇见的大大小小,形形色色的问题 1.  vue自动打开浏览器配置: 当使用vue 脚手架搭建项目后启动npm run dev,会出现 但是不会自动打开浏览器的,这时候去con ...

  5. Linux驱动之内核自带的S3C2440的LCD驱动分析

    先来看一下应用程序是怎么操作屏幕的:Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出FrameBuffer这个设备来供用户 ...

  6. Program Hyundai i20 Smart Key with VVDI & Xtool X100 Pad2

    How-to: generate and program Hyundai i20 smart key with VVDI Mini Key Tool and XTOOL X100 PAD2. Step ...

  7. iframe和form表单实现ajax请求上传数据

    form的target属性设置为iframe的name值时,表示提交到url后返回的数据显示到iframe区域 <form action="/upload.html" met ...

  8. 常用jquery

    水果:<input type="checkbox" name="shuiGuo" value="2">苹果<input t ...

  9. Android.mk学习

    2019-03-31 学习变量 $(call my-dir) /usr/bin2/android-ndk-r16/build/core $(CLEAR_VARS) /usr/bin2/android- ...

  10. 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端

    [转]TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP ...