2014-01-17 16:36:46 wushexu 阅读数 106
  • 蜂鸣器-第1季第11部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第11个课程,主要讲解了无源和有源蜂鸣器的概念和区别,蜂鸣器的发声原理、定时器控制蜂鸣器的编程技巧。本节的学习目标是学会使用蜂鸣器,同时提升程序的编写和调试能力。

    1762 人正在学习 去看看 朱有鹏
内容包括:Sphinx4的架构、使用示例,Sphinx声学模型的建立和适应,Sphinx语言模型的建立。
2011-04-24 23:46:00 caisenchuan 阅读数 806
  • 蜂鸣器-第1季第11部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第11个课程,主要讲解了无源和有源蜂鸣器的概念和区别,蜂鸣器的发声原理、定时器控制蜂鸣器的编程技巧。本节的学习目标是学会使用蜂鸣器,同时提升程序的编写和调试能力。

    1762 人正在学习 去看看 朱有鹏

     今天主要是学习一些基本知识,上网逛了一圈,发现一些有价值的资料,其中包括这些内容:

     1、语音识别系统的基本任务就是将输入的语音信号,识别成文字符号输出,基本流程如下图所示,基本上分成两个部分:前端处理(Front End Processing, FE)、搜索和解码(Search and Decoding)。其中,搜索和解码需要利用训练好的声学模型(Acoustic Model,AM)、语言模型(Language Model, LM),以及联系这两个模型的发音词典(Lexicon)。(摘自:《语音识别入门(V1.0)》)

 

     2、语音识别技术研究目前以CUED最为开放和活跃,其工具包HTK和相关研究组的网址如下,通过这些网址可以链接到上述语音识别相关的网站。

     http://htk.eng.cam.ac.uk/
     http://mi.eng.cam.ac.uk/research/speech/

 

     3、HTK是由剑桥大学电机系研发的隐藏式马尔可夫模型(HMM)分析工具,使用它可以快速的开发出一套基于HMM的语音识别系统。

 

     参考的资料是:

    《语音识别入门(V1.0)》(中科院自动化所)

    《Using HTK》(台湾国立清华大学,Chi-Yueh Lin)

 

    这么看HTK是一组语音识别的套件,用这个开发可能比较方便,于是学习HTK的用户手册。

 

---------------------------------------------------------------------

 

=2011-04-25=

 

今天继续学习HTK相关的基础知识,参考资料是HTK Book。

 

 

 

2019-05-17 11:29:47 u012361418 阅读数 588
  • 蜂鸣器-第1季第11部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第11个课程,主要讲解了无源和有源蜂鸣器的概念和区别,蜂鸣器的发声原理、定时器控制蜂鸣器的编程技巧。本节的学习目标是学会使用蜂鸣器,同时提升程序的编写和调试能力。

    1762 人正在学习 去看看 朱有鹏

一、总述

解码器是ASR重要的组件之一,在传统的基于GMM-HMM/DNN-HMM混合系统中,解码器架起语言模型、声学模型、发音词典等知识源的桥梁,得到最终的识别结果,如图1所示。

随着深度学习技术的盛行,一系列ASR端到端系统、ASR-NLP端到端系统甚至ASR-NLP-TTS端到端系统被相继提出,解码器的作用在被一步步弱化,但是笔者认为,抛弃解码器,实现完全的端到端系统还有相当长的路要走。因为文本数据和语音数据之间存在着很大的数据差异,单靠一个网络很难有比较好的效果,使用语言模型,往往会使结果更佳。

解码器是一个系统性的东西,要写一个好的解码器,不仅需要扎实的工程实现能力,而且要对声学模型、语言模型、发音词典等知识有一定的理解。所以下面简单介绍ASR每个组件。

 

二、声学特征提取

利用声音信号的短时平稳性,对音频进行分帧,提取每帧的特征,ASR常用的特征有Fbank、MFCC等。当然也有一些利用DNN提取特征的方法,目前还不是主流方法。

