语音识别(ASR)--语音转文字

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

语音识别的基本原理


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


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

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


语音识别的技术原理


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


声音波形图

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

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


图中,每帧的长度为25毫秒,每两帧之间有

网络异常,图片无法展示
|
毫秒的交叠。我们称为以帧长25ms、帧移10ms分帧。

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

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


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

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

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

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

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

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

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

如下图:


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

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


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

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


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

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


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

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

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

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

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

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


语音识别的工作流程



语义识别流程图

预处理:

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

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

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

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

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

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

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

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

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

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

网络异常,图片无法展示
|

3、声学模型:

网络异常,图片无法展示
|
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、 输出文字:我是机器人;

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
5月前
|
人工智能 自然语言处理 语音技术
Step-Audio:开源语音交互新标杆!这个国产AI能说方言会rap,1个模型搞定ASR+TTS+角色扮演
Step-Audio 是由阶跃星辰团队推出的开源语音交互模型,支持多语言、方言和情感表达,能够实现高质量的语音识别、对话和合成。本文将详细介绍其核心功能和技术原理。
654 91
Step-Audio:开源语音交互新标杆!这个国产AI能说方言会rap,1个模型搞定ASR+TTS+角色扮演
|
8月前
|
API 语音技术
基于Asterisk和TTS/ASR语音识别的配置示例
基于Asterisk和TTS/ASR语音识别的配置示例如下:1. 安装Asterisk:首先,确保你已在服务器上成功安装Asterisk。可以选择从Asterisk官方网站下载最新版本的安装包并按照指南进行安装。2. 安装TTS引擎:选择适合你需求的TTS(Text-to-Speech)引擎,如Google Text-to-Speech、Microsoft Azure Cognitive Services等。按照所选TTS引擎的文档和指示进行安装和配置。3. 配置Asterisk:编辑Asterisk的配置文件,通常是`/etc/asterisk/extensions.conf
160 5
|
8月前
|
API 语音技术
基于Asterisk和TTS/ASR语音识别的配置示例
本文介绍了如何在Asterisk服务器上配置TTS(文本转语音)和ASR(自动语音识别)引擎,包括安装Asterisk、选择并配置TTS和ASR引擎、编辑Asterisk配置文件以实现语音识别和合成的功能,以及测试配置的有效性。具体步骤涉及下载安装包、编辑配置文件、设置API密钥等。
537 1
|
人工智能 算法 机器人
语音识别接口 - ASR性能指标WER/SER
做人工智能测试,准确一点,做语音聊天机器人、智能音箱等测试,一定会接触到语音误别即ASR (Automatic Speech Recognition)。本篇主要讲ASR的几个最重要的指标字错率、句错率。
2086 0
|
机器学习/深度学习 中间件 Linux
顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-语音识别(asr)接口
顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-语音识别(asr)接口 接口说明
940 67
语音识别(ASR)基础介绍第三篇——经典做法及术语概念
上一章介绍了万金油特征MFCC,相当于数据的输入已经确定了。 本章尽可能的介绍经典asr做法。其中涉及到的各种概念和思考,了解了之后,和相关专业的人交流,大概就不再迷茫了:D 传统方法也可以按 声学模型 和 语言学模型 的方式来划分。 声学模型主要的职责是,把一段音频处理成类似拼音的形式, 然后交给语言模型来猜: 能够发这些音的单词,怎么组合起来更常见一些。然后找到最可能的组合,便是asr的结
6881 0
|
API 语音技术
基于Asterisk和TTS/ASR语音识别的配置示例
​ 基于Asterisk和TTS/ASR语音识别的配置示例如下: 1. 安装Asterisk:首先,确保你已在服务器上成功安装Asterisk。可以选择从Asterisk官方网站下载最新版本的安装包并按照指南进行安装。 2. 安装TTS引擎:选择适合你需求的TTS(Text-to-Speech)引擎,如Google Text-to-Speech、Microsoft Azure Cognitive Services等。按照所选TTS引擎的文档和指示进行安装和配置。 3. 配置Asterisk:编辑Asterisk的配置文件,通常是`/etc/asterisk/extensions.conf
语音识别(ASR)基础介绍第二篇——万金油特征MFCC
上一章提到了整个发声与拾音及存储的原理。但是在了解ASR的过程中,发现基本上遇到的资料都避不开MFCC特征。   整个ASR的处理流程大致可以分为下图: 左侧是经典的处理流程,右侧是近期流行的流程。发生的变化是,将语言模型以下的部分变成端到端的了。 我们将语言模型以下的部分统一看成是声学模型就好。  而MFCC主要用在左侧的处理流程中,即“特征处
7328 0
|
JSON Linux 语音技术
FreeSWITCH 语音识别 ASR 模块
最近很多人都对FreeSWITCH和ASR对接比较感谢兴趣,(,考虑到大部分人,只是研究一下,并不准确购买商业模块,特意做一个开源项目给大家提供一个参考。
2790 0
|
机器学习/深度学习 自然语言处理 数据可视化
语音识别(ASR)系列之四:基于Attention的模型
语音识别系列前三篇分别介绍了基本原理、混合模型、端到端模型中的CTC模型和Transducer模型。此篇是系列最后一篇,讲讲基于Attention机制(注意力机制)的端到端模型。
1104 0

热门文章

最新文章