人物 | 周维:端到端语音识别技术在58同城的探索实践

原创
2022/09/29 09:33
阅读数 275

AISummit 全球人工智能技术大会



2022年8月6日-7日,由51CTO倾力打造的AISummit 全球人工智能技术大会以线上直播的形式成功举办。大会以“驱动•创新•数智”为主题,内容覆盖计算机视觉、自然语言处理、语音识别、算法与模型、推荐系统、机器学习、智能驾驶、智慧金融、元宇宙、MLOps等众多技术细分领域。大会邀请了近百位知名互联网科技企业的技术精英、数智化转型期的传统企业的管理者、前沿学术机构专家学者,共同论道人工智能的行业驱动力,研讨人工智能的前沿创新技术,共话人工智能时代下的“数智”浪潮。


58同城TEG AI Lab语音算法部负责人周维受邀出席,并在“智能语音的应用与探索”专场下分享了《端到端语音识别技术在58同城的探索实践》。


文本根据分享实录整理而成,欢迎大家阅读分享。


01

导读

近年来,AI智能语音应用在58同城广泛落地,从2018年开始,58同城AI Lab先后研发了语音对话机器人、语音内容分析平台,在各业务线销售、客服、产品、运营场景广泛使用,打造了多款AI应用,如销售智能外呼助手招聘面试机器人智能语音质检系统 等。
2020年初,我们开始了自有语音数据的标注工作,并基于Kaldi框架开发了语音识别引擎,同时开发了VAD、说话人分离、标点识别等功能。在同年6月自研语音识别效果超过了采购的第三方服务,并先后上线了录音文件识别和流式识别服务,从而将第三方服务替换为了自研服务。详细内容参考文章《 3人半年打造语音识别引擎——58同城语音识别自研之路 》。
随着新场景的增多以及业务的不断深入,修复线上badcase、进一步提升语音识别效果成为了我们主要的工作目标,而由于重口音、噪音、背景人声和复杂的业务词汇的影响,传统语音识别效果也逐渐的接近了瓶颈,因此我们持续进行着端到端语音识别方法的探索和落地工作。
我们于2022年8月分别在录音文件识别和流式识别场景完成了从Kaldi到WeNet的全量切换,当前录音文件识别引擎处理语音时长达1000万小时/年,流式语音识别引擎支持语音对话量超过5000万次/年。   
本次议题主要分享我们在WeNet端到端语音识别上的实践经验,包括基于半监督训练提升识别效果、基于Efficient Conformer和模型量化的推理性能优化方案、以及流式/非流式语音识别工程部署方案等。
分享视频如下:


02

背景

58同城是国内领先的生活分类信息网站平台,涉及业务有招聘、房产、车、本地生活服务(黄页)等。语音是平台上商家、用户、销售、客服之间沟通的主要媒介。
58平台上的B端商家和C端用户会使用电话、微聊进行语音沟通,同时58呼叫中心支撑着数千名销售、客服人员工作,年通话时长数百万小时。这些场景下产生了海量的语音数据,这些语音数据经过语音识别转为文字之后,对于语音质检、信息治理和用户画像等任务有巨大的价值。此外,AI Lab团队研发了可以提高人效的语音外呼机器人,典型应用为销售机器人“黄页销售智能外呼助手”和面试机器人“神奇面试间”。

2021年,AI Lab对这些产品能力进行归拢,统一升级为“灵犀”智能语音语义平台。语音技术作为灵犀的基础能力,包含语音识别、语音合成、VAD、说话人分离,其中录音文件识别服务支持对话分析平台(语音分析&质检)海量语音的转写工作,流式识别服务支持人机对话平台(语音机器人)中的语音交互工作。

03

语音识别引擎链路与技术路线

语音识别按照功能可以分为录音文件识别和流式识别,录音文件识别输入为待识别的整段录音,并一次性的返回完整的识别结果。流式识别输入为音频流,并在识别过程中返回识别的中间结果, 达到边说边识别的效果。

