閱讀525 返回首頁    go 技術社區[雲棲]


INTERSPEECH 2017係列 | 語音識別之語言模型技術

編者:今年的INTERSPEECH820日至24日在瑞典的斯德哥爾摩順利召開,眾多的高校研究機構和著名的公司紛紛在本次會議上介紹了各自最新的技術、係統和相關產品,而阿裏巴巴集團作為鑽石讚助商也派出了強大的陣容前往現場。從1025日開始,阿裏iDST語音團隊和雲棲社區將共同打造一係列語音技術分享會,旨在為大家分享INTERSPEECH2017會議上語音技術各個方麵的進展。第二期分享的主題是語音識別之語言模型技術視頻回顧請戳這裏),以下是本次分享的主要內容。
1
語音識別技術

隨著iPHONE 4Ssiri的出現,越來越多的民用語音識別出現在大家眼前。現在市麵上各種語音輸入法、語音機器人層出不窮。下圖是去年阿裏雲棲大會,基於iDST語音技術的ET機器人。現在市麵上漫山遍野的智能音箱大戰,其中也包含語音識別技術。
57e29159d1acf1924ccedd5c5fc81a3bde139728
語音識別技術,通俗講叫語音轉文字,speech-to-text,是將觀測得到的語音輸入信號,轉化成與之對應的文本序列的過程。傳統語音識別係統如下圖所示,包括特征提取、聲學模型、語言模型和解碼器四部分,通過特征提取將原始音頻信號分幀加窗,轉化成有利於機器進行識別得聲學特征,經由聲學模型獲得該幀的聲學模型得分,配合語言模型獲得對應的語言模型得分,通過解碼器在可能的文本空間中搜索,獲得最可能的文本序列,作為結果輸出。這裏語言模型的作用是在路徑搜索過程中輔助聲學模型,判斷文本路徑的可能性。其中一個作用是同音消歧,即找到相同發音的目標文本序列。

87e55b6cac934a64d7f72fbc9f999c02dd878968

2 語言模型

語言模型,顧名思義,對語言進行建模的模型。語言表達可以看作一串字符序列,不同的字符序列組合代表不同的含義,字符的單位可以是字或者詞。語言模型的任務,可以看作是給定字符序列,如何估計該序列的概率,或者說,如何估計該序列的合理性。

P(上海 工人 師傅 力量)>P(上海 工人 食腐 力量)

拿這句話做個例子。比如到底應該是“工人師傅有力量”,還是“工人食腐有力量”,哪句話更合適。我們容易判斷左邊這句的概率大一點,工人師傅。於是我們希望通過語言模型的建模,可以給出符合人類預期的概率分配。就像這句,工人師傅的概率,大於工人食腐的概率。

0f01a0d32ea1878e565f7ba67226e85243e8958b

根據條件概率的公式,我們很容易推出一句話的概率應該符合各個詞條件概率的連乘,也就是鏈式法則。比如“上海的工人師傅有力量“,通過分詞分成上海、的、工人、師傅、有、力量六個詞,於是這句話(不考慮句首句尾)的概率就可以根據鏈式法則計算了,上海的概率,乘以”上海“後麵跟”的“的概率,也就是上海條件下”的“的概率,再乘以”上海的“後麵跟”工人“的概率,再乘以”上海的工人”後麵出現“師傅“的概率,以此類推,一直到上海的工人師傅有,後麵跟力量的概率。對於這種條件概率,也很容易通過樸素地計算詞頻的方式計算出來。然而我們發現,實際計算中,當句子比較長的時候,可能的組合數實在太多,實際操作中難以進行計算,於是人們就開始想著怎麼簡化問題,比如馬爾可夫假設。

59958116d46e5a125f59c4801441111d853ab66d

馬爾可夫假設是,大致描述一下,給定時刻t的狀態的條件下,則時刻t+1的狀態與t-1及之前時刻的狀態條件獨立。比如一階情況,假設在給定W(k-1)的情況下,W(k)和W(k-2)及以前的狀態(也就是詞),條件獨立。我們可以理解為W(k)隻與W(k-1)相關,計算的時候不考慮W(k-2)的影響,隻與前麵一個詞有關,於是事情就變得簡單了,以前計算上海的工人師傅有這一大長串後麵出現力量的概率,很麻煩,現在隻需要計算後麵力量的概率。

