博舍

语音识别的流程 语音识别的基本过程和方法是什么意思

语音识别的流程

语音识别是完成语音到文字的转换。自然语言理解是完成文字到语义的转换。语音合成是用语音方式输出用户想要的信息,用语音实现人与计算机之间的交互,主要包括语音识别、自然语言理解和语音合成。

相对于机器翻译,语音识别是更加困难的问题。机器翻译系统的输入通常是印刷文本,计算机能清楚地区分单词和单词串。而语音识别系统的输入是语音,其复杂度要大得多,特别是口语有很多的不确定性。人与人交流时,往往是根据上下文提供的信息猜测对方所说的是哪一个单词,还可以根据对方使用的音调、面部表情和手势等来得到很多信息。特别是说话者会经常更正所说过的话,而且会使用不同的词来重复某些信息。显然,要使计算机像人一样识别语音是很困难的。

语音识别过程包括从一段连续声波中采样,将每个采样值量化,得到声波的压缩数字化表示。采样值位于重叠的帧中,对于每一帧,抽取出一个描述频谱内容的特征向量。然后,根据语音信号的特征识别语音所代表的单词,语音识别过程主要分为五步,如下:

1.语音信号采集

语音信号采集是语音信号处理的前提。语音通常通过话筒输入计算机。话筒将声波转换为电压信号,然后通过A/D装置(如声卡)进行采样,从而将连续的电压信号转换为计算机能够处理的数字信号。

目前多媒体计算机已经非常普及,声卡、音箱、话筒等已是个人计算机的基本设备。其中声卡是计算机对语音信进行加工的重要部件,它具有对信号滤波、放大、A/D和D/A转换等功能。而且,现代操作系统都附带录音软件,通过它可以驱动声卡采集语音信号并保存为语音文件。

对于现场环境不好,或者空间受到限制,特别是对于许多专用设备,目前广泛采用基于单片机、DSP芯片的语音信号采集与处理系统。

2.语音信号预处理

语音信号号在采集后首先要进行滤波、A/D变换,预加重(Preemphasis)和端点检测等预处理,然后才能进入识别、合成、增强等实际应用。

滤波的目的有两个:一是抑制输入信号中频率超出//2的所有分量(/:为采样频率),以防止混叠干扰;二是抑制50Hz的电源工频干扰。因此,滤波器应该是一个带通滤波器。

A/D变换是将语音模拟信号转换为数字信号。A/D变换中要对信号进行量化,量化后的信号值与原信号值之间的差值为量化误差,又称为量化噪声。

预加重处理的目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,便于频谱分析。

端点检测是从包含语音的一段信号中确定出语音的起点和终点。有效的端点检测不仅能减少处理时间,而且能排除无声段的噪声干扰。目前主要有两类方法:时域特征方法和频域特征方法。时域特征方法是利用语音音量和过零率进行端点检测,计算量小,但对气音会造成误判,不同的音量计算也会造成检测结果不同。频域特征方法是用声音的频谱的变异和熵的检测进行语音检测,计算量较大。

3.语音信号的特征参数提取

人说话的频率在10kHz以下。根据香农采样定理,为了使语音信号的采样数据中包含所需单词的信息,计算机的采样频率应是需要记录的语音信号中包含的最高语音频率的两倍以上。一般将信号分割成若干块,信号的每个块称为帧,为了保证可能落在帧边缘的重要信息不会丢失,应该使帧有重叠。例如,当使用20kH*的采样麵率时,标准的一帧为10ms,包含200个采样值。

话筒等语音输入设备可以采集到声波波形,如囫10.4所示。虽然这些声音的波形包含了所需单词的信息,但用肉眼观察这些波形却得不到多少信息因此,需要从采样数据中抽取那些能够帮助辨别单词的特征信息。在语音识别中,常用线性预测编码技术抽取语音特征。

