2
本文作者: 大牛講堂 | 2016-12-07 14:39 |
雷鋒網(wǎng)按:本文作者潘復(fù)平,地平線機(jī)器人語(yǔ)音識(shí)別算法工程師。博士畢業(yè)于中國(guó)科學(xué)院聲學(xué)研究所,曾任聲學(xué)所副研究員、百度語(yǔ)音技術(shù)部資深工程師等職位。在中科院工作期間曾領(lǐng)導(dǎo)完成多個(gè)"863"、教育部和中科院的科研項(xiàng)目。在百度工作期間把解碼器的搜索空間大小壓縮到了原來的十分之一,解碼速度提高了約30%,并在置信度、VAD等方面大幅提高了系統(tǒng)性能?,F(xiàn)任地平線機(jī)器人語(yǔ)音識(shí)別算法工程師,深度參與地平線“安徒生”智能家居平臺(tái)的研發(fā)。
語(yǔ)音識(shí)別技術(shù),也被稱為自動(dòng)語(yǔ)音識(shí)別(Automatic Speech Recognition,ASR),其目標(biāo)是將人類語(yǔ)音中的詞匯內(nèi)容轉(zhuǎn)換為計(jì)算機(jī)可讀的輸入,例如按鍵、二進(jìn)制編碼或者字符序列。與說話人識(shí)別及說話人確認(rèn)不同,后者嘗試識(shí)別或確認(rèn)發(fā)出語(yǔ)音的說話人而非其中所包含的詞匯內(nèi)容。
智能硬件行業(yè)的不斷發(fā)展,對(duì)計(jì)算機(jī)深度學(xué)習(xí)能力提出了更大的挑戰(zhàn)。為了滿足人工智能技術(shù)快速產(chǎn)品化的訴求,進(jìn)一步提升用戶體驗(yàn),未來的智能終端必須具備出色的與人交流、溝通的能力。人工智能產(chǎn)品這種交互功能的實(shí)現(xiàn)是與語(yǔ)音解碼器技術(shù)密切相關(guān)的。本期“大牛講堂”主講潘復(fù)平博士將為我們科普高大上的“語(yǔ)音識(shí)別專題”之語(yǔ)音解碼技術(shù)。
基本原理
當(dāng)前主流的語(yǔ)音識(shí)別系統(tǒng)多基于統(tǒng)計(jì)理論的貝葉斯準(zhǔn)則。其典型框架一般包含前端處理、聲學(xué)模型、語(yǔ)言模型、解碼器和后處理等五個(gè)基本模塊。解碼器模塊主要完成的工作包括:給定輸入特征序列的情況下,在由聲學(xué)模型、聲學(xué)上下文、發(fā)音詞典和語(yǔ)言模型等四種知識(shí)源組成的搜索空間(Search Space)中,通過維特比(Viterbi)搜索,尋找最佳詞串
,使得滿足:
(1.1)
通過貝葉斯公式,公式(1.1)可以改寫為:
(1.2)
其中,分母項(xiàng)與
無關(guān),被省略。除了上述最優(yōu)路徑,如果在Viterbi搜索中還保留了次優(yōu)路徑,則解碼器可同時(shí)產(chǎn)生包含多候選識(shí)別結(jié)果的詞圖。
引入隱馬爾可夫模型和N元文法語(yǔ)言模型,公式(1.2)可表示為:
(1.3)
其中為單詞的狀態(tài)轉(zhuǎn)移序列,
為狀態(tài)轉(zhuǎn)移概率。
公式(1.3)中,已經(jīng)引入了Viterbi最大近似假設(shè),這個(gè)假設(shè)會(huì)帶來一定的精度損失,但是其運(yùn)算量卻大大降低。在解碼過程中,各種解碼器的具體實(shí)現(xiàn)可以是不同的。按搜索空間的構(gòu)成方式來分,有動(dòng)態(tài)編譯和靜態(tài)編譯兩種方式。關(guān)于靜態(tài)編譯,是把所有知識(shí)源統(tǒng)一編譯在一個(gè)狀態(tài)網(wǎng)絡(luò)中,在解碼過程中,根據(jù)節(jié)點(diǎn)間的轉(zhuǎn)移權(quán)重獲得概率信息。
由AT&T提出的Weighted Finite State Transducer(WFST)方法是一種有效編譯搜索空間并消除冗余信息的方法。就動(dòng)態(tài)編譯而言,只是預(yù)先將發(fā)音詞典編譯成狀態(tài)網(wǎng)絡(luò)構(gòu)成搜索空間,其他知識(shí)源在解碼過程中根據(jù)活躍路徑上攜帶的歷史信息動(dòng)態(tài)集成。
按搜索算法的時(shí)間模式來分,有異步與同步兩種方式。時(shí)間異步的搜索算法通過棧解碼器(Stack Decoder)來實(shí)現(xiàn)。時(shí)間同步的方法就是常說的Viterbi解碼。基于樹拷貝的幀同步解碼器是目前比較流行的方法。下面將針對(duì)搜索空間的兩種構(gòu)成方式與幀同步解碼算法作進(jìn)一步詳細(xì)介紹。
動(dòng)態(tài)解碼網(wǎng)絡(luò)
動(dòng)態(tài)解碼網(wǎng)絡(luò)僅僅把詞典編譯為狀態(tài)網(wǎng)絡(luò),構(gòu)成搜索空間。編譯的一般流程為:首先把詞典中的所有單詞并聯(lián)構(gòu)成并聯(lián)網(wǎng)絡(luò);然后把單詞替換為音素串;接著把每個(gè)音素根據(jù)上下文拆分為狀態(tài)序列;最后把狀態(tài)網(wǎng)絡(luò)的首尾根據(jù)音素上下文一致的原則進(jìn)行連接,構(gòu)成回環(huán)。這樣編譯出來的網(wǎng)絡(luò)一般稱為線性詞典(Linear Lexicon)(如圖2-1),它的特點(diǎn)是每個(gè)單詞的狀態(tài)序列保持嚴(yán)格獨(dú)立,不同單詞的狀態(tài)之間沒有節(jié)點(diǎn)共享,因此內(nèi)存占用比較大,解碼過程中的重復(fù)計(jì)算比較多。
為了克服這些缺點(diǎn),一般把單詞首尾發(fā)音相同的部分進(jìn)行合并,稱為樹型詞典(Tree Lexicon)(如圖2-2)。由于大量相同狀態(tài)的節(jié)點(diǎn)被合并在一起,因此可以顯著降低搜索空間的規(guī)模,減少解碼過程的運(yùn)算量。
圖2-1 線性詞典示例
圖2-2 樹形詞典示例
基于樹拷貝的動(dòng)態(tài)規(guī)劃搜索算法
在樹形詞典構(gòu)成的搜索空間中進(jìn)行動(dòng)態(tài)解碼,如果使用N-Gram語(yǔ)言模型,當(dāng)前詞的ID只有在搜索到達(dá)樹的葉子節(jié)點(diǎn)時(shí)才能知道。這樣,語(yǔ)言模型的概率只有在達(dá)到N-Gram中第N個(gè)單詞的結(jié)束狀態(tài)后才能集成。為了能夠應(yīng)用動(dòng)態(tài)規(guī)劃準(zhǔn)則,常用的做法是采用“樹拷貝”(Tree Copy)的方式來組織搜索空間:對(duì)于每個(gè)前驅(qū)詞歷史
,我們引入詞典樹的一份拷貝,這樣在搜索的過程中,當(dāng)單詞結(jié)束的假設(shè)出現(xiàn)時(shí),我們總能夠知道它的前驅(qū)詞歷史。為了方便描述,下面以Bi-Gram語(yǔ)言模型為例介紹解碼搜索算法。
基于樹拷貝的解碼搜索需要用到動(dòng)態(tài)規(guī)劃(Dynamic Programming,DP)算法。動(dòng)態(tài)規(guī)劃的主要意圖是把一個(gè)全局最優(yōu)問題的求解分解為小的局部問題并且形成遞歸聯(lián)系。
下面首先引入兩個(gè)變量的定義:
?
表示時(shí)刻t到達(dá)前驅(qū)詞為v的詞典樹狀態(tài)s的最佳部分路徑得分。
?
表示時(shí)刻t到達(dá)前驅(qū)詞為v的詞典樹狀態(tài)s的最佳部分路徑起始時(shí)間。
這兩個(gè)變量的計(jì)算可以采用如下的迭代公式:
(3-1)&(3-2)
這里表示前驅(qū)詞為v時(shí)假設(shè)(t, s)的最佳前驅(qū)狀態(tài)。后向指針
只是簡(jiǎn)單的根據(jù)動(dòng)態(tài)規(guī)劃的決策進(jìn)行傳播。
在詞的邊界,我們需要為每個(gè)單詞w找到它的最佳前驅(qū)詞v。為此我們定義:
(3-3)
這里表示詞典樹中單詞w的結(jié)束狀態(tài)。為了能夠向下一個(gè)單詞傳播路徑假設(shè),我們需要在處理時(shí)刻t的數(shù)據(jù)幀前傳遞分?jǐn)?shù)和時(shí)間索引:
(3-4)&(3-5)
算法的流程見表3-1。從表中可以看出,DP遞歸包含兩個(gè)層次:
聲學(xué)層,主要是處理詞內(nèi)部一些假設(shè)的重新組合;
詞對(duì)層,處理Bigram語(yǔ)言模型的使用。
該搜索過程是一個(gè)時(shí)間同步寬度有限的搜索策略。為了降低存儲(chǔ)量的需要,可以引入一個(gè)回溯數(shù)組用于記錄在每一個(gè)時(shí)間幀的詞邊界(v, w)和它們的開始時(shí)間。在句子的結(jié)束處,通過對(duì)回溯數(shù)組的一些查找操作可以很輕松地獲得識(shí)別出來的單詞序列。
束剪枝
對(duì)于大詞表連續(xù)語(yǔ)音識(shí)別中的完全DP搜索,在每個(gè)時(shí)間幀,DP遞歸程序面臨巨大數(shù)目的HMM狀態(tài)。如果采用一定的剪枝策略,則可以把計(jì)算量降低,同時(shí)保證識(shí)別率基本不下降。常用的剪枝操作主要從如下三個(gè)方面進(jìn)行:
全局累計(jì)概率剪枝
根據(jù)搜索空間中所有活躍路徑累計(jì)概率的最大值,設(shè)定一個(gè)門限,把累計(jì)概率小于該門限的那些路徑裁剪掉。
語(yǔ)言模型剪枝
當(dāng)活躍路徑到達(dá)單詞末尾后,可以取得單詞ID,同時(shí)在累計(jì)概率中加入語(yǔ)言模型得分。由于語(yǔ)言模型概率的加入,增大了不同路徑間的概率區(qū)分性,因此可以把到達(dá)詞尾的路徑歸集在一起,根據(jù)累計(jì)概率最大值設(shè)置門限,把累計(jì)概率小于門限的那些路徑裁剪掉。
直方圖剪枝
這種剪枝方法是繪制活躍路徑累計(jì)概率的直方圖分布,然后根據(jù)事先設(shè)定的最大允許活躍路徑數(shù)量上限,算出合適的累計(jì)概率門限,把小于門限的活躍路徑裁剪掉,以避免路徑數(shù)量的爆炸性增長(zhǎng)。
靜態(tài)解碼網(wǎng)絡(luò)
大詞表連續(xù)語(yǔ)音識(shí)別所常用的四類模型:HMM、跨詞三音子模型、詞典以及語(yǔ)言模型,實(shí)際上是在不同粒度上描述了可能的搜索空間:
1、HMM 模型定義了每個(gè)三音子所對(duì)應(yīng)的HMM狀態(tài)序列。語(yǔ)音識(shí)別時(shí),通過對(duì)每一幀所對(duì)應(yīng)的狀態(tài)進(jìn)行假設(shè),可以在HMM的狀態(tài)序列上進(jìn)行搜索,從而產(chǎn)生可能的三音子序列;
2、跨詞三音子模型定義了從三音子到音素的對(duì)應(yīng)關(guān)系。根據(jù)HMM模型產(chǎn)生的三音子序列,可以得到可能的音素序列;
3、詞典定義了音素序列所表示的詞。根據(jù)跨詞三音子模型產(chǎn)生的可能的音素序列,可以得到相應(yīng)的詞序列;
4、語(yǔ)言模型定義了詞序列出現(xiàn)的概率。根據(jù)詞典產(chǎn)生的詞序列,可以得到該序列的概率得分;
上述過程是非常復(fù)雜的,系統(tǒng)需要同時(shí)考慮4類模型以及模型之間的約束關(guān)系,以完成“從可能的狀態(tài)序列到可能的詞序列之間的轉(zhuǎn)換”。
20世紀(jì)90年代末期,美國(guó)電話電報(bào)公司(AT&T)的Mohri率先提出了以加權(quán)有限狀態(tài)轉(zhuǎn)換器(Weighted Finite-state Transducer: WFST)對(duì)語(yǔ)音識(shí)別過程中所使用的各種模型進(jìn)行描述。此后,相關(guān)的研究紛紛出現(xiàn)。與傳統(tǒng)動(dòng)態(tài)網(wǎng)絡(luò)解碼相比,基于WFST的識(shí)別系統(tǒng)在識(shí)別之前利用上述模型產(chǎn)生語(yǔ)音識(shí)別用的靜態(tài)解碼網(wǎng)絡(luò),這個(gè)網(wǎng)絡(luò)包含了所有可能的搜索空間。
在此基礎(chǔ)上進(jìn)行語(yǔ)音識(shí)別時(shí),系統(tǒng)只需要將這個(gè)識(shí)別網(wǎng)絡(luò)(WFST網(wǎng)絡(luò))讀入內(nèi)存,然后基于聲學(xué)模型就可以在這個(gè)網(wǎng)絡(luò)上完成解碼,不需要像原有系統(tǒng)那樣同時(shí)考慮聲學(xué)模型、詞典、語(yǔ)言模型等。這樣簡(jiǎn)化了語(yǔ)音識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。實(shí)驗(yàn)表明,用WFST構(gòu)建的語(yǔ)音識(shí)別系統(tǒng)具有識(shí)別速度快,識(shí)別效果好的特性。
所謂靜態(tài)網(wǎng)絡(luò)就是根據(jù)已知的模型,將它們代表的搜索空間進(jìn)行組合,從而得到一個(gè)統(tǒng)一的識(shí)別網(wǎng)絡(luò):從輸入HMM狀態(tài)序列,直接得到詞序列及其相關(guān)得分。基于WFST構(gòu)建靜態(tài)解碼網(wǎng)絡(luò)是一個(gè)相對(duì)復(fù)雜的過程。構(gòu)建網(wǎng)絡(luò)的第一步是將上述四類模型轉(zhuǎn)換成WFST表示。然后再依次進(jìn)行WFST網(wǎng)絡(luò)的合并和壓縮,從而得到完整的語(yǔ)音識(shí)別靜態(tài)搜索空間。
我們用H、C、L、G分別表示上述HMM模型、三音子模型、字典和語(yǔ)言模型的WFST形式。不難看出,這四個(gè)模型在語(yǔ)音識(shí)別中相當(dāng)于4個(gè)串聯(lián)的子系統(tǒng)。每一個(gè)子系統(tǒng)的輸出是下一個(gè)子系統(tǒng)的輸入。使用WFST的合成操作可以實(shí)現(xiàn)將上述串聯(lián)系統(tǒng)組合成一個(gè) WFST。使用HMM的狀態(tài)序列作為這個(gè) WFST的輸入時(shí),系統(tǒng)將直接輸出詞序列以及相應(yīng)的得分。
但是,直接求空間復(fù)雜度較高,合成的結(jié)果占用內(nèi)存非常之大。為了在有限的內(nèi)存中完成解碼網(wǎng)絡(luò)的構(gòu)建,需要對(duì)信息逐步引入,并在每一步引入信息之后進(jìn)行優(yōu)化,為下一步引入信息做準(zhǔn)備。同時(shí),建立好靜態(tài)解碼網(wǎng)絡(luò)后,還需要進(jìn)一步的優(yōu)化,使得網(wǎng)絡(luò)能夠有較小的體積?;谏鲜鏊枷?,一般網(wǎng)絡(luò)構(gòu)建的流程為:
(5.1)
其中的det表示確定化算法;min表示最小化算法;為 ε-Removal 算法。式(5-1) 在逐步引入信息的同時(shí)采用確定化算法對(duì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行優(yōu)化。而在將所有信息引入后,需要采用WFST的最小化算法以及ε-Removal算法完成進(jìn)一步的優(yōu)化,使得形成的識(shí)別網(wǎng)絡(luò)較小。
基于靜態(tài)解碼網(wǎng)絡(luò)的搜索算法與基于動(dòng)態(tài)網(wǎng)絡(luò)的動(dòng)態(tài)規(guī)劃搜索算法類似,也是采用了迭代計(jì)算,讓概率信息在網(wǎng)絡(luò)節(jié)點(diǎn)間傳遞更新。不同之處在于,由于靜態(tài)網(wǎng)絡(luò)已經(jīng)把搜索空間全部展開,所以它不需要根據(jù)解碼路徑的前驅(qū)詞構(gòu)造搜索空間副本,也不需要在詞尾節(jié)點(diǎn)根據(jù)歷史信息查詢語(yǔ)言模型概率,它只需要根據(jù)節(jié)點(diǎn)間的轉(zhuǎn)移權(quán)重計(jì)算聲學(xué)概率和累計(jì)概率即可,因此解碼速度非常快。
雷鋒網(wǎng)注:本文由大牛講堂授權(quán)雷鋒網(wǎng)發(fā)布,如需轉(zhuǎn)載請(qǐng)聯(lián)系原作者,并注明作者和出處,不得刪減內(nèi)容。有興趣可以關(guān)注公號(hào)地平線機(jī)器人技術(shù),了解最新消息。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。