對於高階版本,也是一個道理,比如假設隻與前麵N-1個詞有關,於是W(1)W(k-1)這一長串後麵跟W(k)的概率轉化成了W(k-N+1)W(k-N+2)W(k-1)後麵跟W(k)的概率,就隻需要計算一個N元組W(k-N+1)W(k)的詞頻,以及一個N-1元組W(k-N+1)一直到W(k-1)的詞頻,兩者作比求得。這種通過馬爾可夫假設簡化計算、通過N元組詞頻計算得到條件概率的模型,叫做N元組模型,或者N元文法模型,英文N-Gram Model

5c417dcbe7397d925df53947a693d9c6528725f8

總結一下N元文法模型:通過馬爾可夫假設簡化了模型結構和計算,通過數數的方式計算,通過查找的方式使用。它計算簡單(數數),計算速度快(查表)。有超過三十年的曆史,性能穩定可靠,經得起檢驗。但限於詞頻計數的計算,它比較稀疏,依賴平滑算法,但對於沒見過的組合(unseen data)它的泛化能力還是不太好;而且限於馬爾可夫假設,其可用的曆史信息有限,隻與前N-1個詞有關,再長就影響不到了。前段時間深度學習火了幾年,於是大家都在想能不能用神經網絡做點什麼,於是人們開始嚐試用神經網絡替代N元文法模型。

首先是全連接神經網絡,最早經得起檢驗的模型。內部實值節點,連續空間建模,於是比數數流擁有了更好的泛化性,訓練得到Projection層作為詞向量,也被發現具有不錯的語義相關性。但FCNN, fully-connected NN全連接神經網絡,結構並沒有比ngram模型用更長的曆史信息,依然跟前麵N-1個詞相關。於是大家就開始用理論曆史信息無限長的遞歸結構的RNN,遞歸神經網絡,來對語言進行建模。理論上無窮長的曆史信息,實際上人們通過LSTMlong short-term memory或者GRU這種改進結構來彌補梯度衰減的問題,於是獲得了還挺明顯的提升。實際應用的時候有以下幾個問題吧,節點數多,除了占空間,就是訓練和測試的計算量都很大,然後對訓練數據也比較敏感。

82e06c8e9ac6e81ca3c391d429d084905753f6a3

詞表的大小是影響模型的關鍵因素,比如一個100w詞的詞表,對應100w的輸入/輸出節點,如果recurrent層有1000個節點,那光輸出層的權重就有10的九次方量級,算起來可是個大工程,於是壓縮詞典尺寸成了一個最直接的解決方案,很多時候壓縮詞典尺寸會造成性能損失,其實真正製約速度性能的主要是輸出層節點,所以一個折中的解決方案就是僅壓縮輸出層詞表,輸入選用一個大點的詞表。

80f4ff4960773bcaefe4857056fd8b3c04b2839d

除了直接壓縮詞表,也可以對詞表進行聚類,比如100w詞表聚成1000個類,每個類別1000個詞,於是就把100w的輸出變成了2000的兩個softmax,大幅提升了速度;第三種方法是瓶頸層,就是輸出或輸入增加瓶頸層來削減節點數量,但輸出softmax的計算量不減,而且節點數過少對性能還是有很大影響的,分層輸出Hierarchical Softmax是個樹狀結構,通過對輸出層類別進行樹狀結構的聚類(或者叫編碼),這樣隻有標簽節點對應的路徑需要計算,但CPU上實現還好,這種結構在樹節點串行運算,不太適合GPU這種低主頻高並發的計算架構,而且同數據量情況下性能衰減還是挺嚴重的。前段時間剛剛出來的文章,LightRNN,通過類似聚類的方式,利用embedding的思想,把詞表映射到一個實值矩陣上,實際輸出隻需要矩陣的行加矩陣的列,計算量大概也能開個方。和節點數多一起造成計算量大的一個原因就是softmax輸出,需要計算所有的節點求個和,然後得到分母。若是這個分母能保持一個常數,實際計算的時候就隻算需要的節點,在測試環節就快的多了。於是就有了正則項相關的方法,variance regularization,如果訓練速度可以接受的話,這種方法在基本不損失模型正確性的情況下可以大幅提升前向計算速度;如果訓練的時候也想提速,還可以考慮基於采樣,sampling,的方法,比如NCEIS importance samplingblack sampling等,本質上就是說,在訓練的時候不計算全部節點,隻計算正樣本(也就是標簽為1的節點),以及部分通過某種分布采樣的到的負樣本,避免高輸出造成的計算緩慢。速度上提升還是很明顯的。