线性预测编码的基本思想是:语音信号采样点之间存在相关性,可用过去的若干采样点的线性组合预测当前和将来的采样点值。线性預测系数埽以通过使预测信号和实际信号之间的均方误差最小来唯一确定。

语音线性预测系数作为语音信号的一种特征参数,已经广泛应用于语音处理各个领域。

4.向置量化

向量量化(VectorQuantization,VQ)技术是20世纪W年代后期发展起来的一种数据压缩和编码技术。经过向量量化的特征向量也可以作为后面隐马尔可夫模型中的输入观察符号。

在标量量化中整个动态范围被分成若干个小区间,每个小区间有一个代表值,对于一个输入的标量信号,量化时落入小区间的值就用这个代表值>[戈替。因为这时的信号量是一维的标量,所以称为标量量化。

向量量化的概念是用线性空间的观点[,把标量改为一维的向量,对向量进行量化。和标量量化一样,向量量化是把向量空间分成若干个小区域,每个小区域寻找一个代表向量,量化时落入小区域的向量就用这个代表向量代替。

向量量化的基本原理是将若干个标量数据组成一个向量(或者是从一帧语音数据中提取的特征向量)在多维空间给予整体量化,从而可以在信息量损失较小的情况下压缩数据量。

语音识别

当提取声音特征集合以后,就可以识别这些特征所代表的单词。本节重点关注单个单词的识别。识别系统的输入是从语音信号中提取出的特征参数,如LPC预测编码参数,当然,单词对应于字母序列。语音识别所采用的方法一般有模板匹配法、随机模型法和概率语法分析法三种。这三种方法都是建立在最大似然决策贝叶斯(Bayes)判决的基础上的。

(1)模板(template)匹配法

在训练阶段,用户将词汇表中的每一个词依次说一遍,并且将其特征向量作为模板存入模板库。在识别阶段,将输入语音的特征向量序列,依次与模板库中的每个模板进行相似度比较,将相似度最高者作为识别结果输出。

(2)随机模型法

随机模型法是目前语音识别研究的主流。其突出的代表是隐马尔可夫模型。语音信号在足够短的时间段上的信号特征近似于稳定,而总的过程可看成是依次相对稳定的某一特性过渡到另一特性。隐马尔可夫模型则用概率统计的方法来描述这样一种时变的过程。

(3)概率语法分析法

这种方法是用于大长度范围的连续语音识别。语音学家通过研究不同的语音语谱图及其变化发现,虽然不同的人说同一些语音时,相应的语谱及其变化有种种差异,但是总有一些共同的特点足以使他们区别于其他语音,也即语音学家提出的“区别性特征”。另一方面,人类的语言要受词法、语法、语义等约束,人在识别语音的过程中充分应用了这些约束以及对话环境的有关信息。于是,将语音识别专家提出的“区别性特征”与来自构词、句法、语义等语用约束相互结合,就可以构成一个“自底向上”或“自顶向下”的交互作用的知识系统,不同层次的知识可以用若干规则来描述。

除了上面的三种语音识别方法外,还有许多其他的语音识别方法。例如,基于人工神经网络的语音识别方法,是目前的一个研究热点。目前用于语音识别研究的神经网络有BP神经网络、Kohcmen特征映射神经网络等,特别是深度学习用于语音识别取得了长足的进步。人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:1.一套完整的语音识别系统,主要的工作流程是什么?2.人工智能快速发展的今天,语音识别现在发展到什么阶段了?3.语音的识别过程主要分哪几步,常用的识别方法是什么?多智时代-人工智能和大数据学习入门网站|人工智能、大数据、物联网、云计算的学习交流网站

语音识别流程梳理

语音识别(speechrecognition)技术,也被称为自动语音识别(英语:AutomaticSpeechRecognition,ASR)、电脑语音识别(英语:ComputerSpeechRecognition)或是语音转文本识别(英语:SpeechToText,STT),其目标是以电脑自动将人类的语音内容转换为相应的文字。搜狗知音引擎是搜狗公司自主研发的一项专注于自然交互的智能语音技术,该技术集合了语音识别、语义理解、语音交互、以及提供服务等多项功能。最近小编参与了语音相关项目的测试工作,测试中对语音识别的相关概念和原理有了深入了解,本文将对语音识别的流程进行展开讲解。

语音识别流程

语音识别流程,就是将一段语音信号转换成相对应的文本信息的过程,它主要包含语音输入、VAD端点检测、特征提取、声学模型、语言模型以及字典与解码几个部分。以搜狗语音识别技术流程为例,语音信号经过前端信号处理、端点检测等处理后,逐帧提取语音特征,传统的特征类型包括MFCC、PLP、FBANK等特征,提取好的特征送至解码器,在声学模型、语言模型以及发音词典的共同指导下,找到最为匹配的词序列作为识别结果输出,整体语音识别系统的流程如下:

语音识别的核心公式为:

其中,声学模型主要描述发音模型下特征的似然概率,语言模型主要描述词间的连接概率;发音词典主要是完成词和音之间的转换。接下来,将针对语音识别流程中的各个部分展开介绍。

VAD端点检测

语音识别开始之前,需要先对音频信息进行预处理,预处理过程主要包括端点检测和特征提取。端点检测,也叫语音活动检测(VoiceActivityDetection,VAD),它的目的是对语音和非语音的区域进行区分。端点就是静音和有效语音信号变化临界点,端点检测就是为了从带有噪声的语音中准确的定位出语音的开始点和结束点,去掉静音的部分,去掉噪声的部分,找到一段语音真正有效的内容。VAD检测主要包括2个方面:特征参数与判决算法。常用的特征参数有五类,分别是基于能量、频域、倒谱、谐波、长时特征;其中基于能量的VAD是检测信号的强度,并且假设语音能量大于背景噪声能量,这样当能量大于某一门限时,可以认为有语音存在;频域特征,通过STFT将时域信号变成频域信号,即使在SNR到0dB时,一些频带的长时包络还是可以区分语音和噪声;倒谱特征,对于VAD,能量倒谱峰值确定了语音信号的基频(pitch),也有使用MFCC做为特征的;基于谐波的特征:语音的一个明显特征是包含了基频F0及其多个谐波频率,即使在强噪声场景,谐波这一特征也是存在的。可以使用自相关的方法找到基频;长时特征:语音是非稳态信号。普通语速通常每秒发出10~15个音素,音素见的谱分布是不一样的,这就导致了随着时间变化语音统计特性也是变化的。另一方面,日常的绝大多数噪声是稳态的(变化比较慢的),如白噪声/机器噪声。VAD的判决算法也多种多样,如门限算法、统计模型方法、机器学习方法等。实际上,一方面需要对每个语音帧的帧内信息进行判决;另一方面由于语音帧之间有很强的相关性,相邻帧的信息对当前帧的影响也应该被关注。VAD作为整个流程的最前端,端点检测处理得好,不仅将处理的时间序列变小,还能消除无声段道噪声。

特征提取

特征提取是通过将语音波形以相对最小的数据速率转换为参数表示形式进行后续处理和分析来实现的,MFCC(MelFrequencyCepstralCoefficents)是一种在自动语音和说话人识别中广泛使用的特征。下图是MFCC特征提取的整个过程,下面将一一介绍特征提取过程每一步的作用:

预加重在音频录制过程中,高频信号更容易衰减,而像元音等一些因素的发音包含了较多的高频信号的成分,高频信号的丢失,可能会导致音素的共振峰并不明显,使得声学模型对这些音素的建模能力不强。预加重是个一阶高通滤波器,可以提高信号高频部分的能量分帧语音信号是一个非稳态的、时变的信号。但在短时间范围内可以认为语音信号是稳态的、时不变的。这个短时间一般取10-30ms,因此在进行语音信号处理时,为减少语音信号整体的非稳态、时变的影响,从而对语音信号进行分段处理,其中每一段称为一帧,帧长一般取25ms。为了使帧与帧之间平滑过渡,保持其连续性,分帧一般采用交叠分段的方法,保证相邻两帧相互重叠一部分。相邻两帧的起始位置的时间差称为帧移,我们一般在使用中帧移取值为10ms。加窗因为后面会对信号做FFT,而FFT变换的要求为:信号要么从-∞到+∞,要么为周期信号。现实世界中,不可能采集时间从-∞到+∞的信号,只能是有限时间长度的信号。由于分帧后的信号是非周期的,进行FFT变换之后会有频率泄露的问题发生,为了将这个泄漏误差减少到最小程度(注意我说是的减少,而不是消除),我们需要使用加权函数,也叫窗函数。加窗主要是为了使时域信号似乎更好地满足FFT处理的周期性要求,减少泄漏。DFT离散傅里叶变换(DiscreteFourierTransform,缩写为DFT),将每个窗口内的数据从时域信号转为频域信号。梅尔滤波器组从FFT出来的结果是每个频带上面的幅值,然而人类对不同频率语音有不同的感知能力:对1kHz以下,与频率成线性关系,对1kHz以上,与频率成对数关系。频率越高,感知能力就越差。在Mel频域内,人的感知能力为线性关系,如果两段语音的Mel频率差两倍,则人在感知上也差两倍。梅尔滤波器组将梅尔域上每个三角滤波器的起始、中间和截止频率转换线性频率域,并对DFT之后的谱特征进行滤波,再进行log操作,得到Fbank(FilterBank)特征。IDFTFBank特征的频谱图如下图所示,图中四个红点表示的是共振峰,是频谱图的主要频率,在语音识别中,根据共振峰来区分不同的音素(phone),所以我们可以把图中红线表示的特征提取出来就行,移除蓝色的影响部分。其中红色平滑曲线将各个共振峰连接起来,这条红线,称为谱包络(SpectralEnvelope),蓝色上下震荡比较多的线条称为谱细节(Spectraldetails)。这个过程是通过逆离散傅里叶变换(IDFT,InverseDiscreteFourierTransform)实现的。

声学模型

声学模型(Acousticmodel)是语音识别系统中最为重要的部分之一,利用了声学、语音学、环境特性以及说话人性别口音等信息,对语音进行建模。声学模型可以理解为是对发声的建模,它能够把语音输入转换成声学表示的输出,更准确的说是给出语音属于某个声学符号的概率。在英文中这个声学符号可以是音节或者更小的颗粒度音素(phone),在中文中这个声学符号可以是声韵母或者是颗粒度同英文一样小的音素。比较经典的声学建模模型为隐马尔科夫模型(HiddenMarkovModel,HMM)。隐马尔可夫模型是一个离散时域有限状态自动机,这一马尔可夫模型的内部状态外界不可见,外界只能看到各个时刻的输出值。对语音识别系统,输出值通常就是从各个帧计算而得的声学特征。近年来,随着深度学习的兴起,使用了接近30年的语音识别声学模型HMM(隐马尔科夫模型)逐渐被DNN(泛指深度神经网络)所替代,模型精度也有了突飞猛进的变化,整体来看声学建模技术从建模单元、模型结构、建模流程等三个维度都有了比较明显的变化,如图所示:

下图为DNN-HMM混合建模框架,DNN的输入是传统的语音波形经过加窗、分帧,然后提取出来的频谱特征,如MFCC、PLP或更底层的滤波器组(filterbank,FBK)声学特征等。输入特征使用了在当前帧左右拼帧的方式来实现模型对时序信号长时相关性的建模,可以更好地利用上下文的信息;模型输出则保持了GMM-HMM经常使用的trihone共享状态(senone)。

如下图为各种声学模型对识别结果(字错率)的影响,选择合适的声学模型是语音识别最核心的关键之一。

语言模型

语言模型表示某一字序列发生的概率,是对一组字序列构成的知识表示。它的作用之一为消解多音字的问题,在声学模型给出发音序列之后,从候选的文字序列中找出概率最大的字符串序列。语音识别中常用的语言模型是N元文法(N-Gram),即统计前后N个字出现的概率。N元文法假定某一个字出现的概率仅与前面N-1个字出现的概率有关系。N-Gram模型中的N越大,需要的训练数据就越多。一般的语音识别系统可以做到trigram(N=3)。语言模型还会对声学的解码作约束和重打分,让最终识别结果符合语法规则。目前最常见的是N-Gram语言模型和基于RNN的语言模型。

字典

语音识别中的字典,就是发音字典,是字词对应的音素index集合,是字词和音素之间的映射。中文中就是拼音与汉字的对应,英文中就是音标与单词的对应,其目的是根据声学模型识别出来的音素,来找到对应的汉字(词)或者单词,用来在声学模型和语言模型建立桥梁,将两者联系起来。发音字典的形式举例如下:

解码器

解码器模块主要完成的工作是,给定输入特征序列的情况下,在由声学模型、发音词典和语言模型等知识源组成的搜索空间(SearchSpace)中,通过一定的搜索算法,寻找使概率最大的词序列。它的核心公式:

在解码过程中,各种解码器的具体实现可以是不同的。按搜索空间的构成方式来分,有动态编译和静态编译两种方式。根据应用场景不同,可以分为在线解码器(在服务器端解码)、离线解码器(在设备端解码)、二遍解码器、唤醒解码器、固定句式解码器。根据技术分类,可以分为基于lexicontree的解码器、基于WFST的解码器、基于latticerescore的解码器等。

总结

以上是小编对语音识别整个流程的初步调研分享,如有不足之处请大家多指教,待后续更深入了解后再分享给大家。文章参考:

主流声学模型对比https://cloud.tencent.com/developer/article/1451421语音识别之特征提取https://zhuanlan.zhihu.com/p/147386972语音识别之解码器技术简介https://zhuanlan.zhihu.com/p/23648888

语音识别中的声学模型(AM)和语言模型(LM)

本文主要受参考自: http://blog.csdn.net/by21010/article/details/51506292 以及: https://www.zhihu.com/question/35833334

最近看essen源码,感觉对于ASR的一下之前的比较基础的算法很生疏,在知乎上看到这个链接,感觉讲的比较通俗易懂,拿来再理解一下。

decoder是根据字典,声学模型和语音模型,将输入的语音特征失量序列转化为字符序列。

声学模型是对声学、语音学、环境的变量、说话人性别、口音等的差异的知识表示,而语言模型是对一组字序列构成的知识表示。

声学模型用lstm+ctc训练,得到语音特征到音素的映射; 语言模型用SRILM工具做LM的训练得到3-gramand4-gram,是词与词、词与句子的映射, 字典是字词对应的音素index集合,是字词和音素之间的映射

‘’’

haibing注:所谓声学模型就是把语音的声学特征分类对应到(解码)音素或字词这样的单元 语言模型接着把字词解码成一个完整的句子

‘’‘

先说语言模型: 

语言模型表示某一字序列发生的概率,一般采用链式法则,把一个句子的概率拆解成器中的每个词的概率之积。设W是由w1,w2,...,wn组成的,则P(W)可以拆成(由条件概率公式和乘法公式):

P(W)=P(w1)P(w2/w1)P(w3/w1,w2)...P(wn/w1,w2,..wn-1), 每一项都是在之前所有词的概率条件下,当前词的概率。

由马尔卡夫模型的思想,最常见的做法就是用N-元文法,即假定某一个字的输出只与前面N-1个字出现的概率有关系,这种语言模型叫做n-gram模型(一般n取3,即trigram), 这时候我们就可以这么表示:

 P(W)=P(w1)P(w2|w1)P(w3|w1,w2)P(w4|w1,w2,w3)...P(wn/wn-1,wn-2,...,w1) #条件太长的时候,概率就不好估计了,三元文法只取前两个词

     = P(w1)P(w2|w1)P(w3|w1,w2)P(w4|w2,w3)...P(wn/wn-1,wn-2) 

对于其中的每一项条件概率都可以用贝叶斯公式求出,在所有的语料中统计出相邻的字发生的概率,再统计出单个字出现的概率,代入即可。 

‘’‘

wangyun( https://www.zhihu.com/people/maigo )注: 

做一下解释,这个地方的n-gram是根据字符串序列建立的,所以一个n-gram就相当于词组,必然会有一些词组没有出现过,但是也存在发生的概率,所以需要算法生成这些生僻词组的概率。

直观的将:n大了之后主要的问题是许多n-gram在训练数据中没有出现过。如果一个n-gram整体没有出现过,但去掉一个词后得到的(n-1)-gram出现过,那么估计出的概率就是0;如果连这个(n-1)-gram都没有出现过,那么概率就无法估计了。常用的解决的办法就是:smoothing(eg:Good-Turingsmoothing)和fallbacktolower-ordern-grams(采用更小的n-gram)。见《数学之美》

’‘’

再说声学模型: 

声学模型的任务是计算P(X/W),即给定文字之后发出这段语音的概率(最后利用贝叶斯,求P(X/W)是使用)。首先第一问题:怎么才能知道每个单词发什么音呢?这就需要另外一个模块,叫做词典,看eesen的源码在数据准备阶段就是先求出词对应音素的dict,它的作用就是把单词串转化成音素串,然后再求的语言模型和训练声学模型(用lstm+ctc训练声学模型).

有了dict的帮助,声学模型就知道给定的文字串该依次发哪些音了。不过为了计算语音跟音素串的匹配程度,还需要知道每个音素的起止时间。这是利用动归来进行的,可以高效的找到音素的分界点,使得没一段语音与音素的匹配程度(用概率表示)之积最大。实际使用的算法称为viterbi算法,它不仅仅考虑了每一段语音和音素的匹配程度,还考虑了各个音素之间转换的概率(转换概率通过HMM估计)实际中使用的比音素更小的单位,原理一样(不是很确定,值得是一帧数据(25ms)吗,一帧不到不到一个音素的长度?)

在求音素分界点的过程中,以及在有了分界点后计算时,声学模型都需要知道怎样计算一个音素与一段语音信号的匹配程度。要做这件事,需要找到一种合适的表示语音信号的方法。一般是把语音信号分成许多帧,对于每一帧,通过傅里叶变换等一系列操作,把它转换成一个特征向量。最常用的特征是MFCC,从训练数据中,我们可以提取出大量的特征向量,以及它们对应的音素;利用这些数据,就可以训练从特征到音素的分类器。前些年最常用的分类器是高斯混合模型(GMM),它的大致原理是估计出每个音素的特征向量的分布,然后在识别阶段,计算每一帧的特征向量由相应音素产生的概率,把每一帧的概率相乘,就得到。现在,神经网络渐渐火了起来,它可以直接给出,用贝叶斯公式可以转换成,再相乘得到。整体思路:具体来说就是输入一段语音信号,要找到一个文字序列(由字或者词组成),是的它与语音信号的匹配程度最高。这个匹配程度,一般都是用概率来表示的,用X表示语音信号,用W表示文字序列,则要解的是下面这个问题:但是一般语音是由文字产生的,已知文字才能发出语音,所以对于上面的条件概率公式我们想要已知结果求该条件下发生概率,这时候自然而然就想到贝叶斯公式:,由于我们要优化W,P(X)可以看作常数,可以省略分母。由上边的步骤来看,求文字串、计算语言模型概率、求音素串、求音素分界点、计算声学模型概率几个步骤似乎是依次进行的。其实不然,在实际编码过程中,因为文字串、音素分界点都有非常多种可能,枚举是不现实的。实际中,这几个步骤同时进行并互相制约,随时砍掉不够优的可能,最终在可接受的时间内求出最优解: W*=argmaxP(W|X)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