2019-05-22 00:45:34 zhinengxuexi 阅读数 798
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5905 人正在学习 去看看 杨波

随着AI快速发展的今天,语音识别也成为众多设备的标配,语音识别开始被越来越多人的关注,国外微软、苹果、谷歌,国内的科大讯飞、思必弛、云知声等厂商都在研发语音识别新策略新算法,似乎人类与语音的自然交互渐行渐近。

语音识别是以语音的研究为对象,通过语音信号处理和模式识别让机器自动识别和理解人类口述的语言。

语音识别系统本质上是一种模式识别系统,包括特征提取、模式匹配、参考模式库等三个基本单元。

一套完整的语音识别系统,工作过程分为7步:

1.对语音信号进行分析和处理,除去冗余信息。

2.提取影响语音识别的关键信息和表达语言含义的特征信息。

3.紧扣特征信息,用最小单元识别字词。

4.按照不同语言的各自语法,依照先后次序识别字词。

5.把前后意思当作辅助识别条件,有利于分析和识别。

6.按照语义分析,给关键信息划分段落,取出所识别出的字词并连接起来,同时根据语句意思调整句子构成。

7.结合语义,仔细分析上下文的相互联系,对当前正在处理的语句进行适当修正

语音识别、图像识别均为模式识别中的主要应用,有兴趣的可以多学习一下

人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
人工智能与语音识别技术
http://www.duozhishidai.com/article-3157-1.html
人工智能快速发展的今天,语音识别现在发展到什么阶段了?
http://www.duozhishidai.com/article-2278-1.html
语音的识别过程主要分哪几步,常用的识别方法是什么?
http://www.duozhishidai.com/article-1739-1.html


多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台

2016-11-30 18:40:35 attilax 阅读数 4440
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5905 人正在学习 去看看 杨波

Atitit 语音识别的技术原理

1.1. 语音识别技术,也被称为自动语音识别Automatic Speech Recognition(ASR)2

1.2. 模型目前,主流的大词汇量语音识别系统多采用统计模式识别技术2

1.3. 基本方法般来说,语音识别的方法有三种:基于声道模型和语音知识的方法、模板匹配的方法以及利用人工神经网络的方法。2

1.3.1. 模板匹配的方法2

1.4. 一般来说,语音识别的方法有三种:基于声道模型和语音知识的方法、模板匹配的方法以及利用人工神经网络的方法。2

1.5. 提及语音识别,就不能不说Nuance,Nuance的语音技术是以统计推断方法为基础,着眼于音素(音节的声音)和语境来识别话语2

1.6. 神经网络这种技术可使得精确度提升25%以上,这是一个巨大的飞跃,因为这个行业只需要提升5%就具备革命意义3

1.7. 语音信号预处理与特征提取3

1.7.1. 基于语音学和声学的方法3

1.8. PCM文件,也就是俗称的wav文件。4

1.9. VAD静音切除4

1.10. 要对声音进行分析,需要对声音分帧,也就是把声音切开成一小段一小段,每小段称为一帧。4

1.11. 一个完整的基于统计的语音识别系统可大致分为三部分:5

1.12. MFCC特征 特征主要用MFCC等等5

1.13. 语音识别是怎么工作的呢,识别流程5

1.14. 隐马尔可夫模型(Hidden Markov ModelHMM6

1.15. 路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。6

1.16. 这里所说的累积概率,由三部分构成, 观察概率 转移概率 语言概率6

1.17. 声学模型建模。7

1.18. 连续语音识别中的搜索,就是寻找一个词模型序列以描述输入语音信号,Viterbi7

1.19. 历史7

1.20. 声学特征 LPC  MFCC CEP Mel8

1.20.1. LPC8

1.20.2. CEP8

1.20.3. Mel9

1.20.4. MFCC9

1.21. 最新进展9

1.22. 电脑模拟人脑的思路是不对的,飞机也不是模范鸟闪动翅膀10

1.23. 参考资料10

1.1. 语音识别技术,也被称为自动语音识别Automatic Speech Recognition(ASR)

1.2. 模型目前,主流的大词汇量语音识别系统多采用统计模式识别技术

1.3. 基本方法般来说,语音识别的方法有三种:基于声道模型和语音知识的方法、模板匹配的方法以及利用人工神经网络的方法。

1.3.1. 模板匹配的方法

模板匹配的方法发展比较成熟,目前已达到了实用阶段。在模板匹配方法中,要经过四个步骤:特征提取、模板训练、模板分类、判决。常用的技术有三种:动态时间规整(DTW)、隐马尔可夫HMM)理论、矢量量化VQ)技术。

1.4. 一般来说,语音识别的方法有三种:基于声道模型和语音知识的方法、模板匹配的方法以及利用人工神经网络的方法。

1.5. 提及语音识别,就不能不说Nuance,Nuance的语音技术是以统计推断方法为基础,着眼于音素(音节的声音)和语境来识别话语

就像提到PC处理器不能跨过intel,智能手机SOC不能忽略高通,Nuance有着辉煌的历史,曾经在语音领域一统江湖,就算现在,仍旧是瘦死的骆驼比马大,仍旧是全球最大的语音技术公司,专利数量和市场份额都遥遥领先。苹果iPhone手机的虚拟语音助手Siri(风传放弃)、三星的语音助手S-Voice、各大航空公司和顶级银行的自动呼叫中心和虚拟在线语音助手,都采用了Nuance的技术。Nuance曾经很热门,三星和苹果都和它传过绯闻,都要收购它,不知道为什么,都无疾而终。

科大讯飞是nuance的国内版,同样的一览众山小

 

1.6. 神经网络这种技术可使得精确度提升25%以上,这是一个巨大的飞跃,因为这个行业只需要提升5%就具备革命意义

这是一种十分炫酷的技术,将机器学习的方式模仿人类大脑的神经元,当处理的语言越来越多时,这种网络就可以逐渐理解语言。实验结果发现,这种技术可使得精确度提升25%以上,这是一个巨大的飞跃,因为这个行业只需要提升5%就具备革命意义

1.7. 语音信号预处理与特征提取

选择识别单元是语音识别研究的第一步。语音识别单元有单词(句)、音节和音素三种,具体选择哪一种,由具体的研究任务决定。

单词(句)单元广泛应用于中小词汇语音识别系统,但不适合大词汇系统,原因在于模型库太庞大,训练模型任务繁重,模型匹配算法复杂,难以满足实时性要求。

 音素单元以前多见于英语语音识别的研究中,但目前中、大词汇量汉语语音识别系统也在越来越多地采用。原因在于汉语音节仅由声母(包括零声母有22个)和韵母(共有28个)构成,且声韵母声学特性相差很大。实际应用中常把声母依后续韵母的不同而构成细化声母,这样虽然增加了模型数目,但提高了易混淆音节的区分能力。由于协同发音的影响,音素单元不稳定,所以如何获得稳定的音素单元,还有待研究

 

1.7.1. 基于语音学和声学的方法

该方法起步较早,在语音识别技术提出的开始,就有了这方面的研究,但由于其模型及语音知识过于复杂,现阶段没有达到实用的阶段。

 

1.8. PCM文件,也就是俗称的wav文件。

wav文件里存储的除了一个文件头以外,就是声音波形的一个个点了。下图是一个波形的示例。

 

1.9. VAD静音切除

在开始语音识别之前,有时需要把首尾端的静音切除,降低对后续步骤造成的干扰。这个静音切除的操作一般称为VAD,需要用到信号处理的一些技术。

1.10. 要对声音进行分析,需要对声音分帧,也就是把声音切开成一小段一小段,每小段称为一帧。

分帧操作一般不是简单的切开,而是使用移动窗函数来实现,这里不详述。帧与帧之间一般是有交叠的,就像下图这样: 图中,每帧的长度为25毫秒,每两帧之间有25-10=15毫秒的交叠。我们称为以帧长25ms、帧移10ms分帧。  分帧后,语音就变成了很多小段。但波形在时域上几乎没有描述能力,因此必须将波形作变换。常见的一种变换方法是提取MFCC特征

 

