淘寶直播「一猜到底」——移動端實時語音識別技術方案及應用

雙11淘寶直播App·一猜到底

過去一年淘寶直播快速發展,截止2020年9月底,80個淘寶直播產業基地在全國落地開花,從農村走出10萬農民主播,直播真正意義上成爲幫助商家和消費者完成交易的利器,同時經過各類互動玩法讓直播購物變得有趣好玩。在2020年雙11開始階段,淘寶直播App升級了18年直播答題「點題成金」的玩法,推出「一猜到底」新玩法。若是說傳統的直播答題是「選擇題」,一猜到底的玩法更像是幾萬人同時在線的「搶答題」,將答題方式從文字選擇升級成語音搶答,給出猜中價格高低提示,讓用戶增長了更多的參與的樂趣。算法

爲了實現比肩綜藝現場的直播競猜體驗,咱們一次壓上了由達摩院語音實驗室阿里雲PAI團隊、淘系技術直播App和端智能MNN團隊組成的全明星陣容,通力協做之下,一舉實現了工業界首個用於直播的移動端語音識別api

(更多內容乾貨可關注【淘系技術】公衆號)性能優化

業務流程和技術挑戰

image.png

「一猜到底」總體玩法鏈路如上圖所示,主播口播開始後,用戶須要在人數和時間未滿前,按住按鈕,經過語音報出價格,系統經過本地語音識別能力進行識別和結果比對,提示用戶所報價格「太高」仍是「太低」,直到答對或者超時結束。在每一關有限的做答時間內,用戶每每須要屢次競答,才能逼近商品的真實價格。因而,實時語音識別能不能準確且快速地識別用戶的報價,直接決定了「一猜到底」的成敗。網絡

不一樣於通常的語音識別應用,一場頂流的淘寶直播,能夠彙集百萬乃至千萬的用戶圍觀。這麼多用戶同時進行語音識別,會出現很是多的請求,若是採用雲端識別對服務壓力和服務質量都有很是大的挑戰。項目開始時實驗了端側和雲側識別的兩種方案,發現雲側方案難以支撐這樣的活動,最終選擇了端側方案,肯定端側識別方案以後,發現也不是康莊大道,主要存在如下技術難點:架構

  • 高精度高性能的本地語音識別

目前行業比較成熟的是服務端的語音識別方案,徹底照搬服務端方案到移動端也不現實,須要建立一套適合移動端運行的語音識別方案。同時,直播場景下的語音答題噪聲較大,對語音識別的準確度要求較高,語音識別速度也會對用戶的答題速度形成巨大影響。框架

  • 語音模型和資源包體積過大

考慮到活動特性,端側的語音識別引擎須要內置在包內,並且越小越好。通過客戶端研發評估,如何作到15MB之內甚至更小的語音模型是關鍵,所以須要極致的模型壓縮能力支持。工具

  • 端側資源有限,性能壓力大

直播場景自己就已經很佔用資源,疊加直播場景下作語音識別,對語音識別過程當中的CPU、內存佔用,都有很大的要求,高性能的推理和優化成爲模型落地的最大攔路虎。oop

移動端實時語音識別技術大揭祕

image.png

阿里達摩院語音實驗室早在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。

image.png

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之內。

image.png

從訓練、模型壓縮到優化部署的PAI-MNN雲端一體方案

PAI混合精度量化流程

image.png

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量化和反量化算子。

image.png

最終,SAN-M模型在衆包測試集上的WER絕對損失低於0.1%、SER絕對損失低於0.5%、理論壓縮比約爲3.19倍。

基於MNN推理引擎的實時高性能計算

image.png

爲了在移動端上實現實時的端到端語音識別模型推理計算,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 FuseConstant Folding、重複Reshape算子消除等圖優化方法。圖優化以後的計算圖更容易和其餘優化方法組合使用,好比,Constant Folding後MatMul的一個輸入可能被替換成一個Constant節點,所以就能夠轉換成FullyConnected或Conv1x1進行加速,而且也更容易利用模型壓縮方法對權重進行量化。

然後,語音模型的耗時重點仍然是矩陣乘法。MNN經過更優矩陣乘分塊、基於 NC4HW4 佈局優化先後內存佈局轉化、Strassen 算法改進等策略,優化了總體的卷積和矩陣乘的性能,ARM 架構上性能提升了 10%-20% ,保障了語音模型的高效運行。

同時,MNN最新提出的幾何計算機制也在實時語音識別起到了重要做用。幾何計算是MNN爲了解決設備碎片化問題而提出的一種新機制,其核心在於把座標映射標準化,以便統一實現與優化。在幾何計算的支持下,咱們能夠較簡單地合併相鄰的純形變算子,從而下降訪存需求,提高模型運行性能。

最後,在PAI-MNN雲端一體化模型壓縮的加持下,咱們利用量化表和有限回退機制,在精度損失可控的前提下,進一步下降了移動端上的計算總量。

RTF (real time factor),即實時率,表示識別一秒鐘音頻須要的耗時。

image

在這一系列組合拳之下,咱們才最終在目標設備上,將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.

相關文章
相關標籤/搜索