语音识别引擎包含VAD、说话人分离、语音识别和标点识别几个算法模块。录音文件或音频流经过重采样等音频处理后,首先经过VAD识别出包含人声的片段,对于单声道的音频,由说话人分离模型为这些语音片段打上说话人标签,用于区分电话当中的主被叫说话人。最后将打上说话人标签的语音片段由语音识别模块转为文字,标点识别模块为识别出的文字加上标点。
58平台上语音识别的面临着以下挑战:
  • 复杂的业务场景:覆盖房产、汽车、招聘、本地服务等,包含大量地名、车名、公司名称等词汇;

  • 复杂的数据来源:电话信道(8k)、网络平台(16k)、直播/短视频等;

  • 复杂的地方口音:58的数据覆盖全国各地的城市,包含较严重的方言和重口音录音,如四川话、河南话、粤语、英语等;

  • 复杂的通话环境:用户随机的接听电话的环境带来各种噪音和嘈杂的背景人声;在直播/短视频场景中背景音乐和特效音对VAD和ASR均有较严重的影响。

数据方面,为了应对这些问题和挑战,我们首先开发语音数据标注系统,并针对不同业务制定标注规则。 在标注过程中,将标注资源向重要/效果差的场景倾斜。 截止目前已积累了上万小时自有数据。
语音识别框架选择方面,我们在初期选择业界使用较多、较为成熟的Kaldi,并使用 Chain Model CNN+TDNN作为主要的模型结构,在此基础上进行了发音词典构建,以及一系列声学模型和语言模型的优化,后又实现了热词增强和解码器的优化。

Kaldi上线后,我们也陆续开展了端到端框架的调研,其中效果较好的为ESPNet中Transformer+CTC混合解码的结构,使用Attention进行一遍解码后,再由CTC进行对齐重打分。模型 经过变速增强+多个checkpoint average之后可以达到很好的识别效果 。另外,针对ESPNet解码速度较慢的问题,我们使用 动态batchsize推理、降低beamsize、跳帧finetuning、Attention辅助对齐等方法展开实验,最终将GPU解码速度提高了60倍 ,但和Kaldi GPU解码速度相比仍然有很大差距,达不到上线的条件,且混合解码的结构不能支持流式,想要大规模部署还需要大量的开发工作。
WeNet是以 Conformer + CTC解码 + Attention重打分 为主要模型结构的一款面向工业落地的框架 [7] ,我们基于WeNet在自有数据上进行了实验,均取得不错的效果,最终因为WeNet代码简洁轻量和易于部署的特点,选择其作为我们的端到端方案。

在决定完全投入端到端开发之前,我们基于Kaldi 的Chain Model针对业务数据做了很多迭代优化,但随着数据的增加模型性能提升有限,在重口音、方言的数据上表现较为一般,并且Kaldi在模型层面的优化手段有限,经过一系列实验说明了Kaldi的线上效果优化在我们的场景上到达了瓶颈。因此,我们在2022初开始全面投入WeNet的开发和优化工作。
我们的开发工作从模型和部署两个方面展开。在模型方面,我们分别从识别效果和推理速度上进行优化。识别效果方面,我们采取数据迭代和半监督的方式进行优化;推理速度方面,我们调研了一些高效的模型结构,并针对模型压缩展开实验。后续会分别从半监督、高效模型结构、模型压缩几个方面进行展开。最后会简要介绍我们的部署方案以及测试结果。

04

半监督训练

在实际的语音识别模型优化中, 增加场景相关的标注数据 是最重要的优化手段,但数据标注的成本很高,且数据积累需要一定的时间,而各业务之间信道跨度较大时数据迁移效果很差(比如从电话场景迁移到直播/短视频场景),因此对于全新的业务来说冷启动往往比较困难。
另一方面,线上存在大量的无标签数据,如果可以有一个base模型为其打上伪标签,经过一系列筛选后反过来迭代base模型,经过反复迭代就可以提升模型的识别效果。而 伪标签的另一个优势是方便在不同的模型和框架下迁移 ,这样我们就可以利用端到端模型生成伪标签,来迭代Kaldi的模型。
4.1 半监督训练方法
我们使用的半监督方法参考了NST(Noisy Student Training)[1][2]的Self-Training的思路。
  1. 训练一个Teacher模型(少量标注数据+其他场景数据)

  2. 使用 Teacher 模型为未标注的数据打上伪标签

  3. 经过伪标签筛选

  4. 迭代 Student 模型

  5. 再将 Student 作为新的 Teacher 重复之前的过程。

