基于word2vec的语音识别后文本纠错
2020-11-17张佳宁严冬梅
张佳宁,严冬梅,王 勇
(天津财经大学 理工学院,天津 300222)
0 引 言
随着在线会议、慕课及自媒体视频等的兴起,离线长音频生成字幕的需求呈现爆炸式增长,传统的以人为主的技术已经不能满足需求,将语音识别技术(automatic speech recognition,ASR)运用于字幕制作是大势所趋。然而实际应用中,由于环境噪音、语音质量、方言和说话方式以及ASR系统词汇量等多因素的影响,会不可避免地导致ASR的错误[1]。
许多研究人员为降低语音识别错误率做了大量研究。Graves A[2]通过增加词与词之间的停顿提高正确率;Fujiwara K[3]通过提出一种更适于人发音的语音字母表改进了语音输入;Che J等通过分析语音识别错误的案例,提出一种特有的基于汉语语音、语言特征的文本校正和意图识别方法[4]。但这些研究[2-4]都聚焦在短句实时识别,与长音频的ASR结果有很大不同。
Ogawa A等[5,6]提出一种使用深度双向回归神经网络进行ASR误差检测和识别率估计的方法;Rahhal Errattahi等[7]利用变量神经网络(V-RNN)模型进行错误检测和错误类型分类。但这些研究[5-7]都是针对分类任务的,用有限的规则去约束复杂多变的语言显然不合理。
Geonwoo Park等[8]提出一种用于常规ASR系统的拼写错误校正后处理模型,但由于误识别词的候选集仅由语音识别产生的备选词构成,导致该方法严重依赖ASR的识别结果。
针对上述研究中存在的问题,本文提出一种基于word2vec的纠错方法,即利用word2vec建立语义和语境词典,使用百度公开的深度语言模型,解决语音识别后得到的文本与原始音频不符的问题。
1 基于word2vec的语音识别后文本纠错
1.1 基于word2vec的语义相似度
计算机在处理词语时会用一种数学化的形式表示词语,称为词语的向量化。word2vec与独热编码(One-Hot Encoder)的目的都是把词映射到n维空间。但不同于One-Hot Encoder,为了防止因为数据稀疏带来的维数灾难问题,word2vec将词转化成了稠密向量。
word2vec由Tomas Mikolov等提出[9,10],它是在神经网络语言模型(neural network language model,NNLM)基础上建立的。word2vec用Huffman树作为最后一层输出层,仅考虑“局部上下文”来学习有意义的词向量。
词在转化为向量时,意思相近的词会被映射到空间中相近的位置。word2vec根据这一特性,使用夹角余弦[11]来反映词语间的关联程度。夹角余弦的计算方法如式(1)所示,空间中的两个词的语义越相似,它们的夹角余弦值也就越接近于1
(1)
式中:W1,W2为词向量,W1i,W2i分别表示W1,W2的各分量。
在语义上越接近的词,出现在同一语境的可能性越大,因此本文在进行语境检测时使用了基于word2vec的语义相似度计算方法。
1.2 语境关键词的提取
情景语境指说话人说话当时当地所处的环境。无论在何种环境中,某一时刻的说话内容总是围绕一个特定主题展开的,本文称之为语境核心词(简称核心词)。如“指针”是C语言的代表,若再提到“继承”、“友元”、“类”就会联想到C++语言。关键词是指在特定语境含有特定意义的词,范围大于核心词。
考虑到算法的扩展性、用户友好性,本文参考李跃鹏等[12]的方法,使用预训练好的word2vec模型结合少量语境核心词构建关键词集。
语义相似度表明了词与词在语义上的相关程度,与核心词在语义上距离比较近的词,也是对于整个语境比较重要的词。因此,关键词集由与核心词语义相似度相近的词组成。具体计算方法如式(2)和式(3)
(2)
n_c表示cores中词的总数,corei表示核心词集cores中的第i个核心词,wordj表示语料库中第j个词,tmp_KeyScorej表示wordj与核心词集cores语义相似度的均值
retention_factorsj=tmp_KeyScorej-β
(3)
retention_factorsj表示wordj的保留因子;β是一个可调阈值参数,它限制着retention_factorsj。当β值比较大时,retention_factorsj相应就比较小,所对应的wordj被保留在关键词集的概率也就比较小;反之,则wordj被保留在关键词集的概率就比较大。
求得词集后,对词集tmp_keys进行排序,并将结果保存到最终的关键词词集keyword_set。关键词词集keyword_set可以分成两部分,第一部分由出现在当前语境的词组成,第二部分由未出现在当前语境的词组成。第一部分按照对纠错的贡献性又可以划分成两组,第一组为对纠错有贡献的,第二组为对纠错没有贡献的。关键词词集keyword_set中最后真正有用的,只有第一部分中的第一组中所含的词。在每次查找时,如果不对关键词词集keyword_set加以约束,词集中所有词就都会被遍历。这不仅没有提高纠错正确率,还产生了较高时间代价。为了提高查询关键词集的效率,参考Salihefendic A等[13]的方法,本文对关键词进行了排名,在纠错时对keyword_set中的词投票,具体计算方法如式(4)和式(5)
(4)
其中,wi表示待修改文本中第i个词,w_pyi表示wi的拼音,keyword_seti表示keyword_set中与w_pyi对应的词,xi表示待修改文本中第i个词的拼音的贡献度
(5)
其中,word_frei表示keyword_set中的第i个词wordi的词频;α1、α2是可调的参数,表示随着连续语音的识别,word_frei随着时间的变化。
更新keyword_set中词的词频后,对keyword_set中词进行约束,规定将小于某一阈值的词停用。
1.3 最终混淆集的生成
1.3.1 深度语言模型
语言模型描述的是在语言学中词与词在数学上的关系,它在文本纠错中起着至关重要的作用。在过去的自然语言处理中,N-Gram模型因其简单、易用、有效的特点,一直发挥着重要的作用[14]。但是随着N元文法的增加,模型参数会变得很大,对于长距离的语境信息不能很好地利用。此外,数据稀疏也一直是N-Gram不可避免的问题。DNNLM则是在深度学习的基础上建立的,它不仅比 N-Gram 能利用更多的上下文信息,而且在训练中采用了词向量,减少了数据稀疏性对于模型的影响。
训练一个好的语言模型需要十分庞大的正确语料以及一定软硬件支持。过去这项工作在国内一直由研究者或者相关领域的企业所有,市场上很难获得一个训练好的模型的接口。2017年百度免费开放了依托海量优质数据和最新技术训练的DNNLM,为研究者提供了一个实用便捷的工具。本文在模型中使用DNNLM对输入文本中的词进行判断,从而得出该词出现在当前文本中的概率。
1.3.2 混淆集的缩减
考虑到语音识别时一些字的音会发生变化,混淆集中的替换词不能只包含同音词,初始混淆集需要采用PYCN生成。在采用PYCN生成混淆集时,由于原始词拼音的不确定性,使得生成的初始混淆集tmp_con中词的数量众多。例如:使用“鸡蛋”生成混淆集时,最终会得到“几单”、“忌惮”等100多个搜索结果。而DNNLM为了覆盖范围更全面、结果更合理,模型一般都很大,如果将这些结果都输入到模型中进行查询,时间开销将会非常大。为了解决这一问题,本文利用语境知识缩减混淆集中词的数量。本文先从测试集中选取了85个测试实例,然后又从3个领域中选取了85个词进行了实验。实验结果如图1和图2所示。
图1 使用NNLM计算句子得分时间开销
图2 使用word2vec计算词语间相似度时间开销
图1是使用DNNLM计算句子得分的时间开销,横坐标表示输入句子的数量,纵坐标表示使用的时间,单位为s。图2是使用word2vec计算词语间相似度的时间开销,横坐标表示输入词的数量,纵坐标表示使用的时间,单位为ms。
由图1、图2可知,使用word2vec计算80个词与词的语义相似度花费的时间仅为0.0020 s,使用DNNLM查询80句话的时间开销已经达到25 s,计算语义相似度的时间开销要远远小于计算语句语言模型得分的。核心词表示了当前语境的主要内容,语境中出现的其它词在理论上不应该与核心词在语义上相距太远。可见,利用语义词典查询词与词的语义相似度,将混淆集中与语境相距太远的词筛除,来缩小混淆集中词的数量,不仅不影响纠错结果,还减少了查询语言模型的次数,提高了纠错效率。因此,为了减小模糊集的数量,可以对tmp_con中的词与核心词进行语义相似度计算,从而排除一些不合语境的词。计算语境得分的计算方法如式(6)所示
(6)
tmp_conj表示文本词集tmp_con中的第j个元素,con_scorej表示tmp_conj的在当前语境的得分。
只要con_scorej的得分小于阈值ε,就认为tmp_conj出现在当前文本不合理,将tmp_conj从混淆集tmp_con中移除。重复这一过程,得到最终的混淆集confusion_set,将候选词依次带入DNNLM中计算文本得分,重排序,选出最合适的文本。
1.4 整体流程
整体流程如下。
步骤1 对输入的音频进行预处理,将处理后的音频输入语音识别系统中,将音频转化成文字。
步骤2 将语音识别后待处理的文本输入到纠错检错系统,对文本进行第一次处理,去除无意义的语气词、口头禅和一些使用语音识别工具常见的错误。
步骤3 对第一次处理后的文本进行第二次处理,利用关键词进行检错纠错,并且更新关键词词表。
步骤4 对第二次处理的结果进行处理,然后利用NNLM对句子中的每个词进行打分,将分数明显区别于其它词语的词添加到“误识别”的列表中,对误识别的词进行纠错。
2 实验与结果分析
2.1 语义相似度词库
训练基于word2vec的语义相似度模型,需要大量语义上正确的文本。语义的基础词库方面,本文使用了维基百科提供的中文语料和网上爬取的新闻语料,共有3 G。对语料进行预处理,使用NLPIR汉语分词系统进行分词。调用了Gensim的word2vec模型[15]进行训练,得到语义的基础词库。
2.2 评价指标
在对算法性能的评价中,采用了召回率(Recall,又称查全率),准确率[16](Precision,又称查准率)和F1值作为评价标准,来判断模型中算法的有效性。计算公式见式(7)、式(8)和式(9)
(7)
(8)
(9)
2.3 实 验
2.3.1 语音识别
实验中语音识别的音频包括有3个来源:①现场教学录音,《管理学原理》中“控制”一章的教学视频,时长为1个小时;②远程录播课,“学习强国”和“马克思主义大讲堂”中关于马克思主义原理的内容,时长为50 min;③有声图书,《钱不要存在银行》中的第一、二章内容,时长为1 h 10 min。语音识别工具调用了百度语音的SDK。
如表1语音识别结果所示:实验中把误识别词分成3类:第一类,识别后词语拼音没有发现变化;第二类,识别后词语长度发生变化;第三类,识别后词语长度不变,但拼音发生变化。所选的音频一是教师在课堂上直接录制的,虽然语音听上去吐字清晰,语速也适当,但从视频中分离的音频仍然含有各种杂音,比如老师的翻书声、话筒的嘶嘶声、学生的窃窃私语声。语音识别的最终结果吞音、吐音现象很明显,在误识别的词集中,仅有26.24%是替换错误,例如“就是所有的活动、所有的工作都是需要受到控制的,所有的人都需要受到控制,不是说你是领导就不受控制,你是部门主管就不受控制,那不行。”被识别成了“活动,所有的工作是需要适当控制的,所有的人都说你是领导就不受控制,你是部门主管就不行。”。所选的第二个和第三个音频则虽然是在安静环境下录制的,但也存在一定杂音。
表1 语音识别结果
2.3.2 检错纠错
实验中,为了使用核心词扩展关键词,每个音频都选取了5个对于它所处语境具有代表意义的词来构建核心词库,将每个核心词代入word2vec模型中,选择与核心词语义最相近的词,排序去重后构建出关键词集。例如,音频②的核心词与部分关键词见表2。
表2 核心词与关键词
为了验证本文所提出方法的有效性,实验中采用了3种方法进行对比。方法一,传统2_Gram+3_Gram纠错方法;方法二,没有使用语境的DNNLM方法;方法三,本文提出的使用语境的DNNLM方法。实验结果见表3。
表3 3种方法的准确率、召回率以及F1值/%
由表3中3种方法的准确率、召回率以及F1值可知,本文提出的方法在3个测试集上的准确率、召回率和F1值都要明显优于传统N-Gram和未使用语境知识的DNNLM方法。
通过对比传统N-Gram、未使用语境的DNNLM和使用语境的DNNLM得到的实验数据,验证了本文中使用的深度语言模型在检错纠错方法的明显有效性,在此不再分析。对比使用语境与未使用语境的DNNLM方法,可以验证语境词对检错纠错效果。对表3的实验结果进行计算,(方法三数据-方法二数据)/方法二数据,得到见表4。
使用语境的纠错方法对比未使用语境的,其准确率、召回率、F1值都有了较大提高。由表4结果可得:在使用语境知识后,测试集中语句的原始结构被打乱,进一步定位了句子的范围,为后续使用深度语言模型进行检错奠定了基础,从而提高了算法检错纠错能力。
表4 使用语境与未使用语境的DNNLM实验结果对比/%
为了验证利用语境词典可以提高纠错效率,分别对使用了语境词典和没有使用语境词典两种情况的时间进行了差值计算,时间提高的计算方法见式(10)
Time_difference=no_use_time-use_time
(10)
no_use_time表示没有使用语境词典查错纠错花费的时间,use_time表示使用了语义词典查错纠错花费的时间。
实验中随机从测试集中选取了86个例子。图3为有、无语境知识进行文本纠错的时间差,横坐标表示输入句子的数量,纵坐标表示没有使用语境知识和使用语境知识进行文本纠错的时间差,单位是s。从图3中可知,在利用DNNLM检错纠错时,利用语境知识比没有利用语境知识快了600 s。对3个测试集进行计算效率的测试,音频①、音频②和音频③的时间差分别为721 s,367 s,541 s。语境知识可以有效地提高检错纠错效率,尤其在语句比较长的情况下,语境知识可以很好地缩减混淆集的规模,从而将文本纠错的速度大幅提高。
图3 有无语境知识的时间差
2.4 实验结果分析
在2.3的实验中,使用了最新的ASR技术对长音频文件进行语音识别后文本纠错。实验结果表明:对于上文中现场教学、远程录播和有声图书音频在ASR下产生的文本,本文提出的基于word2vec的纠错方法,相比于使用传统语言模型的方法和不使用语境信息的纠错方法,不仅能够提高纠错的准确率、召回率和F1值,还能通过缩减混淆集中词的数量,提高计算的效率。
在实验中,还发现以下3种情况。第一,说话人在讲课、演讲、发言时的说话方式与朗读新闻或者文学著作时是有差别的。在识别这些偏口语化的长音频时,在查错阶段,语言模型会查出许多本身不是错误,但不是很书面的词的“错”。第二,说话人在说话时,其语速、音调在不同时刻可能是不一样的,致使语音识别时会因为音频信号的突然改变而出现吞音、吐音的现象,从而使识别后的词与原始词存在较大差别,使得测试集中很多错误实验方法检测不出来。这为后期文本纠错带来了一定的挑战。第三,不同地域语言发音存在差异,相同词语在不同地域的读音也会略有差异。
由于存在以上3种情况,即使使用最新的ASR技术,识别后的文本也已经和原始文本有了很大出入,而本文的实验分析是采用原始文本作为正确文本的对比样本,所以,虽然与其它方法相比,准确率与召回率都有了较大提高,但其绝对值仍然比较低,需要继续提高ASR水平。
3 结束语
本文从现有ASR技术出发,提出一种基于word2vec的语音识别后文本纠错方法。主要贡献点:①提出使用公开深度语言模型进行检错;②提出结合少量语境核心词利用word2vec生成关键词集;③提出使用word2vec缩减混淆词集数量。实验结果表明:本文提出的方法,对不同类型、不同领域的长音频语音识别后文本纠错是有效的,对实际应用中长语音的语音识别有一定现实意义。
尽管如此,长音频的语音识别后文本纠错仍然有很大提升空间,今后的研究可以将个人化发音特色加入PYCN方法中,考虑个性化的混淆集生成方法。