閱讀391 返回首頁    go 阿裏雲 go 技術社區[雲棲]


語音喚醒技術:small-footprint keyword spotting

本文將介紹Interspeech 2017上關於語音喚醒技術的幾篇文章。
首先,什麼是語音喚醒?
a6c4cada1c6adc1b84008d39b45b6644350d2057
上麵的四幅圖表現設備從休眠到喚醒的過程:首先,設備需要被開啟,自動加載好資源,這時它處於休眠狀態。當用戶說出特定的喚醒詞時,設備就會被喚醒,切換到工作狀態等待用戶接下來的指令。這一過程中用戶不需要用手接觸,直接可以用語音進行操作,同時利用語音喚醒的機製,設備不用實時地處於工作的狀態,從而節省能耗。
語音喚醒的應用領域比較廣泛,例如機器人、手機、可穿戴設備、智能家居、車載等。幾乎很多帶有語音功能的設備都會需要語音喚醒技術作為人和機器互動的一個開始或入口。不同的產品會有不同的喚醒詞,當用戶需要喚醒設備時需要說出特定的喚醒詞。大部分的喚醒詞都是三到四個音節,音節覆蓋多,音節差異大,相對喚醒效果會比較穩定。
對於一個喚醒效果好壞的判定,主要有召回率、虛警率、實時率和功耗四個指標。召回率表示正確被喚醒的次數占總的應該被喚醒次數的比例。虛警率表示不該被喚醒卻被喚醒的概率。召回率越高虛警率越低就表示喚醒的性能越好,這兩個指標的關係經常是一個相對關係,即一個指標的上升對應另一個指標的下降。從用戶體驗的角度來講,實時率可以表現為設備反應的速度,喚醒技術對設備的反應速度要求很高。另一個指標是功耗,由於很多設備依靠電池或者是充電式的,具有低能耗才能保證設備較長時間的工作不需要充電,實際上,不同方向的產品使用場景不同,相對它的技術難點是有很大區別的,例如,車載環境下喚醒的難點在於它周圍環境的噪聲比較大,因此噪聲環境下的召回率和虛警率就變得很重要;智能家居中的智能音箱、智能電視等也會受到環境噪聲的影響,這時的噪聲主要是人的聲音,即其他人說話聲音對本人說話聲音的影響。而且多數的智能家居是充電後使用的,低功耗也成為一個非常重要的指標。喚醒其實是與實際結合非常緊密、非常重視用戶體驗的一種任務。
喚醒可以看成是一種小資源的關鍵詞檢索任務,其中小資源是指計算資源比較小和空間存儲資源比較小,因此它的係統框架跟關鍵詞檢索的係統會有一定的區別,目前常用的係統框架主要有Keyword/Filler Hidden Markov Model System和Deep KWS System兩種。
48be104a050ea67bfe65b459cb48418c6c4db6fe
第一種被稱為基於隱馬爾科夫模型的Keyword and Filler係統,這類係統的關鍵是上圖中左側的解碼模塊,它與語音識別器中的解碼器類似,也是通過維特比算法來獲取到最優的路徑,但是與語音識別中LVCSR(大規模詞表語音識別)係統的區別在於解碼網絡具體的構建,語音識別中的解碼網絡包含所有詞典中的詞匯,而喚醒的解碼網絡如上圖右側包含了Keyword和Filler的途徑,除了關鍵詞以外的詞匯都包含在Filler路徑當中,不是每一個詞都會有相應的路徑,這樣的網絡會比語音識別的網絡小很多,有針對性地對關鍵詞進行解碼,可選的路徑就少了很多,解碼的速度也會得到大幅度的提升。對於解碼出來的候選再作一個判斷,就完成這樣一套技術方案的整體構架。
f46313c2adaede15fd75db5cc657c95f9ebc5f7f
第二種係統不再采用解碼這樣一個步驟,直接是由端到端的模式,即輸入是語音,輸出直接是關鍵詞。這樣的係統包括三個部分:如上圖,第一步是特征的提取,第二步通常是一個神經網絡,它的輸入是語音特征,輸出是各個關鍵詞和非關鍵詞即Filler這樣一個後驗概率。由於第二步的網絡是以幀為單位輸出後驗值的,就需要第三步對後驗值以一定的窗長進行平滑,平滑後的後驗值如果超過一定的閾值會被認為是喚醒了。
下麵介紹Interspeech 2017上關於語音喚醒技術的文章,其中挑選了三篇跟大家分享。
1acd78e05d17aeee1ae1167bd9e72975486b3586
第一篇如上是來自於Amazon的一篇文章,它的係統架構采用了上文介紹的第一類係統,也就是需要有解碼的係統。這篇文章的關鍵點在於對解碼模塊嚐試使用了TDNN(Time Delay Neural Network)的聲學模型,同時為了提升TDNN的性能以及減少TDNN的計算量,使其能夠滿足實際使用的實時率要求也做了一係列的優化。
 b0a333b4074da6d9f648abf2215b203fbde83bab   
在這一架構當中解碼模塊是比較重要的,如上圖左側畫出了係統的解碼網絡,分為ALEXA關鍵詞路徑和Filler路徑,其中NSP表示Non-speech(非語音)Filler路徑,SP表示Speech(語音)Filler路徑。圖當中的每一個圓圈都是一個隱馬可夫模型,在建模單元上,下麵的關鍵詞是采用了三狀態的隱馬可夫模型對音素進行建模,而Filler部分采用了單狀態的隱馬可夫模型進行建模。解碼過程中,當有token走到了關鍵詞的詞尾節點時需要進行一個判斷,此時采用關鍵詞與filler的聲學模型得分之比作為一個衡量標準,當它大於一定閾值的時候才會進入到下一個模塊當中。
文中采用TDNN指的就是對於圖左側的隱馬可夫模型的一部分即發射概率采用TDNN來進行建模。TDNN的學習需要用到前後幀所保留下來的信息,同時還需要照顧到一些時間軸的信息,所以它的結構圖跟我們平時看到的DNN結構圖畫法上有比較大的區別。下圖中的小黑框指的是網絡的隱層,這個圖表示的就是時間為t的那一幀在時間維度上的一個網絡結構。從圖中的橙色框可以看出,越深的層它能夠學習到的上下文信息是越寬的,從左往右逐個加深,對應的輸入特征也是變得越來越寬的過程,對於時間為t這一幀的建模實際上用到的是t-20到t+10這30幀的一個輸入特征,這個長度可以通過調節變得更加長,這種長時的信息學習是DNN不能夠做到的,所以說TDNN主要的優勢在於能夠學習和處理更長的上下文信息。
6756827fb823e1ce718e5adefe1ef8545f7f791f
為了能夠得到一個更好的TDNN的效果,文中采用了Transfer Learning和Multi-task Learning兩個方法。
7667f7dfaacd65c509ef1bd44350412250a1de95
Transfer Learning是一種在機器學習中廣泛使用的方法,核心的意思是將從一個相關任務學習到的知識遷移到當前的任務當中來,對於文章中的任務來說采用的方法就是先訓練一個LVCSR的網絡,之後對於喚醒任務的網絡,它的隱層參數就用LVCSR這樣的網絡參數作為初始值,再進行喚醒網絡的訓練,這樣做的好處就是使得喚醒任務的網絡能獲得一個更優的初始化,從而有助於它最終收斂到一個更優的局部最優點上。
eb940b1b98ec14926d062644932b62398a5c6aa7
另一個提升TDNN性能的方法是采用共享隱層的結構進行多任務的學習,也就是Multi-task Learning。在這篇文章當中,從上麵的結構圖中可以看到,網絡學習的一個任務是關鍵詞任務,另一個是LVCSR任務,兩個任務共享了輸入層和大部分的隱層,訓練中的目標函數如公式中展示的,是兩個任務的加權平均,其中任務的權重可以自行調節。這個網絡的優點在於最終使用的時候會將隻跟LVCSR相關的這些節點從網絡中剝離,因此網絡的使用跟之前的常用的網絡一樣,比較簡單。
由於TDNN比DNN的計算量大很多,為了能夠滿足實際使用的需求,文章中采用了一些方法來降低TDNN的計算量。一種方法叫做Sub-sampling,下圖中所有的線是原始TDNN的一個形態,是一個全連接的網絡,但事實上相鄰時間點所包含的上下文的信息是有很大部分重疊的,因此可以采用采樣的方法隻保留圖中部分的連接,比如像圖中保留了紅色線的部分,實驗中顯示出這樣的采樣可以獲得與原始模型近似的效果,同時能夠大大減少模型的計算量。
f4fd218276b663697e35dd91d2e8e3a4684449e6
另外一個降低計算量的方法是采用奇異值分解。如下圖,將一個參數矩陣轉換成兩個參數矩陣相乘,進行完奇異值分解後,奇異值會從大到小進行排列,其中o表示保留下來的奇異值個數。在很多情況下,前10%甚至1%奇異值的和就占據了全部奇異值總和的99%以上,因此在這樣的分解中去合理選擇o不會給模型帶來性能的損失,甚至這樣的結構調整會使得模型的結構更加合理,從而獲得一個更好的收斂點,更最重要的是,它大大減少了模型的計算量。下圖中列出了矩陣奇異值分解前和後計算量的計算公式,等號前麵是一個矩陣的計算量,後麵相當於兩個矩陣的計算量,大部分情況後者的計算量都會遠小於前者,o越小時,差距會越大。文章使用的是將隱層的參數矩陣去做這樣的一個分解,使得TDNN的計算量得到縮減。
703a693ba2d44651e64624bd17c6f8af31987953
下圖為它的一些實驗結果,文章中的實驗使用的關鍵詞是”Alexa”,訓練以及測試的數據是在不同條件下采集到的房間內的遠場數據,文中提到他們采用了充足的訓練開發以及測試數據。其中左圖的橫坐標表示虛警率,縱坐標表示沒有召回的概率(1-召回率),顯示的三條曲線叫作ROC曲線,ROC曲線的位置越低表示性能越好。用於對比的BaseLine是一個做了SVD的DNN模型,即圖中的黑線所示,相比較的是TDNN的結果,即圖中的綠線和紅線,綠色表示沒有做SVD的,紅色是做了SVD的。從圖中可以看出TDNN會比DNN性能好,而後進一步做SVD會給TDNN帶來進一步的性能提升。右邊的表格列出的是AUC(Area under Curve)的結果,即ROC曲線下麵的麵積,麵積越小表示性能越好,而從表格中可以看出TDNN相對於DNN有了一個很大的提升。
cf91c58a32dc396bb3abc94296d1351acaa2bfd0
0f07fe78ad838ff9a248177fc1a12e7c60bb9f82
第二篇文章如上,來自於百度,采用的框架是本文之前介紹的第二種係統框架Deep KWS System。此係統采用端到端模式,其中最重要的一部分是神經網絡,本篇文章采用了CRNN的網絡結構,同時為了減小模型的計算量,文章中探索了不同模型結構和參數來獲得一個相對更優的效果。CRNN是將CNN和RNN融合在一個網絡當中,CNN的優勢在於挖掘局部的信息,而RNN的優勢在於學習長時的上下文信息,兩者的結合可以起到互補的作用。之前百度有在LVCSR任務上采用了這樣的模型,在采用CRNN的同時使用CTC目標函數進行訓練,在語音識別的任務上獲得了很好的效果,他們希望把這樣的模型引入到喚醒任務當中,但是CTC目前都是在模型規模比較大、數據量比較大的情況下得到較好的效果,這一點並不適用於喚醒的任務,而且文章中在喚醒的實驗上也表明了目標值采用CTC沒有獲得預期的效果,因此在本文中實際依然采用交叉熵作為目標函數。
fc02bae73e44cb82713ccc4a9b8dfaf5dd6a7302
上圖是他們最終使用的結構,圖中上下兩端分別表示輸入和輸出,輸入的直接是語音,圖中采用PCEN的語音特征直接加在了網絡結構當中,此特征在他們的其它論文當中有相應的詳細闡述,它具有比較好的抗噪的能力,後麵的隱層依次包含了CNN、雙向的RNN和DNN,輸出層有兩個節點,表示是否是關鍵詞。這樣的一個結構包含了很多可以手工進行調整的參數,以及RNN節點結構的選擇。文章中給出了很多組參數的對比結果,以及像RNN節點是用LSTM還是GRU等的對比。
文章中的實驗采用了單一的關鍵詞”TalkType”,訓練和測試數據來源於5000多個說話人,文中做出了非常詳盡的實驗。其中之一如下圖是分析數據量對於性能的影響,圖中橫坐標表示正樣本的條目數,縱坐標表示每小時應該被喚醒卻沒有被喚醒的次數。圖中的藍線表明正樣本數據的增加對數據的影響,隨著正樣本數目的增加對於模型是有好處的,但是當到達一定程度時就會達到飽和,紅色的×表示加入了各種負樣本,可以看到相對於正樣本的增加,負樣本的增加能給模型帶來更大程度的提升。
   7ed9a0ed43e81c2f4eeb6d63fd4249359a51929d       
數據對於性能的影響在另外一個實驗當中也得到了體現。下圖表示是對於遠場魯棒性的實驗。實驗中原有的測試數據加上了混響來模擬不同遠度的測試數據,橫坐標表示的是模擬發生源與設備的距離,縱坐標表示每小時漏喚醒的次數。此圖中漏喚醒的範圍明顯比上一個圖的漏喚醒範圍大,特別是在距離比較遠的情況下惡化是比較明顯的。圖中實線表示訓練數據不做特殊處理的一個結果,可以看出在距離大於1m後,它的性能惡化得比較快,很大的原因是由於訓練和測試數據的不匹配,而虛線表示訓練數據卷積上各種空間的衝激響應之後擴展了原有的訓練數據,這裏的衝激響應與測試數據當中用到的不同,雖然不同但是虛線明顯平緩了很多,特別是在距離比較遠的情況下,性能的提升是非常明顯的,文中給出的結論就是,訓練數據應該謹慎地選擇,要能夠反映實際的應用場景。
1ad73a6bfc4aaa0f40615f5a709562f34d9aaa57
另外,文章中做了一個CRNN和CNN對比的實驗。當性噪比比較小的時候CRNN優於CNN,隨著性噪比的增大,兩者之間的差距變得越來越小。CRNN和CNN的差別就在於RNN,因此得出結論,RNN對於性噪比小,即噪聲比較大的情況是非常有幫助的。同時在文章的最後給出了綜合的結果如下圖,在每小時誤喚醒為0.5個的條件下,不同性噪比上得到的性能。
a3637b75b5b6e20146be34a54f7345105408e803
e67ef2f1788657736e9e0a93fd94a1ea04f0dce9
第三篇文章如上,來自於佐治亞理工的,主要針對關鍵詞的檢索,本文之前提到喚醒可以看成小資源的簡化版的關鍵字檢索,而這篇文章對於喚醒任務同樣具有借鑒意義。由於不受資源的限製,文章中關鍵詞檢索采用的解碼網絡就是一完整的LVCSR解碼網絡,這篇文章的主要工作在於對用於解碼的模型的改進,它采用BLSTM的模型結構,同時使用Non-Uniform MCE這樣鑒別性的訓練準則進行模型訓練,他們早期在DNN上嚐試使用這樣的準則。圖中下側列出了他們之前發表的一些文章。
首先,他們之所以使用BLSTM的原因是BLSTM模型能夠學習長時的上下文信息。MCE(最小分類錯誤)是一種鑒別性訓練準則,有助於提升模型對於相似詞的鑒別能力。Non-Uniform MCE的提出是因為作者發現係統當中的一個問題,事實上這一問題也存在於第一類喚醒係統當中。在第一類需要解碼的喚醒係統當中,解碼模塊用到的聲學模型訓練是針對所有詞的,這一目標與喚醒係統的目標存在不一致,喚醒係統更在意的是關鍵詞的參數指標,因此作者提出了Non-Uniform MCE的準則,更偏重於模型對於關鍵詞的訓練。
d8437223c58ba4e8212b061657ef1d36ec8441cf
如上圖,我們可以看到第一個公式是一個幀級別的鑒別性的函數,其中Xrt表示第r句話第t幀的特征,SWt    表示Xrt的標注,前一個p是聲學概率,後一個p是語言模型概率。第二個公式是對誤分類度量的公式,第三個公式是訓練神經網絡所需要的目標函數。作者的優化在於對目標函數增加了一部分,稱為錯誤代價函數,加入這樣一個代價函數的優點在於它使得目標函數可以對不同類型的錯誤給予不同程度的懲罰值。在本文的任務當中,對於關鍵詞分類的錯誤就會受到更加嚴厲的懲罰。在實際使用當中,隨著迭代的進行,誤差函數是會產生變化,會以類似AdaBoost的方法不斷地乘以一個小於一的係數來減小它對於整個係統的訓練作用。有了目標函數,剩下的工作就是bp算法的推導,隻要推導參數更新的公式就可以進行神經網絡的訓練了,具體的推導在文章中也有詳細的展現。
7c0b1efce248bae18f87e8265c51fd30568b6449
此外,在訓練過程中作者對於因素錯誤率高的詞會人為地去提升它的自然值,這也會為係統帶來進一步的提升,同時作者也提到了這樣的方法實際上相當於采用了更多容易產生混淆的一個數據,相當於一個數據複製的過程。
最後一個實驗是在Switchboard 300小時上進行的關鍵詞任務,其中使用的關鍵詞比較多,主題都是關於信用卡的使用。如下表格表示,相當於在DNN上做的實驗結果,不同模型的性能采用FOM指標進行表示,FOM越高表示性能越好,表中列了許多不同準則訓練得到的DNN性能結果,第一個CE表示交叉熵的準則,它是一個產生式的訓練準則,後麵的MMI、sMBR、MCE、BMCE都是鑒別性的準則。從表中可以看出,幾種鑒別性的準則都會比CE的方式好一些,最後一種是作者文章中提到叫作Non-Uniform BMCE的準則,通過調整後麵K1、K2的參數可以得到良好的性能。
4749857cbdb7fd0b114a0c5cbb23b4a6d2dde125
下麵這張表格是在BLSTM上做的實驗,通過上下兩張表格對比,使用BLSTM整體會比用DNN的性能更好一些,但也需要付出代價,因為BLSTM相應的實時率計算量比DNN大很多。下麵的表格同樣采用了不同的訓練準則,在BLSTM下采用作者新提出的方法,經過參數調整後最好的結果相對它的CE的BaseLine會有相對5.55%性能的提升。
 140cbf1679ffca42caeda888df1b1b8a05851c95        
以上即為本人對Interspeech 2017上其中關於語音喚醒技術的三篇文章的理解與經驗分享。相應分享視頻鏈接:https://yq.aliyun.com/webinar/play/336

最後更新:2017-11-06 23:03:56

  上一篇:go  在安防領域如此“受寵”的POE交換機到底該怎麼選?
  下一篇:go  flume(1)