潮科技行業入門指南 | 深度學習理論與實戰:提高篇(4)——基於HMM...

2020-12-21 36氪

編者按:本文節選自《深度學習理論與實戰:提高篇 》一書,原文連結http://fancyerii.github.io/2019/03/14/dl-book/。作者李理,環信人工智慧研發中心vp,有十多年自然語言處理和人工智慧研發經驗,主持研發過多款智能硬體的問答和對話系統,負責環信中文語義分析開放平臺和環信智慧機器人的設計與研發。

以下為正文。

我們可以根據說話的過程把語音識別的各個單元(unit)分成如下圖所示的層次結構。這是一個生成的過程。最上面是utterance,也就是一句話(不一定是語言學上的完整一句話),比如這裡的」No right」。往下一層是詞(word),比如這裡是兩個詞」No」和」right」。再往下是subword(比如因子),單詞」No」根據發音詞典可以分解為兩個因子[「n」, 「oh」]。再往下就是因子的HMM(比如用三狀態的HMM來表示一個因子)。最後一層是聲學模型,它根據狀態生成觀察。

發聲過程從上到下輸入是utterance W,輸出是聲學特徵X。而識別的過程正好反過來,我們需要尋找:

上式中()P(W)就是語言模型,而(|)P(X|W)就是聲學模型,通常會包括發音模型,HMM-GMM模型,當然也可以用DNN來替代GMM變成HMM-DNN模型。

圖:語音單元的層次結構

連續語音識別

簡介

前面介紹的HMM和GMM可以用來做孤立詞的識別,比如識別0-9十個數字,每個數字對應一個3狀態的HMM,發射概率可以是GMM模型。通過訓練數據我們可以使用前向後向算法訓練HMM-GMM的參數,而預測的時候我們可以對十個模型分別計算後驗概率:

(|)∝(|)(),=0,1,..,9

其中(|)P(O|Mi)可以通過前向算法計算出來,而()P(Mi)就是10個數字的先驗概率,可以簡單的認為它們是等概率的。然後我們選擇概率最大的i作為識別的結果。

那麼怎麼處理包含多個詞的句子呢?當然最簡單的是先進行詞的切分,然後分別識別每一個詞。但是這顯然不好,首先我們說話不是一個詞一個詞來說的,要正確切分每一個詞是很困難的;其次同音或者發音類似的詞很多,我們需要考慮整個句子根據上下文才能正確的識別每一個詞。

為了實現連續的識別,我們可以把每個詞的HMM拼接成大的HMM,訓練的時候我們是知道句子的每一個詞的,因此我們可以用詞的HMM拼接成句子的HMM。預測的時候也是類似的,根據語言模型,遍歷所有可能的句子,拼接得到這些句子的HMM。然後用HMM-GMM計算聲學模型概率,再加上語言模型的概率得到句子的最終概率,最後選擇概率最大的那個句子。當然這個搜索空間是非常大的,我們需要近似的搜索算法,後面的解碼器部分會介紹。這裡我們先只考慮聲學模型的訓練部分。

但是每個詞都使用一個HMM來建模有很多缺點:詞很多,這需要很多個HMM模型;很多詞在訓練數據中出現很少,也就是數據稀疏的問題;為了識別一個新詞需要重新訓練聲學模型,比如加入一個新的人名。

音子模型

為了解決上面的問題,我們通常對更細粒度的子詞單元進行HMM建模。雖然詞很多,但是組成詞的因素是不多的,比如英語的音素也就是四五十個左右。因此我們可以對每一個phone建立一個HMM模型,而詞的HMM就可以使用它的phone的HMM拼接起來。當然這就需要知道每個詞由哪些phone組成,最常見的是人工來編纂發音詞典,比如下面是CMU發音詞典的兩個詞:

這樣給定一個詞,我們就知道它的音子序列,然後我們通過把每個音子的HMM拼接起來就可以得到這個詞的HMM,類似的我們把很多詞的HMM拼接起來就可以得到一個句子的HMM。

使用發音詞典有新詞的問題,比如詞典裡沒有」balisong」這個詞,那麼我們無法識別這個詞。但是對於表音的語言(比如英語),我們是可以」猜測」出未知詞的發音的。這個時候我們可以使用一個模型來學習怎麼把詞變成因子序列,這個模型通常被成為Grapheme-to-Phoneme (G2P)模型。我們可以根據發音詞典來學習發音規律,這樣新詞來了之後就可以猜測可能的發音。這顯然可以使用我們熟悉的Seq2seq模型來解決,有興趣的讀者可以試試g2p-seq2seq。

對於每個音子,我們通常使用三個狀態的HMM來建模。如下圖所示,音子/ih/可以用三狀態的HMM建模。這樣一個詞,比如six,我們就可以把4個音素/s ih k s/拼接得到一個大的HMM,如下圖所示。

圖:音子ih的HMM模型

圖:詞six的HMM模型

上下文相關的(Context Dependency/CD)音子模型

但是一個音子在不同的上下文會有不同的發音,這就是所謂的協同發音(Coarticulation)。為了解決這個問題,我們通常建立上下文相關的音子模型,最常見的就是考慮一個音子的左右兩個音子,這就是triphone模型。我們通常使用類似l-x+r來表示當前考慮的音子是x,它左邊的音子是l而右邊是r。根據triphone是否跨越詞的邊界又可以分類為詞內的(word-internal) triphones和跨詞的(cross-word) triphone。比如句子」don’t ask」,如果使用詞內的triphone,則可以表示為:

sil表示silence,我們可以理解為一個特殊的詞,它不考慮上下文。n-t表示當前音子是t而左邊是n,ah+s表示當前音子是ah而右邊是s。

如果使用跨詞的triphone,則應該可以表示:

那麼有多少個triphone呢?假設音子有40個,那麼理論上可能有403=64,000403=64,000,實際上英語可能出現的triphone會有50,000左右。假設我們使用3狀態的HMM,每個狀態使用10個分量的GMM模型,那麼總共有1.5M個高斯分布。再假設我們使用39維的MFCC特徵,高斯分布的協方差矩陣是對角陣,那麼每個高斯有39(均值)+39(協方差矩陣)=78個參數。78 * 10+10(GMM的混合參數)=790個參數。那麼總共有50,000 * 3 * 790=118M參數。

我們的訓練數據很難覆蓋這麼多的參數,很多參數對應的訓練數據沒有或者很少,因此很難準確的估計其參數。為了解決這個問題,我們會使用參數共享(Parameter Sharing)的方法。通常有兩種參數共享方法:共享模型(Sharing models)和共享狀態(Sharing states)。

共享模型就是把比較類似的triphone聚類在一起,得到的triphone通常叫做Generalized triphone,如下圖所示。

圖:共享模型

共享狀態就是更加細粒度的共享,它是把每個triphone的每個狀態進行聚類,如下圖所示。

圖:共享狀態

聚類通常使用語音決策樹(Phonetic Decision Tree)算法,這是一種自頂向下(分裂)的方法。剛開始同一個音素的所有triphone都在根節點,然後每個節點都會根據問題進行分類,常見的問題類似於:

左邊是不是一個鼻音?右邊是不是摩擦音?下圖是語音決策樹的一個示例。

圖:語音決策樹示例

決策樹可以一直分裂下去直到每個節點只包含一個triphone,這顯然沒有意義。我們需要有一個停止分裂的標準,一種標準就是分裂之後要比分裂前得到的模型要好?什麼叫好呢?那就是新模型在訓練數據上的似然概率要比分裂前好,而且增量ΔΔ越大越好,如果沒有增量那麼就停止分裂。另外就是問這些問題的順序,我們會選擇似然增量最大的那個問題。

HMM模型在語音識別系統中的應用

前面HMM模型原理的部分介紹了它在語音識別系統中的應用,下面我們從系統實現的架構來了解HMM在語音識別系統中的應用。HMM模型通常用於聲學模型的建模,而除了聲學模型,語音識別系統還包括語言模型以及更加關注工程實現的解碼器。

基於HMM的語音識別系統架構如下圖所示。來自麥克風的音頻波形被轉換成固定大小(比如39維的MFCC)的聲學特徵向量的序列1:=1…Y1:T=y1…yT,這個過程叫做特徵提取。然後解碼器(decoder)試圖找到最優的詞序列1:=1…w1:L=w1…wL使得後驗概率最大:

因為(|)P(w|Y)比較難於直接建模,因此我們使用貝葉斯公式,因為分母與w無關,因此可以得到:

圖:基於HMM的語音識別系統架構

(|)P(Y|w)通過聲學模型(Acoustic Model)來確定,而()P(w)由語言模型來確定。聲學模型的基本單元是音子(phone),比如單詞」bat」的音子是/b/ae/t/。

每個音子都會有一個聲學模型(HMM),那麼一個單詞的模型是由它的音子的模型拼接起來,比如上面的單詞」bat」就由/b/ae/t/三個音子的HMM拼接而成。而單詞與音子的對應關係就是發音詞典(Pronunciation Dictionary),有的單詞會有多種發音。每個音子的HMM通過訓練數據學習出來。而語言模型通常使用N-gram模型,當然也可以使用神經網絡語言模型,通常聲學模型和語言模型是獨立訓練的。預測的時候,解碼器理論上會嘗試所有可能的詞序列,然後找到後驗概率最大的詞序列。當然實際由於搜索空間太大,一般會在搜索中進行剪枝(prune),去掉當前看來概率比較低的路徑。

HMM聲學(Acoustic)模型

前面提到過,每個詞w可以分解為Kw個基本因子(base phone)的發音單位,比如前面的bat可以分解成/b/ae/t/3個基本單元的序列。這個序列叫作這個詞的發音()1:=1,…,q1:Kw(w)=q1,…,qKw。因為有的詞有多個發音,因此我們在計算(|)P(Y|w)的時候需要遍歷詞的每一種發音:

上式中,Q是一條可能的詞序列的發音序列:

上式中,()q(wl)是詞wl的一種合法的發音,通常情況下一個詞只有一種發音,但是有些詞會有多種發音,因此(|)P(Y|w)會遍歷詞序列w的所有可能發音序列Q。

每個基本因子q由一個連續輸出的HMM來表示,如下圖所示。圖中有一個進入狀態和退出狀態,它是沒有輸出的,這兩個狀態是為了方便把不同詞的HMM串聯起來。每個因子q的HMM由兩個狀態aij和()bj(y)來表示,其中aij表示由狀態i跳轉到j的概率;bj表示在這個狀態j下輸出y的概率(分布/密度)。HMM的基於如下兩個獨立性的假設:

給定前一個時刻的狀態,當前狀態不依賴更早之前的狀態(一階馬爾科夫)給定當前時刻的狀態,當前時刻的輸出跟其它時刻的無關

圖:基於HMM的因子模型

這裡我們可以看出,通過狀態的自跳轉,HMM可以(一定程度的)解決說話人語速的問題。對於發射概率()bj(y),我們先假設它是最簡單的多變量單高斯的模型,後面我們會擴展到高斯混合模型(GMM),這就是最常見的HMM-GMM模型。它用HMM來建模狀態的跳轉,用GMM來建模一個狀態的輸出概率分布。

其中μj是狀態j的高斯分布的均值,而ΣΣj是協方差矩陣。因為y的維度通常比較高(比如39),我們通常假設ΣΣj是對角矩陣(Diagonal Matrix)。之前我們在介紹特徵提取的時候,MFCC的一個步驟就是DCT去除不同維度的相關性,從而使得這個假設能夠成立。

給定詞的發音序列Q,我們可以計算輸出Y的概率:

其中θ是給定發音序列Q時合理的狀態序列。

舉個例子,假設詞序列是兩個詞」a cat」,它的一種發音序列是/a/k/ae/t/,假設Y的長度是T=18,那麼兩種θ可能是

1θ1中音素a的中間狀態(2a2)持續了兩個時刻,而ae的中間狀態2ae2隻持續了一個時刻;而2θ2正好相反。當然上面我們只列舉了兩條路徑,實際的計算過程中,我們需要變量所有可能的θ,而任意一個狀態序列(路徑)0,1,…,+1θ0,θ1,…,θT+1(0時刻和T+1時刻是我們增加的進入和退出狀態,0θ0跳到1θ1是沒有輸出的)的概率計算如下:

在上式中0θ0和+1θT+1是進入(entry)和退出(exit)狀態,它們是沒有輸出的。它們的目的是為了方便把不同詞的HMM串聯起來。後面為了簡單,我們可以暫不考慮它們,而只關注1,…,θ1,…,θT。

聲學模型的參數=[(),(())]λ=[(aij),(bj(y))]可以使用前向後向(forward-backward)算法了估計,這是EM算法的一個例子。假設第r個訓練數據的特徵序列Yr的長度是Tr。因為我們有它對應的詞序列,那麼根據發音詞典(我們先假設一個詞只有一種發音)我們可以得到發音序列,從而可以把每個音素的HMM拼接成一個大的HMM。

比如上圖中的例子,我們把a cat的發音/a/k/ae/t/的HMM拼接起來。如果我們知道每一個時刻對應哪個因子的哪個狀態,那麼我們很容易最大似然估計出和()aij和bj(y)來。

當然我們可以用人來標註每個時刻對應哪個狀態,但是要人來標註這種對齊是非常困難而且容易出錯的。因為很多音素的邊界是很難區分,比如下圖,讓非專業的人通過看波形或者頻譜是很難準確的區分其邊界的。

圖:語音識別

假設我們知道t時刻對應的狀態的概率(當然如果認為一個時刻只能「屬於」某一個狀態,那麼它就是類似one-hot的——一個1其餘的是0)()γt(rj),這個概率表示(第r個訓練數據)t時刻的狀態是j的概率,我們通常把它叫作(狀態)佔用(occupation)概率。那麼我們很容易用如下公式最大似然估計和()aij和bj(y):

上面的公式看起來很複雜,其實它表達的意思很簡單:我們要估計狀態j對應的高斯分布的均值,那麼我們找到所有屬於這個狀態的時刻t(()γt(rj)),然後把它們平均起來就行,不過這裡因為我們認為某個時刻可能有一定的概率屬於狀態j,所以我們需要加權上概率()γt(rj)。如果我們考慮特殊情況——一個時刻t只屬於一個狀態j,那麼上面的公式會更加明顯。Σ ()Σ^(j)的估計公式其實也是類似的。

類似的我們可以估計狀態的跳轉:

這個公式可以這樣來讀:分母是變量所有的時刻,找到狀態為i的(概率),然後加起來;而分子表示t時刻是狀態i並且t+1時刻是j的概率,兩者一除就是跳轉概率。關於分子的計算——也就是t時刻是狀態i並且t+1時刻是狀態j的概率,需要理解後面要介紹的前向概率(α)和後向概率(β),請讀者熟悉這兩個概率之後再來閱讀這個公式。

前面介紹了如果我們知道()γt(rj)(其實是前向和後向概率)時,我們可以最大似然估計模型的參數,Σ,μ,Σ,aij。現在的問題是我們怎麼前向和後向概率呢?下面我們會介紹:如果知道了模型參數,Σ,μ,Σ,aij,那麼我們可以估計出這兩個概率。這樣就很有趣:我們如果知道a,那麼就可以估計b;同樣我們知道b就可以估計a。這很像雞生蛋和蛋生雞的問題。我們可以用所謂的EM算法來估計它們:首先隨機的初始化參數,Σ,μ,Σ,aij,然後用它們來估計前向後向概率,然後再用前向後向概率估計新的參數,Σ,μ,Σ,aij,然後用新的參數,Σ,μ,Σ,aij估計前向後向概率,直到模型收斂。

那麼接下來的問題就是:如果我們知道了模型的參數=(,Σ,)λ=(μ,Σ,aij),我們怎麼估計前向後向概率並且怎麼用前向後向概率來就是狀態佔用概率(State Occupation Probability)?

在介紹前向後向概率前我們先來看一下如果不使用動態規划算法,我們應該怎麼計算t時刻屬於狀態i的概率?假設有3個狀態1、2和3。這個序列的長度是T,那麼總共有33T種可能的狀態序列(路徑)(當然有些狀態之間的跳轉是不可能的,另外我們的狀態序列要受發音序列約束,而發音序列又由詞序列約束)。 我們把t時刻固定為狀態i,那麼總共還有313T1中可能的路徑,如果模型的參數已知,那麼每一條狀態序列輸出y的概率都可以簡單的計算出來,我們把所有這些概率加起來就得到t時刻狀態為i的概率。但是這樣計算的實際複雜度是指數級的,實際根本無法使用。如果我們仔細觀察,會發現裡面很多的計算是重複的,因此我們可以使用動態規劃來減少重複計算。這就是下面我們要介紹的前向-後向算法。

我們首先定義前向概率=(1:,=;)αtrj=P(Y1:tr,θt=sj;λ),它的意思是t時刻的狀態為j並且1到t時刻輸出為1:Y1:tr的聯合概率。而後向概率=(()+1:()|=;)βtri=P(Yt+1:T(r)(r)|θt=si;λ),它的意思是t時刻狀態為i的條件下t+1到T時刻的輸出為+1:Yt+1:Tr的條件概率。注意這兩個概率的區別,一個是聯合概率一個是條件概率。

這兩個概率都可以用遞推公式計算:

我們可以這樣「讀」第一個公式:t時刻處於狀態j,那麼可以是t-1時刻屬於狀態i,然後從狀態i跳到j(aij),並且t時刻從狀態j輸出(發射)()yt(rj)((())bj(yt(r)))。第二個公式也是類似的,不過它是從後往前的。

另外我們需要遞推公式的初始化條件()1α1(rj)和()βT(ri)。對於經典的HMM文獻,除了狀態之間的跳轉概率之外還有一個初始狀態概率——也就是在第一個時刻時處於這個狀態的概率。但是我們這裡介紹的HMM沒有這個初始狀態概率,而是新增加了兩個特殊狀態0s0和+1sN+1。前者只能跳轉到狀態1,…,s1,…,sN,而後者只能有狀態1,…,s1,…,sN跳入,並且它們都沒有輸出。這兩個特殊狀態與1,…,s1,…,sN的跳轉概率可以等價的實現初始狀態概率的作用。

有了初始條件和遞推公式,我們就可以很容易的計算前向概率和後向概率了,它的時間複雜度是(2)O(N2T)。但是等等!我們的目的似乎不是求這樣兩個有些奇怪的概率,我們的目的是想知道狀態佔用概率()γt(rj),也就是t時刻屬於狀態j的概率。我們可以這樣用前向和後向概率來計算這個概率:

這裡不詳細推導這個公式,我們可以這樣來「理解」:t時刻處於狀態j的概率是所有1到t時刻的輸出是1:Y1:t並且t時刻狀態是j的聯合概率(()αt(rj))和在t時刻狀態為j的條件下t+1到T時刻的輸出是+1:Yt+1:T的條件概率(()βt(rj))的乘積,而()P(r)是一個歸一化的因子,使得()γt(rj)是一個概率,也就是∑()=1∑jγt(rj)=1,因此:

其中我們可以把上式的t換成1到T中的任何一個時刻,它們算出來都是()P(r),它也是輸出的概率(;)P(Y;λ)。

回顧一下,有了()γt(rj)之後,我們就可以用公式來估計高斯分布的參數和Σμj和Σj。但是我們還需要用公式來估計跳轉概率aij,當時因為沒有介紹前向和後向概率,所以沒有詳細介紹這個公式。現在我們再來回顧一下這個公式。

這個公式看起來有些複雜,其實它的意思很簡單:我們要計算從狀態i跳轉到狀態j的概率,那麼分母就是所有處於狀態i的加起來,因為一個時刻不是屬於一個狀態,而是概率的屬於,因此分母是把所有的()γt(rj)加起來;而分子是兩個求和,首先是下標r,遍歷所有訓練數據,然後是下標t,遍歷一個訓練數據的所有時刻,然後找到t時刻屬於狀態i(()αt(ri))並且t+1時刻屬於狀態j(()+1βt+1(rj)),當然還要乘以兩個發射概率(())bj(yt(r))和(+1())bj(yt+1(r))。

我們再來回顧一下怎麼用一個訓練數據訓練HMM模型的過程。假設訓練數據w=」a cat」,Y是對應的輸出序列,假設長度是20幀,那麼每一個時刻t的Yt是一個39維的(MFCC特徵)向量。根據發音詞典,詞序列w可以轉換成發音序列/a/k/ae/t/,然後每個因子(a/k等)都對應一個HMM,我們把這4個因子的HMM拼接起來就得到了這個訓練數據的HMM,然後我們隨機初始化(通常均值和方差用全局的均值和方差來初始化)這些HMM的參數=(,Σ,)λ=(μ,Σ,aij),根據這些參數計算前向後向概率,然後用前向後向概率更新參數,不斷的迭代直到收斂(模型的參數變化很小)。

這種方法不需要更細粒度的標註,因此也通常叫作flat start。這個方法主要的問題在於假設同一個因子(phone)在所有的上下文的發音都是一樣的,但是在語音中,很多因子的發音是依賴與它的上下文的。比如wood和cool這兩個詞,oo的發音是相同的元音,但是由於其前後的因子不同,它們的發音差別是很大的。之前我們假設的與上下文無關的因子我們通常把它叫作monophone。

為了加入上下文的信息,我們通常使用triphone,也就是把這個因子的前後的因子也考慮進來組合成一個triphone。假設基本的因子有N個,那麼理論上的triphone個數是3N3個(當然實際某些組合是在訓練數據中沒有出現過的)。因為triphone很多,這會導致數據稀疏的問題,因此我們通常類似的triphone聚類在一起。

圖:考慮上下文的因子建模

如圖上圖所示,W代表詞序列,Q代表發音序列,L代表triphone序列,而P代表HMM模型的序列。這裡的triphone我們用x-q+y的形式來表示,比如s-t+oh,表示中心的因子是t,它的左邊是s右邊是oh。注意stop that的p,在圖中是oh-p+th,p所在的詞是stop,而它的右方上下文是that的th,這種跨越詞邊界的triphone叫crossword triphone。也有triphone的建模是不跨越詞邊界的。

前面我們說到為了避免數據稀疏,我們通常會對triphone進行聚類,一種最簡單的聚類是直接對所有的triphone進行聚類。但是通常triphone的每個因子都有3個狀態,分別表示這個音的開始部分、中間部分和結尾部分。我們也可以更加細粒度的對狀態進行聚類,這樣的效果會更好。聚類的結果如下圖所示,屬於不同的triphone的類似狀態會聚類在一起,這些狀態是綁定(tie)在一起的,我們在參數更新是修改任何一個的時候也會等價於修改其它的(實際實現的時候就是一個共享的狀態)。

圖:狀態聚類(tied-state)的因子建模

那具體怎麼把這些狀態聚類(tie)起來呢?通常會使用決策樹聚類的方法。如圖所示,aw為中心因子的所有triphone比如s-aw+n、t-aw+n等等都放到一棵樹的根節點上。我們的示例是聚類這些triphone的第2個狀態(如前所述,通常triphone有3個狀態),它會通過問一些問題來分裂決策樹,樹的葉子節點對於一個物理的狀態,同一個葉子節點的狀態是tie在一起的。問題通常是人來提供的,後面介紹的Kaldi也提供了自動構建問題的方法。這些問題一般都是語音學相關的問題,比如一個問題是「它的左邊是否是鼻音?」。

我們最後總結一些使用訓練HMM-GMM聲學模型的過程:

首先初始化一個flat-start的monophone的單高斯模型用EM(前向後向)算法估計參數把訓練數據的monophone擴展到triphone,把單高斯的monophone模型的參數作為triphone參數的初始值用EM算法重新估計triphone模型的參數使用決策樹對triphone的狀態進行聚類,然後再用EM算法對聚類後的狀態再進行參數重估計所謂的GMM就是用多個高斯模型的線性組合來建模更加複雜的發射概率分布(()bj(yt)),理論上GMM可以擬合任何概率密度函數。我們這裡不詳細介紹GMM以及它的參數估計,有興趣的讀者可以參考相關資料。

通過上述的步驟,最終我們就得到了許多tie-state的triphone模型。

語言模型

給定詞序列1,…,w1,…,wK,語言模型會計算這個序列的概率,根據條件概率的定義,我們可以它聯合概率分解為如下的條件概率:

實際的語言模型很難考慮特別長的歷史,通常我們會限定當前詞的概率值依賴與之前的N-1個詞,這就是所謂的N-Gram語言模型:

在實際的應用中N的取值通常是2-5。我們通常用困惑度(Perplexity)來衡量語言模型的好壞:

N-Gram語言模型可以通過最大似然方法來估計參數,假設(21)C(wk2wk1wk)表示3個詞(21(wk2wk1wk連續出現在一起的次數,類似的(21C(wk2wk1表示兩個詞21wk2wk1連續出現在一起的次數。那麼:

最大似然估計的最大問題是數據的稀疏性,如果3個詞沒有在訓練數據中一起出現過,那麼概率就是0,但不在訓練數據裡出現不代表它不是合理的句子。實際一般會使用打折(Discount)和回退(Backoff)等平滑方法來改進最大似然估計。打折的意思就是把一些高頻N-Gram的概率分配給從沒有出現過的N-Gram,回退就是如果N-Gram沒有出現過,我們就用(N-1)-Gram來估計。比如Katz平滑方法的公式如下:

上式中C』是一個閾值,頻次高於它的概率和最大似然估計一樣,但是對於低於它(但是至少出現一次)的概率做一些打折,然後把這些概率分配給沒有出現的3-Gram,怎麼分配呢?通過回退到2-Gram的概率(|1)P(wk|wk1)來按比例分配。

當然語言模型是一個很大的話題,在後面的章節我們會更深入的討論,這裡就簡單的介紹到這。

解碼器(Decoder)

訓練好模型之後,我們就可以使用解碼器來搜索所有可能的狀態空間(如果沒有語言模型的約束,理論上任何因子的組合都是可能的),然後找到最可能的狀態序列,使得輸出的概率(這個概率包括聲學和概率和語言模型概率)最大。搜索過程可以使用Vertebi算法。但是在實際的識別過程中,由於搜索空間太大,我們通常在搜索的過程中就需要進行剪枝(pruning),把不太可能的路徑提前去掉,除了聲學模型得分,也會在搜索的過程中把語言模型考慮進來。我們一般把這個搜索過程叫作解碼(decoding),完成解碼過程的模塊叫作解碼器(decoder)。一個好的解碼器既要速度快,又要保證較優的路徑不被剪枝掉。後面也會介紹基於加權有限狀態轉錄機(WFST)的解碼器。解碼器除了輸出最優路徑(以及對於概率)之外也可以輸出N-best的結果,N通常是100-1000。這樣我們可以用一個較小的語言模型來進行第一遍的搜索,找到N-best結果,然後使用更加複雜的語言模型來進行第二遍解碼。為了在第二遍解碼時不重複計算,我們會在N-best結果中保留更多的一些信息,我們會使用更加高效和緊湊的數據結構來存儲搜索路徑,我們一般把它叫作word lattice。word lattice有一些點和邊表示,點按照時間排列,邊表示兩個點(時間)對應的詞。下圖a是一個示例,除了詞(ID)之外,邊上也可以存儲一些其它信息,比如聲學模型得分和語言模型得分等。有了這些信息之後,我們就可以用更加複雜的語言模型來對N-best結果進行重新算分(rescoring),從而跳出更好的路徑。

我們也可以把word lattice表示成更加緊湊的confusion network,如下圖b所示。圖中」-「表示空跳轉。在confusion network中,點並不嚴格表示時間順序,因此平行的邊(起點和終點都相同的邊)不代表它們的開始時間或結束時間相同。但是大多數時候,我們可以認為平行的邊代表它們對應的詞是一種競爭關係,比如圖中的HAVE和MOVE。confusion network保證:對於lattice中的每一條路徑,在confusion network中都有一條對應的路徑。confusion network中的邊上一般會有一個與邊上詞相關的一個後驗概率,它是通過在word lattice中使用前向後向算法計算出來概率,然後把平行邊的概率歸一化了。

相關焦點

  • 潮科技行業入門指南 | 深度學習理論與實戰:提高篇(11)——實例分割
    編者按:本文節選自《深度學習理論與實戰:提高篇 》一書,原文連結http://fancyerii.github.io/2019/03/14/dl-book/。簡介Mask R-CNN基於Faster R-CNN,首先是使用RPN(可以加上FPN)得到候選區域(RoI),然後使用RoI Pooling的技術把這些區域的特徵變成固定大小。Faster R-CNN在RoI Pooling後的特徵上加上一些全連接層然後分類和bounding box回歸。
  • 潮科技行業入門指南 | 深度學習理論與實戰:提高篇(14)——Mask R...
    編者按:本文節選自《深度學習理論與實戰:提高篇 》一書,原文連結http://fancyerii.github.io/2019/03/14/dl-book/。作者李理,環信人工智慧研發中心vp,有十多年自然語言處理和人工智慧研發經驗,主持研發過多款智能硬體的問答和對話系統,負責環信中文語義分析開放平臺和環信智慧機器人的設計與研發。以下為正文。
  • 深度學習:Caffe實戰
    這一切都得益於深度學習技術和相應軟硬體系統的發展進步。從學術界到工業界,大家可以共享同一套底層代碼,基於同一套平臺進行研究、交流和生產。這真是一件令人愉悅的事情。     今年三月,谷歌開發的應用Al⁃phaGo使用機器學習的方法以四勝一敗的戰績戰勝了韓國圍棋手李世石。對此事件的關注迅速在全世界蔓延。
  • .| 深度學習理論與實戰:提高篇(14)——Mask R-CNN代碼簡介
    編者按:本文節選自《深度學習理論與實戰:提高篇 》一書,原文連結http://fancyerii.github.io/2019/03/14/dl-book/。作者李理,環信人工智慧研發中心vp,有十多年自然語言處理和人工智慧研發經驗,主持研發過多款智能硬體的問答和對話系統,負責環信中文語義分析開放平臺和環信智慧機器人的設計與研發。
  • 晶片精品文章合集(500篇!)
    晶片春秋·arm傳中國芯酸往事印度芯酸往事國防軍工晶片行業深度報告一位美國晶片公司華人高管對中國晶片行業的思考一文了解 FPGA 發展之路【乾貨】騰訊雲FPGA的深度學習算法雲中的機器學習:FPGA 上的深度神經網絡網友吐槽:9年FPGA工作總結,苦海無涯,窮逼多
  • 只服這篇「神文」:基於老子哲學、相對論的超級人工智慧模型
    之後,AI科技大本營(ID:rgznai100)也一直關注著這篇文章的錄用結果,不過結果是被拒絕。聽起來如此「高大上」的論文是為何被拒絕的?寫這篇被拒絕的論文又是意在何為呢?在這個工作中通過人工設計解決 AI 和 ASI 中深度學習的黑盒難題,將 HMMMPDRL 視為多元宇宙,不考慮 Multi-Agent 和 Multi-Environment 之間的互斥,重用了基於廣義相對論的 4維偽黎曼流形時空模型來完成 HMMMPDRL 的強化學習部分;對 T 對稱性進行廣義相對論的擴展,替換了 N 維 GeneSpace 中使用的 N
  • 想入門機器學習?機器之心為你準備了一份中文資源合集
    類別交叉熵(Categorical cross-entropy)是深度學習分類中最穩定、使用最廣泛的代價函數,一個簡單的 logistic 回歸可以展示它是如何加速學習過程的(與均方差相比)。另一個重要的話題是正則化(Ridge、Lasso 和 ElasticNet)。很多情況下,人們認為它是一種提高模型準確率的深奧方式,但是它的真實意義是更準確,在具體實例的幫助下變得易於理解。
  • 商湯科技「人臉布控系統和深度學習人臉視圖情報研判系統」
    隨著「深度學習」理論的突破,並在計算機視覺技術上的成功應用,為「海量視頻數據」與「標準人臉庫」之間搭起了視頻數據分析與應用的橋梁。深圳市商湯科技有限公司(以下簡稱:商湯科技)作為亞洲最大的深度學習團隊之一,其開發的 「SenseFace人臉布控系統」及「深度學習人臉視圖情報研判系統」於16日通過專家評審會評審,並獲得一致好評。
  • 基於建構主義學習理論的傳播學教學模式探析
    學習者的理解是基於自身的認知經驗而建構的,取決於特定情境下的學習活動過程。 建構主義學習理論的學習觀認為,知識不是通過教師傳授得到,而是學習者在一定的社會文化背景下,根據自己已有的知識經驗,藉助其他人的幫助,利用必要的學習資料,主動進行知識意義建構而獲得。
  • 深度學習助力數據壓縮,一文讀懂相關理論
    本文對數據壓縮的「前世今生」進行簡要的回顧,重點分析基於深度學習的有損壓縮、無損壓縮方法,對基於深度學習的數據壓縮進行了探討和展望。1、數據壓縮背景知識眾所周知,信息理論和機器學習之間具有很強的關聯性,人們經常把它們稱為「同一枚硬幣的兩面」。
  • 指數基金投資三部曲:基礎篇 進階篇 實戰篇
    本文一共分為基礎篇、進階篇和實戰篇三個部分,無論是零基礎入門,還是想學習更多指數基金投資的方法,都可以在這裡找到。  一、基礎篇:初識指數基金  工欲善其事必先利其器,對於一個投資指數基金的基民朋友來說,我們可以提前了解一些指數基金的基本知識,更好地為投資指數基金做準備。
  • 從入門到職業只有一本書的距離 ACI心理學新教材近日即將發售
    自2017年人社部取消了心理諮詢師國家職業資格強制認證後,整個心理學行業經歷了心理學職業能力學習領域長時間的精品教材缺席,行業學習者翹首期盼著可以有一本既有堅實和先進理論、又有實操案例、同時具備心理諮詢業發展規劃的務實型教材。
  • 開發者入門必讀:最值得看的十大機器學習公開課
    它適合計劃進行系統性學習、投入大量時間的人。對於初學者,建議至少聽完吳恩達的機器學習課程之後,再修這一門。4. 臺大林軒田老師的機器學習基石通過 Yann Lecun 的課程能了解到近幾年深度學習研究的最新進展。該系列可作為探索深度學習的進階課程。 8.  Geoffrey Hinton  深度學習課程
  • 「第四代評價」理論視閾下實戰化教學督導分析
    [6]作為和軍事院校具有相同屬性的公安院校教育,也要「瞄準實戰教、模擬實戰練、緊貼實戰學、基於實戰評」。[7]1.「第四代評價」理論對實戰化教學督導的適用性實戰化教學督導不應是評估者具有操縱性的「一言堂」,應該是通過評估者與被評估者之間就實戰化的課堂教學水平、實驗實訓質量以及教材選用等方面進行多方互動,進而得出評估結論的過程。
  • 準備開始學習NLP,我該系統地看哪些書和課程?
    我實際上是為我的博士專門研究信息檢索和機器學習技術的,尤其是它們如何應用於社交計算和計算語言學,同時還開發了從大規模基於文本的數據中高效提取信息的方法。我很幸運有將經典機器學習應用於NLP的經驗,並親眼目睹了該領域深度學習的爆炸式增長。許多學生一直在要求我為如何開始自然語言處理準備指南。
  • 象棋從入門到精通,精品圖書推薦
    本書是蔣川與史思旋合著,有入門、有進階,從象棋的基本走法講起,涉及象棋棋規、象棋禮儀、象棋基本功、象棋基礎殺法、象棋開局理論、中局技巧、殘局定式,最後以蔣川特大的實戰講解收尾,比較系統的給棋友指明了象棋進階的方法,析理透徹、層次分明、循序漸進,而且特別注重實戰性,是一本象棋入門的經典圖書。
  • 深度學習和機器學習的線性代數入門
    神經元是深度學習的基本單位,該結構完全基於數學概念,即輸入和權重的乘積和。至於Sigmoid,ReLU等等激活函數也依賴於數學原理。正確理解機器學習和深度學習的概念,掌握以下這些數學領域至關重要:機器學習和深度學習中的線性代數在機器學習中,很多情況下需要向量化處理,為此,掌握線性代數的知識至關重要。
  • 80本翻譯書籍推薦,CATTI、MTI和實戰翻譯指導
    (一)翻譯理論篇1. 葉子南《高級英漢翻譯理論與實踐》,這本書既有理論也有大量的翻譯練習,翻譯難度較高,不過書籍很值得推薦,適合MTI備考。2.李學平《通過翻譯學英語》,該書主要通過對150個正誤譯文實例的討論,幫助讀者提高漢譯英的能力。例句很好,適合CATTI和MTI考試學習。3. 《漢譯英求疵錄:從中式英語到準確英語》目前已絕版,有電子版,獲取方式可以看這裡4.
  • 怎樣學習象棋 --從入門到業五
    引子:學習象棋過程是一個用實踐——理論——實踐的過程。有條件的朋友可以購買實體書,這是絕佳的入門的教材。《象棋入門》裡面的順炮,列炮布局,對付中炮可以學習群文件佐為象棋視頻裡面的小列手炮,這個時候,你水平提高了,可以開始涉及屏風馬了。
  • 市委理論學習中心組讀書班學習會議召開
    12月25日下午,市委副書記、市長王力威主持召開市委理論學習中心組讀書班學習會議市委理論學習中心組成員共同學習了《黨章》第四章—黨的地方組織、《中共中央關於加強黨的政治建設的意見》、《關於鞏固深化「不忘初心、牢記使命」主題教育成果的意見》等內容。會議指出,習近平新時代中國特色社會主義思想,涵蓋了經濟、政治、文化、社會、生態以及黨的建設等各方面,具有極強的戰略性、系統性、針對性和指導性,是我們做好各項工作的根本遵循。