自研语音识别在货拉拉业务中的实践
背景介绍
货拉拉每天会产生大量的音频数据(30w 小时+),主要分为通话录音、行程录音和实时音频,其中通话录音包括司机用户的隐私号录音、进线客服录音和外呼录音等。在保障数据安全和隐私的前提下,音频数据会被用于服务治理、安全防控、风控、客服等下游业务。
音频数据无法直接被下游业务使用,需要语音识别(Automatic Speech Recognition, ASR)服务将语音转成文本,然后再进行使用。
当前公司 ASR 服务均为采购的云厂商产品,主要存在以下问题:
1. 货运领域识别效果不佳
采购的 ASR 在货运热词领域识别准确率较低,目前也只开放了关键词增删和语言模型训练的功能,优化效果一般。
2. 采购成本大
当前采购的 ASR 使用率已接近饱和,但是我们的业务还在持续增长,产品需求还在增加,如果要满足持续新增的需求和现有业务的增长,我们还需要继续采购,成本较大。
3. 不支持定制开发
不支持具体场景下对某个模块的单独优化,例如语言模型、热词增强、VAD、声学模型、标点模型等。
解决方案
针对以上现状和问题,我们选择了自研 ASR,原因如下:
提效果:自研 ASR 用内部数据训练算法模型,针对货运场景特殊优化,在货运领域,我们可以做到识别准确率更高。
降成本:可以直接节省固定采购费用,从而降低 ASR 的使用成本。
建能力:公司音频数据产量巨大,ASR 需求量逐步递增,持续采购不是长久之计,通过自研可以补齐基础通用技术能力,从而赋能更多的业务场景。
下图展示的是整个服务的系统架构:
图 1 系统架构图
服务的系统架构从上到下分为以下几层:
1. 数据层:音频的数据来源,包含常见的通话录音,行程录音,实时音频等
2. 应用层:主要是公司内一些常见的 ASR 应用场景,如风控侧用通话录音来做判责,客服侧用来做智能客服等
3. 平台层:是自研 ASR 的核心服务,包含实时 ASR、离线 ASR 等,以及依赖的内部机器学习平台完成模型推理
4. 基础设施:是自研 ASR 依赖的一些基础组件,如数据库,缓存,消息队列,对象存储等
在自研 ASR 的实践过程中,提升算法效果和实现 ASR 任务资源调度是我们的重点工作,其中算法效果方面,自研 ASR 相比第三方 ASR 在业务热词上的识别率提升了 19.7%,资源调度方面,架构实现了任务和 ASR 转译资源的调度,下面分别介绍这两部分的工作。
ASR 算法实现
ASR(Automatic Speech Recognition)功能上包括实时识别和非实时识别,组成模块上包括 VAD、声学模型、语言模型、热词增强、Attention 解码、BeamSearch、标点符号识别等,系统非常复杂。
ASR 音频处理整体流程如下:
图 2 ASR 算法处理流程
如上图所示,输入音频流中可能包含大量无效音频,为了提升转译效果和处理速度,需要用 VAD 进行过滤,过滤之后再输入到编码解码模块。在功能方面,如果是实时识别,则是边输入边解码,反之则等到检测到结束节点后,一次性编码解码输出转译结果,最后使用标点符号模型给转译结果加上标点符号。
ASR 算法主要有以下三个难点:
1. 音频过滤:噪音、背景音等会影响 ASR 的效果和效率,需要对其进行识别过滤,然而过滤不恰当会导致有效的人声被删除
2. 跨域识别:由于训练语料上的差异,ASR 在跨领域识别时效果不佳
3. 方言问题:方言的识别效果差,为了提升效果,需要积累训练数据,同时语音的标注成本高
在我们的实践中,主要针对音频过滤和跨域识别进行优化。音频过滤通过 VAD 实现,跨域识别通过优化语言模型和热词增强实现。
01
有效音频检测
有效音频检测是为了从一段语音信号中,准确的找出语音信号的起始点和结束点,使有效的语音信号和无用的噪声信号进行分离。我们使用活动端点检测 VAD(Voice Activity Detector)识别有效声音,过滤无效片段,提高识别效率和效果。
图 3 VAD 算法
使用传统方法进行 VAD 时,通过计算输入音频信号的能量,并设定一个阈值,高于阈值的部份我们认为是人声段,低于阈值的部份为静音段,如上图所示。然而,在实际业务场景的应用中,往往存在大量的噪声(环境噪音、电话铃声等),使用传统方法无法得到较好的音频切分效果,进而导致 ASR 效果不佳。
目前比较主流的进行活动端点检测的方式为 WebRTC-VAD,经过实验测试效果较好。我们也尝试了 Silero-VAD,可能由于该方法原生不支持中文的原因,在下游业务数据上表现非常差,无法投入使用;LSTM-VAD 由于训练数据来自 WebRTC-VAD 生成,在表现上和 WebRTC-VAD 相近,一方面考虑优化存在数据标注成本,另一方面考虑效率问题,在这个方法的优化上暂未投入更多的工作。
因此,经过对比不同 VAD 方法的效果,最终选择 WebRTC-VAD 作为我们音频检测的工具。WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输,其中 WebRTC-VAD 为该技术中语音处理的一部分。
WebRTC-VAD 模型更新过程如下:
1. 输入信号划分六个子带:80~250Hz,250~500Hz,500~1kHz,1k~2kHz,2k~3kHz,3k~4kHz
2. 每个子带用两个高斯模型(语音模型、噪音模型)混合进行建模,使用子带的能量作为 GMM 的特征,如下图 4(a)所示,其中 Speech mode 表示语音模型,Nonspeech mode 表示噪音模型
图 4 高斯混合模型
3. 计算每个子带的二元高斯对数似然比,并在每个子带的基础上计算全局似然比,子带似然比和全局似然比中,任意一个超过设定的阈值,认为信号中带有语音,阈值可以选择语音和噪音模型的能量相交处,如图 4(b)所示
4. 存在语音时更新语音模型的均值和权重,否则更新噪音模型
02
ASR 编码解码
ASR 编码解码模块是 ASR 算法的核心内容,该模块的效果将直接影响语音识别的效果,模型上我们使用的是开源 Wenet 模型构造编码解码模块,整体结构如下图所示。
图 5 ASR 算法处理流程
如上图所示,音频数据经过共享编码器进行编码得到特征向量,然后经过 CTC 进行解码得到一个 N * M 的概率矩阵,其中 N 表示词表的大小,M 表示序列的长度。对于概率矩阵,如果使用贪心算法继续解码,会得到“火辣辣半价又快又好”的结果,显然这不是我们想要的结果。因此,我们结合语言模型、热词增强和 beam search 共同筛选 TOP K 的结果,最后对 TOP K 的结果再使用 Attention Decoder 模块进行重排序,得到最终的 TOP 1 结果。
我们针对货运场景对模型进行了领域内优化,包括使用业务数据训练语言模型,以及梳理业务上的热词,提高热词的权重,从而提高热词的的识别效果。
语言模型
语言模型表示一个句子出现的概率,对于如下图所示的 ASR 模型给出的 N 个结果,我们希望第二句结果“货拉拉搬家又快又好”输出尽可能高的概率,其他句子输出的概率尽可能低。
图 6 Beam Search nbest 结果
一般的,我们使用 ngram 语言模型对句子进行建模,假设第 N 个词出现的概率只与前 N - 1 个词有关,记第 i 个词为,n 个词组成的句子为,那么该句话的概率即为:
当 n=2 时,表示当前词出现的概率只和前一个词有关,即为 bigram 模型,上式就变为:
以图 6 中的句子“货拉拉搬家又快又好”为例,使用 bigram 计算其概率:
我们希望比其他结果的概率都要大,因此,我们需要使用业务数据训练 ngram 模型以达到这样的效果。在货拉拉业务测试集上,增加业务数据训练的语言模型后,可以使字错率从 0.406 降至 0.347。
热词增强
除了添加语言模型之外,热词增强是提升 ASR 模型识别效果的一个重要手段。由于货运场景比较特殊,经常会出现诸如“尾板”、“高栏”等货运领域专有词汇,而通用的 ASR 模型在这些词上的识别能力有限,就需要引入热词来增强对这些词汇的识别。
我们在语言模型的结果上做热词增强,还是以图 6 中的句子为例,假设我们添加的热词为“货拉拉”,就得到下式
其中λ为热词对应的权重,值越大代表该词越重要。我们通过添加热词更新每个结果的概率,取概率最大的句子作为最终的结果,这样就完成了热词增强。经过热词增强,可以使货运领域的专有词汇识别率从 0.559 提升至 0.718。
结合语言模型以及热词增强两个模块,ASR 模型的最终效果达到字错率 0.314,热词识别率 0.888。
03
标点符号模型
此外,我们还增加了标点符号识别模型,目的是提升ASR转译结果的可读性。我们最开始使用百度的开源方法 PaddleSpeech的TextExecutor功能实现标点恢复,包含两个型ernie_linear_p3_wudao和ernie_linear_p7_wudao,分别对应的标点符号如下,我们选择ernie_linear_p3_wudao模型生成标点,效果符合预期。
模型 | 标点数 | 标点类型 |
ernie_linear_p3_wudao | 3 | , . ? |
ernie_linear_p7_wudao | 7 | , . ? ! 、: ; |
然而,ernie_linear_p3_wudao 模型相对较大,生成标点的速度不满足需求。因此,我们开始采用训练小模型(如 LSTM)来实现标点恢复。我们将文本看作一个长序列,判断序列中的每一个字前面是否跟着一个标点符号,这样就将标点恢复任务转化为命名实体识别任务,对应的实体标签定义为 O、S-Comma、S-Period 和 S-Question,其中 O 表示非标点,S-Comma 表示逗号,S-Period 表示句号,S-Question 表示问号,示例如下。
图 7 标点识别示例
我们使用业务数据训练标点恢复模型,在各类别上识别效果均可,结果如下表。
类别 | 准确率 | 召回率 | 数量 |
逗号 | 0.88 | 0.87 | 23462 |
句号 | 0.97 | 0.95 | 18875 |
问号 | 0.92 | 0.92 | 4208 |
ASR 任务和资源的调度
在货拉拉我们主要解决的是车货匹配问题,而在自研 ASR 系统中,我们主要解决的也是一个匹配问题,是任务和资源的匹配,我们有很多 ASR 任务,也有多个 ASR 转译资源,如何保证任务能快速的调度到资源并且被高效的处理?我们专门设计了两套调度系统来解决这个问题,其中任务调度解决的是业务方投递任务如何调度的问题,资源调度解决的是 ASR 每路转译资源如何处理的问题,两者相互配合。
01
ASR 任务调度
接入的每个业务方都可以提交任务,每天会有大量的转译任务需要被处理,我们设计了如下的任务调度系统,来保证任务的高效有序。
图 8 ASR 任务调度系统
1. 为了充分做到用多少分配多少,业务之间资源互不影响,我们每一个业务方都维护了一套任务队列+work 队列,从而限制每个业务的可用资源
2. 任务队列区分了正常排队队列、暂停队列、失败队列,对于处理异常的任务,会进行多级重试,最大限度的保证任务的成功
3. 考虑到公司音频场景多,格式复杂:音频格式(acc 、wav、mp3)、采样率(8000HZ、16000HZ)、声道数(单声道、双声道)和采样位数(8 位、16 位)。因此我们新增了 ffmepg 转码的流程,使得自研 asr 支持公司以及市面上绝大部分音频格式的转译。
02
ASR资源调度
路:音频数据分片进入模型,模型进行有效音频检测、提取、识别、断句,同时需要结合不同分片的上下文理解语义,对结果进行修正,所以模型是有状态的,同一个音频的不同分片,必须要在同一个模型实例中处理,我们把一个模型实例称为 1 路,音频任务转译前需要先获取路,并持续占用,直到任务转译完成才能释放。
路调度过程中需要保障:
1.路不能被同时使用,保证音频正确转译
2.高峰期路不能空闲,避免资源浪费
3.容错,调度过程中即使 1,2 出现错误,也可以自动纠错
因此我们设计了如下的资源调度系统
图 9 资源调度算法
容错:
1. 上线路检测:从总队列拷贝至空闲队列前,需要检测路是否在运行中
2. 获取路检测:从空闲队列移动至运行队列前,需要检测路是否在运行中
3. 释放路检测:从运行队列移动至空闲队列前,需要检测路是否已下线
4. 睡眠路检测:定时检测运行队列中睡眠的路,及时释放,避免资源浪费
5. 总路数检测:定时检测空闲队列+运行队列是否等于总队列,丢失的路及时重新投递,避免资源浪费
业务效果
1. 字错率
对 ASR 转译后的文本 Hyp 和标准结果 Ref 计算字错率,数值越小效果越好,其计算公式如下:
其中 S 是替换的次数,D 是删除的字数,I 是插入的字数(把 Hyp 转换为 Ref),N 为 Ref 的字数
缺点:每个字的重要性是一样的,没有体现热词的识别效果(热词更能体现句子的语义)
2. 热词识别率
热词识别率的计算公式如下,数值越大越好
模型 | 字错率 | 热词识别率 |
第三方 ASR | 0.282 | 0.691 |
自研 ASR | 0.314 | 0.888 |
转译结果示例:第三方 ASR VS 自研 ASR
图 10 转译结果对比示例
从以上示例可以看出第三方 ASR 无法识别业务上的热词,自研 ASR 可以识别业务热词:尾板、中货,这有助于提升下游的业务效果:如取消单判责。
总结展望
本文阐述了 ASR 在货拉拉业务中的实践,针对业务中的问题和挑战,我们提出了一系列解决办法,包括任务资源匹配、VAD 优化、语言模型优化、业务热词挖掘和标点符号模型等。经过这些优化,自研 ASR 相比第三方 ASR 在业务热词上的识别率提升了 19.7%。未来我们会持续优化自研 ASR 的效果,推广到更多的业务场景中。
作者简介
曾启飞、何家实、黄瓯严、蔡高兴
参考文献
1. ITU, Coding of Speech and 8 kbit/s Using Conjugate Structure Algebraic Code -Excited Linear Prediction. Annex B: A Silence Compression Scheme for G.729 Optimized for Terminals Conforming to Recommend. V.70, International Telecommunication Union, 1996.
2. Y. D. Cho, K. Al-Naimi, and A. Kondoz, “Improved statistical voice activity detection based on a smoothed statistical likelihood ratio,” in Proc. IEEE ICASSP’01, vol. 2, Salt Lake City, UT, 2001, pp. 737–740.
3. J. Kim, J. Kim, S. Lee, J. Park, and M. Hahn, “Vowel based voice activity detection with LSTM recurrent neural network,” in Proc. 8th Int. Conf. Signal Process. Syst., 2016, pp. 134–137.
4. Zhuoyuan Yao, Di Wu, Xiong Wang, Binbin Zhang, Fan Yu, Chao Yang, Zhendong Peng, Xiaoyu Chen, Lei Xie, Xin Lei, “WeNet: Production oriented streaming and non-streaming endto-end speech recognition toolkit,” in ISCA Conference of the International Speech Communication Association (Interspeech), 2021, pp. 4054–4058.
5. Zhang B, Wu D, Peng Z, et al. Wenet 2.0: More productive end-to-end speech recognition toolkit[J]. arXiv preprint arXiv:2203.15455, 2022.
6. Mehryar Mohri, “Finite-state transducers in language and speech processing,” in Computational Linguistics, 1997, pp. 269–311.
7. Hui Zhang, Tian Yuan, Junkun Chen, Xintong Li, Renjie Zheng, Yuxin Huang, Xiaojie Chen, Enlei Gong, Zeyu Chen, Xiaoguang Hu, Dianhai Yu, Yanjun Ma, and Liang Huang. 2022. PaddleSpeech: An Easy-to-Use All-in-One Speech Toolkit. In Proceedings of the 2022 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies: System Demonstrations, pages 114–123, Hybrid: Seattle, Washington + Online. Association for Computational Linguistics.
8. O. Tilk and T. Alumae. LSTM for punctuation restoration in speech transcripts. In Interspeech 2015, Dresden, Germany, 2015. 1, 2