一种简单的解决思路是对语音进行分帧,每一帧占有比较短固定的时 长(比如25ms),再假设说这样的一帧既足够长(可以蕴含 足以判断它属于哪个声韵母的信息),又很平稳(方便进行短时傅里叶分析),这样将每一帧转换为一个特征向量,(依次)分别识别它们属于哪个声韵母,就可以 解决问题。识别的结果可以是比如第100到第105帧是声母c,而第106帧到115帧是韵母eng等。 这种思路有点类似微积分 中的『以直代曲』。另外在实际的分帧过程中,还有很多常用技巧,比如相邻两帧之间有所重叠,或引入与临近帧之间的差分作为额外特征,乃至直接堆叠许多语音帧等等

 

 

1.11. 一个完整的基于统计的语音识别系统可大致分为三部分:

(1)语音信号预处理与特征提取;

(2)声学模型与模式匹配;

(3)语言模型与语言处理、

 

1.12. MFCC特征 特征主要用MFCC等等

MFCC特征,根据人耳的生理特性,把每一帧波形变成一个多维向量,可以简单地理解为这个向量包含了这帧语音的内容信息。这个过程叫做声学特征提取。实际应用中,这一步有很多细节,声学特征也不止有MFCC这一种,具体这里不讲。  至此,声音就成了一个12行(假设声学特征是12维)、N列的一个矩阵,称之为观察序列,这里N为总帧数。观察序列如下图所示,图中,每一帧都用一个12维的向量表示,色块的颜色深浅表示向量值的大小。

 

 

 

1.13. 语音识别是怎么工作的呢,识别流程

实际上一点都不神秘,无非是: 第一步,把帧识别成状态(难点)。 第二步,把状态组合成音素。 第三步,把音素组合成单词

 

 

图中,每个小竖条代表一帧,若干帧语音对应一个状态,每三个状态组合成一个音素,若干个音素组合成一个单词。也就是说,只要知道每帧语音对应哪个状态了,语音识别的结果也就出来了。  那每帧音素对应哪个状态呢?有个容易想到的办法,看某帧对应哪个状态的概率最大,那这帧就属于哪个状态。比如下面的示意图,这帧在状态S3上的条件概率最大,因此就猜这帧属于状态S3。

 

