Dear junqiang:
Hello.
昨天学习了语音识别的基础知识,早上起床马不停蹄写了BP网络后,把语音识别的相关方法也写出来咯。
自己也在科大讯飞的语音识别组工作过将近2个月,语音识别是个很苦很酷的事情,讯飞的日子很丰富,依稀记得那个价值30万的讯飞听见产品抱在自己手上的“恐怖感觉”和“紧张刺激”。
纪念一下:
讯飞18岁,bingo~
接下来说一下语音识别,从以下几个方向展开(注意只是简单科普,具体写代码左转去Google):
语音识别的基本原理
语音识别基本原理
声学模型
语言模型
语音转写技术路线
基本分类
第三代语音识别框架
口语化和篇章语言模型技术
远场语音识别问题及其解决方案
语音转写后处理
语音转写个性化方案(未来)
我就非常粗暴的简单介绍:
———— 语音识别基本原理 ————
语音识别是门多学科的技术,简单说就是把“语音”转换成“文字”,主要分为ASR(Automatic Speech Recognition)和STT(Speech To Text)两大技术。
语音识别就如同“机器去读谱”
声音采集——>频率——>端点检测——>声学模型——>语音模型
频率:麦克风采集声音经过计算机处理得到“频率”,计算机上直观显示为“频率读谱”;
端点检测:识别频谱中哪些是语音段(有说话),哪些是静寂段(没有说话),即可准确识别出“哪些片段有说话”。
声学模型:即建模,把语音信号与拼音串(提前训练得出)建立联系。即可识别出“pinyin串”。
语音模型:也是建模,把拼音串与文字串建立联系。即可识别出“词串”。
上面说的几种模型如下(不懂具体没关系,大概知道有什么就好,后面具体说):
声音模型(Acoustic Model、AM)
这个是对发出的声音建模;
词W发音时对应生成的特征X向量的概率;
主要的框架有GM-HMM (高斯模糊-隐马尔可夫模型)、 DNN-HMM(深度神经网络-隐马尔可夫模型)
语音模型(Language Model、LM)
连续词串的建模,发音串对应某个词串的概率(累死于你拼音输入法输入拼音,出来一堆候选项);
需灵活的模型对所有可能出现的结果来进行描述;
主要的框架有N-Gram、RNN(递归神经网络)
解码(Decoding)
从声学模型与语音模型建立的庞大解空间向量中产生出概率最大的模型。
解空间:解空间是指齐次线性方程组所有解的集合构成一个向量空间(by百度百科)
下面对这几个模型详细介绍一哈~
声学模型
声学模型就是判断声音读谱的每一帧属于什么音素。
音素:
“声学建模”的大概过程如下,这个过程很简单,具体细节不必理解:
为了解决帧之间组合产生的混乱情况,发展出了各式解决办法 —— 语音识别框架。
第一代语音识别框架
这一代框架是HMM-GMM模型,HMM即隐马尔可夫模型,把“音素”转化到“状态”。这个模型解决这个过程中的概率选择。GMM即高斯混合模型,是整个框架的基础。
HMM-GMM框架分为五层。分别是:原始输入语音层、特征状态序列层、HMM模型层、声韵母序列层、词序列层。
原始输入语音层: 即为原始输入的频谱。
特征状态序列层:通过前面说到的Mel滤波器将频谱转为状态序列S1、S2、Sn
HMM模型层:将音素进行计算,转化为声韵母。
声韵母序列层:由HMM转化而来的声韵母序列的集合。
词序列层:这一系列声韵母转化为特定的词片段。
这是原始的第一代技术,后来逐步发展,又发展出来了第二代语音识别框架。
第二代语音识别框架
这一代的特点是把第一代的GMM替换为了DNN(深度神经网络)。
所有的状态都可以用一个模型来建模,共享一个输出 。由于DNN是分布式部署的,可以同时训练某个音素(比如“a”)及其反例。正反结合使得识别准确率更高。
基于HMM-RNN框架
DNN模型:
RNN模型:(有了中间的反馈)
由于RNN是前一时刻的隐层节点的输出作为当前时刻该隐层的输入,让这个网络有了“记忆的能力”,同时如果采用双向的反馈,也能“预测未来输出”。
由于语音输入是一个时序性很强的数据,所有RNN由于其“记忆”的天然优势,使得能很好地适用于这些语音的声学建模。
后来,当前也有使用CNN结合的框架,这也可以说是第三代技术吧。
第三代语音识别框架
这中模型中,结合了CNN(卷积神经网络),CNN各层所提取特征从局部到整体,降低了学习难度,减少了模型的尺寸大小。因为CNN原是用于图像识别的,有很好地记忆局部以及适应局部偏移的特性。
经过声学建模,频谱就会转变为音素序列集合,然后通过语言模型,就可以转为词序列。
语言模型
语言模型即是将“pinyin”转为“词串序列”。这个语言模型也有几代技术的更新迭代。
N-Gram结构模型
前期使用的是N-Gram策略。基本是通过前一个词的概率,计算后一个词的概率。人的常用语和词是有概率分布的咯,就和常用汉字一样哈。
但是由于N-Gram的建模能力有限,只能“看到”前面的三四个词,而且从来没有出现过的词是无法识别的,由于存在这些问题,故提出了RNN结构来优化。
RNN结构的语言模型
RNN模型能将“历史信息”保存到隐层中去,理论上能保存无限长的历史记录;
输入W(t),当前词是Wi,用V维的0-1向量表示;
输出为y(t)为各个词Wj的概率;
将当前的V维音素向量输入,与先前的S(t-1)向量混合计算,生成当前的V维S(t)词串,并输出y(t)即词串中各个词的概率向量。
声音模型和语言模型都需要大量的数据喂养来建模,在通过解码技术后,方可使用。这也就是大数据下语音翻译技术有了长足进步的一方面原因。
———— 语音转写技术路线 ————
有了上述声学建模和语言建模的基础,我们来说一下最常接触到的“语音转写”。语音转写就是把语音转为文字。
语音转写分为:语音听写和语音转写两大类。
按照学术界的分类方法:
语音听写(Dictation):实时地语音识别
语音转写(Transcription):非实时地语音识别
按照工业界的分类方法:
语音听写:面向人机对话的系统,比如语音输入法
语音转写:面向人人对话的系统,比如会议转写系统,我原先在的“讯飞听见”部门就是这个方向的。
介绍一下当前热门的第三代语音识别框架模型
第三代语音识别框架
这是End-End的系统,即输入语音频谱,最后直接输出文字,无需其他系统的参与,实现了声学模型和语言模型的混合。基于Enc-Dec框架(这是啥?你想知道,我也不懂,还需学习…)
这个模型结合了负向和正向的识别,使得准确率能够大幅提高。
第三代的语音转写技术识别率已经很高,在普通话情况下基本可以识别准确,但当前也存在一些问题。
口语化和篇章语音模型技术
人在说话时,会带入口语化词、回读、重读“嗯啊”等无意义词汇。
可以采用“加噪训练”,即在训练语言模型时就人为刻意地加入这些“noise”进行训练,可以使得最后的口语识别率大大提高。同时由于RNN的记忆优势,也可以采用上下文结合分析的方式,即“篇章语音模型技术”来更加准确地判断。
远场语音识别问题
远场是说我们距离收音的设备距离较远,会产生一系列的噪声问题,如混响、背景噪声、人声干扰、回声等噪声。
混响:
如何解决远场语音识别问题?
工业界如何解决远场问题呢?工业界普遍采用麦克风阵列技术+深度学习 来解决问题。
麦克风阵列:
麦克风阵列 + 深度学习 的解决方式:
在上述的方式后,即可解决语音转写。但即使这个过程的准确率百分百准确,最后的文章的阅读性也是极差的,我们说的话如果一字不差的写出来,无法想象…(震惊)
这时候,口语如何更好地处理 —— 语音转写后处理技术,解决口语 与 用户理解的书面语之间的转换。
语音转写后处理技术
这个技术基本的过程:断句——>文本顺滑、口语规整——>标点——>分段
断句:根据习惯,将字符串分成不同子句。
文本顺滑:去除语义词、重复词、口语化词、无意义词等。
标点:预测标点“, 。 ! ?……”
预测分段:根据前后文语义来分段。
———— 总结 ————
语音转写涉及到了CNN(更好地掌握宏观)、DNN(更好地降噪和处理)、RNN(更好地识别声学模型),是现在神经网络当前热门技术的综合应用,十分好玩。
好,结束,吃饭。
Sincerely
俊强
2017年12月9日 8:19:07
学习内容来自讯飞听见及网络,整理简化得。
本文来自企鹅号 - 全球大搜罗媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - 全球大搜罗媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。