3 評價指標

語言模型一般通過混淆度,英文Perplexity,簡稱PPL或者PP值,來評價語言模型性能。

首先我們知道熵,可以表達一組分布的最短平均編碼長度,比如一個標簽的值符合一組分布p1 p2 pn,出現第i個值得概率是pi,那如果我們對第i個值按負的以二為底pi的對數個bit進行編碼,則可以得到最短平均編碼長度。

774f70fa30d20132e259b5d5ada6ae34f1abd272

現在有一篇文檔,或者說我們的測試集,S,每一句是Sj,我們可以根據模型算得其總概率為P(向量S),於是要達到理論最優,其編碼位數應該是負的以2為底PS)的對數,我們除以總詞數Nw,得到文檔的平均最短編碼長度。為了計算簡便,以此二的平均編碼位數次方,作為PPL,展開之後就是最下麵的公式,每個詞概率連乘後,開Nw次方。一般幾十幾百不等,偶爾上千吧,對應平均編碼位數在610這一塊。編碼位數越少,對應匹配度越高,也就是PPL越小,我們認為模型越好

1fb72d07af4e62becd4ce854485ef018f4207f7e

因為是語音識別中的一部分,為語音識別服務,所以最終的評價指標,往往是語音識別常用的評價體係,叫做符號錯誤率。錯誤包含三種,插入錯誤,刪除錯誤,替換錯誤。通過找到最小化三種錯誤的一組匹配,來計算實際的錯誤率,是三種錯誤總數,除以總符號數。例如上麵這個例子,上海的工人師傅有力量,被識別成了上海工人食腐有的是力量,這裏左邊的紅字“的”,屬於刪除錯誤;“師傅”被錯誤識別成“食腐“,屬於替換錯誤;多出來的右邊的”的”、“是”,屬於插入錯誤。錯誤一共有2+1+25處,原句10個字,所以錯誤率是50% 。對於中文,我們一般使用字錯誤率,對於英文,我們一般使用詞錯誤率。

4 會議前沿

接下來是Interspeech2017會議的,語音識別中語言模型的研究進展。分為以下四個方麵,模型優化相關的、數據和其它信息自適應相關的、解碼過程相關的,以及分析類的文章。

d418331114afb883b2ce3edceb283d1062d1703c

首先是模型優化相關的,直接從模型入手,包含以上這幾篇文章,比如使用更新的模型結構,殘差網絡、更大廣度的CNN、雙向RNN等;或者更好的訓練方式,比如基於BatchNCE訓練、穀歌的稀疏非負矩陣語言模型SNM LM參數估計等。

0a2daa5421c464a3a71aba21e374a8724c008fbb

然後是adaptation,也就是自適應相關的文章。實際業務中我們也會碰倒類似問題,比如我們用大量數據訓練了一個通用模型,這是有業務需求說,我們需要做某一個domain的識別,可不可以幫我們優化一下,這個domain的數據不是很多。

這種時候就需要自適應相關的方法了,將通用的大模型,通過少量數據,或者其它信息(比如這裏有knowledge graph的),自適應到某一特定領域。

a745955ba9b846d65fc10079fa16535150e69f90