1.14. 隐马尔可夫模型(Hidden Markov ModelHMM

HMM声学建模:马尔可夫模型的概念是一个离散时域有限状态自动机,隐马尔可夫模型HMM是指这一马尔可夫模型的内部状态外界不可见,外界只能看到各个时刻的输出值。对语音识别系统,输出值通常就是从各个帧计算而得的声学特征。用HMM刻画语音信号需作出两个假设,一是内部状态的转移只与上一状态有关,另一是输出值只与当前状态(或当前的状态转移)有关,这两个假设大大降低了模型的复杂度。HMM的打分、解码和训练相应的算法是前向算法、Viterbi算法和前向后向算法。

语音识别中使用HMM通常是用从左向右单向、带自环、带跨越的拓扑结构来对识别基元建模,一个音素就是一个三至五状态的HMM,一个词就是构成词的多个音素的HMM串行起来构成的HMM,而连续语音识别的整个模型就是词和静音组合起来的HMM

 

1.15. 路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。

 

1.16. 这里所说的累积概率,由三部分构成, 观察概率 转移概率 语言概率

分别是: 观察概率:每帧和每个状态对应的概率 转移概率:每个状态转移到自身或转移到下个状态的概率 语言概率:根据语言统计规律得到的概率 其中,前两种概率从声学模型中获取,最后一种概率从语言模型中获取。语言模型是使用大量的文本训练出来的,可以利用某门语言本身的统计规律来帮助提升识别正确率。语言模型很重要,如果不使用语言模型,当状态网络较大时,识别出的结果基本是一团乱麻。

 

 

1.17. 声学模型建模。

当我们有了分帧后的语音特征之后,下一步常用的处理是使用某种分类器将之分类成某种跟语音内容相关的类别,如声韵母,这一步通常称作声学模型建模。

对于分类目标的选取,最简单的选择可以是词组,或者是组成词组的汉字所对应的音节。但这样的选择方式通常会对训练模型的语音数据提出过高的要求,带来『数据稀疏』的问题,即数据中 很难包含汉语中的所有词组,同时每个词组也很难具有充足的训练样本以保证统计声学模型的可靠性。由于一个词组通常由多个音素的连续发音 构成,常见的音素都包含在国际音标表中,它们具有恰当的数目(通常几十个),以及清晰的定义(由特定的发声器官运动产生),于是音素成了各种语言中的语音识别中都最为常见的 建模选择(汉语的声韵母也是由一到三个音素构成), 识别中再结合词组到音素的发音字典使用。使用音素也方便对混合语言(如汉语种夹杂英语词汇)进行识别

目前最广泛使用的仍然是基于隐式马尔科夫模型的建模方法,即对每个三音子分别建立一个模型

 

·  声学模型(acoustic model):用于识别语音向量;可用GMMDNN等方法来识别向量,用DTWHMMCTC来对齐(alignment)识别结果的输出(单词从何时开始,何时结束)

·  字典(dictionary):多数模型并不是以单词,而是以音素为识别单位。当识别出æ p l这三个音素时,

 

 

1.18. 连续语音识别中的搜索,就是寻找一个词模型序列以描述输入语音信号,Viterbi

从而得到词解码序列。搜索所依据的是对公式中的声学模型打分和语言模型打分。在实际使用中,往往要依据经验给语言模型加上一个高权重,并设置一个长词惩罚分数。

Viterbi:基于动态规划的Viterbi算法在每个时间点上的各个状态,计算解码状态序列对观察序列的后验概率,保留概率最大的路径,并在每个节点记录下相应的状态信息以便最后反向获取词解码序列。Viterbi算法在不丧失最优解的条件下,同时解决了连续语音识别中HMM模型状态序列与声学观察序列的非线性时间对准、词边界检测和词的识别,从而使这一算法成为语音识别搜索的基本策略。

 

1.19. 历史

最早的基于电子计算机的语音识别系统是由AT&T贝尔实验室开发的Audrey语音识别系统,它能够识别10个英文数字。其识别方法是跟踪语音中的共振峰。该系统得到了98%的正确率。到1950年代末,伦敦学院(Colledge of London)的Denes已经将语法概率加入语音识别中。

1960年代,人工神经网络被引入了语音识别。这一时代的两大突破是线性预测编码Linear Predictive Coding (LPC), 及动态时间弯折Dynamic Time Warp技术。 语音识别的最重大突破是隐含马尔科夫模型Hidden Markov Model的应用。从Baum提出相关数学推理,经过Labiner等人的研究,李开复最终实现了第一个基于隐马尔科夫模型的大词汇量语音识别系统Sphinx,他也凭借此发明获得1988 美国商业周刊最重要发明奖。此后严格来说语音识别技术并没有脱离HMM框架,可以说现在手机上的语音拨号就脱胎于李开复的语音识别系统。

这一时期所取得的重大进展有:

隐式马尔科夫模型HMM)技术的成熟和不断完善成为语音识别的主流方法。

 

统计方法将研究者的视线从微观转向宏观,不再刻意追求语音特征的细化,而是更多地从整体平均(统计)的角度来建立最佳的语音识别系统。在声学模型方面,以Markov为基础的语音序列建模方法HMM(隐式Markov链)比较有效地解决了语音信号短时稳定、长时时变的特性,并且能根据一些基本建模单元构造成连续语音的句子模型,达到了比较高的建模精度和建模灵活性。在语言层面上,通过统计真实大规模语料的词之间同现概率即N统计模型来区分识别带来的模糊音和同音词。另外,人工神经网络方法、基于文法规则的语言处理机制等也在语音识别中得到了应用。

1.20. 声学特征 LPC  MFCC CEP Mel

1.20.1. LPC

线性预测分析从人的发声机理入手,通过对声道的短管级联模型的研究,认为系统的传递函数符合全极点数字滤波器的形式,从而n 时刻的信号可以用前若干时刻的信号的线性组合来估计。通过使实际语音的采样值和线性预测采样值之间达到均方差最小LMS,即可得到线性预测系数LPC。对 LPC的计算方法有自相关法(德宾Durbin法)、协方差法、格型法等等。计算上的快速有效保证了这一声学特征的广泛使用。与LPC这种预测参数模型类似的声学特征还有线谱对LSP、反射系数等等。

1.20.2. CEP

利用同态处理方法,对语音信号求离散傅立叶变换DFT后取对数,再求反变换iDFT就可得到倒谱系数。对LPC倒谱(LPCCEP),在获得滤波器的线性预测系数后,可以用一个递推公式计算得出。实验表明,使用倒谱可以提高特征参数的稳定性。

1.20.3. Mel

不同于LPC等通过对人的发声机理的研究而得到的声学特征,Mel倒谱系数MFCC和感知线性预测 PLP是受人的听觉系统研究成果推动而导出的声学特征。对人的听觉机理的研究发现,当两个频率相近的音调同时发出时,人只能听到一个音调。临界带宽指的就是这样一种令人的主观感觉发生突变的带宽边界,当两个音调的频率差小于临界带宽时,人就会把两个音调听成一个,这称之为屏蔽效应。Mel刻度是对这一临界带宽的度量方法之一。

1.20.4. MFCC

首先用FFT将时域信号转化成频域,之后对其对数能量谱用依照Mel刻度分布的三角滤波器组进行卷积,最后对各个滤波器的输出构成的向量进行离散余弦变换DCT,取前N个系数。PLP仍用德宾法去计算LPC参数,但在计算自相关参数时用的也是对听觉激励的对数能量谱进行DCT的方法。

1.21. 最新进展

近几年来,特别是2009年以来,借助机器学习领域深度学习研究的发展,以及大数据语料的积累,语音识别技术得到突飞猛进的发展。

1、技术新发展

1)将机器学习领域深度学习研究引入到语音识别声学模型训练,使用带RBM预训练的多层神经网络,极大提高了声学模型的准确率。在此方面,微软公司的研究人员率先取得了突破性进展,他们使用深层神经网络模型(DNN)后,语音识别错误率降低了30%,是近20年来语音识别技术方面最快的进步。

2)目前大多主流的语音识别解码器已经采用基于有限状态机(WFST)的解码网络,该解码网络可以把语言模型、词典和声学共享音字集统一集成为一个大的解码网络,大大提高了解码的速度,为语音识别的实时应用提供了基础。

 今年10月底,微软宣布语音识别实现了历史性突破,词错率仅 5.9%,英语的语音转录达到专业速录员水平,微软的此次突破是机器的识别能力在英语水平上第一次超越人类。微软的这条消息发布之后在业内引起了极大的关注。语音识别一直是国内外许多科技公司重点发展的技术之一,百度首席科学家吴恩达就发推特恭贺微软在英语语音识别上的突破,同时也回忆起一年前百度在汉语语音识别上的突破,其Deep Speech 2 的短语识别的词错率已经降到了3.7%,Deep Speech 2 转录某些语音的能力基本上是超人级的,能够比普通话母语者更精确地转录较短的查询。

 

1.22. 电脑模拟人脑的思路是不对的,飞机也不是模范鸟闪动翅膀

早期的20多年,即从20世纪50年代到70年代,是科学家们走弯路的阶段,全世界的科学家对计算机完成语音识别这类只有人才能做的事情,认为必须先让计算机理解自然语言,这就局限在人类学习语言的方式上了,也就是用电脑模拟人脑,这20多年的研究成果近乎为零。

 

贾里尼克的贡献

  直到1970年后,统计语言学的出现才使语音识别重获新生,并取得了今天的飞凡成就。推动这个技术路线转变的关键人物是德里克·贾里尼克(Frederick Jelinek)和他领导的IBM华生实验室(T.J.Watson),开始使用统计方法。采用统计的方法,IBM将当时的语音识别率从70%提升到90%,同时语音识别的规模从几百单词上升到几万单词,这样语音识别就有了从实验室走向实际应用的可能

 

