本篇文章是一篇長篇的研究報告,共有近3.8萬字,整合參考了很多相關的行業技術文章,集百位大佬的文章資料于一身,如有雷同,純屬崇拜您的學問!!文末已有注明轉載參考的出處,特此申明本篇回答有整合其他大佬的答案以及文章,如有不同意的評論區留言,我刪除,請不要言語攻擊我,謝謝,我還是個寶寶!
一、語音識別的基礎概念
1、定義:語音識別(Automatic Speech Recognition)是以語音為研究對象,通過語音信號處理和模式識別讓機器自動識別和理解人類口述的語。語音識別技術就是讓機器通過識別和理解過程把語音信號轉變為相應的文本或命令的高技術。語音識別是一門涉及面很廣的交叉學科,它與聲學、語音學、語言學、信息理論、模式識別理論以及神經生物學等學科都有非常密切的關系。
2、發展ASR在近幾年的流行,與以下幾個關鍵領域的進步有關:
(1) 摩爾定律持續有效
使得多核處理器、通用計算圖形處理器GPGPU、CPU/GPU集群等技術,為訓練復雜模型提供了可能,顯著降低了ASR系統的錯誤率。
(2)大數據時代
借助互聯網和云計算,獲得了真實使用場景的大數據訓練模型,使得ASR系統更具魯棒性(健壯性、穩定性)。
(3)移動智能時代
移動設備、可穿戴設備、智能家居設備、車載信息娛樂系統,變得越來越流行,語音交互成為新的入口。
3、研究領域分類
根據在不同限制條件下的研究任務,產生了不同的研究領域。如圖:
4、語音識別任務分類
5、應用
語音交互作為新的入口,主要應用于上圖中的兩大類:幫助人與人的交流和人與機器的交流。
(1)幫助人與人的交流 HHC
應用場景如,如翻譯系統,微信溝通中的語音轉文字,語音輸入等功能。
語音到語音(speech-to-speech,S2S)翻譯系統,可以整合到像Skype這樣的交流工具中,實現自由的遠程交流。
S2S組成模塊主要是,語音識別-->機器翻譯-->文字轉語音,可以看到,語音識別是整個流水線中的第一環。
(2)幫助人與機器的交流 HMC
應用場景如,語音搜索VS,個人數碼助理PDA,游戲,車載信息娛樂系統等。
6、對話系統
要注意的是,我們上面所說的應用場景和系統討論,都是基于【語音對話系統】的舉例。
語音識別技術只是其中關鍵的一環,想要組建一個完整的語音對話系統,還需要其他技術。
語音對話系統:(包含以下系統的一個或多個)
(1)語音識別系統: 語音-->文字
(2)語義理解系統:提取用戶說話的語音信息
(3)文字轉語音系統:文字-->語音
(4)對話管理系統:1)+ 2)+3)完成實際應用場景的溝通
二、語音識別的基本原理:
1、本質:語音識別系統本質上是一種模式識別系統,包括特征提取、模式匹配、參考模式庫等三個基本單元
2、系統架構概述
下圖是語音識別系統的組成結構,主要分4部分:
信號處理和特征提取、聲學模型(AM)、語言模型(LM)和解碼搜索部分。
左半部分可以看做是前端,用于處理音頻流,從而分隔可能發聲的聲音片段,并將它們轉換成一系列數值。
聲學模型就是識別這些數值,給出識別結果。后面我們會詳細解釋。
右半邊看做是后端,是一個專用的搜索引擎,它獲取前端產生的輸出,在以下三個數據庫進行搜索:一個發音模型,一個語言模型,一個詞典。
【發音模型】表示一種語言的發音聲音 ,可通過訓練來識別某個特定用戶的語音模式和發音環境的特征。
【語言模型】表示一種語言的單詞如何合并 。
【詞典】列出該語言的大量單詞 ,以及關于每個單詞如何發音的信息。
a)信號處理和特征提?。?/p>
以音頻信號為輸入,通過消除噪聲和信道失真對語音進行增強,將信號從時域轉化到頻域,并為后面的聲學模型提取合適的有代表性的特征向量。
b)聲學模型:
將聲學和發音學的知識進行整合,以特征提取部分生成的特征為輸入,并為可變長特征序列生成聲學模型分數。
c)語言模型:
語言模型估計通過訓練語料學習詞與詞之間的相互關系,來估計假設詞序列的可能性,又叫語言模型分數。如果了解領域或任務相關的先驗知識,語言模型的分數通??梢怨烙嫷母鼫蚀_。
d)解碼搜索:
綜合聲學模型分數與語言模型分數的結果,將總體輸出分數最高的詞序列當做識別結果。
3、流程:
首先經過預處理,再根據人的語音特點建立語音模型,對輸入的語音信號進行分析,并抽取所需的特征,在此基礎上建立語音識別所需的模板。而計算機在識別過程中要根據語音識別的模型,將計算機中存放的語音模板與輸入的語音信號的特征進行比較,根據一定的搜索和匹配策略,找出一系列最優的與輸入語音匹配的模板。然后根據此模板的定義,通過查表就可以給出計算機的識別結果。顯然,這種最優的結果與特征的選擇、語音模型的好壞、模板是否準確都有直接的關系。
(1)語音識別系統構建過程:
1)訓練:訓練通常是離線完成的,對預先收集好的海量語音、語言數據庫進行信號處理和知識挖掘,獲取語音識別系統所需要的“聲學模型”和“語言模型”
2)識別:識別過程通常是在線完成的,對用戶實時的語音進行自動識別,識別過程通常又可以分為“前端”和“后端”兩大模塊。
A.前端:前端模塊主要的作用是進行端點檢測(去除多余的靜音和非說話聲)、降噪、特征提取等;
B.后端:后端模塊的作用是利用訓練好的“聲學模型”和“語言模型”對用戶說話的特征向量進行統計模式識別(又稱“解碼”),得到其包含的文字信息,此外,后端模塊還存在一個“自適應”的反饋模塊,可以對用戶的語音進行自學習,從而對“聲學模型”和“語音模型”進行必要的“校正”,進一步提高識別的準確率。
三、語音識別技術原理
1、工作原理解讀:
(1)聲波:我們知道聲音實際上是一種波。常見的mp3等格式都是壓縮格式,必須轉成非壓縮的純波形文件來處理,比如Windows PCM文件,也就是俗稱的wav文件。wav文件里存儲的除了一個文件頭以外,就是聲音波形的一個個點了。下圖是一個波形的示例。
(2)分幀:對聲音進行分析,需要對聲音分幀,也就是把聲音切開一小段一小段,每小段稱為一幀。幀操作一般不是簡單的切開,而是使用移動窗函數來實現。幀與幀之間一般是有交疊的,就像下圖:
圖中,每幀的長度為25毫秒,每兩幀之間有10毫秒的交疊。我們稱為以幀長25ms、幀移10ms分幀。
分幀后,語音就變成了很多小段。但波形在時域上幾乎沒有描述能力,因此必須將波形作變換。常見的一種變換方法是提取MFCC特征。至此,聲音就成了一個12行(假設聲學特征是12維)、N列的一個矩陣,稱之為觀察序列,這里N為總幀數。觀察序列如下圖所示,圖中,每一幀都用一個12維的向量表示,色塊的顏色深淺表示向量值的大小。
接下來就要把這個矩陣變成文本了。
(3)語音識別單元
語音識別單元有單詞 (句) 、音節和音素三種,具體選擇哪一種,根據具體任務來定,如詞匯量大小、訓練語音數據的多少。
1)音素:單詞的發音由音素構成。對英語,一種常用的音素集是卡內基梅隆大學的一套由39個音素構成的音素集,參見The CMU Pronouncing Dictionary。漢語一般直接用全部聲母和韻母作為音素集,另外漢語識別還分有調無調,在漢語里,最小的語音單位是音素,是從音色的角度分出來的,有興趣的可以自己去了解一下哈。
2)音節:一個音素單獨存在或幾個音素結合起來,叫做音節??梢詮穆犛X上區分,漢語一般是一字一音節,少數的有兩字一音節(如“花兒”)和兩音節一字。
3)狀態:這里理解成比音素更細致的語音單位就行啦。通常把一個音素劃分成3個狀態。
4)流程:
第一步,把幀識別成狀態(難點)。
第二步,把狀態組合成音素。
第三步,把音素組合成單詞。
在上圖中,每個小豎條代表一幀,若干幀語音對應一個狀態,每三個狀態組合成一個音素,若干個音素組合成一個單詞。也就是說,只要知道每幀語音對應哪個狀態,語音識別的結果就出來了。
那每幀音素對應哪個狀態呢?有個容易想到的辦法,看某幀對應哪個狀態的概率最大,那這幀就屬于哪個狀態。比如下面的示意圖,這幀在狀態S3上的條件概率最大,因此就猜這幀屬于狀態S3。
那這些用到的概率從哪里讀取呢?有個叫“聲學模型”的東西,里面存了一大堆參數,通過這些參數,就可以知道幀和狀態對應的概率。獲取這一大堆參數的方法叫做“訓練”,需要使用巨大數量的語音數據,訓練的方法比較繁瑣,現在有很多訓練模型的工具(如:CMUSphinx Open Source Speech Recognition?,Kaldi ASR)。
但這樣做有一個問題:每一幀都會得到一個狀態號,最后整個語音就會得到一堆亂七八糟的狀態號,相鄰兩幀間的狀態號基本都不相同。假設語音有1000幀,每幀對應1個狀態,每3個狀態組合成一個音素,那么大概會組合成300個音素,但這段語音其實根本沒有這么多音素。如果真這么做,得到的狀態號可能根本無法組合成音素。實際上,相鄰幀的狀態應該大多數都是相同的才合理,因為每幀很短。
解決這個問題的常用方法就是使用隱馬爾可夫模型(Hidden Markov Model,HMM)。這東西聽起來好像很高深的樣子,實際上用起來很簡單:首先構建一個狀態網絡,然后從狀態網絡中尋找與聲音最匹配的路徑。
這樣就把結果限制在預先設定的網絡中,避免了剛才說到的問題,當然也帶來一個局限,比如你設定的網絡里只包含了“今天晴天”和“今天下雨”兩個句子的狀態路徑,那么不管說些什么,識別出的結果必然是這兩個句子中的一句。那如果想識別任意文本呢?把這個網絡搭得足夠大,包含任意文本的路徑就可以了。但這個網絡越大,想要達到比較好的識別準確率就越難。所以要根據實際任務的需求,合理選擇網絡大小和結構。
搭建狀態網絡,是由單詞級網絡展開成音素網絡,再展開成狀態網絡。語音識別過程其實就是在狀態網絡中搜索一條最佳路徑,語音對應這條路徑的累積概率最大,這稱之為“解碼”。路徑搜索的算法是一種動態規劃剪枝的算法,稱之為Viterbi算法,用于尋找全局最優路徑。
累積概率:
觀察概率:每幀和每個狀態對應的概率
轉移概率:每個狀態轉移到自身或轉移到下個狀態的概率
語言概率:根據語言統計規律得到的概率
其中,前兩種概率從聲學模型中獲取,最后一種概率從語言模型中獲取。語言模型是使用大量的文本訓練出來的,可以利用某門語言本身的統計規律來幫助提升識別正確率。語言模型很重要,如果不使用語言模型,當狀態網絡較大時,識別出的結果基本是一團亂麻。
參考文章鏈接如下:
http://www.lxweimin.com/p/8041e1f4fdf3
http://www.lxweimin.com/p/a3e2915a3783
http://www.lxweimin.com/p/1cfa15eaadfe
http://www.lxweimin.com/p/2c99885b9a8f
http://www.lxweimin.com/p/60ef7117a612
http://www.lxweimin.com/p/350a4f447a5f
http://www.lxweimin.com/p/c088c89a7f09
http://www.lxweimin.com/p/45a764b53474
http://www.lxweimin.com/p/7c94467f58ff
http://www.woshipm.com/pd/894645.html
http://www.lxweimin.com/p/dc8954aebbef