博舍

语音识别(ASR) 语音识别是什么工作的

语音识别(ASR)

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

语音识别的基本原理

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

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

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

语音识别的技术原理

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

声音波形图

其实语音识别的声音预处理与声纹识别的声音预处理有很大一部分是相似的(前面我有介绍:【自主学习】声纹识别.2-简书)。在开始语音识别之前,有时需要把首尾端的静音切除,降低对后续步骤造成的干扰。这个静音切除的操作一般称为VAD(【自主学习】声纹识别.2-简书)。

要对声音进行分析,需要对声音分帧,也就是把声音切开一小段一小段,每小段称为一帧。分帧操作一般不是简单的切开,而是使用移动窗函数(【自主学习】声纹识别.2-简书)来实现。帧与帧之间一般是有交叠的,就像下图:

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

分帧后,语音就变成了很多小段。但波形在时域上几乎没有描述能力,因此必须将波形作变换。常见的一种变换方法是提取MFCC特征(【自主学习】声纹识别.2-简书)。

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

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

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

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

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

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

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

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

如下图:

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

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

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

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

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

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

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

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

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

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

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

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

语音识别的工作流程语义识别流程图

预处理:

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

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

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

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

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

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

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

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

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

2、特征提取:我是机器人

3、声学模型:wosijiqirn

4、字典:窝:wo;我:wo;是:si;机:ji;器:qi;人:rn;级:ji;忍:rn;

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

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

有什么问题尽管提出来哈!

参考:

语音识别技术基础理解-简书

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

语音识别基本流程-nsh119的博客-CSDN博客

语音识别基本流程

所谓语音识别,就是将一段语音信号转换成相对应的文本信息,系统主要包含特征提取、声学模型,语言模型以及字典与解码四大部分,此外为了更有效地提取特征往往还需要对所采集到的声音信号进行滤波、分帧等音频数据预处理工作,将需要分析的音频信号从原始信号中合适地提取出来;特征提取工作将声音信号从时域转换到频域,为声学模型提供合适的特征向量;声学模型中再根据声学特性计算每一个特征向量在声学特征上的得分;而语言模型则根据语言学相关的理论,计算该声音信号对应可能词组序列的概率;最后根据已有的字典,对词组序列进行解码,得到最后可能的文本表示。

预处理:1. 首尾端的静音切除,降低对后续步骤造成的干扰,静音切除的操作一般称为VAD。

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

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

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

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

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

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

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

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

  2.特征提取:提取特征向量[1234560...]

  3.声学模型:[1234560]->wosijiqirn

  4.字典:窝:wo;我:wo;是:si;机:ji;器:qi;人:rn;级:ji;忍:rn;

  5.语言模型:我:0.0786,是:0.0546,我是:0.0898,机器:0.0967,机器人:0.6785;

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

不正之处,欢迎提出!~~~谢谢

语音识别的流程

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

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

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

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.语音的识别过程主要分哪几步,常用的识别方法是什么?多智时代-人工智能和大数据学习入门网站|人工智能、大数据、物联网、云计算的学习交流网站

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

上一篇

下一篇