杨 博,何振华,冯立恒,郭 星,毛疆华
(1. 中国铁路北京局集团有限公司 调度所,北京 100036;2. 郑州信大先进技术研究院,郑州 450000;3. 河南信大煜坤智能科技有限公司,郑州 450000)
调度所是铁路日常运输组织的指挥中枢,调度员口头指示非常严肃,直接关系到运输生产效率与调度指挥安全,因此调度用语的标准化执行与检查工作尤为重要。日常调度录音数据量庞大,对调度员的语音检查只能通过录音回放、人耳分辨形式进行抽样检查,关键信息不能高效定位,无法满足对全量调度语音进行快捷有效检查分析的需求。
针对上述情况,通过关键词识别可实现对调度语音结果自动分析,智能快速查找关键信息,自动定位不规范用语、非正常情况的关键词,并将结果直接反馈给相关人员,提升语音检查效率,提高非正常情况处置速度,辅助调度语音标准化和应急处置管理工作。
关键词识别是一种从连续的音频流中检测出特定关键词的语音技术[1]。过去40多年中,出现过许多技术用来解决关键词识别任务,主要可以划分为3类:基于模板的关键词识别技术、基于关键词-废料模型(Keyword-Filler Model)的关键词识别技术[2]和基于大词汇量连续语音识别的关键词识别技术[3]。
(1)基于模板的关键词识别是利用特定关键词的已知语音片段,去匹配待检测语音中的语音片段,是最早被用到关键词识别任务的技术之一。如果待检测语音片段中存在与模板相似的片段,则认为此语音片段中包含关键词。其主要分为2步,分别是模板生成和模板匹配。模板生成是将关键词语音片段转换成代表关键词特征的模板的过程,常见的模板有原始语音片段、从原始语音片段提取出的梅尔频率倒谱系数(MFCC,Mel-Frequency Cepstral Coefficient)和原始语音片段经过神经网络得到的后验概率等。模板匹配则是利用第1步生成的模板到待检测音频中进行匹配,找到关键词的过程,主要使用基于动态时间规整的方法。
(2)基于关键词-废料模型的关键词识别是对关键词和废料进行建模,废料是指不包含关键词的其他语音片段,将待检测语音片段输入系统进行识别,对齐到关键词或废料模型上判断是否包含关键词。关键词和废料模型通常使用隐马尔可夫模型(HMM,Hidden Markov Models)建模。这种方法模型简单、参数量少、计算资源耗费低,多用于对实时性要求比较高的智能终端设备中。这种方法由于需要事先对关键词进行建模,用于检测预定义的关键词,如需增加额外关键词,则需要对新增关键词及系统识别模型重新进行建模训练。
(3)基于大词汇量连续语音识别的关键词识别技术是先通过语音识别系统将待检测语音数据转写为文本数据,利用文本数据生成用来搜索关键词的倒排索引,并直接从倒排索引中搜索文本关键词。在实践中,经常会利用语音识别系统产生的词格,将语音识别备选词也列入到搜索范围中以提高准确率。由于大量词汇连续语音识别只能将语音数据转换成词汇表中事先定义好的词汇,所以在搜索集外词、关键词时也会应用一些特殊的技巧,如模糊搜索、子词系统等。这种方法常用于检测非预定义的关键词,其检测的目标通常为数据量较大的音频,部署在计算资源和存储空间都比较充足的设备上面,如PC、服务器或云计算平台等。
目前,关键词识别技术有2类主流的应用,语音检索和语音唤醒。
(1)语音检索的主要任务是从海量的语音数据库中找到感兴趣的关键词,并返回相应的位置。语音检索可被应用到音视频内容的搜索上。
(2)语音唤醒的主要任务是实时地从音频数据流中检测出事先定义好的关键词,被广泛地应用于语音助手中,如各个品牌手机的语音助手及智能音箱设备都使用了语音唤醒技术,检测各自设备的唤醒词。由于语音唤醒技术运行在设备端上,并需能实时地从语音数据流中检测出关键词,因此对算法的计算复杂度和实时率都有较高的要求。
本文讨论的应用场景不限于铁路调度语音监督应用场景,同时希望将关键词识别技术应用于特定环境下的专业词汇检测,以此规范工作流程。
目前,大量词汇连续语音识别针对方言的识别效果一般,如果重新训练针对方言的连续语音识别模型,则需大量语音数据,这就需要长时间且大量的数据标注工作,在短时间内完成的可能性比较小。且此种特定专业方向的识别内容中包含大量专业词汇,这些专业词汇不会存在于一般场景所训练的连续语音识别系统的词汇表中,这也给基于连续语音识别的关键词识别带来了难度。此外,基于连续语音识别的关键词检测在实际部署过程中会需要较高的计算成本,对实时率要求也很难满足。
由于在需求场景的工作流程中,所需要检测的关键词相对比较固定,因此,我们拟采用基于关键词-废料模型的关键词识别技术,利用一种端到端[4]的训练方法完成这种场景下的关键词识别任务。在语料标注过程中只需标注出关键词,节省了标注所需的人力成本和时间成本。这套方法可识别的关键词比较固定,如果想后期添加关键词则需要重新建模,不过对于需求场景产生的影响较小。另外,这种方法也易于在移动终端平台部署且能满足实时率要求。
本文所使用的基于关键词-废料模型的识别系统由特征提取、声学模型、语言模型及解码器模块组成,如图1所示。
(1)特征提取模块是针对输入的音频信号序列进行声学特征提取,所提取的声学特征为MFCC。提取过程包括预处理、快速傅里叶变换、梅尔滤波器组、对数运算、离散余弦变换和动态特征提取等步骤。
(2)声学模型部分表示单词音素状态对应到语音序列声学特征的概率,即描述了“什么词发什么音”的问题。声学模型是语音识别系统的重要组成部分,它占据着语音识别大部分的计算开销,决定着语音识别系统的性能。
(3)语言模型是针对识别语言进行建模,描述单词序列出现的概率。对于关键词识别任务,它的语言模型相对比较简单,一般可分为2个部分,关键词模型,对应的也就是指定的关键词在解码图中的路径;废料模型,对应的也就是其他非唤醒词,包括静音、噪音和其他非唤醒词语音的路径。
(4)解码器的主要任务是对输入的语音信号进行解码,即依据声学得分、语言得分和词典,寻找该输入信号最有可能对应的文字序列。
在本文中,我们使用的关键词识别框架参照文献[5]进行搭建。其中,识别模型采用了非词格依赖的最大互信息(LF-MMI,Lattice Free Maximum Mutual Information )的训练准则,LF-MMI训练准则最初是针对连续语音识别任务提出的。在训练过程中,不再单独训练独立的声学模型和语言模型,而是将它们作为识别模型的部件进行整体优化。模型训练不再依赖高斯混合模型 (GMM,Gaussian Mixture Model)-HMM模型生成对齐信息,无需对训练语料进行解码生成词网格,直接进行识别模型训练,简化了训练流程。为了使其适用于我们的任务,出于效率和性能的原因,对隐马尔可夫拓扑、声学模型网络结构进行了一些必要的调整和更改,还使用了快速在线解码器。这些将在后续小节中进行详细介绍。
基于关键词-废料模型的关键词识别利用HMM为关键词进行建模。为了实现关键词识别,需要为每个关键词创建HMM,并且额外创建一个HMM表示废料模型。通常情况下,表示关键词的HMM来自组成关键词的有效音素序列,即关键词的每个音素对应一个HMM的转移状态。
本文所采用的HMM模型是使用单个HMM针对整个关键词进行建模,即词级别的HMM,该HMM 中不同状态的数量是一个预定义的值,其状态数量小于实际音素的数量。对于关键词识别任务,使用固定数量的HMM状态已具备足够的建模能力。类似的,针对废料模型也采用了相同的HMM拓扑结构。
此外,使用一个额外的HMM专用于非语音声音,即表示为SIL的非人声片段,对于性能的改善也起到了至关重要的作用。SIL作为可选的静音状态添加到每个关键词或废料模型的开头和结尾,以便能够正确的对实际的静音片段建模。HMM转移状态拓扑图,如图2所示。
图2 HMM状态拓扑
图2(a)表示了关键词和废料模型的HMM状态拓扑结构,图2(b)则用来表示静音段的拓扑结构。2种结构中分别具有4个和1个HMM发射状态,最后的状态将不再进行转移。这样的结构可以减少HMM状态的数量,可以有效提升解码速率。
声学模型采用了带有跳跃连接机制的因子分解时延神经网络[6](TDNN-F,Factorized TDNN)进行建模。在TDNN-F网络中,将TDNN的参数矩阵M通过奇异值分解(SVD)分解为2个小矩阵相乘的形式M=A×B,从而有效减少了层参数量,以便在整体参数量相近的情况下,更好的利用网络深度的优势。此外,为了避免因为随机初始化参数导致的训练发散,在TDNN-F更新层参数的时候,使得其中一个因子矩阵B保持为半正定矩阵,控制层参数变化速度,使训练稳定。
TDNN-F网络引入的跳跃连接机制是指每个TDNN-F层会接收神经网络之前层的参数输出,将输出结果按一定比例缩小后再加到当前层的输入中,在本文中将其缩小至原来的0.66。跳跃连接的引入能够保证信息向深层流入,有助于缓解梯度消失的问题。
本文使用的深度神经网络结构中,网路层数为20层,隐藏层参数维度为80,每个输出帧覆盖大小范围为 80。每3帧会评估一次输出的 LF-MMI 损失,以减少训练中的计算成本和测试时间。
针对关键词识别任务的解码方法是使用在线维特比解码[7],它以令牌传递的方法表示推测过程。具体的解码过程是先用一个词级别的有限状态转录机(FST,Finite-State Transducer)构建解码图,指定所有可能出现词路径的先验概率,解码图中开始状态和最终状态会合并形成一个环,可针对关键词和其他可能的语音相交叉的音频进行解码识别。
在线解码期间,每次处理完一段录音中的固定长度块之后,可沿着由2个最近的初始令牌分割的帧检测是否在该部分中存在关键词,如果找到则向系统报告,否则就继续解码过程。简单来说,如果所有当前推测都来自于前面步骤中相同的令牌,则该令牌之前的所有推测都可以通过修剪和标记重组折叠为一个,从中可逐段检查它是否包含关键词。
本文将以目标任务场景下采集到的语音数据训练此关键词识别模型,并测试该模型的识别效果。
本文所使用的数据集为应用环境下采集的真实语音,其与常见的开源数据集不同。采集到的录音则掺杂有大量的背景噪音,且噪音的类型各不相同。所以在初期数据量没有积累到一定程度的时候,识别效果不如实验室开源数据集结果。当然,这也是本文的任务之一,就是探究真实应用场景需要至少积累到多少数据量,才会获得一个可作为工业应用的关键词识别模型。
目前,采集并标注完成的数据量十分有限,标注关键词总数量有35个,针对同一关键词出现的频次最多的也只有3000余条,人声时长总计逾40 h,因此,实验会对采集到的数据集作数据增强处理。由于数据集中已包含了各类噪声,主要有机车运行时加速或者刹车产生的噪音,检测时钢铁碰撞声以及户外的风噪,所以数据扩增的主要方式为音量调整和音速调整。
实验中用于模型训练和测试的设备是由一台工作站来完成的。
实验基于当前较为流行的开源语音识别工具箱Kaldi[8],Kaldi的底层应用程序由C++实现,上层调用则主要是由shell脚本来实现的。本文采用nnet3作为训练工具,它是基于计算图的神经网络,通过定义相关的配置文件,可方便地实现各种深度神经网络,也可进行基于LF-MMI准则的训练。
(1)数据准备
利用 Kaldi 做语音识别,数据准备一般包括数据集相关文件制作、词典准备和语言模型的构建等。语音数据集的相关文件准备,包括wav.scp、text、utt2spk和spk2utt等,这些都是和音频文件存放位置、标注及语音和说话人信息对应的相关文件,一般按照Kaldi要求的格式来做即可。对于关键词性能参数的测试,需构建前文所介绍的解码网络,这当中所包含的语言模型实际上是一个关键词构成的1-gram语言模型。
(2)特征提取
本文按第2节中介绍的特征提取方法对语音数据进行处理,为后续的链式模型训练提供数据特征。对与神经网络相关的声学模型训练,本文采用 13 维的MFCC特征。
(3)数据扩增
针对原始数据做数据扩增。实验中会对原始数据做音量和音速调整处理,分别将数据的音量调整到原始音量的0.125~2倍之间,音速调整到0.9、1、1.1倍速,以此扩充数据量。
(4)声学模型训练
实验核心的部分是关于神经网络的训练,基于LF-MMI准则,在训练开始前,仍需做一些准备工作,主要包括:HMM拓扑修改,决策树重建及分子词图和分母词图的构建等。需要注意的是,实验中为了尽量减少参数量,在决策树重建时,限定其最终的叶子节点数不超过1000,这样可显著降低神经网络最后一层的参数数目。完成这些工作后,可配置神经网络,并在LF-MMI准则下进行训练。
(5)解码测试
完成声学模型的训练后,结合(1)中建立的语言模型生成对应的解码图,对测试集进行解码测试及实时因子的测量。其中,实时因子是在服务器集群中的同一个计算节点上进行测量的,对上述测试集的随机抽样数据进行多次解码并计算平均的实时因子作为最终的测试结果。
在对关键词识别进行评测时,不同的使用场景有不同的评价指标,本文使用较为常见的召回率(Recall Rate)和误识率(False Alarm Rate)作为性能评价指标, 召回率Precall和 误识率PFA公式为
其中,TP为关键词样本被正确检测为关键词的个数;
FP为非关键词样本被错误检测为关键词的个数;
TN为关键词样本被错误检测为非关键词的个数;
FN为非关键词样本被正确检测为非关键词的个数。
不同阈值下不同关键词的识别测试结果,如表1、表2所示。
表1 关键词1的测试结果
表2 关键词2的测试结果
根据测试结果,目前在训练集正样本数,即关键词数量有限的情况下,测试结果均能达到预期。通过调整关键词识别阈值,将误识率控制在较低的情况下,可达到一定的关键词识别率。在本文实验中,仅使用了3000条样本数量就能达到如表1、表2所示的结果,说明此关键词识别模型在语料充足的情况下能够满足识别要求。
本文对铁路调度指挥调度作业指令关键词识别系统进行了研究,验证了针对真实应用环境下采集到的训练数据应用到此关键词识别系统的可行性。本文所述的关键词识别系统模型结构简单,参数量小,且对计算平台要求不高,适合在铁路调度作业环境下部署。在后续工作中,将进一步采集和标注相应环境下的关键词 ,在积累到一定样本数量后,对此关键词系统进行优化,提高系统的召回率并降低误识率。另外,在增加不同关键词之后,语言模型也会进行相应的调整。