在人際交往中,言語是最自然並且最直接的方式之一。隨着技術的進步,越來越多的人們也期望計算機能夠具備與人進行言語溝通的能力,因此,語音識別這一技術也越來越受到關注。尤其,隨着深度學習技術應用在語音識別技術中,使得語音識別的性能得到了顯著提升,也使得語音識別技術的普及成為了現實。
以上是廢話,下面開始正文。
自動語音識別技術,簡單來說其實就是利用計算機將語音信號自動轉換為文本的一項技術。這項技術同時也是機器理解人類言語的第一個也是很重要的一個過程。
為了進一步解釋計算機如何實現語音到文字的轉換這一過程,我先把目前比較主流的自動語音識別系統的整體框架貼出來,然后再一一簡要地對各部分進行說明。
當我們要對一段語音進行識別時,首先需要進行的是對語音特征的提取。這一步所做的工作其實就是從輸入的語音信號(時域信號)中提取出可以進行建模的聲學觀測特征向量序列O。通俗地解釋就是把需要識別的一段語音進行特征提取,之后得到了一組可以表征這一段語音的向量,后續對語音進行的一系列操作都是基於這組向量的。
在得到了這組觀測特征向量O之后,我們可以用一個公式來說明一下語音識別具體是要做一個什么樣的事情:
W = argmax P(W|O)
這個公式含義很簡單,就是說在給定一組觀測向量O的條件下,找到一組詞向量W使得P(W|O)的概率最大。這個也正是人聽到一段語音的時候做的事情——找所有已知文字中和這段語音最匹配的。但是,依靠這個公式,我們是無法解決語音識別問題的。還需要利用貝葉斯定理對其進行轉換,將其轉換成我們能夠分別進行建模求解的形式。轉換如下:
W = argmaxP(W|O) = argmax P(O|W)P(W) / P(O)
其中,P(O)是聲學觀測的先驗概率,在自動語音識別過程中,由於輸入的聲學觀測特征序列是固定的,可以認為上述公式中的P(O)是常量,因此P(O)在上述公式的最大化的過程中不起作用,可以忽略。那么我們現在只剩下P(O|W)和P(W)需要考慮。而在上述結構圖中的聲學模型和語言模型分別提供了對P(O|W)和P(W)進行計算的方法,下面分別簡單介紹一下。
首先是聲學模型,其目的是提供一種方法,來對給定詞w的聲學觀測特征序列O的似然度進行計算。(可以理解成給定一個詞w,然后算目前這個特征向量是描述這個詞的可能性有多大,也就是算P(O|W)),所以這個建模的任務就可以簡單地理解成對每一個詞建立一個描述概率分布的模型,該模型的輸入是聲學特征向量,輸出則是一個概率(似然值),概率越高表示該聲學特征越可能表示的是這個詞。但是在實際的大詞匯量語音識別任務中,如果對每一個詞建立一個模型是很不現實的。因為詞的數量非常多,而且經常會有新詞出現。為了解決這個問題,聲學模型通常不會直接對詞進行建模,而是將詞拆成字詞序列,對字詞進行建模。舉個例子,漢語中的漢字有幾萬個,但是如果將漢字拆分成音標(跑 p ao),那么我們只需要用幾十個音標就可以表示所有漢字的讀音,就算考慮音調,我們也最多只需要幾百個音標就足夠了。然后,對音標進行建模,在將其拼接成漢字,就可以得到我們需要的p(O|W)同時卻大大減少了建模的數量。因此,目前主流的聲學建模方法一般采用對語音的基本單位——音子進行建模(音子與音標有區別,不一樣,但可以利用音標對音子的概念進行理解)。
剛剛在聲學模型中提到了子詞的概念,那么子詞如何拼接成真正的詞呢?這就需要給計算機一個規則,這個就是我們的發音詞典。發音詞典可以理解成一個詞到音子的映射(簡單理解成給定詞,然后利用發音單元給它“注音”,例如:你好 n i h ao),系統通過查找發音詞典就可以知道每個詞是由哪些發音單元組成的了。
再來說說語言模型,現在我們利用聲學模型和發音詞典可以搞定P(O|W)了,但是我們還需要知道P(W)要如何進行計算。語言模型就是在做這么一件事情。它提供了一種機制,來利用當前詞之前的n個詞來估計當前詞是w的概率。舉例來說,比如我們已經有了兩個個詞“我 是”,現在想知道接下來的詞會是什么。很顯然“我 是” 后面可以接很多詞,比如“我是學生”,“我是豬”,“我是飲水機”等等。而語言模型的作用就是計算這些詞出現的概率。因此,一個好的語言模型算得的“我是學生”的概率可能會比另兩個高,因為“我是人”這句話更符合人們通常的說話習慣。這樣,利用語言模型我們也找到了一種計算P(W)的方法。
最后,我們利用上述的聲學模型、語言模型和發音詞典就可以構建起一個解碼空間,之后利用解碼器,結合每一組輸入的語音特征向量在空間中進行搜索,找到一條最優的詞序列,就是找到一條路徑使得P(O|W)P(W)概率最大。那么,最終得到的這個詞序列就是我們想要的識別結果。
由於是第一次寫博客,就先寫篇小簡介試試水,寫的不好,中間也應該會有一些錯誤和不足,還望大家多提意見,多多指正 O(∩_∩)O