线上伪标签的获取和筛选流程如下图所示。线上的录音中一小部分会被抽样交给人工标注。然后根据需求从剩余未标注的数据抽取(比如按照场景或者特定关键词筛选),打上伪标签。经过一系列的筛选后,将筛选通过的数据用于模型迭代,将筛选不通过的数据丢弃或者流入到标注系统中。如果新迭代的模型效果好于线上模型,则将模型上线,即作为新的Teacher模型。

在伪标签筛选时,我们使用四种伪标签筛选策略,其中模型打分和编辑距离策略较为有效:
  • Confidence Score:利用ASR模型打分(分值进行归一化)

  • Model Disagreement:不同ASR模型预测结果的一致性,编辑距离 or CER

  • Words per Second:文本长度/录音时长

  • Rare Data/ Low Accurate Data:选取尽量包含特定词或稀有词等样本,适合针对性的优化

对于筛选策略来说,如果伪标签数据量级不大,则是否进行数据筛选对模型效果影响较小。当数据量级很大时,则需要进行筛选,以降低低质数据量。
4.2 半监督实验效果
半监督实验部分,我们选择了一个覆盖城市较多且方言较严重的房产类场景A进行实验,使用的标注数据如下:
  • 房产类场景A:场景相关的269小时数据

  • 房产相关数据:包含房产业务下除了A的其他场景数据,共1781小时

  • 外呼销售:与房产无关的数据1070小时标注数据

我们在WenetSpeech开源模型基础上,使用房产相关+外呼销售的标注数据进行finetune。以此作为Teacher模型,对2482小时的场景A的无标签数据打上伪标签。在场景A的测试集上结果如下图右边表格所示,可见在 标注数据只有269小时的情况下,使用伪标签数据带来了显著提升。

为了进一步验证半监督的效果,我们在另外两个线上测试集上进行了实验。下图左侧的表格为房产场景A的26城口音测试集。我们首先使用WeNet生成的伪标签在Kaldi模型上进行了finetune,发现伪标签对Kaldi的提升并不明显;而对于WeNet模型引入半监督训练后效果有所提升。下图右侧表格为音视频审核的两个场景A和B,可以发现,在WeNet base模型基础上引入半监督训练后,识别效果显著提升。

综合上面的实验,我们可以得到以下结论:
  1. 增加场景相关的伪标签数据可以提升识别效果。

  2. 伪标签数据越多、Teacher 模型越好,则得到的Student模型效果越好。

  3. 半监督训练在新业务冷启动、数据积累较慢的业务场景优化可以起到很好的作用。


05

Efficient Conformer介绍

端到端语音识别模型的解码速度是模型能否落地的关键,特别是对于流式识别场景。 WeNet中主要模型是Conformer,其CPU流式解码速度在并发测试下与Kaldi相比仍有约4倍左右的差距。 为此我们对解码流程中各个部分的耗时进行统计,Conformer + CTC + Attention重打分的结构的解码包含以下流程:
经测试, Encoder推理耗时占总解码时间的90%以上 ,因此优先考虑从模型的角度优化Encoder的推理耗时,主要包含高效的模型结构、模型压缩蒸馏、模型量化等方式,而Efficient Conformer就是一种基于下采样的高效模型结构。
5.1 Efficient Conformer介绍
Conformer[3]结构包含Convolution Subsampling下采样层和Conformer Block,下采样层通常采用1/4的下采样。 Conformer Block为“马卡龙”结构,即两个Feed Forward结构之间“夹”着Multi-Head Self Attention(下文称MHSA)和Convolution结构,如下图中左边结构图所示。
模型的计算复杂度与输入音频的长度n(音频序列的帧数)相关,而Attention计算复杂度与n的平方相关, 因此音频序列长度越长模型推理越慢,Efficient Conformer[4]的主要思路就是降低模型中序列长度来提高推理速度 。直观的做法是增加下采样层的采样倍数,可以直接提升推理速度,但直接增加下采样倍数会让识别效果损失严重,Efficient Conformer的做法是在Conformer Block中实现下采样,既降低了计算复杂度,又保证识别效果。
Efficient Conformer与Conformer相似,包含Convolution Subsampling下采样层,与Conformer Block。与Conformer不同的是,Efficient Conformer在Conformer Block中实现了下采样,如上图中右侧结构图所示, 每N个Conformer Block后会增加一个Downsampling Block进行1/2的下采样 。模型共进行了3次下采样,
  1. 音频序列首先经过前置Convolution Subsampling完成1/2下采样;

  2. 经过N层Conformer Block后,由Downsampling Block进行1/2下采样;

  3. 再经过N层Conformer Block后,由Downsampling Block进行1/2下采样;

因此, Efficient Conformer整体下采样倍数为1/8 ,而模型的关键在于Downsampling Block的实现,其结构与原始的Conformer Block相同,区别为使用了Grouped MHSA 替换了原来的MHSA,使用Strided Convolution Block替换原来的Convolution Block,其结构如下图(图片来自论文[4])。
5.2 结构实现
我们在Efficient Conformer的实现上做了调整,保留了原始Conformer的前置1/4下采样,并在模型层级的前1/3处做一次Downsampling Block的操作,即下图中的Strided Efficient Conformer Block,最终实现1/8下采样。
Grouped MHSA和Strided Convolution Block保留了原始Efficient Conformer的设计。Grouped MHSA分别在Attention矩阵乘法前后进行reshape,使得在Attention计算时序列长度得到压缩。Strided Convolution Block即为在原来Conformer Block基础上,调整Depthwise Convolution卷积步长,同时在残差连接时,对原始信号进行下采样。
5.3 实验效果
我们选择外呼销售流式识别场景对Efficient Conformer进行了测试。
测试模型如下:
  • 没有WenetSpeech预训练初始化下的Conformer以及流式Casual Conformer;

  • 没有WenetSpeech预训练初始化下的流式Casual Conformer;

  • 有WenetSpeech预训练初始化下的Conformer;

  • Efficient Conformer以及流式Casual Efficient Conformer

  • 最后为 int8量化的Casual Efficient Conformer

在非流式模型中,有WenetSpeech预训练初始化的Conformer效果好于没有预训练初始化的模型,而 Efficient Conformer识别效果好于预训练初始化的Conformer。Casual Efficient Conformer在流式模型中也表现最好,且int8量化后CER几乎没有影响。
关于下采样带来的效果提升,在Squeezeformer[5]中有相关讨论,即网络特征表示在音频序列帧与帧之间存在冗余,在Squeezeformer中采用Temporal U-Net进行下采样也获得了显著的识别效果提升。
接下来是各模型的1并发解码速度测试。在流式模型中Efficent Conformer带来的速度提升为 6.9%,int8量化带来的速度提升为 44.9%。在非流式模型中Efficient Conformer带来的速度提升为 13%,int8量化带来的提升为 58%。
最终结论为,使用Efficient Conformer可以取得相对Conformer更好的识别效果,以及10%左右的推理速度提升。结合int8量化,可以取得50~70%的推理速度提升。
最后值得注意的是,在使用了Grouped MHSA和Strided Convolution之后, 流式解码时的chunk size需要设置为group size和stride的公倍数 ,保证在reshape和conv的过程中不会引入0的padding,从而导致识别效果受到影响。

06

模型压缩

