機器之心原創
作者:曉坤、思源
1 月 16 日,百度輸入法舉辦了「AI·新輸入全感官輸入 2.0」發布會,正式對外發布百度輸入法 AI 探索版,這是一款默認輸入方式為全語音輸入、並以注意力機制為語音核心的新產品。新語音模型結合了 CTC 和 Attention,為每日數億條語音識別調用提供硬核支持,本文將帶你一觀新模型是如何勸君「動口不動手」。
全語音交互對於語音識別準確率要求極高。百度表示,其 AI 探索版的語音輸入用戶體驗提升得益於四項重大突破,分別是在在線語音、離線語音、中英混合語音以及方言四個領域上實現的。
關於在線語音識別,百度發布了流式多級的截斷注意力建模(SMLTA),將在線語音識別準確率相對於上一代 Deep Peak 2 再次提升 15%,並實現了基於 SMLTA 模型的在線語音識別服務大規模上線應用。
在離線語音識別中,百度通過持續優化去年 1 月發布的 Deep Peak 2 系統,讓離線語音輸入相對準確率再次提升,並表示可以保證在沒網的情況下實現輸入法的流暢快速使用。百度輸入法「中英自由說」可以在不影響中文語音輸入準確率的情況下,實現高精準的中英文混合語音識輸入(例如,可以準確地區分「有你的快遞」和「you need cry dear」)。「方言自由說」則將普通話和六大方言融合成一個語音識別模型,在輸入時可以無需設置自由切換,無論是普通話和方言之間,還是方言和方言之間。
開啟百度輸入法 AI 探索版後,點擊語音按鈕,除了可以說出你要記錄的內容,讓輸入法幫你直接錄入轉文字。還可以呼喚「小度小度」語音助手,並說出相應指令,即可實現語音修改、發表情、發彈幕、發文件等一系列操作,滿足與輸入相關的周邊需求。可以說,百度輸入法 AI 探索版的核心功能就是語音識別。
百度輸入法 AI 探索版界面
在下文中,機器之心將介紹百度輸入法中部署的最新在線語音識別模型——SMLTA 的架構細節。簡言之,SMLTA 就是流式多級的截斷注意力模型,是融合了 CTC、LSTM 和 attention 等近年語音識別技術的集大成者。百度表示,SMLTA 是在業界首個截斷模型能超越整句的注意力模型,同時這也是第一次實現了基於 Attention 技術的在線語音識別服務的大規模上線。
可大規模工業使用的基於注意力建模的語音識別
CTC 模型和注意力 (Attention) 模型在學術界都不是新名詞。尤其是注意力模型,是近些年研究的熱點,注意力模型已經在實驗室內被證明能夠實現語音識別的端到端建模,這種建模將使得語音識別系統極度簡化。相對於包括 CTC 在內的所有傳統語音識別技術而言,注意力模型都被認為有較高的識別率。但這都只是在實驗室得到的實驗結論。注意力模型在投入實際工業應用中還會遇到大量的問題,例如無法做到一邊傳語音一邊識別從而導致用戶等待時間太長的問題和無法保證長句字識別時候的識別精度的問題等。
百度採用的是一種名為「流式多級的截斷注意力模型(SMLTA)」,其中流式表示可以直接對語音的小片段(而不是必須整句),進行一個片段一個片段地增量解碼,多級表示堆疊多層注意力模型,而最後的截斷則表示利用 CTC 模型的尖峰信息,把語音切割成一個一個小片段,注意力模型建模和解碼可以在這些小片段上展開。這樣的模型就是支撐起每天數億條識別任務的核心方法,也是工業上大規模使用注意力模型進行語音識別的範例。
其實想要了解百度的工業級語音模型,看看下面這張結構圖就夠了,其目前已經被證明在大規模應用上有非常好的效果。後面我們主要圍繞這張圖介紹 SMLTA 模型的具體結構:
如上所示為 SMLTA,最下面的輸入聲波會按照 CTC 尖峰的分布,被截斷為一個個語音小片段(時間步),也就是 h 所表示的內容。除了截斷外,這裡 CTC 模型的另外一個核心作用是把短時平穩的語音信息抽象成高度集中的局部信息。之後的注意力建模就是在這個一個個小片段上進行的,這樣的注意力建模被稱作局部注意力建模。
按照 CTC 建模的特性,每一個語音小片段預測的就是一個基本建模單元(比如音節,或者高頻音素組合)。在對每個語音小片段進行注意力建模前,百度進行了一個編碼過程。編碼過程抽取出來的特徵就是代表這個建模單元的最本質描述特徵 c。在注意力建模之後,百度又採用了 2 層 LSTM 模型,來描述每個單元的最本質描述特徵 c 和識別結果之間的一對一的映射關係,從而實現完美的實現了端到端建模。這種建模方式,使得語音識別擺脫之前複雜的動態規劃解碼器帶來的系統的冗餘和複雜,使得語音識別過程變成一個簡單的滾動生成過程:在一個時間步生產一個識別結果,然後滾動到下一個時間步,再生成下一個識別結果,直到識別過程結束。
由於該方法把傳統的全局的注意力建模轉換成局部注意力建模,所以這個過程也是一個絕對可以流式實現的過程,無論多長的句子,都可以通過截段來實現流式解碼和精準的局部注意力建模,同時也實現了流式解碼。
由於 CTC 模型必然存在著插入和刪除等錯誤,這些錯誤會影響截斷的效果,也就是影響語音小片段的定義,從而一定影響最終的模型精度。因此,在百度的 SMLTA 中採用了一種多級注意力結構。這種多級結構描述工作原理描述如下:具體而言,在上圖不同的語音片段 h 上,第一層注意力機制會注意當前語音片段以及過去所有一段時間內的語音片段的語音特徵信息,也就是注意不同發音對當前預測的重要性,且重要性是由注意力的權重α來決定的。直觀而言,第一層 Attention 注意到的是 CTC 截斷的「音」,這些音組合起來能表示某個具體的文字的特徵,也就是輸出結果 c。而第二層 Attention 是建立在前一層注意到的特徵 c 之上,對第一層注意力模型的輸出再進行第二次注意力學習。如果第一次注意力的學習結果存在冗餘信息的話,經過第二次注意力建模,就能找到真正需要集中注意力的注意力點。
所以工業級的 SMLTA 模型最核心的部分還是利用 CTC 模型的尖峰對連續音頻流做截斷,然後在每個截斷的小語音片段上進行注意力建模。傳統的注意力模型必須需要在整句範圍內建模,而百度的注意力模型卻可以在小片段上建模。核心原因是因為 CTC 模型的尖峰信息所對應的特徵表示是高度局部集中的。這種高度局部集中的特徵表示,使得僅對當前截斷的小片段做注意建模,就能夠實現對當前建模單元的高精準描述。而不需要像之前那樣對一個很大範圍的聲音信息進行「集中注意力」。
這就是流式的、多級的截斷注意力模型,它解決了傳統注意力模型不能進行流建模和解碼的問題,並且依靠截斷,實現了對長句子的高精準的注意力建模,同時也解決了 CTC 模型的插入或刪除錯誤對注意力模型的影響。CTC 建模和注意力建模這兩者的結合,對於學術或研究還是有很重要意義的,更不用說流式實時解碼對工業應用的貢獻了。
語音識別模型的迭代
SMLTA 也可以看成是百度上一代語音識別模型 Deep Peak 2 的進一步優化。Deep Peak 2 的全稱叫做「基於 LSTM 和 CTC 的上下文無關音素組合建模」。上下文無關建模方式是指:把高頻出現的音素聯合在一起,形成一個音素組合體,然後將這個音素組合體作為一個基本建模單元。Deep Peak 2 還通過聲學模型學習和語言信息學習相分離的訓練方法,使用音素組合來保留最重要的音素連接特性,從而避免了上下文無關建模時的過擬合問題。這種建模方式可以顯著縮小建模單元,帶來更快的解碼速度。
相比之下,SMLTA 對 Deep Peak 2 的核心改進在於局部注意力和多級注意力的引入,可以看成是將 Deep Peak2 通過結合注意力機制來獲取更大範圍和更有層次的上下文信息。這種改進一般而言會造成計算量的增加,但百度表示,其整體計算量和上一代的 Deep Peak 2 是技術相當的。整個工業產品部署完全是 CPU 部署,無需額外的 GPU 就可以完成。成本低廉,適合大規模推廣使用。
By the Way
機器之心在發布會現場還見識到了百度輸入法 AI 探索版的一項很有意思的功能——凌空手寫。它不需要特殊的手寫筆,也不需要類似深度攝像頭或多目攝像頭等硬體,只需要最普通的 RGB 攝像頭即可。如下圖所示,使用者只要對著攝像頭豎起手指就可以在空氣中開始寫字,寫完後張開手掌,就能結束寫字,輸入法會開始識別並將對應文字輸出。圖中的使用者正在嘗試寫一個「紹」字,已輸出的「凌空手寫張」也是用這個功能寫的。
凌空手寫採用雙神經網絡模型的方案:一個是基於灰度圖的指尖跟蹤模型,另一個是基於多方向特徵文字識別模型。此外,研發團隊發現鋸齒和連筆在三維空間的手寫識別中對識別率影響較大,於是對抗鋸齒和連筆消除算法進行了大量優化工作。無論實用性如何,這麼好玩的功能還是值得試試~
本文為機器之心原創,轉載請聯繫本公眾號獲得授權。