端到端語音識別應用基於字首樹的熱詞技術

語言: CN / TW / HK

文 | 王偉戌、王強強

背景

在深度學習火爆的今天,大規模資料下訓練的大規模模型在線上任務中日益常見。隨著大模型效果的提升, 隨之帶來了一些使用上的不便。通常情況下,大模型需要基於大量語料、文字訓練,迭代週期長。且對於特定場景下詞語在訓練語料中出現次數不多,常常擬合不好。本文介紹的是關鍵詞即特定場景語料,在序列到序列任務中通過構建狀態轉移自動機的方法改善最終效果的方案。

生成模型即生成模型解碼

序列到序列模型常用於機器翻譯、語音識別等任務。其架構提出於 2014 年[1],包含兩個核心元件:編碼器、解碼器。本文中略去這種模型的訓練過程,對該模型在使用過程中解碼這一過程進行介紹:

通過這個圖我們不難發現,每個時刻的生成結果不僅於輸入時刻序列有關,還與輸出序列相關,一個簡單的想法,將每個時刻置信度最高的結果存下來,做為下一個時刻輸入,但這樣很容易產生問題:在一個時刻缺乏全域性視野,即某一個時刻最優不代表是全域性最優的結果。而將所有結果都記錄下來,這將會是指數級增長的資料量。因此一種 beam search 的方法被提出用來解決這一問題,我們用一個形象的例子來講述 beam search 這一過程。

假設我們得到了一串拼音序列:

y i d a l i zh i

我們如何知道這個拼音序列代表什麼意思呢?

如下圖所示,我們展現了一個通過簡單概率模型產生的文字,在第零個時刻的 5 個候選(為了展示方便,這裡省略了編號為④的候選),在第一個時刻各產生了三個延伸在這 15 個候選中,通過語言模型概率選取了 top5 保留,剩餘的捨棄掉,以達到縮減搜尋空間的目的。通過這樣的方法,每一個時刻不保留全部結果只保留 top N,最終將指數級增長的搜尋空間變為平方級增長的搜尋空間。

傳統解碼應用問題與改進

這種方法與全部狀態儲存的方案相比犧牲了準確度以換取時間,具有一定侷限性。對於通常情況,每個時刻 top N 能覆蓋當前時刻 90%以上的情況,但是這種方法在面對關鍵詞檢測、風控詞語檢測等任務會產生兩個問題:

1、待檢測關鍵字在日常語料中較少出現,傳統 beam search 非常容易漏召回。

2、時效性強,經常有實時插入的新檢測詞語,要即時生效。

對於第一個問題,一種直觀的思想是通過標註資料,弱標註資料等重新訓練模型,但這顯然迭代週期長且迭代預期不穩定。

Google 在 2018 年論文中[2],提出一種設計方案調整 beam search 的結果,即不重新訓練模型,僅在解碼時通過追加模型進行重新打分來改善對小眾語料的擬合。

以上圖中識別系統設計為例,除去傳統聲學識別模組還增加了上下文模組,這個模組舉例了幾個功能,包括標點,語言模型打分,文字歸一。其中語言模型的使用如下圖,用 beam search 對中間結果進行追加打分,更新 beam search 中 top N,並將當前結果作為下一時刻解碼的輸入。這種方式的優點是,在不更新語音識別模型的情況下,也可以通過新增不同語境的語言模型影響 beam search 過程中 top N 選取,從而達到改善結果的目的。缺點便是顯著增加了計算量;儘管語言模型計算量常常不高,但 beam search 過程中每個候選結果都要多次經過語言模型,次數過多,耗時上升比較明顯。

為了改進計算效率,經典 wfst 解碼[3]方案重新在 seq2seq 模型中使用[4],這種解碼方案注意到了我們是在一個序列過程中重打分,不需在每一個時刻對從開始至當前所有文字進行重新計算,我們將語言模型生成新的概率轉移自動機[5],解碼時,維護當前 beam search 過程中 top N 於圖 2 狀態。如下圖為 cat(音標:kæt)這個單詞的狀態轉移圖,當聲學識別模組產出 c 對應的 k 的音其轉移到狀態 1,而當 a 對應的æ產生時,不在需要從狀態 0 計算 k æ一起的概率,而是計算當前狀態 1 的後繼狀態中是否有æ。沒有則計算回退到初始狀態的概率。這樣對於在序列生成中的計算,只需要記錄其處於圖中狀態,在新的識別結果產生時對當前狀態計算可行的轉移狀態即可。與普通語言模型相比,相當於省去了從狀態 0 至當前狀態的重複計算,複雜度大為降低。

這種淺融合的方案很好的解決了訓練語料不均衡的問題,缺點是不能實時對圖進行修改,且缺乏對特定詞的加權,為此我們引入了字首自動機來對這一過程改進。

基於字首自動機的解碼加權方案

字首自動機,是一種經典演算法,常應用於多模式串匹配。如果我們有一個字典,對於輸入文字想檢測是否命中字典中詞語,這便是一個多模式串匹配任務。對於這類任務,一個顯然的方案是遍歷全部字典,但這樣複雜度太高。

對此我們開始優化,一種方式是優化字典結構,即字典中字元有公共部分的比如 teach 和 teacher 都在字典中,那如果 teach 不匹配了,teacher 這個單詞也不用匹配了。將順序的字典變為字首樹的儲存方式。

與此同時,我們繼續在這種情況下優化,如果一個詞字首為另一個詞的子串,如圖 6 中 she 和 her,檢測字串 sher 中含有字首樹中多個詞,當 she 在狀態 4 匹配成功後我們知道 he 也是待匹配串中的,因此我們不需要跳回到狀態 1,而是從 h 開始匹配,而是直接跳轉至狀態 9,從 r 開始匹配即可。便是字首自動機的核心思想。

這種跳轉關係構建方法是一種遞迴過程。用一句話來概括,一層一層的構建,如果我的父節點的跳轉狀態的子節點中有與我相同的,那就是我的跳轉狀態,否則我的跳轉狀態就是根結點。按照這個思路,我們將上圖的點按遍歷順序重新標號以便於理解。

有了這個字首轉移關係,我們便能高效的處理熱詞構建及查詢,一個帶有字首自動機的解碼流程如下:

即對於每個 beam search 過程我們不僅維護 beam search 過程中結果,同時維護其處於字首自動機狀態;此狀態便於維護,僅儲存狀態指標即可。從效能上看,執行時的額外計算量及記憶體使用量都可以認為是常數增加。

字首自動機實時增加新詞方案

前一段中我們介紹了通過字首自動機的解碼方案,但這一過程依然不能很好解決“實時”這一要求,如果我希望實時向解碼過程中新增熱詞,需要怎麼改進?

回顧上一節的內容,我們瞭解到字首自動機構建應分為兩步,即字首樹的構建與狀態轉移的構建。其中,字首樹是演算法正確性的保證,而狀態轉移可以大幅優化時間。同時,狀態轉移需要 層次遍歷 整棵字首樹,這意味 轉移狀態的構建不能隨字首樹形態更改而自動更改 ,而必須 全量 重新構建。

當我們插入一個新詞,由於字首樹的特性,可以在字元長度的複雜度將該詞插入字首樹,但是構建新的轉移狀態需要遍歷所有節點,如果每次插入新詞都要重新訪問整棵樹全部節點,這種複雜度是難以接受的。比較起來,損失一些轉移狀態等價於將部分詞的查詢複雜度變大,對比遍歷全部詞典的複雜度這種損失是可以接受的。

根據上述想法,我們將整體查詢變為兩棵樹,一棵為帶轉移狀態的字首自動機,另一棵為普通字典樹,當新詞插入時我們在普通字典樹插入,當普通字典樹規模大於一規定閾值後我們將他們合併,並在合併後的樹上構建轉移狀態。對於一次查詢,複雜度從詞長變為小字典樹規模,但能夠節省構建轉移狀態遍歷全文的時間。

方案效果

我在語音識別系統中應用了這種解碼方案,並通過兩方面指標評估該模組效果,一方面通過標註帶關鍵詞語音資料集,評估關鍵詞準召。在下表中,beam search 代表普通方案,ac automation 代表字首自動機加權解碼方案,發現在識別結果中對關鍵詞召回相對提升 4.6%。另外,我們對比在普通語音識別資料集上字錯誤率(CER),由於對特殊詞提升了權重使整體準確率有一定的下降,但整體損失可以接受,低於對關鍵詞召回的收益。

總結

本文主要基於 seq2seq 類模型,通過追加狀態轉移自動機來減少模型在面對專有領域語料時的識別準確率;同時可以使語料實時生效,並將該工作的實時性流程構建方法加以介紹。對於語音轉錄文字中的關鍵詞檢測,常常侷限於語音模型不能實時調整,很難識別出新詞,通過這種方案可以做到秒級別新詞新增,顯著改變這一困擾。

參考文獻:

[1] Sutskever, Ilya, Oriol Vinyals, and Quoc V. Le. "Sequence to sequence learning with neural networks." Advances in neural information processing systems 27 (2014).

[2] Zhao, Ding, et al. "Shallow-Fusion End-to-End Contextual Biasing." Interspeech. 2019.

[3] Hori T, Hori C, Minami Y, et al. Efficient WFST-based one-pass decoding with on-the-fly hypothesis rescoring in extremely large vocabulary continuous speech recognition[J]. IEEE Transactions on audio, speech, and language processing, 2007, 15(4): 1352-1365.

[4] Williams I, Kannan A, Aleksic P S, et al. Contextual Speech Recognition in End-to-end Neural Network Systems Using Beam Search[C]//Interspeech. 2018: 2227-2231.

[5] Hori T, Nakamura A. Speech recognition algorithms using weighted finite-state transducers[J]. Synthesis Lectures on Speech and Audio Processing, 2013, 9(1): 1-162.

[6] http://blog.csdn.net/weixin_53360179/article/details/119718426