語音識別技術

簡要給大家介紹一下語音怎麼變文字的吧。

首先說一下作爲輸入的時域波形。我們知道聲音實際上是一種波。常見的mp3、wmv等格式都是壓縮格式,必須轉成非壓縮的純波形文件,比如Windows PCM文件,即wav文件來處理。wav文件裏存儲的除了一個文件頭以外,就是聲音波形的一個個點了。採樣率越大,每毫秒語音中包含的點的個數就越多。另外聲音有單通道雙通道之分,還有四通道的等等。對語音識別任務來說,單通道就足夠了,多了浪費,因此一般要把聲音轉成單通道的來處理。下圖是一個波形的示例。


另外,通常還需要做個VAD處理,也就是把首尾端的靜音切除,降低對後續步驟造成的干擾,這需要用到信號處理的一些技術。

時域的波形必須要分幀,也就是把波形切開成一小段一小段,每小段稱爲一幀。分幀操作通常使用移動窗函數來實現,分幀之前還要做一些預加重等操作,這裏不詳述。幀與幀之間是有交疊的,就像下圖這樣:
圖中,每幀的長度爲25毫秒,每兩幀之間有25-10=15毫秒的交疊。我們稱爲以幀長25ms、幀移10ms分幀。

分幀後,語音就變成了很多小段。但波形在時域上幾乎沒有描述能力,因此必須將波形作變換。常見的一種變換方法是提取MFCC特徵,把每一幀波形變成一個12維向量。這12個點是根據人耳的生理特性提取的,可以理解爲這12個點包含了這幀語音的內容信息。這個過程叫做聲學特徵提取。實際應用中,這一步有很多細節,比如差分、均值方差規整、高斯化、降維去冗餘等,聲學特徵也不止有MFCC這一種,具體就不詳述了。

至此,聲音就成了一個12行(假設聲學特徵是12維)、N列的一個矩陣,稱之爲觀察序列,這裏N爲總幀數。觀察序列如下圖所示,圖中,每一幀都用一個12維的向量表示,色塊的顏色深淺表示向量值的大小。

接下來就要介紹怎樣把這個矩陣變成文本了。首先要介紹三個概念:

  1. 單詞:英語中就是單詞,漢語中是漢字。
  2. 音素:單詞的發音由音素構成。對英語,一種常用的音素集是卡內基梅隆大學的一套由39個音素構成的音素集,參見The CMU Pronouncing Dictionary‎。漢語一般直接用全部聲母和韻母作爲音素集,另外漢語識別還分有調無調,不詳述。
  3. 狀態:比音素更細緻的語音單位。通常一個音素由3個狀態構成。


語音識別是怎麼工作的呢?實際上一點都不神祕,無非是:
第一步,把幀識別成狀態(難點)。
第二步,把狀態組合成音素。
第三步,把音素組合成單詞。
如下圖所示:
圖中,每個小豎條代表一幀,若干幀語音對應一個狀態,每三個狀態組合成一個音素,若干個音素組合成一個單詞。也就是說,只要知道每幀語音對應哪個狀態了,語音識別的結果也就出來了。

那每幀音素對應哪個狀態呢?有個容易想到的辦法,看某幀對應哪個狀態的概率最大,那這幀就屬於哪個狀態,這叫做“最大似然”。比如下面的示意圖,這幀對應S3狀態的概率最大,因此就讓這幀屬於S3狀態。


那這些用到的概率從哪裏讀取呢?有個叫“聲學模型”的東西,裏面存了一大堆參數,通過這些參數,就可以知道幀和狀態對應的概率。聲學模型是使用巨大數量的語音數據訓練出來的,訓練的方法比較繁瑣,這裏不講。

但這樣做有一個問題:每一幀都會得到一個狀態號,最後整個語音就會得到一堆亂七八糟的狀態號,相鄰兩幀間的狀態號基本都不相同。假設語音有1000幀,每幀對應1個狀態,每3個狀態組合成一個音素,那麼大概會組合成300個音素,但這段語音其實根本沒有這麼多音素。如果真這麼做,得到的狀態號可能根本無法組合成音素。實際上,相鄰幀的狀態應該大多數都是相同的才合理,因爲每幀很短。

解決這個問題的常用方法就是使用隱馬爾可夫模型(Hidden Markov Model,HMM)。這東西聽起來好像很高深的樣子,實際上很簡單,無非是:
第一步,構建一個狀態網絡。
第二步,從狀態網絡中尋找與聲音最匹配的路徑。

這樣就把結果限制在預先設定的網絡中,避免了剛纔說到的問題,當然也帶來一個侷限,比如你設定的網絡裏只包含了“今天晴天”和“今天下雨”兩個句子的狀態路徑,那麼不管說些什麼,識別出的結果必然是這兩個句子中的一句。

具體是這樣的,首先構造單詞級網絡,然後展開成音素網絡,然後展開成狀態網絡。然後在狀態網絡中搜索一條最佳路徑,這條路徑和語音之間的概率(稱之爲累積概率)最大。搜索的算法是一種動態規劃剪枝的算法,稱之爲Viterbi算法,用於尋找全局最優路徑。感興趣的同學可以到Wikipedia上搜一下。

這裏所說的累積概率,由三部分構成,分別是:

  1. 觀察概率:每幀和每個狀態對應的概率
  2. 轉移概率:每個狀態轉移到自身或轉移到下個狀態的概率
  3. 語言概率:根據語言統計規律得到的概率

其中,前兩種概率從聲學模型中獲取,最後一種概率從語言模型中獲取。語言模型是使用大量的文本訓練出來的,存儲的是任意單詞、任意兩個單詞、任意三個單詞(通常也就到三個單詞)在大量文本中的出現機率。

這樣基本上語音識別過程就完成了。

以上介紹的是傳統的基於HMM的語音識別。以上的文字不追求嚴謹,只是想讓大家容易理解。

如果感興趣,想進一步瞭解,HTK Book是非常好的入門書,這本書實際上是劍橋大學發佈的著名開源工具包HTK Speech Recognition Toolkit 的說明書,近400頁,厚厚的一本。如果有時間、有興趣,可以照着書中的第二章在電腦上做一遍,你將搭建出一個簡單但基本完整的語音識別系統,能識別簡單的英語數字串。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章