第三部分是解碼部分。如何將各種花樣地語言模型用於語音識別。比如傳說中的NNLM,基於神經網絡的語言模型,剛剛說的全連接NN或者RNN結構的語言模型,其計算量是遠大於N-Gram這種可以查表操作的模型的。語音識別的解碼工作是一個很複雜的搜索,有很大的計算量和很高的實時性要求,如果每一次查表操作都替換成一次神經網絡輸出的計算,不好好優化一下可能會非常慢。這裏就有一些語言模型解碼這塊的優化工作,包含以上三篇文章。

268de7eaabbc571e1161fd97143f87342685823e

最後是一篇分析類的文章,分析現在的語言模型技術,和人類之間的差距。文中估計的人類對於一般文本的理解,對應的PPL14左右,與目前語言模型技術有較大差距,預測至少需要10-20甚至更多年,機器才能在語言模型領域達到人類的認知。

總覽完這些,我們就挑兩篇文章一起看一下吧。

第一篇,題目是Empirical Exploration of Novel Architectures and Objectives for Language Models,對比了LSTM-RNN和文章提出的一種廣度更大的CNN,在單任務傳統交叉熵(也就是CE)準則下和多任務學習(multitask learning)下的性能對比。文章的contribution有兩點,嚐試了一個更大廣度的CNN,一個是用了multitask learning

50ec87994d79519ab622e8b23adc30fefd81225b

LSTM-RNN的兩個基線係統,包括word-levelcharacter-level兩個建模尺度。模型比較基本,對於word-levelembedding上麵兩層LSTM,對於character-level,尺度更細,於是加了一層LSTM以更好地刻畫。輸出都是word。兩種尺度和LSTM-RNN的建模之前的工作中都有,所以隻算是基線係統,這裏沒有創新。

63ae99d97e4345fd83e7f993005762edbf931ae8

這裏是作者proposeword-level DCC。這裏為了增加對更長時的信息進行建模,使用了一個更大時間尺度的CNN,這裏為了建模的效果,它沒有采取一整個大卷積窗,而是分層合並的方式,比如左邊這個例子,不是傳統的對wanted to be able這四個單詞一次卷積,而是分為wanted tobe able兩個組,分別卷積,然後再卷一層的方式。右邊做了一點小改進,就是又增加了一級1x2的卷積,word-DCC加一個additional的卷積層。傳統CNN在英文上往往采用character-level的建模,以發揮CNN的優勢,對較細的尺度進行建模,同時利用窗長和多層卷積的優勢,在保證計算效率的前提下,提高時間尺度的長度;這裏更加側重時間尺度的長度,而不是更細的粒度。

b55e521f257b7ac0faba8595cdd2566b9ee938d1

第二個contribution是用了multi-task learning。很經典的訓練策略,通過加入額外的secondary task,來提升primary task(也就是主task)的性能。當然很多時候兩個task互相幫助。合並的優化目標按照左邊這個公式,兩個交叉熵準則按權相加,按照兩個task的相關性選擇一個合適的lamda參數。新的task意味著額外的信息量,同時也是一種正則,對於抑製過擬合有幫助。對於數據有限的任務,multi-task learning尤為有效。這裏采用了單詞的類別分類作為一個task,類別是灰度聚類的到的,先聚類,再把聚類結果用於分類。沒有直接增加人為設計的準則,自己對自己提升,也可以看成一種boost

實驗在三個數據集展開,分別是Broadcast Newsswitchboardcallhome三個語音識別的常用8k采樣英文數據集。其中swtichboardcallhome都是電話對話,放在後麵說,我們先來看broadcast news

18501f251fa8b0b831e2480afbd0fd1376758d51

上表是混淆度PPL,下表兩種不同AM情況下的WER。左邊表中word-level LSTM RNN明顯好過其它模型,其中Multitask learning訓練的LSTM-RNN獲得最低的PPL96.47;其次是character-levelLSTM,最後是CNN,其中多一個卷積層的Word-DCC+C,就是最下麵兩個結果,比沒有這個卷積層還是有點用的。Multitask learning在這個量級的數據下麵還是有一定幫助的,或多或少都看到一點提升。

