語音關鍵詞檢索實驗小結

2020-08-11 17:37:17

語音關鍵詞檢索實驗小結

語音關鍵詞檢索(KeywordsSearch),是指在連續語音流中檢測出一組給定的關鍵詞的過程。與大詞彙量連續語音識別(Large Vocabulary Continuous Speech Recognition)相比,語音關鍵詞檢索不需要對非關鍵詞的精確識別,只需要檢測出關鍵詞即可,降低了對語音識別系統的要求,拓展了系統的適用條件。語音關鍵詞檢索在實時對話系統,命令控制,語音撥號,語音監聽,以及語音文件檢索方面等方面有着廣泛的應用。

語音關鍵詞檢索從輸入內容的形式來看可以分爲兩種:一種是輸入語音樣例(Query-by-example),另一種是輸入文字形式。對於輸入爲語音樣例的關鍵詞檢索,現行常用無監督方法來實現,如基於幀的模板匹配方法和基於片段的模板匹配方法[1]。現行大多數文字形式關鍵詞檢測主要基於大詞彙量連續語音識別技術。本文關注基於大詞彙量連續語音識別技術的文字語音關鍵詞檢索。

問題闡述

語音識別可以看成是如下問題:對於給定的聲學觀測(acoustic observation)序列,求出對應的字(word)序列,使後驗概率 最大化,即求得,有

 

在語音識別系統中,稱爲「解碼」過程,即根據預先訓練好的聲學模型和語言模型,在全體可能的字序列空間中搜尋出概率最大的序列。在實際的語音識別系統中,最優路徑不一定與實際字序列匹配,我們一般希望能夠得到得分最靠前的多條候選路徑,即N-best。候選路徑的儲存需要緊湊,防止佔用過多記憶體空間。我們一般採用詞格(Lattice)來儲存識別的候選序列。

詞格沒有一般的定義。在語音關鍵詞檢索問題中,詞格需要包含時間資訊。可以用加權有限狀態轉換器(Weighted Finite States Transducer,WFST),來緊湊地表示N-best候選路徑,即詞格。有限狀態轉換器是一個八元組,其中:

l  A:表示輸入符號表;

l  B:表示輸出符號表;

l  Q:表示狀態集合;

l  I:表示初始狀態集合;

l  F:表示終止狀態集合;

l  E:表示轉移弧集合;

l  λ:表示初始權重;

l  ρ:表示終止權值;

用WFST可以表示輸入符號序列和輸出符號序列的對映關係。在Kaldi中,詞格有兩種表示方法。第一爲Lattice,其輸入符號爲Transition-ids,輸出符號爲字。其二爲CompactLattice,它是一種有限狀態接收器(Finite States Automaton),與Lattice包含相同的資訊。它的輸入和輸出符號都是字,transition-ids包含在權重上[3]。Kaldi採用這種表示方法,可以表示字序列(Word Sequence)狀態級別的對齊[4]。這樣,就可以用WFST來表示狀態序列和字序列的對映關係。

於是,語音關鍵詞檢索問題就轉變爲:如何從解碼出的詞格,尋找到關鍵詞所在位置。

關鍵詞檢索的結果需要包含關鍵詞所在位置,即時間資訊。直接解碼出的詞格中沒有字序列的時間資訊。所以在解碼出的詞格中加入每一個字的時間位置資訊就是一個需要考慮的問題。

另一個需要考慮的問題是集外詞(Out-of-vocabulary,oov)的問題。解碼生成的詞格是根據預先準備好的詞典生成的,所以詞格中不會包含詞典中沒有的詞。對於語音識別來說,集外詞比例較低,對整體識別效能造成的影響不大,但在語音檢索任務中,集外詞檢索比例較高。在英文LVCSR系統中,當整體文件集外詞比例在1.5%時,使用者查詢集外詞比例高達12%[5],影響檢索效能較爲嚴重。所以如何在詞格中查詢到集外詞,也是一個需要考慮的問題。

演算法解釋

首先定義因子轉換器:給定兩個串可以識別u的因子集合的最小確定有限狀態接收器。因子v可以看做是關鍵詞,u可以看做是整個句子,將關鍵詞輸入進因子自動機,即可看做是關鍵詞的查詢。

對於語音語句,給定一個對數半環上的加權自動機和狀態時間列表 。問題就轉化爲建立一個時間索引,用來搜尋任意串的任意因子。

構建的主要思路是,時間索引可以表示爲將每一個因子x對映到1)x出現的自動機集合,2)每一個自動機中x出現的起始終止時間段,3)x在對應的時間段發生的後驗概率的WFST。

對於在詞格中加入時間資訊的問題,一種方法是時間資訊可以表示爲WFST的弧的權重上。對CompactLattice拓撲排序以後,根據弧的長度,可以計算出每一狀態的時間,從而得出每一狀態時間[6]

定義加權有限狀態轉換器Bi,它給出了輸入輸出對(x,y)發生的概率P(x,y),根據Bi和狀態時間列表ti,可以推導出時間因子轉換器。

時間因子轉換器Ti的生成分爲四步:

1)  因子生成:

a)       將Bi中每一個弧的權重對映爲(w,1,1)ÎLxTxT’

b)       建立初始狀態和終止狀態

c)        對每一個狀態建立兩個新弧

2)  因子合併:

將結果中含有相同因子對的路徑合併

3)  因子消歧義

將非終結弧上的cluster識別符號移除並在終結弧插入消歧義符號。

4)  優化

使用確定性演算法和最小化演算法優化。

使用者查詢的時候,首先將關鍵詞編譯成加權自動機X,然後合併(Composing)X和時間因子轉換器T,通過Project操作生成輸出符號。然後移除空轉移,最後通過最短路演算法排序。

對於集外詞問題的解決,採用「代理關鍵詞」的方法,即使用與查詢的集外詞讀音相近的集內詞代替來查詢。

令K表示OOV 關鍵詞的有限狀態接收器,L2表示OOV關鍵詞的發音有限狀態轉換器,E爲一個將一個音素序列對映到另一個音素序列的編輯距離轉換器,L1表示LVCSR系統的發音詞典,則代理關鍵詞爲

 

Grapheme-to-phoneme使用Sequitur 軟體,利用Joint-sequence 模型生成。混淆矩陣通過統計基於編輯距離的文字對齊資訊得到。

實驗流程

         實驗主要分爲兩個部分:1.數據準備;2關鍵詞檢索。

         數據準備包括關鍵詞數據的準備和語音數據的解碼。

         首先手工準備ecf.xml和kwlist.xml兩個檔案,ecf.xml標明待檢索的文件的範圍,kwlist.xml標明待檢索的關鍵詞。然後利用local/kws_setup.sh指令碼,它會呼叫kws_data_prep.sh指令碼,將關鍵詞分爲集內詞和集外詞兩部分,並將集內詞編譯成FST。解碼部分,首先利用steps/make_fbank.sh和steps/compute_cmvn_stats.sh提取語音數據fbank特徵,然後利用steps/nnet/decode.sh將語音數據解碼成詞格。

         對於集外詞的檢索,首先需要利用local/generate_confusion_matrix.sh生成音素混淆矩陣,然後利用local/apply_g2p.sh將集外詞轉換爲音素。最後利用local/kws_data_prep_proxy.sh,將待查詢的集外詞編譯成FST,準備工作即完成。

        

關鍵詞檢索時,首先會呼叫steps/make_index.sh, 它呼叫lattice-to-kws-index程式,它將解碼生成的詞圖編譯成索引檔案。之後呼叫steps/search_index.sh,它將呼叫kws-search程式,它將根據索引檔案的WFST和關鍵詞的WFSA進行Compose查詢。

 


[1] Mandal A, KumarK, Mitra P. Recent developments in spoken term detection: a survey[J].International Journal of Speech Technology, 2013, 17(2): 183-198.

[2] Huang X, AceroA, Hon H. Spoken Language Processing[J]., 2000.

[3] http://kaldi.sourceforge.net/lattices.html

[4] Povey D,Hannemann M, Boulianne G. Generating exact lattices in the WFST framework[J].International Conference on Acoustics, Speech, and Signal Processing, 2012.

[5] Logan B, Moreno P, Van Thong J. AN EXPERIMENTAL STUDY OF AN AUDIOINDEXING SYSTEM FOR THE WEB[J]., 1996.

[6] Lattice-functions.cc: CompactLatticeStateTimes(const CompactLattice&lat, vector<int32> *times)