自動語音辨識系統的後期處理

On By Pavel Pekichev1 Min Read
Post-processing in Automatic Speech Recognition systems

前言

「自動語音辨識」(ASR) 系統會提供文字轉錄。這多半是一系列的文字。思科會使用 ASR 系統,在 Webex Meetings 中提供即時隱藏式輔助字幕。這個系統會出的問題其中之一,是難以閱讀缺少標點符號與大小寫的字幕。對文字意義的瞭解會受到標點符號的影響。以下提供一組文字,並提供兩種標點符號選項:

「thank you your donation just helped someone get a job」

選項 A:「Thank you! Your donation just helped someone get a job.」(感謝您!您的貢獻讓某人能完成工作。)

選項 B:「Thank you! Your donation just helped someone. Get a job.」(感謝您!您的貢獻協助了某人。去找份工作吧。)

不過是一個標點符號,就讓整句的意思相差十萬八千里。

因此,我們要討論建構後期處理系統時的幾項考量:
  • 恢復原始文字的標點符號與大小寫的高精準度模型。針對臨時結果進行快速推論:趕上即時字幕。
  • 使用少許資源:語音辨識屬與運算密集的技術,因此標點符號模式的運算量不需要如此密集。
  • 有能力處理未列在字彙庫中的文字:有時,系統必須針對模型前所未見的文字加上標點符號或大小寫。
某些經典 n 元語法 [1] 的品質較好。但這些語法也有缺陷。雖然 n 元語法模型可快速推論,但根據語言的字彙庫量,即使是 3 元語法模型也有可能會佔用好幾 G 的磁碟空間。另一個問題是處理字彙中缺乏的文字。如果在訓練資料中沒有出現這個文字,模型可能就無法根據常規加以處理,精準度也會下降。新式的作法或使用有效率但運算密集的技術,例如雙向 RNN [3],或注意力型 (attention-based) 與轉換器型 (transformer-based) 神經網路架構 [2]。這些模型的精準度都很高 [2],但可能不完全適合在即時串流使用情境下使用,因為這些模型都需要完整的輸入順序才能執行推論。例如,針對雙向 RNN,只有一個新的輸入權杖時,您必須更新模型之前見過的隱藏狀態(圖 1)。
反向推算的運算會傳送雙向 RNN

圖 1. 針對雙向 RNN 的反向推算所進行的運算。每次出現新的輸入時,所有之前隱藏的狀態都必須依序更新。

  部份方法會試圖透過建構兩種不同的模型 [3][6] 來解決標點符號與大小寫問題,而其他方法則會將兩者結合成單一模型,因為輸出結果高度相關 [4][2]。標點符號後出現的文字也顯示出這種相關性:句號後的文字應該要大寫,逗號後的文字多半都會小寫。也有一些方法會採用多輸出式的架構 [4]:每項工作分別採用一種輸出架構。輸出結果顯示這個架構比其他標點符號與大小寫架構更為優秀。根據上述考量,我們選擇使用具備兩種標點符號與大小寫輸出方式的單一 GRU 型神經網路。為解決字彙中缺少文字的問題,我們使用類 SentencePiece 之類的技術 [6],將不認識的文字分割成數個較小的權杖;或者,在較為極端的案例中,分割成幾個較小的字元。我們接下來要說明詳情與考量。

TruncBiRNN

直覺與實踐顯示,在建構標點符號模型時,對未來情境的瞭解必是不可或缺的,因為在不知道接下來文字內容的狀況下,會更難判斷將標點符號放置在哪個位置。為了使用關於接下來權杖的資訊,且不會被迫反向更新運算中所有權杖的隱藏狀況,我們決定截斷反向運算至固定視窗中。在順向運算中,只是一般的 RNN。在反向運算中,我們只會考量每個權杖的固定視窗,並在此視窗中執行 RNN(圖 2)。透過使用這個視窗,我們可以針對新的輸入權杖達成常數時間推論(我們需要在順向運算一個隱藏狀態,並在反向運算中運算 n+1 個隱藏狀態)。
TruncBiRNN 範例

圖 2. 在這個範例中,針對每個現有權杖,只會考慮在反向式運算中運算接下來兩個隱藏狀態。

  現在,針對每個權杖,我們分別在順向運算與反向運算中提供隱藏狀態。讓我們將此層面稱之為 TruncBiRNN 或 TruncBiGRU(既然我們已經使用 GRU)。我們可在常數時間中運算隱藏狀態,且不需以輸入長度為根據。為了趕上即時字幕,常數時間作業的確有其必要。

架構

整個架構包括嵌入層、TruncBiGRU 與單向 GRU 層,以及完整連線層。針對輸出的標點符號與大小寫,我們分別使用兩個 softmax 層(圖 3)。
圖 3. 視窗大小等於 TruncBiGRU 的兩個權杖的模型架構