91d8313e02b42661d410398724985596141740d5

這個結果也是比較符合預期,LSTM-RNN作為經典的模型,在大多數情況還是非常優異的,隻是因為其recurrent結構,它的訓練速度相比CNN還是慢了一些。上麵的表格是語音識別的詞錯誤率結果,使用了兩種聲學模型,一種是差一些的GMM模型,一種是比較好的CNN聲學模型。結果一樣符合預期,word-levelLSTM-RNN + multitask learning訓練獲得單模型最優,與CNNcharacter-level LSTM合並後又小幅提升了一點。

eeebe5803c09512a97b39dbd3c778f63ae1fbb77

第二個實驗在兩個電話對話數據庫上進行,就是剛剛提到的switchboard SWB callhome CH。相比上一個實驗測試不同的AM,這個實驗加強了基礎LM,使用了N-Gram模型+一個modelM,一個準神經網絡模型,這裏不詳述了。對於這種更強的基線LM,幾個模型的相對提升下降了一些,但總體趨勢與之前一致,還是word-level LSTM-RNN + multitask learning效果最好。右邊的WER在兩個測試集上進行,趨勢基本一致,三個模型融合相比最優的單個模型又小幅提升了一點。

b7091ba16ae825695a5b00e9460d50ed7dd01921

這裏個人覺得本文的這種CNN應該嚐試character-level的建模,發揮CNN的優勢,和LSTM長時信息形成互補。

剛剛是一篇模型結構、訓練準則的探究,實際應用中,之前說過,基於神經網絡的語言模型比基於查表的N-Gram模型計算量大了很多,在實際係統中很難實時運算,往往采用重打分的模式做rerank。這裏有一篇工程性強一些的文章,針對幾個影響速度的點,結合了幾種優化方式,做到了NNLM的準實時one-pass解碼。特色在於用N-Gram模型查表的計算量,做到NNLM的計算。

Contribution包含以下幾點,加速100倍以上,做到準實時計算;

其中使用了NCE訓練的unnormalized NNLM解決輸出問題;

通過預計算存儲和緩存解決隱層節點輸出;

通過PReLUMaxout激活函數替代tanh

幾個技術都不是新技術,但本文把它們用到一起,達到了比較好的效果。

模型結構如下圖所示,n-1個詞的輸入,每個輸入按1-hot編碼,通過shared weights映射到E維的embeddingn-1E維的embedding拚在一起作為隱層輸入,經過隱層線性映射到維度H,這裏的affine映射耗時(n-1)*E*H;隱層節點通過雙曲正切函數tanh的映射,耗時T_n,也就是HTanh的計算時間;輸出層共計V個節點,也就是輸出詞典的sizeV,包括一個H*Vaffine projection和一個節點數為Vsoftmax計算。

8d09b9d2660af50abce4a552454ab963004ed773

下麵我們看看這篇文章是怎麼一點一點壓縮計算量的。首先是對於hidden layeraffine projection計算,一個(n-1)*E維映射到H維的矩陣乘法。這個輸入特征(n-1)*E維,可以看作n-1E維的子矩陣,每個矩陣分別有一個E->H的映射,屆時再把這n-1H維的向量加在一起,就是整個過程了。而這個過程中,詞表是有限的,E維向量就是有限的,n-1個位置的E->H的映射也就是有限的,我們本來要存VE維的embeddingV是詞表size,這裏可以認為需要存儲V(n-1)*Hembedding就可以免去剛剛說的E->H的映射了,於是隱層affine計算的時間就從n-1乘以E乘以H,降低到(n-1)*H次加法運算

當然,存儲成本從V*E,變到V * n-1 * H,增加了n-1 * H / E倍。比如H1024E128n5,則增加了4*8=32倍。

解決完affine transform,第二步就是激活函數。我們知道雙曲正切函數,就是tanh函數,泰勒需要展開到好多階,單CPU計算代價還是比較大的。文章中替換成了PReLUParametric ReLU),一個參數可學習的ReLU函數,以及嚐試了maxout。兩個激活函數計算量都是比較低的,這樣激活函數的時間Tn也就壓縮到kTmax(H)kH維向量取max的時間。

第三步是cache策略,對於一組n-1個詞的詞序列 w1 w2 w(n-1),當我們計算過它的值之後,可以把輸入的詞序列和輸出的概率都存下來放到緩存中,當計算的時候就可以直接拿出來用,避免複雜的計算。這也是常見的工程技巧,假設命中率為1-p,則計算時間可以進一步壓縮為p

1d440873ef3d3537da3a1da9434c9ac562e75dd3

我們的目標是計算一個詞序列的概率,其實對於每個輸入詞,我隻需要計算它後麵一個詞的輸出概率,而不是全詞典的輸出概率。但softmax函數,需要計算分母,用於歸一化整個概率和為1,所有節點的值都需要被計算一遍。對於較大的詞典,也就是V較大的時候,比如100w,計算量還是很大的。這裏我們把分母的求和看做一個整體Zc,我們想要是Zc是個常數就好了。

本文引入了Noise Contrastive Estimation,噪聲對比估計,NCE的訓練準則,通過對噪聲(負樣本)進行采樣,把一個多類分類問題,轉化成每個類別的二類分類問題。一方麵訓練的時候不需要計算全部輸出,隻需要計算采樣的噪聲和目標節點,節省訓練開銷;一方麵測試的時候,分母Zc可以趨近於一個常數,從而隻需要計算目標節點的輸出,節省測試開銷。

於是通過NCE訓練,輸出層計算量也壓縮到隻有H量級了。係統中每個步驟的計算,都如下表壓縮到一個很低的量級。

62bf278d35b19a3a9462a86fa5afbfd3f4e01926

下麵是實驗結果。這裏用的數據集跟之前比較相似,用了switchboardbroadcast news兩個測試集,分別記作swbbn。首先看看識別率。對於上表,用的是6-元文法模型,識別率分別從7.0降到6.6,以及10.9降到10.0,降幅都是很樂觀的,識別率性能有保證。對於ModelM,提升小一些,但也相對比較穩定。

a287366571a8f6d46382533fec4cd1adcc3c3b3c

c45b5133bd712a8a37acd952121f1f15b911dfc8

性能問題不大,這篇文章主要看速度。首先是表4precompute策略和cache策略,分別加速50倍和15-50倍。其中Broadcast newsswitchboard用的embedding數不一樣,所以加速倍數不一樣。但總體都有不少於100倍的提升,switchboard因為embedding數較大,更有225倍速的提升。

229bb0657ef2dd51099697ce482241e93013edcbd222ec027351c28c105311ee0d002d57d5862029

然後表5是激活函數的提升,maxout在保證性能的前提下提速1.9倍,prelu性能稍降,6.66.7,但提速3.6倍,屆時需要tradeoff一下;

14ab6c2b9669e9a11a65af0fc058dabd818a2085

6cachememory消耗,顯然這裏對cache的消耗還是大幅提升的,這裏cachesize和命中率也是需要tradeoff一下;

c12c86a26f283057b05304c758be03db2d230728

最後表7是整體的提升,將5.62RTFreal time factor,實時率,整體優化到1.04,趨近ngram1.01。實際係統中ngram模型的rtf還可以繼續優化到遠小於1,對應的NNLM也是可以提供one-pass實時識別服務的。

4 總結
本屆INTERSPEECH的論文中,語言模型的文章有很多。對這些文章的調研有助於了解目前實際產品中的性能水平,技術細節,很有借鑒意義。通過本文的介紹,希望大家能對語音識別中的語言模型技術有一定的了解。

注:
下期主題:語音合成技術
時間:11月15日晚7:30
嘉賓:阿裏巴巴iDST算法專家,盧恒
報名鏈接:https://yq.aliyun.com/webinar/play/340

最後更新:2017-11-13 17:04:40

  上一篇:go  深度:車聯網製造商該從物聯網“老司機”那裏吸取哪些教訓
  下一篇:go  kafka組件簡介