雙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降低到了目標值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.