图2为Fbank提取过程,图3为MFCC提取过程。

MFCC是在Fbank的基础上做DCT变换,去除特征维度之间的相关性,同时也可以起降维的作用。

 

三、声学模型

利用声学特征和对应的标签,训练声学模型,目的是建立声学信号和建模单元之间对应的概率分布,常用的建模单元有HMM状态、音素、音节、字等。主流的模型结构有GMM-HMM、DNN-HMM、DNN-CTC等。随着深度学习的兴起,GMM-HMM已经逐步被DNN-HMM及端到端技术所替代。

在基于HMM框架中,GMM、DNN建立信号的静态分类,作为HMM的发射概率,HMM建立信号的动态时间特性。

图4为一般的DNN,HMM模型,图中上图表示三个状态的HMM模型,0状态和4状态分别是起始状态和结束状态,一般用一个HMM来表示一个音素(monophone或triphone),即如果有100个音素,那么就有100个HMM(音素绑定另说),如果每个音素有3个状态(状态绑定另说),那么总共的状态个数就是100*3=300,状态的个数等于DNN的输出节点个数,图中下图表示一个简单的DNN,输入层维度是3,两个隐藏层维度为5,输出层维度是3,在识别任务中,输入层的维数是特征向量的维数(输入层有拼帧另说),输出层的维数是建模单元的个数,如果以音素建模,那么输出层的维数就是音素的个数,隐藏层的层数和节点数依据任务的复杂度而定。

在基于WFST解码过程中,特征做为DNN的输入,输出为各建模单元的概率。HMM与发音词典、语言模型组合,形成一个大的FST解码网络,解码网络的输入是各建模单元。这里DNN是泛指一切神经网络,包括DNN、CNN、RNN、LSTM、GRU等。

可以通过查看DNN的后验概率分布分析声学模型优略,比如,概率比较平均说明模型的区分性不是很好,可以使用区分性训练准则加强声学模型等。

 

四、语言模型

语言模型建立文本逻辑的合理性模型,统计词与词之间的相关性。常用的语言模型有NGRAM、RNN-LM、正则语法JSGF等,由于RNN语言模型很难用于实时解码,所以一般和NGRAM语言模型结合使用,即用RNN重新计算NGRAM的统计概率。

图5为二元NGRAM语言模型arpa文件,从arpa文件可以容易看出,高元概率一般比低元概率要大,这样在解码中,尽量少回退,回退会使累计概率降低,候选路径惩罚加大,容易被裁。

大规模连续语音识别中,NGRAM语言模型元数越高越好,但是限于效率的考虑,一般做到三元或四元即可。有些限定领域比如古诗词等领域,可以做到六元、八元甚至十元模型。视具体的应用场景而定语言模型的规模。

鉴定语言模型的优略可以通过测试集验证模型的困惑度(PPL)。如果PPL较小说明训练集与测试机越匹配,模型就越好。

 

五、发音词典

发音词典建立声学模型和语言模型之间的桥梁,一个好的词典对识别性能起着重要的作用,这一部分通常是语言专家制定并人工制作,常用的声学建模单元是以声韵母建模,发音词典就是每个词的发音符号表,如图6所示。

中文识别中经常会出现同音异形字,一般会通过在发音后面添加消岐符加以区分,比如在中和忠后面加上#1和#2。这样每一个音会有特定的词与它对应,有利于最终FST的确定化。

 

词典的规模视具体应用而定,如果是通用领域,词典规模可以在百万级,如果是限定领域,词典规模可以在十万级,如果是命令词识别,词典规模则更低。

 

六、解码器

利用发音词典、声学模型、语言模型等知识源构建解码图,并在解码图中寻求最优路径。

根据语言模型使用的不同角度,解码可以分为动态解码和静态解码,在动态解码过程中,以词典树为中心,在语言模型中动态查找语言得分,而静态解码是语言模型提前静态编进解码图,通过确定化、权重前移、最小化等一些列优化操作,解码效率更高,但是内存占用率更大。所以选用哪种解码策略,依据具体的应用而定。比如,大词汇量在线语音识别,对实时率要求较高,可以选用静态解码,而对于专用芯片等对内存要求较高的场景,就需要选用动态解码。

这里我们以基于HCLG网络的静态解码为例。首先需要把语言模型、发音词典、声学模型表示成对应的FST格式,如果7所示,然后通过组合、确定化、最小化等操作编译成一个大的解码图,如图8为截取解码图的一部分(解码图太大)。

 

 

 

 

 

 

 

 

图8

一般的HCLG网络构建流程如下:

HCLG = ASL(min(RDS(det(H' o min(det(C o min(det(L o G))))))))

其中:

ASL:加自环

RDS:去消岐符

H’:去掉自环的HMM

 

解码的过程就是在解码图中寻求最优路径的过程,因为解码图经过确定化操作,不会有相同的两条输入路径,所以可以使用维特比进行解码。

在解码过程中,为了提升解码速度,需要在解码过程中采用不同的剪枝策略,把当前时刻概率比较低的路径进行裁剪,当然,剪枝后的路径不保证是最优路径,但是会尽最大可能保留最优路径。

常见的剪枝策略有:

  1. 累积beam剪枝。即从当前概率最大路径得分减去beam值作为阈值,小于阈值的路径被裁剪;
  2. 直方图剪枝。即每一时刻仅保留一定数量的令牌。
  3. 声学模型预测剪枝。即利用声学信号的平稳性,把当前的声学分作为下一帧的声学得分并剪枝。
  4. 语言模型预测剪枝。即使用LOOKAHEAD提前估计语言模型得分并剪枝。
  5. 空边剪枝。即为了防止空边指数级扩展,对于不必要的空边停止扩展,因为空边大多是由语言模型回退造成的,如果已经有三元模型概率,那么没必要回退到二元模型展开。

帧同步解码算法:

  • 找到解码图的开始节点,创建对应节点的令牌;
  • 从开始节点对应的令牌做空边(即输入不对应真实的建模单元)扩展,每一个可达的节点都绑定对应的令牌,剪枝,保留活跃令牌;
  • 每输入一帧,从当前活跃令牌中取出一个令牌,对应节点开始扩展后续非空边(即输入对应真实物理建模单元),遍历完所有活跃令牌,剪枝,保留当前帧活跃令牌;
  • 重复3步骤,直到所有的帧都扩展结束;
  • 找到得分最大令牌,回溯得到最后的识别结果。

七、展望

本小节先讲到这里,画图真是不易,下一节我们将结合kaldi代码,具体详述解码图构建及解码搜索,敬请期待。

2013-03-03 17:35:09 habout632 阅读数 1140
  • 蜂鸣器-第1季第11部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第11个课程,主要讲解了无源和有源蜂鸣器的概念和区别,蜂鸣器的发声原理、定时器控制蜂鸣器的编程技巧。本节的学习目标是学会使用蜂鸣器,同时提升程序的编写和调试能力。

    1762 人正在学习 去看看 朱有鹏

1.构造语音词典的工具:

参考如下的链接:ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/dictionaries/beep.tar.gz

例如:beep.tar.gz里面包含几个文件,主要是下面的英文和发音对应的文件。

FIVE f ay v


2.

2017-04-13 09:40:03 dearwind153 阅读数 6272
  • 蜂鸣器-第1季第11部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第11个课程,主要讲解了无源和有源蜂鸣器的概念和区别,蜂鸣器的发声原理、定时器控制蜂鸣器的编程技巧。本节的学习目标是学会使用蜂鸣器,同时提升程序的编写和调试能力。

    1762 人正在学习 去看看 朱有鹏


转自:点击打开链接

原文作者:英语流利说团队 李飞腾


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

jieba分词详解

阅读数 266

关于ASR

阅读数 1068

基于WFST解码器

阅读数 311

理解HCLG

阅读数 29

没有更多推荐了,返回首页