圖 3. 視窗大小與 TruncBiGRU 兩個權杖相等的模式架構。

  針對每個文字,模式會預測文字的大小寫與該文字後的標點符號。為了讓這兩種模式更順利地同步,並預測大小寫,我們也必須從前一個權杖瞭解嵌入層(以復原前一個步驟的標點符號)。搭配自訂損失函數(請見下一節),我們就能避免在每一句的開頭使用小寫字母文字。而在預測標點符號時,這也能協助預測下一個字的大小寫。這也就是為什麼我們會連接目前嵌入層與下一個嵌入層。輸出層則會將標點符號預測散佈到所有標點符號中。在我們的模式中,這就是一個組合:

period – 在句子中間出現句點,並不絕對表示下一個字必須大寫(「a.m.」、「D.C.」等)

comma

question mark

ellipsis

colons

dash

terminal period – 句子結尾的句點

至於大小寫,我們有四個類別:

lower

upper – 所有字母都大寫(「IEEE」、「NASA」等)

capitalized

mix_case – 針對像「iPhone」這樣的詞彙

leading capitalized – 每個句子的第一個字

多出的兩個類別「leading capitalized」與「terminal period」,初見時看起來很累贅,但這兩個類別可以提高與大小寫和標點符號相關答案的一致性。「terminal period」意指下個大小寫答案就不能是「lower」,而出現「leading capitalized」則表示前一個標點符號是「terminal period」或問號。這些類別在損失函數中扮演相當重要的角色。損失函數:我們需要同時將大小寫與標點符號的使用狀況最佳化。為了達成這個目標,我們使用一組對數損失 (log loss) 函數,並搭配一個係數:Loss 函數 不過,如剛剛所討論的,神經網路的輸出可能無法完美相關。比方說,針對目前的文字,可能預測的標點符號類別是「terminal period」,但針對下一個權杖,大小寫預測並不會預測「leading capitalized」。這種類型的錯誤雖然極少見,但會非常引人注意。為了處理這種狀況,我們會在損失函數中額外的懲罰項來懲罰這種類型的錯誤:disagreement penalty 第一項是與在非「terminal period 」後出現「leading capitalized」的可能性相關,第二項則是與在「terminal period」後不會出現「leading capitalized」的可能性相關。  這個懲罰項能總結發生錯誤的權杖。此外,我們也會將前兩層的連續張量傳送到 softmax 層,才能有效降低懲罰項。最後,我們就得出了這個損失函數:Loss 函數

訓練

訓練時,我們會從內部 Webex Meetings 中選取一組轉錄文字,並從維基百科 (Wikipedia) 擷取文字資料使用。首先,我們會清除訓練資料,並分割為好幾個句子。訓練期間,每個樣本都是從連續句子產生,並經由固定散佈來截短成長度不定的短句。這能在訓練期間讓模型看到切割的片語,使模型能夠處理推論期間產生的臨時結果。接著,我們會使用約 300 MB 的維基百科文字來訓練模型,接著在 Webex Meeting 轉錄文字中進行微調。使用維基百科進行前期訓練能協助改善所有標點符號類別,不過對大小寫類別的訓練成效更為顯著。我們猜測這可能是因為在維基百科的文集中使用大量的代名詞。我們會將句子連接起來,然後隨機截短成不同長度,以便在我們的評估組上套用相同的資料準備程序。這讓我們能針對臨時轉錄文字狀態中可能看到的結果,評量其精準度。

結論

使用相對簡單的技術,搭配針對架構進行的一些自訂,例如截短 GRU 與在損失函數中使用額外的懲罰項,我們才能建構一個可以在線上執行的模型。有了即時標點符號與大小寫功能後,就能大幅提升即時字幕的閱讀體驗。參考資料 [1] A. Gravano, M. Jansche, and M. Bacchiani, “Restoring punctuation and capitalization in transcribed speech,” in ICASSP 2009, 2009, pp. 4741–4744. [2] Monica Sunkara, Srikanth Ronanki, Kalpit Dixit, Sravan Bodapati, Katrin Kirchhoff, “Robust Prediction of Punctuation and Truecasing for Medical ASR” [3] Tilk, Ottokar & Alumäe, Tanel. (2016). Bidirectional Recurrent Neural Network with Attention Mechanism for Punctuation Restoration. 3047-3051. 10.21437/Interspeech.2016-1517. [4] Vardaan Pahuja, Anirban Laha, Shachar Mirkin, Vikas Raykar, Lili Kotlerman, Guy Lev “Joint Learning of Correlated Sequence Labelling Tasks Using Bidirectional Recurrent Neural Networks” [5] Wang, Peilu & Qian, Yao & Soong, Frank & He, Lei & Zhao, Hai. (2015). Part-of-Speech Tagging with Bidirectional Long Short-Term Memory Recurrent Neural Network. [6] Lita, Lucian & Ittycheriah, Abe & Roukos, Salim & Kambhatla, Nanda. (2003). tRuEcasIng. 10.3115/1075096.1075116. [7] https://github.com/google/sentencepiece 請登入 Webex 請造訪我們的首頁或直接聯絡我們以獲得協助。請按一下這裡進一步瞭解 Webex 系列產品,並可註冊取得免費帳戶

About The Author

Pavel Pekichev
Pavel Pekichev Machine Learning Scientist Cisco
Pavel Pekichev is a Machine Learning Scientist at Cisco working on speech recognition systems.
Learn more

Topics


More like this