雷锋网按:本文作者潘复平,地平线机器人语音识别算法工程师。博士毕业于中国科学院声学研究所,曾任声学所副研究员、百度语音技术部资深工程师等职位。在中科院工作期间曾领导完成多个"863"、教育部和中科院的科研项目。在百度工作期间把解码器的搜索空间大小压缩到了原来的十分之一,解码速度提高了约30%,并在置信度、VAD等方面大幅提高了系统性能。现任地平线机器人语音识别算法工程师,深度参与地平线“安徒生”智能家居平台的研发。
语音识别技术,也被称为自动语音识别(Automatic Speech Recognition,ASR),其目标是将人类语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。与说话人识别及说话人确认不同,后者尝试识别或确认发出语音的说话人而非其中所包含的词汇内容。
智能硬件行业的不断发展,对计算机深度学习能力提出了更大的挑战。为了满足人工智能技术快速产品化的诉求,进一步提升用户体验,未来的智能终端必须具备出色的与人交流、沟通的能力。人工智能产品这种交互功能的实现是与语音解码器技术密切相关的。本期“大牛讲堂”主讲潘复平博士将为我们科普高大上的“语音识别专题”之语音解码技术。
基本原理
当前主流的语音识别系统多基于统计理论的贝叶斯准则。其典型框架一般包含前端处理、声学模型、语言模型、解码器和后处理等五个基本模块。解码器模块主要完成的工作包括:给定输入特征序列的情况下,在由声学模型、声学上下文、发音词典和语言模型等四种知识源组成的搜索空间(Search Space)中,通过维特比(Viterbi)搜索,寻找最佳词串,使得满足:
(1.1)
通过贝叶斯公式,公式(1.1)可以改写为:
(1.2)
其中,分母项与无关,被省略。除了上述最优路径,如果在Viterbi搜索中还保留了次优路径,则解码器可同时产生包含多候选识别结果的词图。
引入隐马尔可夫模型和N元文法语言模型,公式(1.2)可表示为:
(1.3)
其中为单词的状态转移序列,为状态转移概率。
公式(1.3)中,已经引入了Viterbi最大近似假设,这个假设会带来一定的精度损失,但是其运算量却大大降低。在解码过程中,各种解码器的具体实现可以是不同的。按搜索空间的构成方式来分,有动态编译和静态编译两种方式。关于静态编译,是把所有知识源统一编译在一个状态网络中,在解码过程中,根据节点间的转移权重获得概率信息。
由AT&T提出的Weighted Finite State Transducer(WFST)方法是一种有效编译搜索空间并消除冗余信息的方法。就动态编译而言,只是预先将发音词典编译成状态网络构成搜索空间,其他知识源在解码过程中根据活跃路径上携带的历史信息动态集成。
按搜索算法的时间模式来分,有异步与同步两种方式。时间异步的搜索算法通过栈解码器(Stack Decoder)来实现。时间同步的方法就是常说的Viterbi解码。基于树拷贝的帧同步解码器是目前比较流行的方法。下面将针对搜索空间的两种构成方式与帧同步解码算法作进一步详细介绍。
动态解码网络
动态解码网络仅仅把词典编译为状态网络,构成搜索空间。编译的一般流程为:首先把词典中的所有单词并联构成并联网络;然后把单词替换为音素串;接着把每个音素根据上下文拆分为状态序列;最后把状态网络的首尾根据音素上下文一致的原则进行连接,构成回环。这样编译出来的网络一般称为线性词典(Linear Lexicon)(如图2-1),它的特点是每个单词的状态序列保持严格独立,不同单词的状态之间没有节点共享,因此内存占用比较大,解码过程中的重复计算比较多。
为了克服这些缺点,一般把单词首尾发音相同的部分进行合并,称为树型词典(Tree Lexicon)(如图2-2)。由于大量相同状态的节点被合并在一起,因此可以显著降低搜索空间的规模,减少解码过程的运算量。
图2-1 线性词典示例
图2-2 树形词典示例
基于树拷贝的动态规划搜索算法
在树形词典构成的搜索空间中进行动态解码,如果使用N-Gram语言模型,当前词的ID只有在搜索到达树的叶子节点时才能知道。这样,语言模型的概率只有在达到N-Gram中第N个单词的结束状态后才能集成。为了能够应用动态规划准则,常用的做法是采用“树拷贝”(Tree Copy)的方式来组织搜索空间:对于每个前驱词历史,我们引入词典树的一份拷贝,这样在搜索的过程中,当单词结束的假设出现时,我们总能够知道它的前驱词历史。为了方便描述,下面以Bi-Gram语言模型为例介绍解码搜索算法。
基于树拷贝的解码搜索需要用到动态规划(Dynamic Programming,DP)算法。动态规划的主要意图是把一个全局最优问题的求解分解为小的局部问题并且形成递归联系。
下面首先引入两个变量的定义:
•表示时刻t到达前驱词为v的词典树状态s的最佳部分路径得分。
•表示时刻t到达前驱词为v的词典树状态s的最佳部分路径起始时间。
这两个变量的计算可以采用如下的迭代公式:
(3-1)&(3-2)
这里表示前驱词为v时假设(t, s)的最佳前驱状态。后向指针只是简单的根据动态规划的决策进行传播。
在词的边界,我们需要为每个单词w找到它的最佳前驱词v。为此我们定义:
(3-3)
这里表示词典树中单词w的结束状态。为了能够向下一个单词传播路径假设,我们需要在处理时刻t的数据帧前传递分数和时间索引:
(3-4)&(3-5)
算法的流程见表3-1。从表中可以看出,DP递归包含两个层次:
声学层,主要是处理词内部一些假设的重新组合;
词对层,处理Bigram语言模型的使用。
该搜索过程是一个时间同步宽度有限的搜索策略。为了降低存储量的需要,可以引入一个回溯数组用于记录在每一个时间帧的词边界(v, w)和它们的开始时间。在句子的结束处,通过对回溯数组的一些查找操作可以很轻松地获得识别出来的单词序列。
束剪枝
对于大词表连续语音识别中的完全DP搜索,在每个时间帧,DP递归程序面临巨大数目的HMM状态。如果采用一定的剪枝策略,则可以把计算量降低,同时保证识别率基本不下降。常用的剪枝操作主要从如下三个方面进行:
- 全局累计概率剪枝
根据搜索空间中所有活跃路径累计概率的最大值,设定一个门限,把累计概率小于该门限的那些路径裁剪掉。
- 语言模型剪枝
当活跃路径到达单词末尾后,可以取得单词ID,同时在累计概率中加入语言模型得分。由于语言模型概率的加入,增大了不同路径间的概率区分性,因此可以把到达词尾的路径归集在一起,根据累计概率最大值设置门限,把累计概率小于门限的那些路径裁剪掉。
- 直方图剪枝
这种剪枝方法是绘制活跃路径累计概率的直方图分布,然后根据事先设定的最大允许活跃路径数量上限,算出合适的累计概率门限,把小于门限的活跃路径裁剪掉,以避免路径数量的爆炸性增长。
静态解码网络
大词表连续语音识别所常用的四类模型:HMM、跨词三音子模型、词典以及语言模型,实际上是在不同粒度上描述了可能的搜索空间:
1、HMM 模型定义了每个三音子所对应的HMM状态序列。语音识别时,通过对每一帧所对应的状态进行假设,可以在HMM的状态序列上进行搜索,从而产生可能的三音子序列;
2、跨词三音子模型定义了从三音子到音素的对应关系。根据HMM模型产生的三音子序列,可以得到可能的音素序列;
3、词典定义了音素序列所表示的词。根据跨词三音子模型产生的可能的音素序列,可以得到相应的词序列;
4、语言模型定义了词序列出现的概率。根据词典产生的词序列,可以得到该序列的概率得分;
上述过程是非常复杂的,系统需要同时考虑4类模型以及模型之间的约束关系,以完成“从可能的状态序列到可能的词序列之间的转换”。
20世纪90年代末期,美国电话电报公司(AT&T)的Mohri率先提出了以加权有限状态转换器(Weighted Finite-state Transducer: WFST)对语音识别过程中所使用的各种模型进行描述。此后,相关的研究纷纷出现。与传统动态网络解码相比,基于WFST的识别系统在识别之前利用上述模型产生语音识别用的静态解码网络,这个网络包含了所有可能的搜索空间。
在此基础上进行语音识别时,系统只需要将这个识别网络(WFST网络)读入内存,然后基于声学模型就可以在这个网络上完成解码,不需要像原有系统那样同时考虑声学模型、词典、语言模型等。这样简化了语音识别系统的设计与实现。实验表明,用WFST构建的语音识别系统具有识别速度快,识别效果好的特性。
所谓静态网络就是根据已知的模型,将它们代表的搜索空间进行组合,从而得到一个统一的识别网络:从输入HMM状态序列,直接得到词序列及其相关得分。基于WFST构建静态解码网络是一个相对复杂的过程。构建网络的第一步是将上述四类模型转换成WFST表示。然后再依次进行WFST网络的合并和压缩,从而得到完整的语音识别静态搜索空间。
我们用H、C、L、G分别表示上述HMM模型、三音子模型、字典和语言模型的WFST形式。不难看出,这四个模型在语音识别中相当于4个串联的子系统。每一个子系统的输出是下一个子系统的输入。使用WFST的合成操作可以实现将上述串联系统组合成一个 WFST。使用HMM的状态序列作为这个 WFST的输入时,系统将直接输出词序列以及相应的得分。
但是,直接求空间复杂度较高,合成的结果占用内存非常之大。为了在有限的内存中完成解码网络的构建,需要对信息逐步引入,并在每一步引入信息之后进行优化,为下一步引入信息做准备。同时,建立好静态解码网络后,还需要进一步的优化,使得网络能够有较小的体积。基于上述思想,一般网络构建的流程为:
(5.1)
其中的det表示确定化算法;min表示最小化算法;为 ε-Removal 算法。式(5-1) 在逐步引入信息的同时采用确定化算法对网络结构进行优化。而在将所有信息引入后,需要采用WFST的最小化算法以及ε-Removal算法完成进一步的优化,使得形成的识别网络较小。
基于静态解码网络的搜索算法与基于动态网络的动态规划搜索算法类似,也是采用了迭代计算,让概率信息在网络节点间传递更新。不同之处在于,由于静态网络已经把搜索空间全部展开,所以它不需要根据解码路径的前驱词构造搜索空间副本,也不需要在词尾节点根据历史信息查询语言模型概率,它只需要根据节点间的转移权重计算声学概率和累计概率即可,因此解码速度非常快。
雷锋网(公众号:雷锋网)注:本文由大牛讲堂授权雷锋网发布,如需转载请联系原作者,并注明作者和出处,不得删减内容。有兴趣可以关注公号地平线机器人技术,了解最新消息。
本文作者:大牛讲堂
本文转自雷锋网禁止二次转载,原文链接