在贾里尼克之前,科学家们把语音识别问题当作人工智能和模式匹配问题,而贾里尼克将它当作通信问题,并用两个隐含马尔可夫模型(声学模型和语言模型)把语音识别概括得清清楚楚

 

在大数据时代到来后,隐马尔可夫模型出现了局限,即数据量提升时,它带来的表现提升没有深度神经网络那么大,但其实都属于统计模式识别。在语音识别发展的过程中,深度学习是同时发生的一件事,如果没有深度神经网络,但是有大数据和涟漪效应,隐马尔可夫模型也可以做到实用

 

深度神经网络由Geoffrey Hinton与微软的邓力研究员最先开始做,谷歌是最早在全球范围内大规模使用深度神经网络的公司,谷歌的Voice Search也在最早开创了用互联网思维做语音识别。在这方面,科大讯飞受到谷歌的启发,迅速跟进成为国内第一个在商用系统里使用深度神经网络的公司。

1.23. 参考资料

语音识别_百度百科.html

(2 条消息) 语音识别的技术原理是什么? - 知乎.html

语音识别64年大突破-搜狐科技!!!.html

语音识别技术_百度百科.html

 

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 

汉字名:艾提拉(艾龙)   EMAIL:1466519819@qq.com

转载请注明来源:attilax的专栏   http://blog.csdn.net/attilax

--Atiend

 

2014-08-31 19:57:33 u010384318 阅读数 4830
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5905 人正在学习 去看看 杨波

在之前的博文里,我已经写过了一篇博文:语音识别系统原理介绍----gmm-hmm但是觉得还是没有说清楚这个事情,特别是在gmmhmm过程里。过段时间也要找工作了,很有必要再弄清楚。现在这里说下,但愿可以说的很清楚,如果有错误,欢迎指正。

  因为截图跟公式的原因,我就用图片的形式呈现,如需要word版或者pdf版,请留言。



2019-11-04 11:19:36 qq_36333309 阅读数 20
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5905 人正在学习 去看看 杨波

语音识别(Automatic Speech Recognition)是以语音为研究对象,通过语音信号处理和模式识别让机器自动识别和理解人类口述的语。语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高技术。语音识别是一门涉及面很广的交叉学科,它与声学、语音学、语言学、信息理论、模式识别理论以及神经生物学等学科都有非常密切的关系。

语音识别的基本原理

语音识别系统本质上是一种模式识别系统,包括特征提取、模式匹配、参考模式库等三个基本单元,它的基本结构如下图所示:

                                              

上面这个图其实很好理解,就是把语音输入,我们首先就是要对输入的语音进行预处理,然后提取语音的特征,在此基础上建立语音识别所需的模板。而计算机在识别过程中要根据语音识别的模型,将计算机中存放的语音模板与输入的语音信号的特征进行比较,根据一定的搜索和匹配策略,找出一系列最优的与输入语音匹配的模板。然后根据此模板的定义,通过查表就可以给出计算机的识别结果。显然,这种最优的结果与特征的选择、语音模型的好坏、模板是否准确都有直接的关系。

 

语音识别系统构建过程整体上包括两大部分:训练和识别训练通常是离线完成的,对预先收集好的海量语音、语言数据库进行信号处理和知识挖掘获取语音识别系统所需要的“声学模型”和“语言模型”;而识别过程通常是在线完成的,对用户实时的语音进行自动识别识别过程通常又可以分为“前端”和“后端”两大模块:“前端”模块主要的作用是进行端点检测(去除多余的静音和非说话声)、降噪、特征提取等;“后端”模块的作用是利用训练好的“声学模型”和“语言模型”对用户说话的特征向量进行统计模式识别(又称“解码”),得到其包含的文字信息,此外,后端模块还存在一个“自适应”的反馈模块,可以对用户的语音进行自学习,从而对“声学模型”和“语音模型”进行必要的“校正”,进一步提高识别的准确率。


语音识别的技术原理

首先,我们知道声音实际上是一种波。常见的mp3等格式都是压缩格式,必须转成非压缩的纯波形文件来处理,比如Windows PCM文件,也就是俗称的wav文件。wav文件里存储的除了一个文件头以外,就是声音波形的一个个点了。下图是一个波形的示例。

                                                

 其实语音识别的声音预处理与声纹识别的声音预处理有很大一部分是相似的。在开始语音识别之前,有时需要把首尾端的静音切除,降低对后续步骤造成的干扰。这个静音切除的操作一般称为 VAD。

要对声音进行分析,需要对声音分帧,也就是把声音切开一小段一小段,每小段称为一帧。分帧操作一般不是简单的切开,而是使用移动窗函数来实现。帧与帧之间一般是有交叠的,就像下图:

                                                                     

图中,每帧的长度为25毫秒,每两帧之间有 25-10=15 毫秒的交叠。我们称为以帧长25ms、帧移10ms分帧。

分帧后,语音就变成了很多小段。但波形在时域上几乎没有描述能力,因此必须将波形作变换。常见的一种变换方法是提取MFCC特征。

至此,声音就成了一个12行(假设声学特征是12维)、N列的一个矩阵,称之为观察序列,这里N为总帧数。观察序列如下图所示,图中,每一帧都用一个12维的向量表示,色块的颜色深浅表示向量值的大小。

                                                         

接下来就要把这个矩阵变成文本了。首先要介绍两个概念:

音素:单词的发音由音素构成。对英语,一种常用的音素集是卡内基梅隆大学的一套由39个音素构成的音素集,参见The CMU Pronouncing Dictionary。汉语一般直接用全部声母和韵母作为音素集,另外汉语识别还分有调无调等等,有兴趣的可以自己去了解一下哈。

状态:这里理解成比音素更细致的语音单位就行啦。通常把一个音素划分成3个状态

下面我们来看看语音识别的工作流程: 

第一步,把帧识别成状态(难点)。

第二步,把状态组合成音素。

第三步,把音素组合成单词。

 如下图 :

                                 

在上图中,每个小竖条代表一帧若干帧语音对应一个状态,每三个状态组合成一个音素,若干个音素组合成一个单词。也就是说,只要知道每帧语音对应哪个状态,语音识别的结果就出来了。 

那每帧音素对应哪个状态呢?有个容易想到的办法,看某帧对应哪个状态的概率最大,那这帧就属于哪个状态。比如下面的示意图,这帧在状态S3上的条件概率最大,因此就猜这帧属于状态S3。

                                                         

那这些用到的概率从哪里读取呢?有个叫“声学模型”的东西,里面存了一大堆参数,通过这些参数,就可以知道帧和状态对应的概率。获取这一大堆参数的方法叫做“训练”,需要使用巨大数量的语音数据,训练的方法比较繁琐,现在有很多训练模型的工具(如:CMUSphinx Open Source Speech Recognition ,Kaldi ASR)。

 

但这样做有一个问题:每一帧都会得到一个状态号,最后整个语音就会得到一堆乱七八糟的状态号,相邻两帧间的状态号基本都不相同。假设语音有1000帧,每帧对应1个状态,每3个状态组合成一个音素,那么大概会组合成300个音素,但这段语音其实根本没有这么多音素。如果真这么做,得到的状态号可能根本无法组合成音素。实际上,相邻帧的状态应该大多数都是相同的才合理,因为每帧很短。

解决这个问题的常用方法就是使用隐马尔可夫模型(Hidden Markov Model,HMM)。这东西听起来好像很高深的样子,实际上用起来很简单:首先构建一个状态网络,然后从状态网络中寻找与声音最匹配的路径。

这样就把结果限制在预先设定的网络中,避免了刚才说到的问题,当然也带来一个局限,比如你设定的网络里只包含了“今天晴天”和“今天下雨”两个句子的状态路径,那么不管说些什么,识别出的结果必然是这两个句子中的一句。那如果想识别任意文本呢?把这个网络搭得足够大,包含任意文本的路径就可以了。但这个网络越大,想要达到比较好的识别准确率就越难。所以要根据实际任务的需求,合理选择网络大小和结构

搭建状态网络,是由单词级网络展开成音素网络,再展开成状态网络。语音识别过程其实就是在状态网络中搜索一条最佳路径,语音对应这条路径的累积概率最大,这称之为“解码”。路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。

