深度學習與人類語言處理-語音識別(part3)


上節回顧深度學習與人類語言處理-語音識別(part2),這節課我們接着看seq2seq模型怎么做語音識別


上節課我們知道LAS做語音識別需要看完一個完整的序列才能輸出,把我們希望語音識別模型可以在聽到聲音的時候就進行輸出,一個直觀的想法就是用單向的RNN,我們來看看CTC是怎么做的

CTC

根據上面說的,在線語音識別,模型在聽到聲音的時候就需要輸出,我們看下使用RNN的基本架構

input: 長度為T的聲學特征
Encoder:單向RNN
ouput:長度為T的token,每一個輸出位置對應詞典中每個詞的概率

但是對每一個輸入的聲學特征不總是會有對應的輸出token,每一聲學特征所包含的信息是非常少的,所以CTC在輸出的詞匯表中加入了一個標記\(\phi\),表示什么也沒有,詞典大小變為V+1

ouput:長度為T的token,其中包括 𝜙, 需要合並重復的token,移除𝜙

舉例來說:

但是這里我們會發現一個問題,對於一個真實的輸出,\(\phi\) 的位置有很多種情況,舉個栗子

真實的輸入輸出:

input:\(x1,x2,x3,x4\) ; ouput: 好棒

可能的輸出:

好好棒\(\phi\), \(\phi\)好好棒, 好好棒棒 , 好棒\(\phi\phi\), 好\(\phi\)棒……

所以CTC在訓練的時候需要窮舉所有可能組合,這個我們后面再講

CTC work 嗎?

從這個結果我們可以看到,CTC的表現很慘,在沒有使用其他方法處理的情況下已經壞掉了,比LAS壞了很多,但是在加入語言模型調整后,已經可以work了

issue

那CTC存在什么問題呢?

  • 每一步的輸出是獨立的

假設前三個輸入都屬於“c”的聲學特征,但是模型在看到第一個輸入就輸出了“c“,第二步輸出\(\phi\), 第三步又輸出了”c",那最終的輸出就是“cc”,顯然不對啊

RNN Transducer (RNN-T)

在介紹RNN-T之前,我們先看下RNA(Recurrent Neural Aligner),不是核糖核酸啊

  • CTC Decoder(把CTC的softmax看做Decoder)

CTC的每一個輸出是相互獨立的

  • RNA(把softmax換成RNN)

在從上面的圖可以看到,RNA就是增加了輸出之間的依賴,把CTC的線性分類層換成RNN就可以了

目前為止我們看到的都是吃一個輸入,輸出一個token,那有沒有可能吃一個輸入,輸出多個token呢?舉例來說,輸入為“th”,只有一個音,但是需要兩個輸出。當然也可以把“th”作為一個單獨的token加入到詞典

RNN-T就是為了解決這個問題

每次看到一個\(h^t\),輸出對應的token,直到對應輸入被解碼完了,就輸出一個\(\phi\),告訴模型給我下一個輸入,所以一共會有T個\(\phi\) 會被輸出

RNN-T和CTC有同樣的組合問題:

假設“好棒”有四個聲學特征:
𝜙1 好 𝜙2 𝜙3 𝜙4 𝜙5 棒 𝜙6
𝜙1 𝜙2 𝜙3 𝜙4 𝜙5 好 棒 𝜙6

RNN-T同樣會在訓練時窮舉所有的組合

實際上RNN-T訓練了一個獨立的RNN網絡,輸出會被接到RNN,\(\phi\)會被忽略

為什么需要額外的RNN呢?

  • 這個RNN相當於一個語言模型,只接受token作為輸入。所以可以直接先用大量文字訓練RNN

  • 剛才說到輸出中\(\phi\) 的位置有很多種可能,如果RNN把\(\phi\)也作為輸入,在對所有組合進行訓練是很困難的

Neural Transducer

前面的幾個模型每次都是輸入一個,Neural Transducer 一次接受窗口范圍的輸入

對Encoder的輸出,每次取一個窗口作為Decoder的輸入,先做一下attention然后開始輸出,每次輸出\(\phi\) 就會讀下一個窗口

那窗口的長度應該設置多長呢?文獻中實驗了不同的長度

在沒有用attention時,長度變長后結果就壞掉了

使用attention后,發現長度變化對結果影響不是很大

MoChA: Monotonic Chunkwise Attention

在Neural Transducer 每次窗口長度是固定的,在MoChA中設計了動態的窗口

首先使用attention決定窗口應該放在哪里,然后對每一個窗口輸出一個token,注意這里不需要\(\phi\) 了,然后移動找下一個窗口

Summary

總結一下語音識別中用到的幾個seq2seq模型

  • LAS:就是seq2seq
  • CTC:decoder 是 linear classifier 的 seq2seq
  • RNA:decoder 是 RNN 的seq2seq,輸入一個就要輸出一個
  • RNN-T: decoder 是 RNN ,輸入一個就要輸出多個的 seq2seq
  • Neural Transducer:每次輸入 一個 window 的 RNN-T
  • MoCha: window 移動伸縮自如的 Neural Transducer

references:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM