语音识别2:CTC对齐的算法
一、提要
?
如果現在有一個包含剪輯語音和對應的文本,我們不知道如何將語音片段與文本進行對應,這樣對于訓練一個語音識別器增加了難度。?
如下圖,存在圖片與文本的對齊不易,語音聲波對文本的對齊不易。
以上構成如下事實:
輸入(如音頻信號)用符號序列?和標簽,為了方便訓練這些數據我們希望能夠找到輸人X與輸出Y 之間精確的映射關系。
先梳理一下有幾個難點:
使用CTC算法能克服上述問題。到這里可以知道CTC就是可以解決輸入輸出對應問題的一種算法。
二、算法原理
這里我們首先需要明確的是,還拿語音識別來說,現在使用的CTC常用的場景是RNN后接CTC算法,RNN模型輸入是一個個音頻片段,輸出個數與輸入的維度一樣,有T個音頻片段,就輸出T個維度的概率向量,每個向量又由字典個數的概率組成。例如網絡輸入音頻個數定為T,字典中不同字的個數為N,那么RNN輸出的維度為T × N 。根據這個概率輸出分布,我們就能得到最可能的輸出結果。在接下來的討論中可以把RNN+CTC看成一個整體,當然也可以將RNN替換成其他的提取特征算法。
?
2.1 損失函數的定義
對于給定的輸入X,我們訓練模型希望最大化Y 的后驗概率P(Y|X),P(Y|X)應該是可導的,這樣我們就能利用梯度下降訓練模型了。
?
2.2 測試和驗證
當我們已經訓練好一個模型后,輸入X,我們希望輸出Y 的條件概率最高即?而且我們希望盡量快速的得到?值,利用CTC我們能在低投入情況下迅速找到一個近似的輸出。
2.3 CTC對齊算法
????????CTC算法對于輸入的X能給出非常多的Y的條件概率輸出(可以想象RNN輸出概率分布矩陣,所以通過矩陣中元素的組合可以得到很多Y值作為最終輸出),在計算輸出過程的一個關鍵問題就是CTC算法如何將輸入和輸出進行對齊的。在接下來的部分中,我們先來看一下對齊的解決方法,然后介紹損失函數的計算方法和在測試階段中找到合理輸出的方法。
????????CTC算法并不要求輸入輸出是嚴格對齊的。但是為了方便訓練模型我們需要一個將輸入輸出對齊的映射關系,知道對齊方式才能更好的理解之后損失函數的計算方法和測試使用的計算方法。
為了更好的理解CTC的對齊方法,先舉個簡單的對齊方法。假設對于一段音頻,我們希望的輸出是Y = [ c , a , t ] 這個序列,一種將輸入輸出進行對齊的方式如下圖所示,先將每個輸入對應一個輸出字符,然后將重復的字符刪除。
?上述對齊方式有兩個問題:
通常這種對齊方式是不合理的。比如在語音識別任務中,有些音頻片可能是無聲的,這時候應該是沒有字符輸出的
對于一些本應含有重復字符的輸出,這種對齊方式沒法得到準確的輸出。例如輸出對齊的結果為[ h , h , e , l , l , l , o ],通過去重操作后得到的不是“hello”而是“helo”
為了解決上述問題,CTC算法引入的一個新的占位符用于輸出對齊的結果。這個占位符稱為空白占位符,通常使用符號? \epsilon?,這個符號在對齊結果中輸出,但是在最后的去重操作會將所有的? \epsilon?刪除得到最終的輸出。利用這個占位符,可以將輸入與輸出有了非常合理的對應關系,如下圖所示。?
?在這個映射方式中,如果在標定文本中有重復的字符,對齊過程中會在兩個重復的字符當中插入? \epsilon?占位符。利用這個規則,上面的“hello”就不會變成“helo”了。
?
回到上面Y = [ c , a , t ] 這個例子來,下圖中有幾個示列說明有效的對齊方式和無效的對齊方式,在無效的對齊方式中舉了三種例子,占位符插入位置不對導致的輸出不對,輸出長度與輸入不對齊,輸出缺少字符a
?
?2.4 CTC算法的對齊方式有下列屬性:
- 輸入與輸出的對齊方式是單調的,即如果輸入下一輸入片段時輸出會保持不變或者也會移動到下一個時間片段
- 輸入與輸出是多對一的關系
- 輸出的長度小于等于輸入
三、CTC損失函數
????????這里要明確一點,對于一個標定好的音頻片段,訓練該片段時,我們希望的輸出就是標定的文本,如下圖所示,音頻說的一個hello,RNN或者其他模型輸出的是相同數量的向量,向量里是每個字母的概率。
?對于一對輸入輸出( X , Y ) 來說,CTC的目標是將下式概率最大化:
????????解釋一下,對于RNN+CTC模型來說,RNN輸出的就是概率,t表示的是RNN里面的時間的概念。乘法表示一條路徑的所有字符概率相乘,加法表示多條路徑。因為上面說過CTC對齊輸入輸出是多對一的,例如he?l?lo?與h e e ? l ? l o對應的都是“hello”,這就是輸出的其中兩條路徑,要將所有的路徑相加才是輸出的條件概率.
????????但是對于一個輸出,路徑會非常的多,這樣直接計算概率是不現實的,CTC算法采用動態規劃的思想來求解輸出的條件概率,如下圖所示,該圖想說明的是通過動態規劃來進行路徑的合并(看不懂也沒關系,下面有詳細的解釋)
這里有必要將動態規劃分開另外講述:《動態規劃原理》。?
?四、CTC的特征
- 條件獨立假設:
????????CTC的一個非常不合理的假設是其假設每個時間片都是相互獨立的,這是一個非常不好的假設。在OCR或者語音識別中,各個時間片之間是含有一些語義信息的,所以如果能夠在CTC中加入語言模型的話效果應該會有提升。
- 單調對齊:
????????CTC的另外一個約束是輸入X與輸出Y之間的單調對齊,在OCR和語音識別中,這種約束是成立的。但是在一些場景中例如機器翻譯,這個約束便無效了。
- 多對一映射:
????????CTC的又一個約束是輸入序列X的長度大于標簽數據 Y的長度,但是對于X XX的長度大于Y YY的長度的場景,CTC便失效了。
參考
CTC算法詳解_Michael’s Blog-CSDN博客_ctc
總結
以上是生活随笔為你收集整理的语音识别2:CTC对齐的算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 环境调试: RuntimeWarning
- 下一篇: 语音识别1: 音频信号采集、并存入 wa