天天看點

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

前言

本筆記參考的課程是李宏毅老師的自然語言處理

課程Link:https://aistudio.baidu.com/aistudio/education/lessonvideo/1000466

Token

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Token是模型的輸出形式,以上圖語音識别為例,輸出的text包含了N個Token,每個Token有V種符号

目前,Token主要有下面五種具體形式:

  • Phoneme

    音标,即語言的發音。

    如果想要換算成文本,需要有個Lexicon(詞典表),例如cat ⟶ K AE T

  • Grapheme

    字母

    最直接的形式,總數為26個字母+空格+其它符号,不需要詞典表

  • Word

    詞組

    也是比較直覺的形式,存在的問題是詞組的總量太多,比如英文常用詞組數量>100K

  • Turkish

    介于Word和Grapheme之中的詞元,比如英文裡的詞根詞綴

  • Bytes

    常用編碼,比如UTF-8,好處是數量V大小固定為256,并且可以用同樣的形式表示符号和不同語言

根據統計,目前用的最多的是Grapheme和Phoneme

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Acoustic Feature

上面的Token考慮的是輸出部分,現在考慮輸入部分的形式,即聲學特征(Acoustic Feature)

Acoustic Feature主要有下面4種形式:

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion
  • Waveform

    最原始的聲波信号

    存在的問題是不同語音可能會存在類似的信号

  • Spectrogram

    頻譜圖,聲波信号進行DFT變換得到

    在頻域中,可以對不同語言的特征有較好的區分

  • filter bank

    濾波器組

    将頻譜圖通過不同的濾波器,進一步提取特征

  • MFCC

    梅爾頻率倒譜系數(Mel-Frequency Cepstral Coefficients)

    filter bank的結果取log之後再用DCT獲得MFCC

根據統計,目前用的最多的是filter bank

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Models

上面解決了輸入和輸出兩個部分,下面進入到中間的模型(Models)部分。

在自然語言進行中,模型的架構基本一緻,分成三個部分:編碼器(Encoder)、上下文(Context)、解碼器(Decoder)

主要模型有下面6種:

  • Listen, Attend, and Spell (LAS)
  • Connectionist Temporal Classification (CTC)
  • RNA
  • RNN Transducer (RNN-T)
  • Neural Transducer
  • Monotonic Chunkwise Attention (MoChA)

Listen, Attend, and Spell (LAS)

LAS分成Listen, Attend,Spell三個部分,其中Listen對應編碼器,Spell對應解碼器,Attend是在Context中引入了注意力(Attend)機制。

Listen

首先看Listen編碼器部分,結構如下圖所示:

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

輸入輸出數量相同,中間的Encoder可以使用各種神經網絡。

比如,使用RNN:

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

也可以使用CNN,這裡的CNN和圖像領域的卷積神經網絡比較類似:

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

也可以使用多個CNN,或者CNN+RNN的組合形式

另外,輸入和輸出個數一樣,參數可能會太多,并且效果不一定很好。是以,也可以引入圖像領域中下采樣(Down Sampling)的方式

如圖所示,下面展示了四種下采樣的思路。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Pyramid RNN類似池化的思想,将兩個相鄰融合成一個進行輸出。

Pooling over time是間隔得舍棄進行輸出。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

TDNN是類似Dropout的思想,将DNN輸出的一部分選擇性舍棄

Truncated Self-attention是通過一定時間範圍内,選取範圍内的進行輸出。

Attention

有了輸出h向量之後,需要引入注意力機制,将其轉換成Context向量。

Attention機制有不同的方法,下面是兩種方法:

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

如圖所示,第一種是Dot-product Attention。

圖中的z0是後續解碼器中的一個狀态,輸入h和z,然後進行指數變換後再點乘,最後用一個函數來進行輸出a

這個過程就是比對(match)的過程,用來比對相似度,相似度越高,則a越大

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

另一種方法是Additive Attention。

即輸出a的方式發生了變化,先進行指數變換,再相加,利用函數輸出a。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

這裡的a就是注意力權重,每個h有了a之後,context就可以用權重相乘的方式計算出來。

這裡初學可能會産生一個疑問,為什麼要引入注意力機制?除了提升效率之外,更主要的是語音識别的場景中,翻譯的第一個字的語義可能并不是第一個聲音産生的,比如英文和中文的語序不一樣。使用注意力就可以解決這個問題。

Spell

