天天看點

語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC

本篇開始,就進入到了asr目前的流行做法。 這裡單獨提到了CTC算法。  這個算法對目前asr使用deep learning的方法有重大影響。

總體感覺,寫到本篇,工作量反而變得很小。因為進入deep learning時代後,神經網絡模型基本都是那麼幾種,已經不再需要挨個詳細介紹。而且看圖就能了解的很明白。 是以本篇後半部分基本就是貼圖了。。:D

一、CTC

在CTC之前,訓練語料要配合上一篇中提到的方法,需要人工把音頻中每個時間段對應的是哪個音素的資訊标注清楚。  這個工作量和對人及金錢的需求是巨大的。基本都是百萬級别手筆。 有個CTC之後, 給定一個音頻,就隻要告訴這個音頻說的是什麼文本就好了。 省掉了對齊的那一步。 由此,其重要性可自行判斷。

關于CTC,感覺與其這裡坑坑窪窪的介紹,不如直接參考這篇知乎的文章——

https://zhuanlan.zhihu.com/p/36488476

, 一看就懂。

這裡就大概說明下CTC的大緻原理,詳情還是需要直接看下知乎的那篇文章。

CTC 大緻原理

半定義性質的講:CTC 要解決的問題是,算法輸入序列的長度遠大于輸出序列長度的問題。語音識别問題的輸入長度是遠大于輸出長度的,這是因為語音信号的非平穩性決定的,就比如說 “nihao”, 如果按時間片切分,就變成了"nnnnn iiiiii hhh aaa oo" ,但不論怎麼表達,這句話最後的标簽都是 “nihao”

CTC 為解決這個問題,做了兩個操作:

其一是引入了blank 标簽。 還記得wav音頻的格式嗎? 這裡面聲音有高峰也有趨近于0的時候。 CTC中認為, 高峰(spike)段的聲音對應着音素的label,而歸0的部分對應的label則是blank。  這個看起來好像沒什麼。

CTC引入的第二個操作是:

asr 的過程還是一幀MFCC39維向量進去,然後出一個label。  假設,“你好” 這個音頻共有200個MFCC 特征幀。  這200個特征幀對應着200個輸出結果,就結果空間而言,共有 音素數目^200 種可能。 而我們關心的,或者說模型訓練時已知的, 就是這 所有這   音素數目^200 種可能中,可以達成 “n i h a o” 這5種結果的數目。 

這裡就定義了一種非常簡單粗暴的映射方法——鄰近去重, 比如 ,如果輸出的200個結果是 {nnnniiiiii...hhhhhaaaaaooo}  那麼就鄰近去重 變成->{n i h a o },然後這個結果組合就是有效結果中的一種了。 而{wwwwooooocccccaaaooo} 會映射成{w o c a o} ,自然就無效的結果。

CTC認為,計算目标函數的時候,上例中的200個MFCC特征,得到的200個模型的結果, 每個小結果都對應着所有音素上的一個機率分布。 然後計算 所有能映射成 {n i h a o} 的結果的音素路徑的機率值,讓這個值越大越好就行了。

但是這樣一來,計算量就非常的大,指數級的計算量。  CTC就使用了類似HMM推到的方法。發現求偏導進行反向傳導的時候,每一幀MFCC對應的結果的導數,都可以利用前一時刻的兩個狀态的結果直接求到。 即 類似這樣:

語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC

這樣一來,整體計算量就急劇萎縮成了 7*T*音素個數。 

使用CTC的一個展示:

語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC

二、流行的模型

2012年,微軟鄧力和俞棟将前饋神經網絡FFDNN(Feed Forward Deep Neural Network)引入到聲學模型模組化中,将FFDNN的輸出層機率用于替換之前GMM-HMM中使用GMM計算的輸出機率。 從這裡開始, DNN-HMM混合系統的風潮起來了。

目前流行的方式大概以下幾類(主要還是集中在語音模型領域,而且是直接端到端的):

語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC

1-2年前最流行的架構:

從下圖模型可以看到,此時HMM仍然是主要的模型,隻是把之前GMM的部分換成了DNN了。

語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC

然後,自然不能少了RNN系列的解決方案:

RNN解決方案

可以看到,最上層仍然是HMM,大緻原理,基本可以直接從圖中看出來。

語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC

主流模型

緊接着,HMM模型也給去掉了,進入了主流語音模型時代。

以下是幾款流行的主要模型(以訊飛的模型居多),這個時候,已經可以直接從圖上看出原理了。

語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC
語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC
語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC
語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC
語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC
語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC

此前,百度語音每年的模型算法都在不斷更新,從 DNN ,到區分度模型,到 CTC 模型,再到如今的 Deep CNN 。基于 LSTM-CTC的聲學模型也于 2015 年底已經在所有語音相關産品中得到了上線。比較重點的進展如下:1)2013 年,基于美爾子帶的 CNN 模型;2)2014年,Sequence Discriminative Training(區分度模型);3)2015 年初,基于 LSTM-HMM的語音識别 ;4)2015 年底,基于 LSTM-CTC的端對端語音識别;5)2016 年,Deep CNN 模型,目前百度正在基于Deep CNN 開發deep speech3,據說訓練采用大資料,調參時有上萬小時,做産品時甚至有 10 萬小時。

語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC

三 、其它相關技術

語音識别(ASR)基礎介紹第四篇——當今流行做法與CTC

由于當今流行的模型大部分都是基于deep neural network的, 網絡的形态基本在 CNN RNN 以及全連接配接上更換。 這些大都很通用。 是以這裡沒有再細講原理,而是直接貼圖展示。 具體哪種方案更好,恐怕要真實的投入并嘗試才能得知了。 目前訓練所需要的機器代價也是比較高的。開源的語音資料網上倒是不難搜到。如果是真感興趣的同學,可以考慮租用雲伺服器的形式來自己做下測試。 

繼續閱讀