双 11 淘宝直播 App·一猜到底
过来一年淘宝直播疾速倒退,截止 2020 年 9 月底,80 个淘宝直播产业基地在全国落地开花,从农村走出 10 万农民主播,直播真正意义上成为帮忙商家和消费者实现交易的利器,同时通过各种互动玩法让直播购物变得乏味好玩。在 2020 年双 11 开始阶段,淘宝直播 App 降级了 18 年直播答题「点题成金」的玩法,推出「一猜到底」新玩法。如果说传统的直播答题是「选择题」,一猜到底的玩法更像是几万人同时在线的「抢答题」,将答题形式从文字抉择升级成 语音抢答,给出猜中价格高下提醒,让用户减少了更多的参加的乐趣。
为了实现比肩综艺现场的直播竞猜体验,咱们一次压上了由 达摩院语音实验室 、 阿里云 PAI 团队、淘系技术直播 App 和端智能 MNN 团队 组成的全明星阵容,通力协作之下,一举实现了 工业界首个用于直播的挪动端语音辨认。
(更多内容干货可关注【淘系技术】公众号)
业务流程和技术挑战
「一猜到底」整体玩法链路如上图所示,主播口播开始后,用户须要在人数和工夫未满前,按住按钮,通过语音报出价格,零碎通过本地语音辨认能力进行辨认和后果比对,提醒用户所报价格“过高”还是“过低”,直到答对或者超时完结。在每一关无限的作答工夫内,用户往往须要屡次竞答,能力迫近商品的实在价格。于是,实时语音辨认能不能精确且疾速地辨认用户的报价,间接决定了「一猜到底」的成败。
不同于个别的语音辨认利用,一场顶流的淘宝直播,能够汇集百万乃至千万的用户围观。这么多用户同时进行语音辨认,会呈现十分多的申请,如果采纳云端辨认对服务压力和服务质量都有十分大的挑战。我的项目开始时试验了端侧和云侧辨认的两种计划,发现云侧计划难以撑持这样的流动,最终抉择了端侧计划,确定端侧辨认计划之后,发现也不是坎坷不平,次要存在以下技术难点:
- 高精度高性能的本地语音辨认
目前行业比拟成熟的是服务端的语音辨认计划,齐全照搬服务端计划到挪动端也不事实,须要创立一套适宜挪动端运行的语音辨认计划。同时,直播场景下的语音答题噪声较大,对语音辨认的准确度要求较高,语音辨认速度也会对用户的答题速度造成微小影响。
- 语音模型和资源包体积过大
思考到流动个性,端侧的语音辨认引擎须要内置在包内,而且越小越好。通过客户端研发评估,如何做到 15MB 以内甚至更小的语音模型是要害,因而须要极致的模型压缩能力反对。
- 端侧资源无限,性能压力大
直播场景自身就曾经很占用资源,叠加直播场景下做语音辨认,对语音辨认过程中的 CPU、内存占用,都有很大的要求,高性能的推理和优化成为模型落地的最大拦路虎。
挪动端实时语音辨认技术大揭秘
阿里达摩院语音实验室早在 2015 年就研发出了第一代挪动端离线语音辨认计划,近来联合 PAI 模型压缩、MNN 高性能推理引擎,实现了挪动端离线和流式端到端语音辨认计划,满足语音指令、语音辨认、实时翻译等场景需要。依据「一猜到底」我的项目需要,咱们选取 ” 基于 SAN- M 的离线端到端语音辨认 ” 计划,通过极致的模型压缩和性能优化,最终实现模型大小小于 15MB、内存占用低于 60MB、1s 语料辨认快于 50ms 的高性能计划。
基于 SAN- M 的离线端到端语音辨认
目前,最具代表性的离线端到端语音辨认模型 LAS[1]和 Transformer[2]都是基于 Attention-Encoder-Decoder 的。LAS 采纳基于 BLSTM 的 Encoder 和基于单向 LSTM 的 Decoder;而 Transformer 则采纳 Multi-head Self-Attention 模块组建 Encoder 网络,采纳 Masked Multi-head Self-Attention 组建 Decoder 网络。
在公开评测工作集上,Transformer 较 LAS 在性能上有劣势,同时因为采纳了 Multi-head,训练并行化效率更高。咱们剖析了 Self-Attention 和 DFSMN memory block[3,4]之间的关联性:Self-Attention 能够了解为采纳了 context-dependent 系数进行全局建模,而 DFSMN 的 memory block 则采纳了 context-independent 系数进行部分建模。对于语音辨认,部分声学建模和全局语义建模都十分重要,因而咱们提出了如下图所示的 SAN- M 模型构造,高效地交融了 Self-Attention 和 DFSMN memory block。
SAN- M 模块如上左图所示,将 Self-Attention 和 DFSMN memory block 交融一个模块,无效的联合了 Self-Attention 的全局长时建模能力和 memory block 的部分长时建模能力。基于 SAN- M 模块构建了如上右图的 Encoder-Decoder 离线语音识别系统(SAN-M-E2E-ASR),并在开源的 1000 小时 AISHELL- 2 中文辨认工作中取得了以后该工作的最优性能(CER=5.61%);在工业量级的 2 万小时中文辨认工作中,该零碎也显著优于咱们之火线上的 CTC 零碎和规范 Transformer 零碎。
针对本次辨认场景,咱们最终实现了不到 40MB 的端到端模型,而辨认性能则能够媲美上一代整体超过 100GB 大小的云端 DFSMN-CTC 零碎。咱们在 finetune 数据上进行了不同维度的筛选和搭配,并做了不同策略的数据扩增来笼罩多样的辨认状况。针对模型输入的 token,也进行了肯定压缩,并拉低了与本次工作无关的 token 概率来升高误识别率。在 ITN 模块,咱们采纳精小的 FST(Finite State Transducer)来实现规定网络,用状态转移来实现文字到阿拉伯数字的转换,通过边上权重来管制其转换方向,并在简略读法、谐音、容错上也做了一系列门路优化。
基于 PAI-MNN 云端一体化模型压缩
尽管达摩院语音实验室通过定制化语音辨认模型设计,将原有的 170MB 模型裁剪至不到 40MB,然而思考到挪动端的资源状况,咱们还须要通过 PAI-MNN 云端一体化模型压缩计划,进一步将模型根本无损地压缩到 15MB 以内。
从训练、模型压缩到优化部署的 PAI-MNN 云端一体计划
PAI 混合精度量化流程
PAI 混合精度量化流程
上图显示了 PAI 团队 (PAI: Platform of A. I. in Alibaba) 研发的无数据标注干涉的主动混合精度量化流程 (Label-free AMP Pipeline, AMP: Automatic Mixed Precision),包含量化误差预弥补、离线标定、量化噪声剖析与混合精度决策四个阶段, 次要翻新点包含:
- 反对端到端 Transformer 的离线后量化:
- PAI 团队的后量化办法,引入了循环张量探针,以反对端到端 Transformer 的离线后量化。
- 相比于拆图量化、量化训练等,端到端后量化具备快捷、高效的劣势;
- 集成了丰盛的后量化策略,为后量化的精度鲁棒性提供了松软保障,根本策略包含:
- KL 算法的改良,可能无效缩小输出 / 输入张量的量化噪声;
- EasyQuant(参考文献 [5])的应用,可进一步缩小输出 / 输入张量的量化误差,尤其能改善 INT7 等更低精度量化的成果;
- Bias Correction(参考文献 [6])通过弥补网络权重的量化偏差(均值与方差的偏差),以缩小权重量化噪声;同时对 Bias Correction 的适当改良,加强了对 SAN-M ASR 模型的弥补成果;
- ADMM(参考文献 [7])亦可优化权重量化参数,缩小权重量化噪声;也适当改良了 ADMM 的应用,从而在交替方向迭代范畴内,确保权重量化误差最小;
- Weight Adjustment(参考文献 [8])在 Kernel weight 按 Per-tensor 量化时,通过 Per-channel 模式的等价平衡变换,能够缩小 Weight 量化误差。
- 无 Label 干涉的混合精度量化流程:
- 该流程从模型输出到混合精度决策,无需数据标注(Label)的干涉,简洁易用、快捷无效;
- 量化误差按逐层统计,且能精确反映每个网络层的量化敏感度,为混合精度(INT8/FP32 混合)决策提供了牢靠根底;
- 通过管制回退的网络层数,可抉择出精度与模型容量折中最佳的帕累托最优解,实现多指标优化;
- 生成的混合精度量化表,可能对接挪动端推理框架 MNN,以生成低提早、高推理精度的运行时推理引擎;从而形成了残缺的工具链路,即从混合精度量化、到挪动端的推理部署;
- AMP Pipeline 不仅实用于挪动端,也实用于 CPU/GPU 优化部署,体现了 PAI 云端一体 的劣势所在。
基于 PAI AMP Pipeline,无效实现了 SAN- M 模型的离线后量化(PTQ: Post-training Quantization)。为了放弃算法模型辨认精度,经 AMP INT8 量化之后(回退 3 个 Op,分类层保留为 FP32 实现)。
为了解决压缩率的问题,MNN 模型转换和优化工具对回退的算子对立使用权重 8bit 存储、float 计算的形式进行优化,进一步压缩模型大小。通过一套对立格局的模型压缩文件,通过 PAI AMC 优化的模型能够顺滑无缝地转换到 MNN 的格局。
MNN 模型转换工具基于现有的图优化流程,依据该模型压缩文件将 float 模型转换成 MNN 模型的同时实现离线量化,具体过程如下:
- 依据量化表中提供的 tensor name,在 TensorFlow 的计算图中生产和生产该 tensor 的边上同时插入一个自定义的量化和反量化算子。
- 将 TensorFlow 的计算图转换成 MNN 的计算图,其中自定义的量化和反量化算子转换成 MNN 量化(FloatToInt8)和反量化(Int8ToFloat)算子。
- 算子交融:将反对量化的算子、输出的反量化算子和输入的量化算子交融成一个 Int8 的算子。
- 最初打消成对的 MNN 量化和反量化算子。
最终,SAN- M 模型在众包测试集上的 WER 相对损失低于 0.1%、SER 相对损失低于 0.5%、实践压缩比约为 3.19 倍。
基于 MNN 推理引擎的实时高性能计算
为了在挪动端上实现实时的端到端语音辨认模型推理计算,MNN 在全链路上做了诸多优化。
端到端语音辨认模型基于 Transformer 构造,蕴含一个对输出音频特色编码的 Encoder 和一个自回归解码的 Decoder。这类模型构造要求 MNN 反对 Control Flow、Dynamic Shape 和 Zero Shape 等个性,因而,MNN 首先在框架层面对这些个性进行了反对和欠缺:
- MNN 重构了 Control Flow 反对计划,提供用户通明的 functional control flow 实现,并反对了 TensorFlow 1.x 的控制流模型转换,为用户提供一站式的部署体验。
- 对于 Dynamic Shape 的反对,MNN 将整图依照动静形状算子划分为多个分段子图。在代码层面,一个子图对应一个 Module,Module 反对嵌套,即整图被表白为一个由 Module 组成的调用树,树的每个叶子节点能够应用一个 Session 来执行,Session 每次执行前 resize,从新进行 shape 推理和分配内存。
- Zero Shape指的是模型中某些 Tensor 的 shape 存在 0 值,比方 (1, 0, 256),这种状况大多是为了给 while-loop 中某些循环变量提供初始值而引入的。MNN 在形态推理和执行逻辑上对 Zero Shape 进行了反对。
之后,MNN 依据达摩院模型新增了 LayerNorm Fuse、Constant Folding、反复 Reshape 算子打消等 图优化 办法。图优化之后的计算图更容易和其余优化办法组合应用,比方,Constant Folding 后 MatMul 的一个输出可能被替换成一个 Constant 节点,因而就能够转换成 FullyConnected 或 Conv1x1 进行减速,并且也更容易利用模型压缩办法对权重进行量化。
而后,语音模型的耗时重点依然是矩阵乘法。MNN 通过更优矩阵乘分块、基于 NC4HW4 布局优化前后内存布局转化、Strassen 算法改良等策略,优化了整体的卷积和矩阵乘的性能,ARM 架构上性能进步了 10%-20%,保障了语音模型的高效运行。
同时,MNN 最新提出的 几何计算 机制也在实时语音辨认起到了重要作用。几何计算是 MNN 为了解决设施碎片化问题而提出的一种新机制,其外围在于把坐标映射标准化,以便对立实现与优化。在几何计算的反对下,咱们能够较简略地合并相邻的纯形变算子,从而升高访存需要,晋升模型运行性能。
最初,在 PAI-MNN 云端一体化 模型压缩 的加持下,咱们利用量化表和无限回退机制,在精度损失可控的前提下,进一步升高了挪动端上的计算总量。
RTF (real time factor),即实时率,示意辨认一秒钟音频须要的耗时。
模型大小
算子数量
RTF
内存占用
优化前
35MB
2341
0.04048
233MB
优化后
13MB
1623
0.01852
54MB
在这一系列组合拳之下,咱们才最终在指标设施上,将 RTF 升高到了目标值 0.02 以下,从而实现实时语音辨认,让「一猜到底」得以走到每一个用户的背后。
总结与瞻望
通过这次我的项目单干,基于高性能推理引擎 MNN,联合一流的语音模型设计和模型压缩技术,咱们曾经能在挪动端上实现实时的语音辨认,并通过了双 11 外围场景的考验。
但咱们并未止步于此。
达摩院语音实验室在千人千面的个性化语音辨认上的钻研工作业已开展,在爱护用户隐衷的前提下实现如联系人、住址、搜寻历史等词汇的辨认。PAI 团队会持续携手 MNN 团队,进一步摸索围绕端侧设施的精简模型设计和自适应模型架构优化计划。而 MNN 团队,则会继续建设流式辨认、混合计算、编译优化等机制,为 ASR、NLP 等 AI 利用在端侧的发力提供最高效、最稳固的松软后盾。
置信在不远的将来,咱们就能为用户带来更加有用、乏味的 AI 交互体验。
参考
===
[1] Chan W, Jaitly N, Le Q, et al. Listen, attend and spell: A neural network for large vocabulary conversational speech recognition[C]//2016 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2016: 4960-4964.
[2] Vaswani, Ashish, et al. “Attention is all you need.” Advances in neural information processing systems. 2017.
[3] Zhang S, Lei M, Yan Z, et al. Deep-fsmn for large vocabulary continuous speech recognition[C]//2018 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2018: 5869-5873.
[4] Zhang S, Lei M, Liu Y, et al. Investigation of modeling units for mandarin speech recognition using dfsmn-ctc-smbr[C]//ICASSP 2019-2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019: 7085-7089.
[5] Di Wu, Qi Tang, Yongle Zhao, Ming Zhang, Ying Fu, Debing Zhang, “EasyQuant: Post-training Quantization via Scale Optimization”, arXiv preprint 2006.16669, 2020.
[6] Ron Banner, Yury Nahshan, Elad Hoffer, Daniel Soudry, “Post-training 4-bit quantization of convolution networks for rapid-deployment”, arXiv preprint 1810.05723, 2018.
[7] Cong Leng, Hao Li, Shenghuo Zhu, Rong Jin, “Extremely Low Bit Neural Network: Squeeze the Last Bit Out with ADMM”, arXiv preprint 1707.09870, 2017.
[8] Markus Nagel, Mart van Baalen, Tijmen Blankevoort, Max Welling, “Data-Free Quantization Through Weight Equalization and Bias Correction”, arXiv preprint 1906.04721, 2019.