模型知识蒸馏方法[6]被广泛应用在模型压缩和迁移学习中,因此我们尝试使用训练好的大模型对压缩后的小模型进行蒸馏,以在保证识别效果的同时降低模型尺寸,从而提升模型推理速度。
知识蒸馏主要思路是将表现较好的大模型作为Teacher,将裁剪后的模型作为Student,Teacher通过生成Soft Label辅助Student训练,从而提升被压缩模型的识别效果。
6.1 知识蒸馏的实现
我们在WeNet Conformer + CTC + Attention结构的基础上实现了蒸馏的训练过程,如下图所示。将Teacher模型的Encoder和Attention Decoder的输出作为Soft Label,形成KD Loss。同时对Student执行ASR训练任务,即ASR Loss。最终使用alpha参数将两个损失进行结合,得到最终的损失函数。
6.2 实验效果
选取音视频审核场景的半监督训练Conformer模型作为Teacher 模型。在模型压缩参数选择方面,通过Student模型的ASR任务,确定裁剪的最佳参数如下图所示。
最后,相比直接蒸馏训练, 先对Student做ASR任务的finetune后再做蒸馏的方式,模型收敛更加稳定,且最终识别效果更好 。最终模型参数量减少为原来的 27.4%,CER绝对升高 3.19%。

07

部署方案

语音识别引擎整体架构图如下,目前已支持Kaldi和WeNet之间进行切换。

WeNet模型的部署在 WPAI人工智能平台 上,该平台是58同城TEG AI Lab研发打造的一款支持深度学习和机器学习功能,集特征工程 、模型训练和在线预测为一体的一站式算法研发平台。
分别构建WeNet的CPU和GPU解码镜像,上传至WPAI平台,即可实现模型的部署和后续迭代,并可以暴露统一的rpc服务接口。

值得注意的是,由于Conformer base的流式识别需要额外的cache来记录“上一个”chunk的每层结果供下一个chunk解码使用,而Efficient Conformer模型中使用了下采样,使得每层需要cache的序列长度不同。为此,我们在流式推理过程中记录下每层所需的实际长度,从而实现了Efficient Conformer的流式推理。
此外,我们也分别在CPU和GPU解码器基础上实现了细粒度热词,以独立支持各业务之间的badcase修复。
最后分别对CPU流式解码和GPU非流式解码进行了性能测试,测试结果如下图所示,可见在线上并发测试下WeNet CPU和GPU的解码性能表现很好。其中int8量化的Efficient Conformer在流式识别上的性能超过了Kaldi。


08

总结

本文主要介绍了58同城自研语音识别引擎优化中的端到端优化和部署工作。 涉及到了语音识别引擎中各算法模块介绍和技术路线选择、半监督训练、Efficient Conformer、模型压缩蒸馏、以及模型的部署和性能测试。 未来我们将在此基础上进一步提高业务使用体验,包括细粒度热词和语言模型功能的不断完善,持续优化重口音/方言的识别效果,以及关于模型压缩蒸馏的进一步优化。

参考文献
[1] Park D S ,  Zhang Y ,  Jia Y , et al. Improved Noisy Student Training for Automatic Speech Recognition[J].  2020.
[2] Zhang Y ,  Qin J ,  Park D S , et al. Pushing the Limits of Semi-Supervised Learning for Automatic Speech Recognition[J].  2020.
[3] Gulati A, Qin J, Chiu C C, et al. Conformer: Convolution-augmented transformer for speech recognition[J]. 2020.
[4] Burchi M, Vielzeuf V. Efficient conformer: Progressive downsampling and grouped attention for automatic speech recognition[C] 2021
[5] Kim S, Gholami A, Shaw A, et al. Squeezeformer: An Efficient Transformer for Automatic Speech Recognition[J]. arXiv preprint arXiv:2206.00888, 2022.
[6] Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015, 2(7).
[7] WeNet开源地址:https://github.com/wenet-e2e/wenet

作者简介

周维,58同城TEG-AI Lab语音算法部负责人。负责语音识别、语音合成算法研发。2016年硕士毕业于中国科学院大学,毕业后参与对话式AI产品方向创业,2018年5月加入58同城,曾先后参与智能客服、智能外呼、智能写稿等AI项目的NLP算法研发,2019年开始主攻语音算法方向,带领团队从0到1自主研发58同城语音处理引擎中的语音算法。

本文分享自微信公众号 - 58技术(architects_58)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部