語音識別(Automatic Speech Recognition)是以語音為研究對象泉坐,通過語音信號處理和模式識別讓機器自動識別和理解人類口述的語奔则。語音識別技術就是讓機器通過識別和理解過程把語音信號轉(zhuǎn)變?yōu)橄鄳奈谋净蛎?/b>的高技術芜飘。語音識別是一門涉及面很廣的交叉學科垦梆,它與聲學间唉、語音學偏塞、語言學笙各、信息理論钉答、模式識別理論以及神經(jīng)生物學等學科都有非常密切的關系。
語音識別的基本原理
語音識別系統(tǒng)本質(zhì)上是一種模式識別系統(tǒng)杈抢,包括特征提取数尿、模式匹配、參考模式庫等三個基本單元惶楼,它的基本結構如下圖所示:
上面這個圖其實很好理解右蹦,就是把語音輸入,我們首先就是要對輸入的語音進行預處理歼捐,然后提取語音的特征何陆,在此基礎上建立語音識別所需的模板。而計算機在識別過程中要根據(jù)語音識別的模型豹储,將計算機中存放的語音模板與輸入的語音信號的特征進行比較贷盲,根據(jù)一定的搜索和匹配策略,找出一系列最優(yōu)的與輸入語音匹配的模板剥扣。然后根據(jù)此模板的定義巩剖,通過查表就可以給出計算機的識別結果慨灭。顯然,這種最優(yōu)的結果與特征的選擇球及、語音模型的好壞氧骤、模板是否準確都有直接的關系。
語音識別系統(tǒng)構建過程整體上包括兩大部分:訓練和識別吃引。訓練通常是離線完成的筹陵,對預先收集好的海量語音、語言數(shù)據(jù)庫進行信號處理和知識挖掘镊尺,獲取語音識別系統(tǒng)所需要的“聲學模型”和“語言模型”;而識別過程通常是在線完成的朦佩,對用戶實時的語音進行自動識別。識別過程通常又可以分為“前端”和“后端”兩大模塊:“前端”模塊主要的作用是進行端點檢測(去除多余的靜音和非說話聲)庐氮、降噪语稠、特征提取等;“后端”模塊的作用是利用訓練好的“聲學模型”和“語言模型”對用戶說話的特征向量進行統(tǒng)計模式識別(又稱“解碼”),得到其包含的文字信息弄砍,此外仙畦,后端模塊還存在一個“自適應”的反饋模塊,可以對用戶的語音進行自學習音婶,從而對“聲學模型”和“語音模型”進行必要的“校正”慨畸,進一步提高識別的準確率。
語音識別的技術原理
首先衣式,我們知道聲音實際上是一種波寸士。常見的mp3等格式都是壓縮格式,必須轉(zhuǎn)成非壓縮的純波形文件來處理碴卧,比如Windows PCM文件弱卡,也就是俗稱的wav文件。wav文件里存儲的除了一個文件頭以外住册,就是聲音波形的一個個點了婶博。下圖是一個波形的示例。
其實語音識別的聲音預處理與聲紋識別的聲音預處理有很大一部分是相似的(前面我有介紹:【自主學習】聲紋識別.2 - 簡書)界弧。在開始語音識別之前凡蜻,有時需要把首尾端的靜音切除,降低對后續(xù)步驟造成的干擾垢箕。這個靜音切除的操作一般稱為 VAD(【自主學習】聲紋識別.2 - 簡書)划栓。
要對聲音進行分析,需要對聲音分幀条获,也就是把聲音切開一小段一小段忠荞,每小段稱為一幀。分幀操作一般不是簡單的切開,而是使用移動窗函數(shù)(【自主學習】聲紋識別.2 - 簡書)來實現(xiàn)委煤。幀與幀之間一般是有交疊的堂油,就像下圖:
圖中,每幀的長度為25毫秒碧绞,每兩幀之間有毫秒的交疊府框。我們稱為以幀長25ms、幀移10ms分幀讥邻。
分幀后迫靖,語音就變成了很多小段。但波形在時域上幾乎沒有描述能力兴使,因此必須將波形作變換系宜。常見的一種變換方法是提取MFCC特征(【自主學習】聲紋識別.2 - 簡書)。
至此发魄,聲音就成了一個12行(假設聲學特征是12維)盹牧、N列的一個矩陣,稱之為觀察序列励幼,這里N為總幀數(shù)汰寓。觀察序列如下圖所示,圖中赏淌,每一幀都用一個12維的向量表示踩寇,色塊的顏色深淺表示向量值的大小啄清。
接下來就要把這個矩陣變成文本了六水。首先要介紹兩個概念:
音素:單詞的發(fā)音由音素構成。對英語辣卒,一種常用的音素集是卡內(nèi)基梅隆大學的一套由39個音素構成的音素集掷贾,參見The CMU Pronouncing Dictionary。漢語一般直接用全部聲母和韻母作為音素集荣茫,另外漢語識別還分有調(diào)無調(diào)等等想帅,有興趣的可以自己去了解一下哈。
狀態(tài):這里理解成比音素更細致的語音單位就行啦啡莉。通常把一個音素劃分成3個狀態(tài)港准。
下面我們來看看語音識別的工作流程:?
第一步,把幀識別成狀態(tài)(難點)咧欣。
第二步浅缸,把狀態(tài)組合成音素。
第三步魄咕,把音素組合成單詞衩椒。
如下圖:
在上圖中,每個小豎條代表一幀,若干幀語音對應一個狀態(tài)毛萌,每三個狀態(tài)組合成一個音素苟弛,若干個音素組合成一個單詞。也就是說阁将,只要知道每幀語音對應哪個狀態(tài)膏秫,語音識別的結果就出來了。
那每幀音素對應哪個狀態(tài)呢做盅?有個容易想到的辦法荔睹,看某幀對應哪個狀態(tài)的概率最大,那這幀就屬于哪個狀態(tài)言蛇。比如下面的示意圖僻他,這幀在狀態(tài)S3上的條件概率最大,因此就猜這幀屬于狀態(tài)S3腊尚。
那這些用到的概率從哪里讀取呢?有個叫“聲學模型”的東西吨拗,里面存了一大堆參數(shù),通過這些參數(shù)婿斥,就可以知道幀和狀態(tài)對應的概率劝篷。獲取這一大堆參數(shù)的方法叫做“訓練”,需要使用巨大數(shù)量的語音數(shù)據(jù)民宿,訓練的方法比較繁瑣娇妓,現(xiàn)在有很多訓練模型的工具(如:CMUSphinx Open Source Speech Recognition?,Kaldi ASR)活鹰。
但這樣做有一個問題:每一幀都會得到一個狀態(tài)號哈恰,最后整個語音就會得到一堆亂七八糟的狀態(tài)號,相鄰兩幀間的狀態(tài)號基本都不相同志群。假設語音有1000幀着绷,每幀對應1個狀態(tài),每3個狀態(tài)組合成一個音素锌云,那么大概會組合成300個音素荠医,但這段語音其實根本沒有這么多音素。如果真這么做桑涎,得到的狀態(tài)號可能根本無法組合成音素彬向。實際上,相鄰幀的狀態(tài)應該大多數(shù)都是相同的才合理攻冷,因為每幀很短娃胆。
解決這個問題的常用方法就是使用隱馬爾可夫模型(Hidden Markov Model,HMM)讲衫。這東西聽起來好像很高深的樣子缕棵,實際上用起來很簡單:首先構建一個狀態(tài)網(wǎng)絡孵班,然后從狀態(tài)網(wǎng)絡中尋找與聲音最匹配的路徑。
這樣就把結果限制在預先設定的網(wǎng)絡中招驴,避免了剛才說到的問題篙程,當然也帶來一個局限,比如你設定的網(wǎng)絡里只包含了“今天晴天”和“今天下雨”兩個句子的狀態(tài)路徑别厘,那么不管說些什么虱饿,識別出的結果必然是這兩個句子中的一句。那如果想識別任意文本呢?把這個網(wǎng)絡搭得足夠大触趴,包含任意文本的路徑就可以了氮发。但這個網(wǎng)絡越大,想要達到比較好的識別準確率就越難冗懦。所以要根據(jù)實際任務的需求爽冕,合理選擇網(wǎng)絡大小和結構。
搭建狀態(tài)網(wǎng)絡披蕉,是由單詞級網(wǎng)絡展開成音素網(wǎng)絡颈畸,再展開成狀態(tài)網(wǎng)絡。語音識別過程其實就是在狀態(tài)網(wǎng)絡中搜索一條最佳路徑没讲,語音對應這條路徑的累積概率最大眯娱,這稱之為“解碼”。路徑搜索的算法是一種動態(tài)規(guī)劃剪枝的算法爬凑,稱之為Viterbi算法徙缴,用于尋找全局最優(yōu)路徑。
這里所說的累積概率嘁信,由三部分構成于样,分別是:
觀察概率:每幀和每個狀態(tài)對應的概率
轉(zhuǎn)移概率:每個狀態(tài)轉(zhuǎn)移到自身或轉(zhuǎn)移到下個狀態(tài)的概率
語言概率:根據(jù)語言統(tǒng)計規(guī)律得到的概率
其中,前兩種概率從聲學模型中獲取吱抚,最后一種概率從語言模型中獲取百宇。語言模型是使用大量的文本訓練出來的,可以利用某門語言本身的統(tǒng)計規(guī)律來幫助提升識別正確率秘豹。語言模型很重要,如果不使用語言模型昌粤,當狀態(tài)網(wǎng)絡較大時既绕,識別出的結果基本是一團亂麻。
語音識別的工作流程
預處理:
1.?首尾端的靜音切除涮坐,降低干擾凄贩,靜音切除的操作一般稱為VAD。??????????????
2.?聲音分幀袱讹,也就是把聲音切開成一小段一小段疲扎,每小段稱為一幀昵时,使用移動窗函數(shù)來實現(xiàn),不是簡單的切開椒丧,各幀之間一般是有交疊的壹甥。
特征提取:主要算法有線性預測倒譜系數(shù)(LPCC)和Mel?倒譜系數(shù)(MFCC)壶熏,目的是把每一幀波形變成一個包含聲音信息的多維向量句柠;
聲學模型(AM):通過對語音數(shù)據(jù)進行訓練獲得,輸入是特征向量棒假,輸出為音素信息溯职;
字典:字或者詞與音素的對應, 簡單來說帽哑, 中文就是拼音和漢字的對應谜酒,英文就是音標與單詞的對應;
語言模型(LM):通過對大量文本信息進行訓練妻枕,得到單個字或者詞相互關聯(lián)的概率甚带;
解碼:就是通過聲學模型,字典佳头,語言模型對提取特征后的音頻數(shù)據(jù)進行文字輸出鹰贵;
語音識別流程的舉例(只是形象表述,不是真實數(shù)據(jù)和過程):
1康嘉、語音信號:我是機器人
2碉输、特征提取:我是機器人
3亭珍、聲學模型:w o s i j i q i r n
4敷钾、字典:窩:w o;我:w o肄梨; 是:s i阻荒; 機:j i; 器:q i众羡; 人:r n侨赡;級:j i;忍:r n粱侣;
5羊壹、語言模型(給出概率):我:0.0786, 是: 0.0546齐婴,我是:0.0898油猫,機器:0.0967,機器人:0.6785柠偶;
?6情妖、 輸出文字:我是機器人睬关;
有什么問題盡管提出來哈!
參考: