日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Chapter1-4_Speech_Recognition(HMM)

發布時間:2024/7/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chapter1-4_Speech_Recognition(HMM) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 HMM用在哪里
    • 2 HMM的state
    • 3 改造成DNN
      • 3.1 Tandem
      • 3.2 DNN-HMM Hybrid

本文為李弘毅老師【Speech Recognition - HMM (optional)】的課程筆記,課程視頻youtube地址,點這里👈(需翻墻)。其中也涉及到了部分李琳山老師關于HMM的詳解(講得非常清楚,請務必先搞懂HMM,再看這篇)。

下文中用到的圖片均來自于李宏毅老師和李琳山老師的PPT,若有侵權,必定刪除。

文章索引:

上篇 - 1-3 CTC, RNN-T and more

下篇 - 1-5 Alignment of HMM, CTC and RNN-T

總目錄

1 HMM用在哪里

沒有深度學習的語音識別系統可以用下面這幅圖來表示,不過很多用到深度學習的也基本是把其中的一些模塊替換調成了DNN而已。要輸出一段聲音信號,得到對應的文字,需要四個東西:

  • 聲音特征(Feature Vectors)。這個我們之前也有提到過,忘了的可以看下這里,一般會用一個叫做MFCC的方法,把聲音信號轉化成長度為TTT,特征維度為39維的向量。
  • 聲學模型(Acoustic Models)。這里是用到HMM(Hidden Markov Model)的地方,就是輸入Feature Vectors,得到每個Feature Vector對應的state是什么,而這里的state一般是指比Phoneme(發音的基本單元,比如th-ih-s-ih-z-s-p-ih-ch)更小的基本單元。
  • 詞典(Lexicon)。用來把聲學模型得到的一串state轉換成對應的單詞,比如(th-ih-s) → this。
  • 語言模型(Language Model)。這個就是把得到的單詞變成一個完整通順的句子的模型。

我們這篇主要講的就是這個聲學模型(Acoustic Models),其他的部分暫時不去關心。

上面這個是李琳山老師的說法,李弘毅老師講的更抽象一些,但本質是一樣的。如下圖所示,比如我們有一個模型可以計算給定聲音信號XXX,得到輸出序列YYY的概率P(Y∣X)P(Y|X)P(YX),那么我們只需要遍歷所有的YYY,然后找到使得P(Y∣X)P(Y|X)P(YX)的概率最大的那個YYY就可以了。但是,YYY的可能性太多了,這樣的計算消耗太大了,這個方案,這里不討論。

學過貝葉斯定理的都知道,這個條件概率是可以變一變的,經過如下圖所示的變化后,我們只需要找到一個YYY,使得P(X∣Y)P(Y)P(X|Y)P(Y)P(XY)P(Y)最大就可以了,而這里的P(X∣Y)P(X|Y)P(XY)就是我們的聲學模型(Acoustic Models),這里的P(Y)P(Y)P(Y)就是我們的語言模型(Language Model),P(X)P(X)P(X)和我們要找的YYY沒有關系,可以直接扔掉。有時P(Y)P(Y)P(Y)也可以不用考慮。而這里的P(X∣Y)P(X|Y)P(XY)可以用很機智的演算法去求解。

其實李弘毅老師講的P(X∣Y)P(X|Y)P(XY)就是李琳山老師講的聲學模型(Acoustic Models)和詞典(Lexicon)的結合。

2 HMM的state

HMM里需要一個叫做state的東西,如上文所述,它在我們的聲學模型里,就是一個比Phoneme更小的東西,那它究竟有多小呢?答案就是,它可以任意小,只要我們的計算資源足夠就可以。首先,Phoneme會根據上下文被拆分成Tri-phone,Tri-phone就是說,我們今天的"uw"的這個音在不同的上下文中是不一樣的,可以是"d-uw+y"的"uw",也可以是"y-uw+th"的"uw",把句子中前一個Phoneme和后一個Phoneme都加進來,就變成了Tri-phone。而我們的state比Tri-phone還要小,一個Tri-phone可以拆成多個state,這個state人已經無法分辨了,具體要拆成幾個state,就看我們的計算資源有多少了。

為什么要拆的這么小呢?因為在計算HMM的時候,我們希望人在發出每個state所對應的音的時候,是可以用高斯混合模型(GMM)去模擬它的分布的,而不同的人說同一個詞時,發出的音時不一樣的,所以希望這個state可以代表非常細的音。

所有的YYY都可以轉換成state,所以,我們我們今天要求的P(X∣Y)P(X|Y)P(XY),就可以轉變為求P(X∣S)P(X|S)P(XS)

可以想象,按這種做法的話,我們的state會非常多,比如Phoneme有30個,最后把每個Tri-phone再切成3個單元的話,我們將會有303×330^3\times3303×3個state。這意味著什么?Emmm~這意味著我們要很多的高斯混合模型(GMM)。我們先來講下HMM的計算中需用到的幾個概率函數。

計算HMM的時候,我們需要知道三個概率,一個叫做轉移概率(Transition Probability),一個叫做發射概率(Emission Probability),還有一個叫做初始概率(initial state probabilities)。李弘毅老師在講的時候沒有提到初始概率,那我們就默認是所有的state初始概率都是相等的吧。

  • 轉移概率:從一個state變到任意另一個state的概率。
  • 發射概率:每個state產生該time step對應的特征向量的概率,如P(X1∣"t?d?uw1")P(X^1|"t-d-uw1")P(X1"t?d?uw1")
  • 初始概率:最開始從某個state開始的概率。

其中的發射概率就是說我們的每個state都要有一個高斯混合模型(GMM),也就是我們要303×330^3\times3303×3個GMM!更難處理的是,有些state在數據中出現的是很少的,我們稱為rare state,很難學好。這個時候,一種方法是把這些rare state映射到其他相近的state的GMM上,另一種就是2010年提出的Subspace GMM。Subspace GMM這里簡單說一下,就是說我們現在所有的state都有一個公用的池子(Pool),每個state要計算發射概率的時候,從Pool里撈幾個GMM出來就可以了。

好,現在假設我們已經有了轉移概率和發射概率,但我們仍舊無法把P(X∣S)P(X|S)P(XS)計算出來,因為我們并不知道每個XiX^iXi是由哪個state產生的。李弘毅老師說,states的個數往往小于聲音特征向量XXX的長度。因此,如果按順序用完所有的state的話,可以有很多條路徑,HMM做的就是把所有路徑的概率加起來。

這個從路徑對應到特征向量的操作,就叫做對齊(alignment)。這個在下節課會詳細介紹。

3 改造成DNN

3.1 Tandem

Tandem沒有改變原來的整套方案,只是在對于輸入的特征進行了一個分類,使得每個time step的acoustic feature都有預測出來的對應于每一個state的概率。然后把這個DNN的輸出當作新的acoustic feature,再放進原來的模型里去跑就可以了。

3.2 DNN-HMM Hybrid

HMM里面是有一個GMM的模型的,也就是上文所說的發射概率的計算模型。DNN-HMM Hybrid就是把這個GMM模型換成了DNN去做。DNN可以是CNN或者LSTM這些。

之前GMM模型是計算出P(x∣a)P(x|a)P(xa),也就是給定state aaa發射出特征xxx的概率。現在的DNN能計算P(a∣x)P(a|x)P(ax),也就是給定特征xxx,則xxx是state aaa的概率。然而,這兩個東西不一樣呀。于是就需要用條件概率轉換一下,得到
P(x∣a)=P(a∣x)P(x)P(a)P(x|a)=\frac{P(a|x)P(x)}{P(a)} P(xa)=P(a)P(ax)P(x)?

然后這里,P(a∣x)P(a|x)P(ax)就是DNN的輸出,P(a)P(a)P(a)可以從數據中統計出來,P(x)P(x)P(x)不用去管它。。。

為什么要用DNN來替換GMM呢?有人認為P(x∣a)P(x|a)P(xa)是generative learning,而P(a∣x)P(a|x)P(ax)是discriminative learning,然后大家認為后者比較厲害,這樣。也有人認為DNN的參數比較多,比較厲害,這樣。而實際證明,這種方法,很強。

我仔細想了下,感覺這個和Tandem的區別其實并不大。它們其實都是要有一個DNN的state classifier。

不過,這個state classifier怎么train呢?我們都知道,trainDNN的模型是需要標簽的,然而我們并不知道現在的XiX^iXi分別屬于哪一個state。這該咋辦?實際操作的時候,用了類似于半監督的方法,就是利用HMM+GMM來train一個模型,然后拿這個train好的模型的結果來當作標簽去train這個DNN的模型。然后再把train的DNN的結果當作標簽,訓練一個新的DNN,一直反復這樣下去。這樣的方法很強,train出來的模型結果和人類接近!

總結

以上是生活随笔為你收集整理的Chapter1-4_Speech_Recognition(HMM)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。