語音喚醒詞的HMM結構設計
喚醒詞識別可以看成是一種 keyword spotting 的任務,解決這個問題的方法可以是基於大辭彙量連續語音識別(LVCSR)的,也可以是基於流行的 filler 模型(或者 background 模型)。基於 LVCSR 的方法可以一勞永逸地解決問題,不過需要較大的解碼資源,而後者模型結構簡單小巧,不需要大的解碼資源而容易本地化、實時化。
語音喚醒的 filler 模型可以用兩種結構來實現,一種是基於先解碼後搜索的,如下圖。其中深色部分是喚醒詞的 HMM,而淺色的部分則代表 filler 的 HMM 而後將兩者拼接為一個 HMM 。當然,喚醒詞的 HMM 結構可以設計成其他的,比如帶跳轉的、帶詞間停頓結構的等。 Filler 模型的 HMM 結構中,一個圈代表非語音聲音 BN(background noise),另一個圈代表非喚醒詞語音 BS(background speech)。
其時間序列的解碼網路如下
另外的一種喚醒詞識別結構是基於似然比大小的,即喚醒詞模型與填充模型的似然比大小。這種結構需要並行解碼兩個模型,然後算出似然比,再與之前定好的閾值相比較得出是否喚醒的判斷,其結構如圖3。
圖 4 是基於似然比閾值的一個解碼結果例子,可以看出喚醒詞的得分會高於非喚醒詞的得分,從而可以通過設置一個合理的閾值來達到期望的喚醒率,同時抑制誤喚醒率。
閉環的設計可以用來一次性識別多個關鍵詞,比較適合用來離線識別大數據流中的關鍵詞。至於喚醒詞,則是屬於那種 one-shot 玩法,一般由 VAD 先切好數據段然後餵給解碼器。因此,對於喚醒則可以將 keyword-filler 設計成開環的結構,同時仍然保留 background HMM 的閉環設計,如圖 5 所示。
這樣通過合理的設置起始的概率分布,就可以到達如下的定位效果
keyword
<b> keyword
keyword </b>
<b> keyword </b>
其中 <b> 代表在喚醒詞之前出現的非關鍵語音, </b> 代表喚醒詞之後出現的非關鍵語音。圖 6 、7 展示的是同一個喚醒詞在兩種分布情況下的定位結果
不同高度的紅色條紋代表不同的狀態。如果要增加分辨度,可以將 filler 模型的狀態數增加幾個。
其實,關鍵詞檢測的思路已經明朗了,在概念上就類似於設計一個共振腔去捕捉特定波段的信號。~zZ
推薦閱讀: