語音識別技術原理中聲學參數提取包括什麼?

如題?語音識別系統是如何摒棄人與人之間說同一句話因音色不同所導致頻率不同,從而完全將語音轉成文字內容的?

ps.本人外行,請回答著盡量不要過於專業,只需大致描述過程即可。


題主的問題中有一點不專業的地方:「因音色不同所導致頻率不同」。我之前講過(不同母音輔音在聲音頻譜的表現是什麼樣子? - 王贇 Maigo 的回答),音色指的是頻譜包絡形狀,而頻率(一般指基基頻)對應的是音高,二者是獨立的。

我推測題主想問的是,為什麼語音識別系統對不同的說話人都能給出恰當的識別結果,它為什麼能夠排除不同人的聲音特色的影響。這是通過特徵建模兩方面來實現的。

我在另一個回答(語音識別技術中提取的聲音特徵的參數具體指什麼? - 王贇 Maigo 的回答)中詳細介紹了最基礎、最常用的聲學特徵——MFCC的提取步驟。在這一步中,通過三角形積分,可以基本消除音高的影響。當然,人與人之間並不只有音高不同,他們在發同一個音時,音色也會有差別,這種差別在MFCC中是會被保留下來的。要排除這方面的影響,就要靠建模了。

最基本的語音模型(acoustic model)是高斯混合模型(Gaussian mixture models,GMM)。對於每一個母音或輔音,用一個高斯混合分布來描述它對應的MFCC向量的分布。當分布的component數足夠多時,GMM可以逼近任意分布。

對於人和人的音色不同這個事實,最簡單的應對方法就是視而不見。這樣,我們在訓練語音識別系統時,會使用許多不同人的聲音作為訓練數據。這稱為說話人無關訓練(speaker independent training,簡稱SI training)。這樣訓練出來的模型中,每個音的GMM會涵蓋所有人的特徵向量,所以在測試時,對於一個新的說話人,我們也可以期望這個GMM能夠涵蓋他的特徵向量。這就是為什麼語音識別系統對於不同的說話人都能給出恰當的識別結果。

當然,SI training中模型的利用效率是比較低的——每個音的GMM都要去努力適應所有人的聲音,也就不能專註於當前說話人的特點了。於是人們發明了說話人相關訓練(speaker dependent training,簡稱SD training),即對於每個人的每個音,都訓練一個GMM來擬合數據。在測試時,對於每個說話人,使用他自己的模型來識別。由於此時使用的GMM都是專門用他的數據來訓練的,所以識別效果要比SI training的系統好得多。

不過,SD training也有幾個缺陷,有一些甚至是致命的:
1) 訓練時,每個說話人都要錄製大量的數據,累;
2) 各個說話人的訓練數據都是獨立使用的,它們之間的共同點沒有得到發掘;
3) 測試時,需要知道說話人是誰,或者再使用一個說話人識別系統識別出說話人是誰,才能據此選擇模型;
4) 測試時,如果碰到訓練時沒有遇到的說話人,就跪了。

實際的語音識別系統一般是通過說話人適應(speaker adaptation),把SI training和SD training的好處結合起來的。具體地說,訓練時進行的是SI training;在測試時,對輸入的特徵向量或者已經訓練好的語音模型進行變換,使二者互相適應。最簡單的變換方法,就是把輸入的特徵向量或者GMM的均值向量平移,使得GMM對這些特徵向量的似然值達到最大。

比說話人適應更進一步的是說話人適應訓練(speaker adaptive training,簡稱SAT)。這是把訓練的一部分推遲到測試時再做。在測試時,先使用SI training得到的語音模型識別輸入的語音信號,得到文字;再把這一組語音和文字加入到訓練數據中,重新訓練語音模型。當然,識別出來的文字可能是有錯誤的,但是這些錯誤造成的害處小於使用同一說話人的語音進行訓練得到的好處。

說話人適應和說話人適應訓練的具體做法有很多,近年來很火的神經網路(neural networks)也被應用於其中。隨著技術的複雜化,已經很難直觀地講清楚它們為什麼會有效了,但事實上有效就是王道。


剛才手機看到這個提問瞬間興奮,就馬克了一記。
因為最近剛好在做低速率語音編碼,任務就包含提取語音特徵參數。對於語音轉換文字部分不了解,但是就語音參數提取流程還比較熟悉。大概說一下過程,如果想知道詳細的以後再補充。

首先我們要知道語音的產生過程:
由肺產生向外的氣流,完全放鬆時聲帶張開,就是平時的呼吸。如果聲帶一張一合(振動)形成周期性的脈衝氣流。這個脈衝氣流的周期稱之為——基音周期題主所言因音色不同導致的頻率不同,事實上音色的大多是泛頻上的差異,建立在基頻之上,這個基頻就是基音周期了,泛頻可以忽略)。當然啦,這只是在發濁音(b,d,v...)時才會有,當發出清音(p,t,f...)時聲帶不振動,但是會處於緊繃狀態,當氣流湧出時會在聲帶產生湍流。清音和濁音是音素的兩大類。接下來脈衝氣流/湍流到達聲道,由聲道對氣流進行調製,形成不同的音素。多個音素組成一個音節(就漢語而言是[聲母]+韻母)。如果沒學過信號系統那就想像一下平舌音和翹舌音,z和zh發聲時肺和喉的狀態都一樣,只是舌頭動作不一樣,發出的聲音也就不一樣了,這就算是簡單的調製。從而聲音的波形會發生一些變化。這個波形,就是以後分析所需要的數據。

接下來就是把一個自然的信號轉換為數字信號。
模擬信號到數字信號的轉換無非就是——採樣量化。簡單來說就是把一個起伏的山路鋪上一層層台階,這樣只需要記住有幾節台階,每個台階有多寬,多高,是向上還是向下就基本能知道這個山的形狀(WAV文件就這這麼存儲聲音信息的)。

然後就是語音特徵參數的提取
語音特徵參數提取過程最重要的大概就是基音檢測線性預測分析(LPA)
還記得語音產生是加粗斜體畫線的基音周期么?就是這貨,基音的檢測是語音分析中頂頂重要的一個參數,對於漢語來說尤為重要。因為漢語是一種有調語言,不同的聲調基音的變換模式不一樣。檢測基音周期就像是『歸一演算法』,管你頻率幾何,計算出基音周期後都可以按照相同的模式進行處理(此處不嚴謹,但是就是這個意思)。通過對基音周期的分析,以及建立在基音周期分析之上的爆破音分析、齒音分析等等,再配合統計模型就能夠判斷清濁音,判斷音節,判斷音調,從而準確的得到每一個聲母韻母和音調,然後就可以像手動輸入那樣子進行語音識別了,多出音調參數,識別率理論上比手動更高!
哈哈哈聽起來是不是覺得很美好?但是可以說迄今為止找到一個完善的適用於不同講話者、不同要求和環境、準確和可靠的檢測語音信號基音的方法還沒有,只能做到近似(所以現在的語音識別還是有些捉急,中文更捉急)。
線性預測分析(LPA)可以有效的壓縮語音信號的大小,和語音識別聯繫不大,就不說了。

綜上,絕大多數語音分析的重點就是
基音周期的提取,提取的越準確,語音分析就可以做到越精確。


題主的疑問也可以回答成
通過檢測基音周期來摒棄人和人之間不同音色的差異!
==============================

Ps.本人就是一小本科生,以上如有偏差疏漏請包涵,悉聽指教。


推薦閱讀:

同樣頻率的兩個聲音,其音色的不同是由於高次諧波的成分不同嗎?
以下對雙聲道、立體聲的理解有哪些是錯的?
旅行者號飛船記錄的聲音是什麼?
為什麼說超聲波的方向性好?
對古典音樂演奏會來說,在現場聆聽和在家裡聽 CD 的區別在哪裡?

TAG:語音識別 | 語音 | 聲學 | 頻譜圖 | 頻譜分析 |