有了c向量之後,下面就可以進入到解碼環節。

這裡的解碼器和編碼器一樣,仍然可以采用多種網絡模型,這裡以RNN為例。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

如圖所示,将z0和c0輸入到隐藏狀态z1,輸出得到各個Token的機率,選取機率最大的toekns作為輸出,是以得到字母c。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

循環上述過程,可以得到預測的單詞cat,最後

<EOS>

表示預測終止。

注意,這和循環神經網絡略有差別的是,上一時刻輸出的結果同時要輸入到下一時刻的隐藏狀态。

Training

上面是整個模型預測過程,下面将進入到模型的訓練。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

該網絡屬于有監督模型,是以需要Token的标簽,如圖所示,這裡的C就是标簽,注意這是獨熱編碼(One-hot)形式,輸出的token和這個标簽做交叉熵損失,讓損失盡可能小,就可以讓輸出逐漸趨近于标簽。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

上面是第一個狀态z0的訓練,對于下一個狀态,需要把前面的标簽(ground truth)同時輸入進去訓練,這個步驟也叫做Teacher Forcing。

前面在解讀Spell時提到,考慮到語義間的相關性,下一個輸入中需要包含前面的輸出。這裡為什麼不選擇輸入前面的輸出内容?下圖作了解釋:

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

對于z1狀态,它正确的訓練方式應該是,看到c,輸出a,如果看到的不是c,卻輸出a,那之前的訓練都白費了!這就是為什麼需要使用Teacher Forcing。

Work

下面需要來看看這個模型是否有效(work)

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

表中的名額為錯誤率,研究表明,訓練2000小時,LAS的效果還不如傳統模型(CLDNN-HMM),錯誤率幾乎比後者高一半,但在訓練12500小時後,LAS的錯誤率超越了傳統模型,并且,相比于其它模型結構,LAS把所有内容融合成一個整體的大網絡,模型大小僅有0.4GB。

綜上,LAS還是有效果的!

Limitation

任何模型都有局限性(Limitation),LAS的問題在于,需要聽完整段話才能進行識别翻譯,這就無法勝任同聲翻譯這樣的場景。

Connectionist Temporal Classification (CTC)

Structure

既然LAS無法實作實時性,那麼一個樸素的想法就是,能否根據單個h,直接輸出一個Token。CTC就是這麼幹的。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

如圖所示,CTC沒有采用注意力機制,而是直接将輸出的h單獨輸入進一個模型W,之後做Softmax來輸出各Token的分布,取最大值輸出。

但是,并不是每一個h都有語義資訊。是以,需要在輸出的Token中引入一個空對象,是以Token集的大小為V+1。

值得注意的是,很多情況下,兩個相鄰的語音向量表達同一個意思,是以CTC對連續相同的輸出進行剔除,同時,最終的輸出值會把空對象去除。規則舉例如下:

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Training

對這個模型進行訓練,就會産生一個額外的問題。比如,我拿到一段語音資訊,它的label是好棒,那麼将如何對四個輸出進行合理的配置設定空對象或連續情況。CTC的做法很粗暴,既然無法搞清楚,那就羅列所有可能的情況,所有标簽全部塞進去。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Work

實驗表明,CTC确實有一定的效果,但從表中的資料看,CTC似乎并不顯得非常優秀。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

RNA

由于CTC是每個輸出都是獨立的,是以即使除去空對象,輸出很有可能還是會産生連續的Token,像口吃一樣,一個樸素的想法是能不能把前面的輸出再輸入到下一時刻。

RNA就做了這點改進。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

但是,這樣做仍然會産生的一個問題是,有的音節對應的是兩個Token,比如“th”,這樣就比較難輸出,RNN-T就做了改進,用來解決這一問題。

RNN-T

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

如圖所示,RNN-T在RNA的基礎上,将一個ht複制多份進行輸出,直到輸出一個空對象表示輸出完成。

(注:圖中箭頭右側是RNN-T的部分結構)。

為什麼說是部分結構,因為真正的RNN-T又在上面加了一個Language Model:

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

這個Language Model主要是用來友善訓練,因為和CTC的訓練問題一樣,并沒有嚴格劃分的合适标簽,而這裡的Language Model輸出會忽略空對象,這樣就可以和标簽做交叉熵損失。

Neural Transducer

CTC、RNA、RNN-T都沒有用到注意力機制,而LAS用到了。一個樸素的想法是,既然注意力機制有效果,為什麼不用呢?于是,Neural Transducer就在RNN-T的基礎上,加入了注意力機制。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

如圖所示,Neural Transducer規定一個視窗window,将視窗内的h進行注意力處理,進而選取部分進入到Decoder之中。這個視窗的長度是一個人為給定的超參數。

視窗的長度和模型的效果對應關系如圖所示。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

MoChA:Monotonic Chunkwise Attention

Neural Transducer創新性地提出了一個視窗,那麼,這個視窗長度是否可以動态變化呢?MoChA就注意到了這一點。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

如圖所示,MoCha在Neural Transducer的基礎上,單獨設定了一個判别器,輸入狀态z和目前的h,輸出yes和no,yes表示視窗在這裡截止。這張圖可能并不太清楚,看原視訊的動态效果比較有助于了解。

summary

下面對各模型進行一個簡單概況小結:

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

Language Model

在這一節需要引入一個新的概念:Language Model

在之前提到的Models,以LAS為例,所做的工作基本可以用下面這個式子來進行表示。即輸入X,輸出機率值最大的Y作為結果。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

但是,能夠能進一步優化?

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

借鑒傳統語音識别模型(HMM)的計算公式,在目前的輸出Y後乘上一個P(Y)的Token sequence的機率。而這個P(Y)的數值就要通過Language Model來計算得到。

N-gram

N-gram是一種比較簡單的計算方式。

以2-gram為例,要計算右上角的句子的整體機率,就要計算每個單詞在前一個單詞基礎上的機率,然後進行乘積。

而每一部分的機率可以用下面的公式進行計算得到,以P(beach|nice)為例,其計算方式為(nice beach)出現的數量/nice的數量。

同理可以擴充到3-gram,4-gram …

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

然而,這樣做可能存在的一個問題是,由于語料庫的數量不完全,有些沒出現過的gram機率為0。比如下圖中的狗會跳(jumped | the,dog)因為沒出現過機率為0,變成了不可能事件,顯然與事實不符。于是就使用一個很小的數字來替代0,這就是平滑操作。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Continuous LM

Continuous LM的方式是借鑒到了推薦系統中的一個算法Matrix Factorization。

以下圖為例,B的超電磁炮數值不确定,但可以根據A喜歡禦坂美琴和超電磁炮,以及B喜歡禦坂美琴的資訊來推測B喜歡超電磁炮。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Continuous LM就是将不同的history和Vocabulary類似地進行表示,通過最小化損失L的方式,利用已知的資訊來推算出合适的h和v向量。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

可以進一步建構網絡,來替換表格這種形式。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

這裡簡單使用全連接配接網絡,即NN-based LM,訓練過程如下圖所示。

給出第一個單詞,輸出下一個單詞,不斷往後,直到句子結束。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

當然,這個NN結構也可以替換成更複雜一些的RNN

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Fusion

現在Models和Language Model都準備好了,下面就用三種方式将他們融合(Fusion)。

Shallow Fusion

Shallow Fusion的思路比較簡單,即将兩個模型的輸出取對數之後相加,如圖中紫色方框,公式中的

\lambda

用來控制兩個模型的相加的權重。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Deep Fusion

Deep Fusion的結構在下圖中右側位置。它并不是将兩個模型的輸出直接相加,而是将兩個模型的隐藏層輸入到一個新的神經網絡中進行訓練。這會導緻的一個問題是,假如更換了Language Model,那個就需要重新進行訓練。

為什麼有時候需要更換Language Model呢?因為LM用來統計的是詞典中各詞的分布機率,在不同領域中,相同的單詞可能會傾向不同的語義,這就需要更換LM來實作更精準的識别/翻譯。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

為了解決這一問題,下面就是對Deep Fusion進行進一步改造,在LM中,并不是直接輸出隐藏層結果,而是輸出下一層在SoftMax前的結果,這樣的好處是更換LM後無需再次訓練。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion

Cold Fusion

Cold Fusion結構上和Deep Fusion一模一樣,差別在于Cold Fusion的LM在正式訓練之前已經單獨完成訓練,個人猜測這個名稱中Cold的意思就是将LM這樣的變量提前變成常量。這樣做的好處是可以加快LAS的訓練速度,但同時問題是不能随便更換LM,否則要重複訓練。

【NLP】自然語言處理學習筆記(一)語音識别前言TokenAcoustic FeatureModelssummaryLanguage ModelFusion