HMM+GMM语音识别技术详解级PMTK3中的实例

2023-11-05 09:10

本文主要是介绍HMM+GMM语音识别技术详解级PMTK3中的实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



本人正在攻读计算机博士学位,目前一直再学习各种模型啊算法之类的。所以一直想把自己的学习过程总结一下,所以就开通了这个博客。

这两天一直再看语音识别方面的知识,想把自己的理解总结一下,希望对其他学习的人有所帮助。

提前需要掌握的知识:

  • 语音信号基础:语音信号的表示形式、分帧、特征(MFCC)、音素等等
  • HMM模型:离散隐马尔科夫模型级3个问题的求解方法
  • GMM:混合高斯模型,用于连续隐马尔科夫模型。

语音数据处理

语音信号计算机中是采用PCM编码按时间序列保存的一连串数据。计算机中最原始语音文件是wav,可以通过各种录音软件录制,录制是包括三个参数

  • fs:采样率 8000Hz 115200Hz 等等,代表每1秒保存的语音数据点数
  • bits:每个采样点用几个二进制保存
  • 通道:很多音频都有左右2个通道,在语音识别中通常有一个通道的数据就够了。

下面是一个 apple.wav 文件在matlab中的例子:

[x fs bit]=wavread('apple.wave');
plot(x);
--------------
fs =8000
bits =16
--------------
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里写图片描述

x读取到的声音文件数据,长度是2694个采样点数据,其中wavread已经把每个采样点的16bit二进制转换成了-1~+1之间的实数了。所以声音对于我们出来来说就是一个一位数组了。 
刚才的apple.wave这个声音时间才是0.33675秒长语音,但数据量还是巨大的。所以语音信号做各种处理时不是把整个x去做运算,而是把他分割固定的一小段一小段的样子,叫做帧。帧应该多长呢?通常用20ms作为一个帧长。那20ms中包括多少个采样点呢,这个和采样速率fs有关。T=1/fs是采样间隔,那么一帧的数据长度 N=帧时间长度/T=帧时间长度(单位秒)*fs(单位Hz) 
上例子中 N=(20ms/1000)*8000=160 
分帧后的效果 
这里写图片描述 
上图中帧和帧是挨着的,实际中通常让他们有一定的重贴,这样帧序列可以更好的反应语音信号特点。 
接下来语音信号处理都是针对每个帧来处理了,而且帧长是固定,这样处理起来比较方面的 。上例子可以一帧数据包括160个点,

    Fs = 8000;framesize = 80;%真长overlap = 20;%帧课重叠部分长度frames = enframe(x, hamming(framesize), overlap);>> size(frames)131    80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这样刚才的语音就分成了131个帧了,每帧包含80数据。 
80个数据点对于我们来说也比较多的,能不能再进一步减少呢?当然可以这就是特征提取了。现在语音识别中常用的特征是MFCC(可以参照:http://blog.csdn.net/xiaoding133/article/details/8106672)。我们需要知道80个数据点最后提取了多长的特征呢?答案是12个点。 
这样语音数据就被进一步缩小了变成131个帧,每帧12点数据了。这样有2个好处:(1)运算量降低 (2)特征比原始语音有更好的分辨能力。到此语音数据的处理部分就可以告一段落了。接下来的问题是这些语音数据和HMM模型怎么关联起来呢?

HMM模型

HMM模型的基本知识一定要读A tutorial on Hidden Markov Models and selected applications in speech recognition, L. Rabiner, 1989, Proc. IEEE 77(2):257–286. 相信我这个英文写的HMM说明比很多中文网站里写的要好懂很多。这里假设大家都懂了HMM模型是什么,我主要说一下,HMM模型怎么用到语音识别的吧。 
先从最简单的少词汇量的识别情况说起。

少词汇量语音识别

假设我们要识别的词汇只有 ‘apple’ ‘banana’ ‘kiwi’ ‘lime’ ‘orange’ ‘peach’ ‘pineapple’ 这7个单词。那假设找了15个人,每人说一遍这8个单词然后录音,分别保存成apple01.wav apple02.wav等。这样就得到了每次词15个录音,总共105个wav文件。这就是原始数据。这些数据需要按前面所说分辨成MFCC特征文件。

在少词汇量识别中可以为每个词汇建立一个HMM模型。这个例子中可以建立7个HMM。HMM模型描述包括:

  • 状态个数N:整数
  • 转移概率A:N×N矩阵
  • 初始概率π:N×1矩阵
  • 观察序列概率B:N×T矩阵 T是观察符号集个数
  • 观察符号:模型输出的东西,可以是数值也可以是向量

其中模型参数B有很多讲究。如果是离散HMM那么B就是个每个状态下可能产生观察符号的概率,对于连续HMM就不能用离散概率来描述输出符号了。举一个例子,论文中有掷骰子的例子,这个HMM的观察符号是离散的1、2、3、4、5、6中的一个。他们观察的情况可以用概率来描述。现在我举一个连续HMM的例子,我有2个小球,一个红色,一个绿色,他们的重量不一样。有一个盒子长度和宽度分别是100cm。最开始我随机取一个球扔进盒子里,等球最后停止运动时记录下它在盒子中的坐标(如下图所示)。然后投掷一个硬币若是正面继续使用刚才的球重复试验,否则换另一个球重复试验。 
这里写图片描述 
为这个过程建立一个HMM模型来描述。其中 
N=2分别代表目前用的是红球还是绿球 
π=[0.5 0.5] 试验开始我随机取了一个球因此取到红球或绿球的概率一样 
A=[ 
0.8 0.2 
0.2 0.8 
] 假设我用的硬币质量不均匀,出正面的概率是0.8 背面是0.2 
O={x,y} 把球落入盒子的坐标作为观察序列。 
假设第一个试验得到的坐标是 {10.5 38.8},第二次{76.5 18.3}依此类推。现在的问题是HMM中的B矩阵怎么描述?显然我的观察序列可能出现的坐标有无穷多种(假设是实数坐标),所以离散HMM无法试用了,因为无法穷举我所有的可能的输出。那怎么办呢?可以把观察符号集可以看做是服从连续分布的二维随机变量。连续变量只能用概率密度函数去描述了,而直接说取某个值的概率是无意义的(因为都是无穷小)。我们最熟知分布有:均匀分布、高斯分布等等。那刚才的例子中观察符号的出现服从什么分布?显然我们不知道具体分布。那有没有近似的方法呢?有,那就是混合高斯模型GMM(参照http://blog.pluskid.org/?p=39)。先简化一个,假设观察序列符合高斯分布,那问题是这个假设的高斯分布的均值和方差是多少呢?只要知道这2个参数我们就知道了这个实验的观察符号的服从规律了。那我们假设是不是合理呢?通常情况下自然界很多事情都服从高斯分布,如果这例子本来就不是高斯分布这时我们无法用某个我们已知的概率分布去描述,这时可以用多个高斯分布的线性叠加来描述,这既是GMM。 
接下来说一下HMM的隐含性。刚才的例子我已经告诉了N,A,π这些参数,但如果我不告诉你这些参数,而我再幕布后做了这个实验(当然我自己知道,你现在不知道)做了10000次,得到了10000个观察符号,就是观察序列O。然后我把这个O给你,你能不能把我用的N,A,π,观察符号概率分布参数 预测出来?这就是HMM的训练问题。当然这实验是我设计的,所以我是已经知道了各个参数的,你不知道。但很多自然界中的情况我们是提前不能知道参数,而只能看到输出序列,所以我们需要找到系参数让他最能符合这个输出序列(EM算法)。上面的例子如果我不知道参数,只知道观察序列,那么可以这么做,先假设系统的各个参数,然后不停的改变参数让P(O|λ)最大。其中λ={π A μ Σ} 其中{μ Σ}值假设输出时连续单高斯分布时的均值和协方差(多为输出时对应均值向量和协方差矩阵)。 
说了很多,再回到语音识别的问题上。要识别7个单词,那就建立7个HMM,那第一个问题HMM的状态用几个?这个需要根据情况来定,看看状态代表什么含义。在整词建模中我们可以认为每个状态代表一个音素,比如apple(ae p l)就是有3个音素构成,那么给apple的HMM定义3个状态。banana(b ax n aa n ax)由6个音素构成,可以用6个状态HMM建模。为了简单也可以为每个词都建立相同状态数的HMM模型,这时就不能说状态精确代表是音素了,可能对应的半音素或几个音素。第二个HMM的观察序列是什么?用语音数据每一帧的MFCC数据作为一个观察符号,一个语音文件的全部MFCC就是观察序列。显然上例子中我的观察符号是2维向量,语音识别例子里就变成12维向量了,而且是连续形式的。第三个问题状态转移有什么限制?用left-right形式的HMM 
这里写图片描述 
这种HMM的A=[ 
0.2 0.8 0 
0 0.2 0.8 
0 0 1 
] (其中数值时假设的) 
这时由语音信号的特点决定的这个类型的HMM。因为如果每个状态代表一个音素,语音一般是一个音素接一个音素这样说,很少出现跳过中间音素,自循环的跳转主要对应发音时声音可能拉长或缩短对应这种情况。 
第四个问题每个状态下的观察符号的概率用什么描述?假设单高斯分布(或混合高斯分布,更精确)。 
这样一个这个HMM 的定义就有了 λ={N π A μ Σ} 
接下来就用各自的观察序列训练各自的模型(就是找到最优的π A μ Σ的问题)。 
接下来说一下识别方法。假设有了一段语音那他们到底是哪个单词的发音呢?先把语音分帧变成MFCC序列O,然后分别计算 
P(O|λ_apple) 
P(O|λ_banana) 
P(O|λ_kiwi) 
P(O|λ_lime) 
P(O|λ_orange) 
P(O|λ_peach) 
P(O|λ_pineapple) 
取最大值作为识别结果输出。这个计算时HMM的第一个问题,可以用前向后项算法计算。 
致词希望我把有限词汇量的问题说清楚了,具体算法层面的细节需要仔细阅读上面给出的参考论文。

连续大词汇量语音识别

HMM模型

给每个词单独建立一个HMM的思路在连续大词汇量语音识别中显然不再试用了(词语太多了,而且连续说话时词语的发音会有不同)。那怎么办呢?使识别单元缩小,目前使用较多的是音素。 
ONE w ah n 
YOUNG y ah ng 
这时英文单词one,young的音素,其中ah就是他们公共都有的音素了,这样音素真个语音中就比较少了。给出每个单词由哪些音素构成的叫做读音词典,想做语音识别必须先要有读音词典,英文读音词典例子。连续语音识别的基本思想是找出所有音素(数量大概有几十或几百个吧,但要比单词数量少了很多了这就是选择音素的愿意),然后为每个音素建立一个HMM,然后用各自的音素数据训练各自的HMM模型。 
其中HMM模型和语音对应的关系和单个词时的一样,同样用每帧的MFCC特征作为HMM的观察符号(帧是最小单位,比如one这个词的发音包含3个音素,one的wav数据可以分成几百个帧,所以一个音素可以包含多个帧)HMM状态数通常用5个,其中第一个和最后一个状态没有实际意义,中间三个状态分别代表音素开始阶段、音素稳定阶段、音素结束阶段,这三个状态才发射观察序列,头和尾的状态不发射,头和尾状态其他音素连接时一般要去掉的。如下图所示一个音素模型的HMM结构: 
这里写图片描述 
这样就能碰另一个问题,一个发音数据中我们怎么知道每个音素从哪儿开始到哪儿结束呢?这叫做音素标注问题。现在有2种做法一种是HMM训练用已经标注的wav文件,另一种是不需要标注也能训练HMM。所谓标准一般需要人工进行,需要听声音,然后判断每个音素的边界。比如one为例0~80ms是发音“w”,81~136ms是发音”ah”,136~536ms是“n”。英文里有timit语料库,有音素标准文件。当然这个标注会非常耗费人力的工作,现在也有语音无需标准就能训练HMM的办法的叫做embedded training (嵌入式训练) ,只需给出语音文件和音素序列就可以比如 语音文件是one.wav 音素信息是“w ah n”,而不用详细给出音素分界线。 
有了音素以后就可以用串联音素模型构成字的HMM模型(当然要借助发音词典)。比如英文SIX(s ih k s)由4个音素组成,每个音素又由3状态的HMM构成(连接时头和尾状态要去掉),那么整个SIX的HMM就下图所示(Sb代表第一个音素‘s’的开始阶段的状态): 
这里写图片描述 
同理如果有一个句子“call nine one one”,同样可以为它建立HMM模型(先用音素串联构成词,词串联构成句子)。这个句子的音素构成是“k ao l n ay n w ah n w ah n”,总共有12个音素。句子的HMM的A矩阵和B矩阵是有各个音素HMM的A矩阵和B矩阵构成的。比如音素“k”HMM定义的A矩阵如下: 
A_k=[ 
0 1 0 0 0 
0 1/2 1/2 0 0 
0 0 1/2 1/2 0 
0 0 0 1/2 1/2 
0 0 0 0 0 
]

A_ao=[ 
0 1 0 0 0 
0 1/2 1/2 0 0 
0 0 1/2 1/2 0 
0 0 0 1/2 1/2 
0 0 0 0 0 
]

A_l=[ 
0 1 0 0 0 
0 1/2 1/2 0 0 
0 0 1/2 1/2 0 
0 0 0 1/2 1/2 
0 0 0 0 0 
]

那”call”的HMM的A矩阵就是 
A_call=[ 
0 1 0 0 0 0 0 0 0 0 0 
0 1/2 1/2 0 0 0 0 0 0 0 0 
0 0 1/2 1/2 0 0 0 0 0 0 0 
0 0 0 1/2 1/2 0 0 0 0 0 0 
0 0 0 0 1/2 1/2 0 0 0 0 0 
0 0 0 0 0 1/2 1/2 0 0 0 0 
0 0 0 0 0 0 1/2 1/2 0 0 0 
0 0 0 0 0 0 0 1/2 1/2 0 0 
0 0 0 0 0 0 0 0 1/2 1/2 0 
0 0 0 0 0 0 0 0 0 1/2 1/2 
0 0 0 0 0 0 0 0 0 0 0 

句子以此类推。A矩阵中和多地方都是0,代表不可能的状态转移。句子中的B矩阵和音素的B矩阵一样,但一个句子音素可能出现多次,因此B矩阵是可以共享的。

Embedded Training

我们的目的是训练各个音素的HMM模型参数,用这个HMM模型去代表语音的音素。最简单的训练方式是我们有很多音素对应的观察序列,然后用Baum-Welch算法(EM算法的一个实现方式)去训练A、B矩阵。但前面说过我们很难从一个句子或词语的发音中精确的找到音素、甚至是伴音素的边界。为了解决这个苦难一般采用embedded training的方式。embedded training需要的数据包括: 
①训练用的句子的文本文件、例子: call nine one one ! 
②读音词典。例子: 
CALL k ao l 
NINE n ay n 
ONE w ah n 
③语音文件。sen01.wav sen02.wav 
④音素列表级音素原始HMM定义 
embedded training的基本思路是:读取一个句子的文本、把文本表示的一个句子转成用音素表示的句子(利用读音词典)、利用原始音素HMM定义串联起来构成句子的HMM定义(可能是非常长的HMM了)。然后把一个句子的wav文件转换成帧、提取特征,变成长的特征序列。然后把整个句子的特征序列看做是句子HMM模型的观察序列,直接却训练长的句子HMM模型(这时和普通的HMM模型一样用Baum-Welch算法)。句子训练好以后实际上各个音素也训练好了(因为句子的A、B矩阵就由音素的A、B矩阵构成)。看下图: 
这里写图片描述
算法步骤如下: 
1.为每个训练句子建立整句HMM模型 
2.初始化整句HMM模型的A矩阵,其中开始和结束状态外,每个状态只能到自己或下一个状态,概率分别是0.5 
3.所有状态的B矩阵(一般用混合高斯模型)用全部训练样本的均值和方差初始化高斯模型的均值和方差 
4.多次执行Baum-Welch算法。

语音解码

如上所属如果所有音素的HMM都训练好了,那么现在来了一个声音文件、怎么转换成文本呢?这就是语音解码问题。“给定一个音素模型的观察序列,和他对应的概率最大的文字序列是什么?”这就是解码问题。

观察序列  O=o1,o2,o3,...,ot,  
文本序列  W=w1,w2,w3,...,wt,  
这里写图片描述 
识别就是在给定观察序列(代表的是声音信息)下,在所有的文字序列集合中哪个的概率最高的问题。把概率最高的文字序列看做是语音识别的结果。计算P(W|O)的难度比较大,所以这里通过贝叶斯公式进行转换如下: 
这里写图片描述 
其中P(W)是文字先验概率(N-gram模型可以描述),P(O|W)是已知文字下获得观察序列O的概率叫做声学模型(HMM模型可以描述)。P(O)在分母上,对所有的W都是一样的所以可以忽略不用计算。那就变成: 
这里写图片描述 
这两项概率一般需要做一些权重的修正,实际中经常使用: 
这里写图片描述 
第二个公式取对数后的形式(计算一般用对数概率),其中LMSF是语言模型的放大倍数同行取5~15之间的数,N:文字长度,WIP是常数叫做word insertion penalty

连续语音识别中解码的难点: 
- 连续语音中词与词的边界是不知道的 
- 给出一段语音信号,其中包含的额文字个数是未知的 
- 搜索全部可能性是很难的,比如总共有M个词,语音长度是V个帧,全部组合是 Mv 这么多可能性,无法全部遍历。

解码的基本思路: 
用训练好的音素模型为每个字构建HMM模型(字个数应该包含目标语种中全部或常用的字)。其中字与字之间的关系用语言模型来描述(N-gram)。字和发音序列之间的关系用HMM模型来描述。利用这两部分信息构建一个庞大的网状结构(具体实现形式可以有很多种)叫做搜索空间,然后在这个上运行搜索算法(有Viterbi算法、Viterbi with Beam-Pruning、Token传递算法等等)获得最优可能的文字序列作为识别结果。

其中搜索空间可以看成是三层结构:网络层、字层、HMM层。如图所示: 
这里写图片描述 
对未知的语音序列,假设有T个帧构成。从识别网络所有可能入口开始经过T个HMM发射状态都叫做一个识别路径。每个路径都可以计算一个对数概率值。每个路径可能包含 音素HMM状态之间的转移、音素边界之间的转移和字边界之间的转移三部分。HMM内部概率可以由HMM模型计算、音素边界可以用固定概率、字边界转移概率可以用语言模型的N-gram概率提前获得。 
Token Passing Algorithm 
每个Token代表识别网络中的一个路径,内部存储该条路径的概率和回溯信息。t=0时刻,每个可能的开始节点(对应于音素HMM的状态)生成一个token。每经过1帧(t=t+1)token向所有可能的下一个节点传播(当前节点和多个节点有连接时token复制)。每次转播到发射节点(音素边界、字边界也看做是节点但不发射观察序列)时暂停,然后token里记录的对数概率增加(参考转移概率A和观察序列矩阵B),然后再传播。可以规定每个节点最多同时保持N个token(最简单情况N=1,保留多个token中概率最高的一个进行传播,或者采取一些剪枝策略(purning))。其中token穿过字边界时可以把N-gram模型的概率加入到token的对数概率里,这样就综合考虑和音素模型和语言模型了。同时穿过字边界时需要记录路径,最后结束时用回溯列出识别文字(从这一点上看识别网络中不存的字肯定是无法识别的了)。

三音素模型

所有上述内容都用单音素模型了,实际中通常使用三音素模型(Triphone)。需要考虑上下音素的协同发音情况。例子: 
单音素:BRYAN → B R AY AX N 
三音素:BRYAN → SIL-B+R B-R+AY R-AY+AX AY-AX+N AX-N+SIL 
其中“-”代表当前音素,“+”代表后续音素,“-”号前的代表前面的音素。三音素的好处就是音素级别建模更精确了,不如本来有50个音素,单因素只需要训练50个HMM,三音素就出现 503=12500 个HMM需要训练了。参数就会变得巨大,相比训练数据就会稀疏很多了。解决方案就是:三音素合并、状态共享等。并不是所有的三音素都合法、其次有些三音素很接近利用一些聚类的方式可以合并三音素减少模型数量。其次观察矩阵B对于很多音素出现再不同的三音素里可能是差不多的,这时就可以共享同一个B矩阵了(详细省略)。 
至此原理部分基本讲完了,希望大家能看懂 
主要用的资料有:

HMM基础论http://www.cs.ubc.ca/~murphyk/Software/HMM/rabiner.pdf 
HTK说明文档 htkbook.pdf (网上可下载) 
书【Speech and Language Processing】Daniel Jurafsky & James H. Martin 提取码:ceye

本文中有些图是摘自上述资料。

实例

PMTK是matlab中机器学习工具包。包含了很多现成的模型和算法。下面主要用他的HMM模型做一下语音识别。其中和HMM有关的代码都在pmtk3\toolbox\LatentVariableModels\hmm里面。下面是一些函数的使用说明:

创建HMM模型
function model = hmmCreate(type, pi, A, emission)
type:类型,有discrete:离散  gauss:高斯,每个状态用单个高斯分布描述  mixgausstied:混合高斯,但所有状态都用相同的分布   studentpi:初始状态概率
A:转移矩阵
emission:发射状态描述(对应于离散时的B矩阵,但PMTK里用一个结构体描述,可以对应离散和连续多种情况,这个参数一般用其他函数生成)快速状态符合高斯分布的HMM,这个函数里调用hmmCreate取创建,其中pi  A都随机生成,emission用condGaussCpdCreate函数生成、均值和方差也随机生成
function model = mkRndGaussHmm(nstates, d)
nstates:状态个数
d:一个观察符号的维度运行HMM模型nsamples(默认1)次,每次状态转移len次(就是得到的观察序列长度是len),observed是生成的样本,hidden是对应的状态
function [observed, hidden] = hmmSample(model, len, nsamples) HMM训练函数
function [model, loglikHist] = hmmFitEm(data, nstates, type, varargin)
data:观察序列
nstates:状态个数
type:类型,有discrete:离散  gauss:高斯  mixgausstied:混合高斯   student:
varargin:可变参数,这里可以携带很多参数,一般采用 'name','value','name','value' 的形式
调用例子
model = hmmFit(data, 2, 'gauss', 'verbose', true, 'piPrior', [3 2], 'emissionPrior', prior, 'nRandomRestarts', 2, 'maxIter', 10);
【'verbose', true, 'piPrior', [3 2], 'emissionPrior', prior, 'nRandomRestarts', 2, 'maxIter', 10】就是属于varargin部分,比如【'maxIter', 10】代表最大迭代次数是10,其他都是算法中要用到的指标,可以指定也可以走默认值。HMM训练函数
function [model, loglikHist] = hmmFit(data, nstates, type, varargin)hmmFitEm一样,内部就是调用的hmmFitEmhmmLogprob(trueModel, observed):计算对数概率,再模型trueModel下,观察到observed的概率是多少。出来的都是负数,绝对值越大表示概率越接近0(越小)path=hmmMap(model, X):再模型model下,观察数列X最后可能的路径计算函数(viterbi算法)。给出模型和观察序列X,该函数计算HMM中常用的5个指标
function [gamma, logp, alpha, beta, B] = hmmInferNodes(model, X)
% logp = log p(X | model)   对数概率
% alpha(i, t) = p(S(t)=i | X(:, 1:t)    (filtered)   α变量
% beta(i,t) propto p(X(:, t+1:T) | S(t=i))   β变量
% gamma(i,t)  = p(S(t)=i | X(:, 1:T))   (smoothed)  γ变量
% B - soft evidence  根据X推算出来的B矩阵
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

下面是做少量词汇识别的 main.m 代码 
其中用了MFCC转换用到了HTK MFCC MATLAB 
HMM模型用了PMTK3的库PMTK3 
语音文件和load_audio_from_folder.m代码来自hmm-speech-recognition

googlecode国内访问不了的话有些资源可能下载不了 
我自己写全代码下载链接:提取码 nd5h 
pmtk3 和 mfcc 自行下载并安装或把路径制定到你自己的matlab环境里,我在win7+matlab2010a 环境运行正常

clc;  clear all;  close all;fs=8000;Tw = 25;                % analysis frame duration (ms)  帧长
Ts = 10;                % analysis frame shift (ms)  帧移
alpha = 0.97;           % preemphasis coefficient  语音增强
M = 20;                 % number of filterbank channels   
C = 12;                 % number of cepstral coefficients MFCC个数
L = 22;                 % cepstral sine lifter parameter  
LF = 300;               % lower frequency limit (Hz)  
HF = 3700;              % upper frequency limit (Hz)%训练用数据
[train_signals train_labels] = load_audio_from_folder('train');%读取语音文件、生成标签数据
%转MFCC参数
train_feature={};
for speech=train_signals[ MFCCs, FBEs, frames ] = mfcc( speech{1}, fs, Tw, Ts, alpha, @hamming, [LF HF], M, C+1, L );    train_feature(end+1,1)={MFCCs};
end;%测试用数据
[test_signals test_labels] = load_audio_from_folder('test');%读取语音文件、生成标签数据
%转MFCC参数
test_feature={};
for speech=test_signals[ MFCCs, FBEs, frames ] = mfcc( speech{1}, fs, Tw, Ts, alpha, @hamming, [LF HF], M, C+1, L );    test_feature(end+1,1)={MFCCs};
end;%% HMM模型建立和训练
d = C+1; %一个观察符号的维度
nstates = 5;%状态个数
nmix    = 3; % 混合高斯分布个数%训练apple的HMM
pi0=[1  0  0  0  0]; %初始状态概率
trans0=[1/2  1/2   0   0     0  ; %转移概率 0    1/2  1/2   0    0  ; 0    0    1/2  1/2   0  ; 0    0     0   1/2  1/2 ; 0    0     0    0    1  ];models={};
[unique_train_labels, ~, indices] = unique(train_labels);%重复去掉,只取唯一值
for i = 1:length(unique_train_labels)display(sprintf('modeling %s...', char(unique_train_labels(i))))%发射概率初始值计算stackedData = cell2mat(train_feature(indices == i)')';%训练用数据mu = zeros(d, nmix);%均值Sigma = zeros(d, d, nmix);%方差for k = 1:nmixXX             = stackedData + randn(size(stackedData));mu(:, k)       = colvec(mean(XX));%所有训练数据的均值Sigma(:, :, k) = cov(XX);%所有训练数据的方差endM = normalize(rand(nstates, nmix), 1);%混合高斯系数emission = condMixGaussTiedCpdCreate(mu, Sigma, M);%发射状态描述结构体获得%训练HMM%verbose:是否打印信息%nRandomRestarts:随机训练几次%maxiter:最大迭代次数%nmix:混合高斯个数%pi0:HMM初始状态概率%trans0:HMM初始转移概率%emission0:初始发射状态描述%piPrior:防止除数为0的情况出现   a/b=a+piPrior/b+piPrior  变成这种形式%transPrior:防止除数为0的情况出现   a/b=a+piPrior/b+piPrior  变成这种形式models(end+1,1) = {hmmFit(train_feature(indices == i), nstates, 'mixGaussTied', 'verbose', false, ...'nRandomRestarts', 3, 'maxiter', 50, 'nmix', nmix,...'pi0',pi0,'trans0',trans0,'emission0',emission, ...'piPrior',pi0,'transPrior',trans0.*10)}; 
end;%训练样本识别率计算
errorcount=0;
for j=1:length(train_feature)p=zeros(length(unique_train_labels),1);for i = 1:length(unique_train_labels)p(i)=hmmLogprob(models{i}, train_feature(j));%计算概率值end;[~, i]=max(p);%取最大概率的模型作为识别%display(sprintf('"%s" is recognized as "%s"', train_labels{j},char(unique_train_labels(i))))if ~strcmp(train_labels{j},char(unique_train_labels(i)))errorcount=errorcount+1;%错误累计end;
end;
display(sprintf('train accuracy is %0.2f', (length(train_feature)-errorcount)*100/length(train_feature)));%% 测试样本识别率计算
errorcount=0;
for j=1:length(test_feature)p=zeros(length(unique_train_labels),1);for i = 1:length(unique_train_labels)p(i)=hmmLogprob(models{i}, test_feature(j));%计算概率值end;[~, i]=max(p);%取最大概率的模型作为识别%display(sprintf('"%s" is recognized as "%s"', test_labels{j},char(unique_train_labels(i))))if ~strcmp(test_labels{j},char(unique_train_labels(i)))errorcount=errorcount+1;%错误累计end;
end;
display(sprintf('test accuracy is %0.2f', (length(test_labels)-errorcount)*100/length(test_labels)));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107

load_audio_from_folder.m 代码

function [audio_signals, word_labels] = load_audio_from_folder(audio_folder)audio_signals = {};word_labels = {};for word_folder = struct2cell(dir(audio_folder))for word_file = struct2cell(dir(sprintf('%s/%s/*.wav', audio_folder, char(word_folder(1)))))file_path = sprintf('%s/%s/%s', audio_folder, char(word_folder(1)), char(word_file(1)));[x fs bit]=wavread(file_path);audio_signals(end + 1) = {x(:,1)}; %#ok<AGROW>word_labels(end + 1) = word_folder(1); %#ok<AGROW>endend
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

待改进的地方有: 
1. MFCC特征现在只用了最原始MFCC,可以把一介差分、二介差分加入构成39维度的特征 
2. 连续语音识别模型建立 
3. 连续语音三音素和参数共享等

可以自己进一步实现上述功能,不过也可以直接使用HTK工具。不过上述内容可以加深对HMM的理解,并有助于提高自己的编程能力。

全部结束感谢大家的阅读!

版权声明:本文为博主原创文章,未经博主允许不得转载。
 
ss00_2012
  • ss00_2012
    2017-03-28 15:431楼
  • 写的好 希望多来点这样的好文!
  • 回复
查看 7 条热评

相关文章推荐

GMM-HMM语音识别模型 原理篇

本文简明讲述GMM-HMM在语音识别上的原理,建模和测试过程。这篇blog只回答三个问题: 1. 什么是Hidden Markov Model? HMM要解决的三个问题: 1) Li...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年04月04日 17:44
  • 5789

使用隐马尔科夫模型(HMM)进行语音识别

在实验室待了一段时间了,在实验室的报告及小组会议中,深刻的体会到了HMM算法 ,SVM等的重要性.         这几天翻译了一篇使用隐马尔科夫模型(HMM)进行语音识别的论文的部...
  • caohao2008
  • caohao2008
  • 2007年05月12日 19:40
  • 17089

十年后,程序员还会有现在的高收入吗?

2017年IT行业报告称:程序员的门槛正在逐渐消失,越来越多的计算机毕业生加入开发行列,对此你怎么看?据说这些开发领域还会持续高薪....

GMM-HMM学习笔记

最近几天钻研了语音处理中的GMM-HMM模型,阅读了一些技术博客和学术论文,总算是对这个框架模型和其中的算法摸清了皮毛。在这里梳理一下思路,总结一下这几天学习的成果,也是为以后回顾时提高效率。 本文主...
  • davidie
  • davidie
  • 2015年07月17日 16:31
  • 8218

语音识别基本原理介绍--gmm-hmm中训练的完整版

看了几天了,结合之前看kaldi里的训练,现在我觉得可以wanqua
  • u010384318
  • u010384318
  • 2014年09月02日 16:06
  • 8914

pmtk3怎样离线安装

pmtk3是配合书的机器学习算法包,安装方法有在线离线两种,在线的要翻墙,离线的在本地即可完成。因此下面介绍离线安装办法: Pmtk3安装说明 1.首先阅读https://github.com/pro...
  • yuebowhu
  • yuebowhu
  • 2016年09月04日 19:11
  • 717

个人开发者如何通过人工智能盈利?

个人如何开发一款人工智能应用?个人如何利用免费的人工智能工具与平台赚钱?

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

【PMTK】解决printPmtkFigure找不到的问题

运行代码: s = [0:0.01:1]; vol = zeros(length(s),length(d)); for i=1:numel(d)   dim = d(i);   vol(...
  • poson
  • poson
  • 2014年10月10日 13:52
  • 1919

THCHS-30:一个免费的中文语料库

本文主要介绍了一个免费的开源中文语音识别数据库,附带的一些资源也做出了说明,例如语典,LM,和一些训练方法...
  • sut_wj
  • sut_wj
  • 2017年04月24日 20:51
  • 1714

语音识别系统原理介绍---从gmm-hmm到dnn-hmm

一直想写个关于语音识别系统原理的博文。前段时间我和@零落一起做了很多实验,比如htk,kaldi等。从周五开始就已经放寒假了,明天就做火车回家了。今晚加点劲写点吧,回家由于没网。大家有问题只能留言或者...
  • u010384318
  • u010384318
  • 2014年01月19日 21:58
  • 16782

语音识别common1(音素,三音素)

语音是一个连续的音频流,它是由大部分的稳定态和部分动态改变的状态混合构成。 一个单词的发声(波形)实际上取决于很多因素,而不仅仅是音素,例如音素上下文、说话者、语音风格等; 协同发音(指的是一...
  • u012809299
  • u012809299
  • 2017年04月14日 11:18
  • 928

深度学习与语音识别—常用声学模型简介

2006年,Hinton提出深度学习网络,指出深度神经网络因为层数过多导致训练参数多的问题可以利用逐层初始化解决。在工业界和学术界掀起了深度学习的浪潮,并在语音识别和图像处理领域取得了巨大成功。201...
  • dujiajiyi_xue5211314
  • dujiajiyi_xue5211314
  • 2016-12-30 15:06
  • 4047

HMM,MEMM,CRF模型的比较(转)

这三个模型都可以用来做序列标注模型。但是其各自有自身的特点,HMM模型是对转移概率和表现概率直接建模,统计共现概率。而MEMM模型是对转移 概率和表现概率建立联合概率,统计时统计的是条件概率。MEMM...
  • happyzhouxiaopei
  • happyzhouxiaopei
  • 2012-09-09 18:12
  • 13371

Kaldi 解码

gmm-align-compiled 功能:给定基线GMM模型,对每一句话,根据这句话的特征和这句话的fst,生成对应的对齐状态序列。 用法: ²  Usage:   gmm-align-compil...
  • sinat_35674501
  • sinat_35674501
  • 2017-06-19 18:33
  • 647

语音识别概述

语音识别概述语音识别问题就是模式分类问题。 一个基本的语音识别系统如下图,实现是正常工作流程,虚线是训练模式分类问题中的模板(这里就是声学模型,字典和语言模型)。 图1语音识别系统组件关系图 ...
  • shichaog
  • shichaog
  • 2017-05-30 11:30
  • 1120

语音识别之HMM算法及其源码

HMM算法用于语言识别,在这里给出源码,供参考
  • c602273091
  • c602273091
  • 2015-04-16 11:14
  • 4004

Hmm在语音识别中的应用(一)

Hmm在语音识别中的应用(一)
  • quheDiegooo
  • quheDiegooo
  • 2017-02-16 15:57
  • 657

4-Embedded Training

本文主要对无需手工标记数据的自动声学模型训练方法(Embedded Training)做一个原理介绍.
  • victoryaoyu
  • victoryaoyu
  • 2017-04-19 13:16
  • 200

语音识别 Embedded Training

1. 先看一下声学模型的三个要素       Q [ = q1 q2 ...qN ]: subphones 状态集合       A [ = a0...
  • dearwind153
  • dearwind153
  • 2017-02-21 11:21
  • 333

语音识别基本原理介绍之gmm-hmm续

在之前的博文里,我已经写过了一篇博文:语音识别系统原理介绍----gmm-hmm,但是觉得还是没有说清楚这个事情,特别是在gmm和hmm过程里。过段时间也要找工作了,很有必要再弄清楚。现在这里说下,但...
  • u010384318
  • u010384318
  • 2014-08-31 19:57
  • 2779

语音识别系统之htk------孤立词识别(yesno)

孤立词的识别应该是最基础了,搭完htk的环境和安装好,首先就应该实验下。网上这方面的介绍也很多,大家可以去参考参考。下面就是整个过程: 一 数据准备    说明:由于自己的linux操作系统不支持...
  • u010384318
  • u010384318
  • 2013-12-24 20:27
  • 2613

利用百度API获取mp3及歌词lrc下载地址

 1. [代码]1、通过关键词,获取列表。 http://mp3.baidu.com/dev/api/?tn=getinfo&ct=0&ie=utf-8&word=&format= 参数: ...
  • QQ359931713
  • QQ359931713
  • 2014-03-31 11:13
  • 1123

GMM-HMM语音识别模型 原理篇

本文简明讲述GMM-HMM在语音识别上的原理,建模和测试过程。这篇blog只回答三个问题: 1. 什么是Hidden Markov Model? 2. GMM是神马?怎样用GMM求某一音素(phone...
  • abcjennifer
  • abcjennifer
  • 2014-05-28 20:52
  • 54989

GMM-HMM语音识别简单理解

机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)      为了对GMM-HMM在语音识别上的应用有个宏观认识,花了些时间读了下HTK(用htk完成简单的孤立词识别)的部分源码,...
  • mingtsang
  • mingtsang
  • 2013-09-04 06:44
  • 1325

GMM-HMM语音识别模型 原理篇

本文简明讲述GMM-HMM在语音识别上的原理,建模和测试过程。这篇blog只回答三个问题: 1. 什么是Hidden Markov Model? HMM要解决的三个问题: 1) Li...
  • u013538664
  • u013538664
  • 2015-04-18 02:59
  • 1526

语音识别系统原理介绍----gmm-hmm

从寒假前的博客:语音识别系统原理介绍---从gmm-hmm到dnn-hmm,最近有时间的时候我还是在不断的去理解gmm-hmm这个基准模型。下面我讲从提玩mfcc特征开始说起,希望可以让你有所收获吧。...
  • u010384318
  • u010384318
  • 2014-03-04 20:07
  • 5423

语音识别系统原理介绍----gmm-hmm

从寒假前的博客:语音识别系统原理介绍---从gmm-hmm到dnn-hmm,最近有时间的时候我还是在不断的去理解gmm-hmm这个基准模型。下面我讲从提玩mfcc特征开始说起,希望可以让你有所收获吧。...
  • daodao0704
  • daodao0704
  • 2014-05-24 17:39
  • 376

语音识别系统原理介绍---从gmm-hmm到dnn-hmm

一直想写个关于语音识别系统原理的博文。前段时间我和@零落一起做了很多实验,比如htk,kaldi等。从周五开始就已经放寒假了,明天就做火车回家了。今晚加点劲写点吧,回家由于没网。大家有问题只能留言或者...
  • liuyuehui110
  • liuyuehui110
  • 2017-05-23 09:36
  • 695

3-GMM-HMMs语音识别系统-解码篇

本文主要描述基于GMM-HMMs传统语音识别的解码过程。Outline:Viterbi, decoding, Cross-word decoding, Beam search.
  • victoryaoyu
  • victoryaoyu
  • 2017-04-23 10:11
  • 453

MATLAB下的基于HMM模型的语音识别技术的实现

  • 2014-09-27 17:58
  • 766KB
  • 下载

基于HMM的语音识别技术在嵌入式系统中的应用

  • 2008-07-10 14:42
  • 78KB
  • 下载

语音识别中声学模型训练过程-GMM(一)

语音识别中声学模型训练过程-GMM
  • quheDiegooo
  • quheDiegooo
  • 2017-02-17 21:52
  • 2395

基于GMM的孤立词语音识别

  • 2015-06-24 16:42
  • 4.07MB
  • 下载

基于HMM的语音识别系统研究

  • 2011-09-01 15:58
  • 2.50MB
  • 下载

2-GMM-HMMs语音识别系统-训练篇

本文记录在传统的语音识别中,训练GMM-HMMs声学模型过程中的公式推导过程。Outline: GMM - 混合高斯模型; HMM – 隐马尔科夫模型; Forward-Backward Algori...
  • victoryaoyu
  • victoryaoyu
  • 2017-04-23 20:04
  • 257

HMM 非特定人连续语音识别

  • 2011-05-20 10:29
  • 487KB
  • 下载

HMM算法的语音识别的matlab程序

  • 2016-04-05 11:07
  • 91KB
  • 下载

1-GMM-HMMs语音识别系统-框架篇

本文主要对基于GMM/HMMs的传统语音识别系统做一个整体介绍。
  • victoryaoyu
  • victoryaoyu
  • 2017-04-20 19:41
  • 616

HMM介绍及其在语音识别中的应用(新)

  • 2017-08-15 17:18
  • 1.24MB
  • 下载

HMM语音识别

  • 2012-09-20 15:34
  • 311KB
  • 下载

基于HMM的语音识别(ASR)概述

自动语音识别(Automatic Speech Recognition,ASR)是机器翻译,机器人控制以及下一代人机交互界面等领域的核心技术。隐马尔科夫模型(Hidden Markov Model,H...
  • jie8895010
  • jie8895010
  • 2016-08-31 21:37
  • 819

HMM_matlab语音识别 代码实现

  • 2013-05-22 15:34
  • 80KB
  • 下载

MATLAB环境下的基于HMM模型的语音识别系统

  • 2013-04-30 17:08
  • 207KB
  • 下载

语音识别系统原理介绍-----dnn-hmm

最近看到一个ASR的课程,很不错吧。网址:http://www.inf.ed.ac.uk/teaching/courses/asr/。大家有时间可以去看下……    接下来就开始说dnn-hmm系统吧...
  • u010384318
  • u010384318
  • 2014-03-26 11:34
  • 7947

基于hmm算法的语音识别

  • 2011-07-25 21:03
  • 105KB
  • 下载

语音识别系统的声学建模:隐马尔可夫模型(HMM)

转自:http://blog.1688.com/article/i25547966.html 【导读】语音识别系统的模型通常由声学模型和语言模型两部分组成,分别对应于语音到音节概率的计算和音节到字概...
  • caiye917015406
  • caiye917015406
  • 2013-08-07 09:37
  • 2744

HMM模型在高噪声环境下的语音识别应用研究

  • 2011-12-14 21:00
  • 660KB
  • 下载

HMM语音识别算法代码二

  • 2015-04-16 11:08
  • 13KB
  • 下载

HMM在语音识别中的应用

HMM处理三种问题,我理解为三种功能: - 给出 O (可观测序列o1 o2 o3… ot),求P(O | hmm) - 给出 O,求出使P(O, H | hmm)最大的 H (H为与O对应的...
  • yinglang19941010
  • yinglang19941010
  • 2016-07-29 00:09
  • 496

HMM是很多人需要的MATLAB语音识别编程

  • 2016-09-22 16:53
  • 19.53MB
  • 下载

android语音识别技术

今天从网上找了个例子实现了语音识别,个人感觉挺好玩的,就把代码贴出来与大家分享下:          Android中主要通过RecognizerIntent来实现语音识别,其实代码比较简单,但是如...
  • u011390142
  • u011390142
  • 2014-08-07 17:40
  • 291

讯飞的语音识别技术VC源码

#include "stdafx.h" #include  #include  #include "windows.h" #include "qisr.h" #include  #...
  • yan420523
  • yan420523
  • 2013-05-08 17:00
  • 1554

百度宣布在语音识别技术上超越苹果和谷歌

网易科技讯 12月19日消息,据《福布斯》网站报道,今年5月当美国华裔人工智能专家吴恩达(Andrew Ng)加入中国互联网公司百度担任首席科学家时,他对他及他的团队在新开设的加州桑尼维尔实验室的研究...
  • zhangwuhaoda
  • zhangwuhaoda
  • 2015-01-06 11:00
  • 288

国内外语音识别行业最全盘点及技术分析和预测

随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放,尤其是最近几年,不仅涌现了很多国内外的小公司,而且巨头们也开始加速语音识别行业的布局。本文就详细盘点一番国内外的大型公司,并对他们掌握的技术...
  • cpl000000
  • cpl000000
  • 2016-05-11 15:11
  • 80

语音识别技术研究进展_詹新明

  • 2013-11-24 16:37
  • 182KB
  • 下载

语音识别技术 及应用

  • 2011-04-12 23:22
  • 87KB
  • 下载

远场语音识别的技术难点分析

前言:这篇文章是根据在知乎上大神的回答改编的,原文链接:https://www.zhihu.com/question/48537863?from=profile_question_card 起因:...
  • nl997566011
  • nl997566011
  • 2017-04-12 09:19
  • 606

Speech SDK中文语音识别技术在c#中的应用

  • 2009-04-21 17:02
  • 2.61MB
  • 下载

语音识别技术在树莓派平台上的使用

最近尝试在树莓派上完成一些语音方向的应用,例如像语音唤醒和关键词的识别,前期搜索了一下,可以选择的国内平台有百度语音,科大讯飞, 云之声等。这几家都有自己的开发者开放平台都提供了语音唤醒,语音关键词识...
  • qq_28867509
  • qq_28867509
  • 2016-07-24 09:45
  • 2264

android语音识别技术

今天从网上找了个例子实现了语音识别,个人感觉挺好玩的,就把代码贴出来与大家分享下:          Android中主要通过RecognizerIntent来实现语音识别,其实代码比较简单,但是如...
  • wx_962464
  • wx_962464
  • 2012-06-10 13:19
  • 917

MATLAB环境下的基于HMM模型的语音识别系统

  • 2012-07-17 11:04
  • 217KB
  • 下载

语音识别基本原理介绍------dnn-hmm续

很久没更新博客了,最近找工作找的不是
  • u010384318
  • u010384318
  • 2014-10-25 14:29
  • 5751

HMM在语音识别中的应用

  • 2014-07-25 09:54
  • 1.71MB
  • 下载

基于HMM和ANN的语音识别方法

  • 2011-04-18 14:24
  • 1.74MB
  • 下载

13.4 非特定人语音识别算法——HMM

与DTW相比,HMM一方面用隐含的状态对应于声学层各相对稳定的发音单位,并通过状态转移和状态驻留来描述发音的变化;另一方面,它引入了概率统计模型,不再用动态时间对齐的方法求匹配距离,而是用概率密度函数...
  • joey_su
  • joey_su
  • 2013-12-11 22:09
  • 5882

利用HMM的孤立字(词)语音识别程序

  • 2011-10-22 15:58
  • 13KB
  • 下载

hmm 语音识别

  • 2015-05-09 16:31
  • 1.30MB
  • 下载

Kaldi语音识别工具运行TIMIT数据库实例

Kaldi语音识别工具运行TIMIT数据库实例
  • u013538664
  • u013538664
  • 2016-05-18 18:12
  • 1355

语音识别相关资料(DTW HMM MFCC)

  • 2011-08-07 20:27
  • 5.93MB
  • 下载

语音识别hmm工具箱HMM.rar

  • 2009-02-03 13:52
  • 36KB
  • 下载

语音识别关键技术公开,人机交互这么做就对了!

转载自: http://www.edn-cn.com/news/article/201608241715 对于识别来说,首先要保障的是远场环境下的识别率,除了前面提到的麦克风阵列解决了前端声...
  • sunfoot001
  • sunfoot001
  • 2016-08-27 20:50
  • 4021

语音识别技术学习系列(一)——入门

从这一篇开始,陆续学习语音识别技术,由浅入深。     这一篇是入门,主要学习的是语音识别技术的大致步骤,以及现在的几种主流方法。     下图是语音识别技术的系统框图:     主要包括...
  • puqutogether
  • puqutogether
  • 2015-03-15 19:56
  • 2858

语音识别技术简介

1 自动语音识别简介 语音识别技术,也可以称为自动语音识别(Automatic Speech Recognition,ASR),其任务是把人所发出的语音中词汇内容转换为计算机可读入的文本。语音识别...
  • RFC2008
  • RFC2008
  • 2013-06-22 17:46
  • 1771

我的Android笔记(十四)—— 在应用中集成科大讯飞的语音识别技术

语音识别技术最近貌似是越来越火了。再前几天科大讯飞还刚刚发布了讯飞语点——一个据说要挑战siri的应用。……好吧,对这些的东西讨论要说起来就多了。 本文主要讲如何在自己的android应用中集成语音...
  • barryhappy
  • barryhappy
  • 2012-03-27 23:57
  • 26261

android语音识别技术

今天从网上找了个例子实现了语音识别,个人感觉挺好玩的,就把代码贴出来与大家分享下:          Android中主要通过RecognizerIntent来实现语音识别,其实代码比较简单,但是如...
  • wangkuifeng0118
  • wangkuifeng0118
  • 2012-02-11 23:35
  • 53146

语音识别技术学习:原理核心部分

  • 5天前 15:51
  • 1.72MB
  • 下载

基于语音识别的信号灯图像模拟控制技术

  • 6天前 19:01
  • 804KB
  • 下载

Siri工作方式详解:本地语音识别+云计算服务

导语:ZDNet网站今天刊文称,苹果的语音助理服务Siri时髦而聪明,在一些情况下也很有用。那么Siri是如何工作的?“语音识别”是Siri的核心,但这并未解释Siri理解用户所说内容的详细过程。本周...
  • gs2351
  • gs2351
  • 2012-01-15 16:02
  • 438

android语音识别技术文档

  • 2015-06-09 08:57
  • 665KB
  • 下载

android语音识别技术,纯手工编写

  • 2015-06-09 08:56
  • 3.14MB
  • 下载

android语音识别技术

android语音识别技术 分类: android中级 2012-02-11 23:35 1217人阅读 评论(0) 收藏 举报 今天从网上找了个例子实现了语音识别,个人感觉挺好玩...
  • emerald0106
  • emerald0106
  • 2012-05-09 17:10
  • 340

在应用中集成科大讯飞的语音识别技术

语音识别技术最近貌似是越来越火了。再前几天科大讯飞还刚刚发布了讯飞语点——一个据说要挑战siri的应用。……好吧,对这些的东西讨论要说起来就多了。 本文主要讲如何在自己的android应用中集成...
  • lyglostangel
  • lyglostangel
  • 2015-04-07 11:46
  • 1017

远场(far-field)语音识别的主流技术有哪些

转自:https://www.zhihu.com/question/48537863 远场(far-field)语音识别的主流技术有哪些? 以amazon echo为首的一批智能硬件正在崛...
  • haima1998
  • haima1998
  • 2017-06-09 17:37
  • 682

android语音识别技术

今天从网上找了个例子实现了语音识别,个人感觉挺好玩的,就把代码贴出来与大家分享下:          Android中主要通过RecognizerIntent来实现语音识别,其实代码比较简单,但是如...
  • h183288132
  • h183288132
  • 2015-08-14 11:53
  • 367

语音识别的技术原理是什么?

简要给大家介绍一下语音怎么变文字的吧。 首先说一下作为输入的时域波形。我们知道声音实际上是一种波。常见的mp3、wmv等格式都是压缩格式,必须转成非压缩的纯波形文件,比如Windows PCM文...
  • u012426662
  • u012426662
  • 2014-11-20 21:23
  • 1575

语音识别学习笔记(二)【基于矢量量化的识别技术】

1.概述 量化分为标量量化和矢量量化(Vector Quantization,VQ)。标量量化是将采样后的信号值逐个进行量化,而适量量化是将若干个采样信号分成一组,即构成一个矢量,然后对此矢量一次进行...
  • xingxingdeyuanwang6
  • xingxingdeyuanwang6
  • 2016-10-11 15:54
  • 608

语音识别系统kaldi----实例说明

最近一直在折腾kaldi,在这个庞大的系统面前,自己是那么的微小。由于数据库的原因,我只能运行kaldi所给例子的一部分。下面就来说说最近的进展吧。      第一个例子就是yesno这个例子。由于提...
  • u010384318
  • u010384318
  • 2013-12-21 18:45
  • 20484

语音识别系统之kaldi------voxforge实例

首先来介绍下voxforge。voxforge是个收集语音的网址,你可以免费的得到
  • u010384318
  • u010384318
  • 2013-12-24 18:59
  • 6041

KALDI语音识别工具包运行TIMIT数据库实例

TIMIT数据库介绍: TIMIT数据库由630个话者组成,每个人讲10句,美式英语的8种主要方言。 TIMIT S5实例: 首先,将TIMIT.ISO中的TIMIT复制到主文件夹。 1.进入...
  • u013538664
  • u013538664
  • 2014-01-27 13:02
  • 2986

值得关注议题:语音识别-框架与技术

源文章:梁家恩的云知声 http://www.csdn.net/article/2014-01-24/2818252  评记:很早就想了解语音方面的东西,苦于知识杂乱一直未深入,这篇文章倒是给出了典型...
  • Nextstudy
  • Nextstudy
  • 2014-01-26 18:29
  • 954
没有更多内容了, 返回首页

使用科大讯飞的语音技术实现语音识别

目前,越来越多的app已经使用到了语音技术,无论是语音合成,语音识别,还是语义等,有时,为app增加语音技术,就可能为自己多增加一份市场用户,这里就科大讯飞的语音识别的代码调用做个介绍。  科大讯飞...
  • lyglostangel
  • lyglostangel
  • 2015-04-07 11:29
  • 895

语音识别技术研究进展_詹新明.pdf

  • 2014-12-21 18:59
  • 259KB
  • 下载

基于DSP的语音识别技术研究及实现

  • 2014-06-29 00:55
  • 1.96MB
  • 下载

中文语音识别技术在c#中的应用

  • 2013-07-29 15:26
  • 57B
  • 下载

语音识别技术

  • 2008-06-12 11:49
  • 267KB
  • 下载

Android 轻松实现语音识别 实例.doc

  • 2011-12-09 18:30
  • 188KB
  • 下载

语音识别与智能阅读技术的应用研究

  • 2011-06-10 10:02
  • 71KB
  • 下载

语音识别技术

  • 2013-05-09 12:58
  • 1.77MB
  • 下载

张俊林:Siri:I,robot! Siri语音识别系统详解

  • 2014-05-29 14:05
  • 1.17MB
  • 下载

stm32 YS-LDV4语音识别开发板


    这篇关于HMM+GMM语音识别技术详解级PMTK3中的实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/348808

    相关文章

    乐鑫 Matter 技术体验日|快速落地 Matter 产品,引领智能家居生态新发展

    随着 Matter 协议的推广和普及,智能家居行业正迎来新的发展机遇,众多厂商纷纷投身于 Matter 产品的研发与验证。然而,开发者普遍面临技术门槛高、认证流程繁琐、生产管理复杂等诸多挑战。  乐鑫信息科技 (688018.SH) 凭借深厚的研发实力与行业洞察力,推出了全面的 Matter 解决方案,包含基于乐鑫 SoC 的 Matter 硬件平台、基于开源 ESP-Matter SDK 的一

    一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

    👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

    持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)

    转自:http://t.51jdy.cn/thread-259-1-1.html 持久层 是一个项目 后台 最重要的部分。他直接 决定了 数据读写的性能,业务编写的复杂度,数据结构(对象结构)等问题。 因此 架构师在考虑 使用那个持久层框架的时候 要考虑清楚。 选择的 标准: 1,项目的场景。 2,团队的技能掌握情况。 3,开发周期(开发效率)。 传统的 业务系统,通常业

    swiper实例

    大家好,我是燐子,今天给大家带来swiper实例   微信小程序中的 swiper 组件是一种用于创建滑动视图的容器组件,常用于实现图片轮播、广告展示等效果。它通过一系列的子组件 swiper-item 来定义滑动视图的每一个页面。 基本用法   以下是一个简单的 swiper 示例代码:   WXML(页面结构) <swiper autoplay="true" interval="3

    Java面试题:通过实例说明内连接、左外连接和右外连接的区别

    在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

    十四、观察者模式与访问者模式详解

    21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

    【操作系统】信号Signal超详解|捕捉函数

    🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

    亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

    2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

    Jitter Injection详解

    一、定义与作用 Jitter Injection,即抖动注入,是一种在通信系统中人为地添加抖动的技术。该技术通过在发送端对数据包进行延迟和抖动调整,以实现对整个通信系统的时延和抖动的控制。其主要作用包括: 改善传输质量:通过调整数据包的时延和抖动,可以有效地降低误码率,提高数据传输的可靠性。均衡网络负载:通过对不同的数据流进行不同程度的抖动注入,可以实现网络资源的合理分配,提高整体传输效率。增

    人工和AI大语言模型成本对比 ai语音模型

    这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达