这里所说的累积概率,由三部分构成,分别是:

观察概率:每帧和每个状态对应的概率

转移概率:每个状态转移到自身或转移到下个状态的概率

语言概率:根据语言统计规律得到的概率

其中,前两种概率从声学模型中获取,最后一种概率从语言模型中获取。语言模型是使用大量的文本训练出来的,可以利用某门语言本身的统计规律来帮助提升识别正确率。语言模型很重要,如果不使用语言模型,当状态网络较大时,识别出的结果基本是一团乱麻。


语音识别的工作流程

                           

语义识别流程图

预处理:

1. 首尾端的静音切除,降低干扰,静音切除的操作一般称为VAD。              

2. 声音分帧,也就是把声音切开成一小段一小段,每小段称为一帧,使用移动窗函数来实现,不是简单的切开,各帧之间一般是有交叠的。

特征提取:主要算法有线性预测倒谱系数(LPCC)和Mel 倒谱系数(MFCC),目的是把每一帧波形变成一个包含声音信息的多维向量;

声学模型(AM):通过对语音数据进行训练获得,输入是特征向量,输出为音素信息;

字典:字或者词与音素的对应, 简单来说, 中文就是拼音和汉字的对应,英文就是音标与单词的对应;

语言模型(LM):通过对大量文本信息进行训练,得到单个字或者词相互关联的概率;

解码:就是通过声学模型,字典,语言模型对提取特征后的音频数据进行文字输出;

语音识别流程的举例(只是形象表述,不是真实数据和过程):

1、语音信号:我是机器人

2、特征提取:我是机器人  >  [123456....]

3、声学模型:[123456....]  >  w o s i j i q i r n

4、字典:窝:w o;我:w o; 是:s i; 机:j i; 器:q i; 人:r n;级:j i;忍:r n;

5、语言模型(给出概率):我:0.0786, 是: 0.0546,我是:0.0898,机器:0.0967,机器人:0.6785;

 6、 输出文字:我是机器人;

2019-05-21 08:35:12 weixin_42137700 阅读数 141
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5905 人正在学习 去看看 杨波

https://www.toutiao.com/a6692701310044602887/

 

电话机器人效果好不好,首先得看他的语音识别能力怎么样,语音识别率高、稳定,那么这个电话机器人就不会差。我们可以看一下语音识别的基本原理:

一个基本的语音识别系统如下图,实现是正常工作流程,虚线是训练模式分类问题中的模板(这里就是声学模型,字典和语言模型)。

5分钟带你读懂“语音识别”工作原理

 

预处理:

1. 首尾端的静音切除,下降对后续进程形成的搅扰,静音切除的操作一般称为VAD。

2. 声响分帧,也就是把声响切开成一小段一小段,每小段称为一帧,运用移动窗函数来完成,不是简略的切开,各帧之间一般是有交叠的。

特征提取:首要算法有线性猜测倒谱系数(LPCC)和Mel 倒谱系数(MFCC),意图是把每一帧波形变成一个包括声响信息的多维向量;

声学模型(AM):经过对语音数据进行练习取得,输入是特征向量,输出为音素信息;

字典:字或许词与音素的对应, 简略来说, 中文就是拼音和汉字的对应,英文就是音标与单词的对应;

言语模型(LM):经过对大量文本信息进行练习,得到单个字或许词彼此相关的概率;

解码:就是经过声学模型,字典,言语模型对提取特征后的音频数据进行文字输出;

语音辨认流程的举例(仅仅形象表述,不是实在数据和进程):

1. 语音信号:PCM文件等(我是电销机器人)

2. 特征提取:提取特征向量[5 4 2 66 98 ...]

3. 声学模型:[5 4 2 66 98]-> wo shi dianxiao jiqiren

4. 字典翻译:窝:w o;我:w o; 是:s i;电销:dian xiao 机:j i; 器:q i; 人:r en

5. 言语模型:我:0.1286, 是: 0.3616,电销:0.5682,机器人:0.6785;

6. 输出文字:我是电销机器人;

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