微软Edx课程 Speech Recognition System 1
Introduction
语音处理本身就是一个交叉学科,它涉及到了语音学,计算机科学,信号处理,医学,声学等。
而语音识别其实就是将语音转换为文字的技术,语音合成则是把文字转化成语音的技术。
而对于语音识别的研究,我们需要一些背景知识:语音学和信号处理。
首先我们来介绍语音学的基础知识:
语音学主要有三个子方向。
**发音语音学(Articulatory phonetics)**是研究人类通过声带或者其他不同的发声器官发出语音的过程。顾名思义就是研究人怎么发声的。
声学语音学(Acoustic Phonetics) 它主要关注,说话者(Speaker)到听者(Listener)的语音声音的传输过程研究,主要是对声音的研究,所以叫声学语音学。
**听觉语音学(Auditory Phonetics)**则是关注听者(Listener)对于语音的接受和感知过程。
我们之后探究语音从层次结构,而语音的层次结构会告诉了我们语音是怎么由句子组成;句子又是怎么分解成词;词又能分解为音节(Syllable);最后音节又由语音最基础的单位 音素(Phoneme) 组成。
而我们自底向上进行探究:
Speech 的原子单位(最小区分单位)为音素(phoneme),单个词(word)是由一个或者多个音素组成的,而单个音素在声学的实现被称为phone,也叫音子,因为音素本身不是声音的物理部分,而是它们的认知抽象,而音子是音素的实例(actual utterances),音子算是音素的建模实现或者你可以把音子直接看成speech sound。
有个很有意思的例子:“ madder”和“ matter”这两个词显然是由不同的音素组成的;但是,在美式英语中,两个单词的发音几乎相同,这意味着它们的音子在声学领域是相似的。就等同于他们的speech sound 听起来类似。所以所谓的声学实现可以理解为一种发音方式,这跟说话人的性别、年龄、地域以及外部的声学环境都有关系。
英语语系中有元音和辅音之分,那我们怎么去区分他们呢?
元音有两个重要特征:
首先,它们是浊音(voiced sounds),这意味着其发声是由从声带进入口腔的气流在特定的基频(fundamental frequency)(或音调[Pitch])下经过声带伴随着声带振动产生的。所以浊音有基频或音高,而且是有气流经过声带 ,大家可以试试英语的元音来感受一下声道和声带振动。
第二个特征就是,舌头在元音生产过程中不会以任何方式形成气流的收缩,意思就是他们不会影响气流的流动。
但舌头,嘴唇和下巴的位置不同可以产生不同的元音,这些不同的位置在产生共振峰的声道内形成不同的共振,这就是共振峰,不同的元音有不同共振峰的共振频率。
辅音不一样,辅音的特征是对气流有所阻碍,像元音一样,某些辅音也可以是浊音,但也有辅音是清音。清音音素不会参与声带振动,所以不回造成气流在声带流动,因此没有基频(fundamental frequency)或音调(或者叫音高,pitch)。所以基频的产生一定要有声带参与。
例如,声音/ b /和/ p /具有相同的发音特征(您的嘴,舌头,下巴的位置都相同),但是前者浊音而后者为清音。清音是没有气体通过声带的,因此也就没有周期性的基频或者pitch。 声音/ d /和/ t /是另一组类似的类比对。/ d /是浊音,而/t/是辅音。
这里科普一下基频和音高:
气流通过声带时会引起它规律的开合和振动,从而产生周期的信号,这个周期对应的频率就是基频(F0),也就是音高,而声音得经过很多发声器官才能发出来产生声音,其实就是基频的声音在从声带到口腔再到发出来的过程经过了一系列处理,所以周期有变化。
如何区别清音和浊音,最好的方式就看你的声带是否有送气。
浊音:有基频或音高,而且是有气流经过声带
清音:没有基频或音高,没有气流经过声带
音素的一个重要特性是它的具体发音会受到它周围的音素的影响,这种现象叫做协同发音(coarticulation)。影响一个音素的周围音素叫做它的语音上下文(phonetic context)。连续的音素由于协同发音的影响会改变其原始的发音。一个音素由于协同发音产生的不同发音叫做allophone。
所有SOTA(State of the Arts)的语音识别系统都会在建模一个音素时考虑它的语音上下文。
音节(Syllables)和词
一个音节是一个声音的序列,由一个核心(nucleus)的phone和可选的初始和结束phone组成。核心phone一般是元音或者能当主音的辅音,它是浊音并且可以是喊叫或者被歌唱的。其实就大家能听见的对词的发音和音调产生影响的音子部分。
比如,”bottle”包含两个音节。第一个音节有3个phone,用Arpabet phonetic transcription code表示为”b aa t”。其中”aa”是核心phone,”b”是浊辅音作为音节的初始phone,而”t”是清辅音作为结束的phone。第二个音节是可以当主音的辅音”l”。
一个词有一个或者多个音节组成,“Eye”、“uh”和“eau”都是一个音节的词。
在语音识别里,我们很少考虑音节。通常我们建模是认为词是由音素序列组成。基本直接忽略音节的影响。
句法Syntax和语义 Semantics
句法描述一个句子怎么由词组成以及规定它们的语法结构。句法分析的过程一般就是检查语法结构是否合法。语义是指句子的词和短语的意义。句法和语义都是自然语言处理(NLP)的研究内容,通常语音识别系统不考虑它们。
接下来就是核心了,
语音识别系统的表现的核心评价机制
WER(Word Error Rate),中文翻译叫词错误率。在AI这种实验学科,我们总需要一个指标来衡量模型的好坏,词错误率就是这样一个指标,WER越低表示效果越好!它基于编辑距离(Edit Distance)的算法,什么是编辑距离?(待编辑)
语音系统会发生三种类型的错误:替换(识别之后其中一个单词被错误地识别为另一个单词),删除(其中当参考转录到假设时,就是在识别的过程中有个词没有识别出来,为空)以及插入(假设的单词,也就是识别之后的单词位置插入多余单词)公式如下:
以上三个N 分别是产生替换substitutions、插入insertions和删除deletions等错误的词数,而分母则是正确的单词总数,很多读者肯定会误认为分母Nref 是识别结果总字数。其实不然,Nref 等同于正确的文本总字数,即标准的词序列中词的总个数。
接下来是例子环节:以英语为例。
计算的WER = 4/9
目前的WER行业水平
英语-WER:
o IBM:行业标准Switchboard语音识别任务,2016年 6.9%,2017年 5.5%
o 微软:行业标准Switchboard语音识别任务,2016年 6.3% -> 5.9%,2017年 5.1%,这个目前最低的。
说明:ICASSP2017上IBM说人类速记员WER是5.1%,一般认为5.9% 的字错率是人类速记员的水平。
中文-WER/CER:
o 小米:2018年 小米电视 2.81%
o 百度:2016年 短语识别 3.7%
接下来我们介绍语音识别的基本公式:
语音识别始终逃不过统计学的优化问题,输入的观察值序列
Observations:
而我们需要识别出最可能的词序列W:
也就是寻找使得概率P(W|O)最大的词序列,其实就是找P(W|O)的最大似然估计
通过贝叶斯公式,得到:
因为观察序列的概率P(O)是固定的,它与词序列是无关的
所以变成
语音识别系统中的模型
声学模型(Acoustic Model),就是P(O|W), 它是一个分类器,给它一些声音片段,它会预测最可能的音素序列。比较常用的声学模型有HMM等。GMM-HMM基本制霸了2010年之前的语音世界。
语言模型(Language Model),就是 P(W), 它研究词之间的组合关系,哪些词的序列更可能出现, 语言模型使得语音识别搜索的时候更倾向于”更可能”的句子。这两个模型结合起来就得到所谓的语音识别基本等式。比较常用的语言模型有N-gram。
而简单的语音识别模型如下:
从S到O 的过程中,我们进行了语音分析,其实就是信号处理阶段,我们用到了MFCC来进行Feature Extraction也就是特征提取,特征提取是人工智能的核心,如果没有提取好特征,之后的过程基本白给。就像NLP问题的核心是Information Extraction一样,语音识别也是同样的道理。
一般在语音识别过程中,我们用MFCC(一般是提取39维 MFCC+LOG:13,DELTA:13,DELTA-DELTA:13或者40维的特征)而到了Decoder 解码阶段,我们用到了WFST解码器,这个有点复杂,解码的过程是基于维特比(Viterbi)算法, 解码器的作用是得到输入的语音的最优结果,即文本。
在某些孤立词识别中我们用到的语言模型一般会是基于grammar的,而在句子识别中,我们有可能用到N-gram,因为N-gram是可以基于上下文的语言模型。
其实在语音处理和语音识别过程中的处理,分别对语音信号本身,和模型进行处理,都能够提高识别的准确度。
以上细节问题都会在之后的笔记中介绍。
https://www.edx.org/course/speech-recognition-systems-2