本文主要对基于GMM/HMMs的传统语音识别系统做一个整体介绍。

Outline:

  1. 识别原理
  2. 统计学模型
  3. 系统框架

首先需要说明本文讨论的对象是连续语音识别(Continuous Speech Recognition, CSR),意味着基于DTW(动态时间规整)的孤立词识别(Isolated Word Recognition)不在讨论范围内(out-of-date)。同时,整篇围绕自动语音识别解码过程(识别过程)展开的讨论的。

1.识别原理

首先明白,我们的语音是一种声波,是模拟信号,一般在电脑中保存为wav文件(无压缩格式)或者可以直接通过麦克风采集获得(online)。

python实现基于gmm的说话人识别 gmm-hmm语音识别原理_语音识别

需先进行预处理与数字化操作:滤波降噪、预加重(提升高频)、端点检测、加窗分帧,把我们的一段语音信号分解为很多很多的小段语音片段(语音帧)。一般每帧长度为25ms,相邻两帧有10ms的重叠,也就是常说的帧长25ms,帧移10ms。
然后,我们再对每一帧做信号分析,来进一步压缩数据,也被称作特征提取,常见的特征参数有:MFCC,PLP。经过特征提取后,每帧由原来上百个记录点,压缩为39维的MFCC特征参数。(瞬间轻松了好多)

python实现基于gmm的说话人识别 gmm-hmm语音识别原理_python实现基于gmm的说话人识别_02

接下来,就是怎么把一系列特征参数序列转化为一段话的问题了?也就是声学模型(GMM-HMMs)、语言模型派上用场的时候到了。首先我们要知道一段话是由一串文字序列组成,一个文字由一串音素(phoneme)组成(如bal:/b/ /ɔː/ /l/)。通常在英文中我们选择音素来建立了隐马尔科夫模型(中文建模单元常为声韵母),即一个音素对应一个HMM,同时通常一个HMM由三个状态(state)组成。好的我们再反过来,我们现在手上有一个特征参数序列,识别的过程,就是解决怎么把每个特征参数识别为一个状态,再由状态到音素,音素到单词,单词到单词序列(一段话)?其中特征参数到状态,由GMMs(混合高斯模型)解决;三个状态到一个音素,由HMM解决;音素到单词,由词典解决;单词到单词序列,由语言模型解决。当然,在整个过程中,我们都是在一个状态网络(time-state)中进行的,都是基于HMMs的。这也是为什么说是HMMs解决了语音识别问题。

python实现基于gmm的说话人识别 gmm-hmm语音识别原理_语言模型_03

统计学模型

自动语音识别(Automatic Speech Recognition, ASR)的任务是将一个段声学信号映射为一串文字。(对其建模是我们实际去解决问题的第一步)即

\[W^*=\mathop{argmax}_{W}(P(W|X)) \tag{1} \]

其中\(X=x_{i}^{T}=x_1x_2,\cdots,x_t,\cdots,x_T\)代表一段长度为\(T\)的声学信号(语音帧),\(W=w_{i}^{n}=w_1w_2,\cdots,x_n\)代表一段长度为\(n\)的单词序列(word sequence),\(W^*\)为在所有 中,最有可能的一段单词序列,也就是我们的识别结果了。
然而公式(1)很难直接计算得出(对于generative models)。我们进行Bayes变换:

\[P(W|X)=\frac{P(X|W)P(W)}{P(X)} \\ \quad\quad\quad\quad\propto P(X|W)P(W) \tag{2} \]

\[W^*=\mathop{argmax}_{W} (\underbrace{P(X|W)}_{AM} \underbrace{P(W)}_{LM}) \tag{3} \]

最终得到公式(3),其中 代表了一个声学似然度,包含了字典、语音学和声学知识,通过声学模型计算得到; 表示单词序列的一个先验概率(Occam's Razor),包含了语言学信息,可由语言模型获得。自此,我们知道语音识别问题可以利用声学模型和语言模型来解决。(不过在实际处理中,我们要对公式(3)作进一步细化)

系统架构

一个语音识别系统框架主要包括:声学分析(Signal Analysis)、声学模型(Acoustic Model)、辞典(Lexicon)、语言模型(Language Model)、搜索/解码(Search/Decoding)。原始语音经过信号分析后,结合声学模型、语言模型和辞典, 在搜索空间中找出一个最有可能的单词序列。

python实现基于gmm的说话人识别 gmm-hmm语音识别原理_声学模型_04

声学分析:也称特征提取(Feature Extraction)。
作用:降维,提取有用信息,比如将一段语音帧,解析为一个固定维数(39维)的特征向量。
常用:MFCC(Mel-frequency cepstral Coefficient)、PLP(Perceptual Linear Prediction)。

声学模型
作用:解析声学信号,比如将特征向量解析到一个特征的建模单元上,并获得相应的score,如音素,声韵母等等。
常用:GMM-HMM、hybrid ANN-HMMs、DNN-HMM、RNN-CTC。

辞典:
作用:给单词和发音提供HMM模型(亚词)和语言模型间关联。
通常:基于音素,由专家手工完成,如CMU-dict。

语言模型:
作用:提供这不部分的先验概率,可以区分相同发音时的识别结果,如wreck a nice beach。
常用:n-gram。

搜索/解码:
作用:根据状态系列,在time-state Trellis中找到一个最优路径,或者说根据声学模型输出的结果,结合辞典、语言模型信息,找出最有可能的识别结果。
常用:Viterbi search、Beam search。