- Blog home
- >
- Engineering
- >
- 自動語音辨識系統的後期處理
「自動語音辨識」(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。在反向運算中,我們只會考量每個權杖的固定視窗,並在此視窗中執行 RNN(圖 2)。透過使用這個視窗,我們可以針對新的輸入權杖達成常數時間推論(我們需要在順向運算一個隱藏狀態,並在反向運算中運算 n+1 個隱藏狀態)。
整個架構包括嵌入層、TruncBiGRU 與單向 GRU 層,以及完整連線層。針對輸出的標點符號與大小寫,我們分別使用兩個 softmax 層(圖 3)。
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) 函數,並搭配一個係數: 不過,如剛剛所討論的,神經網路的輸出可能無法完美相關。比方說,針對目前的文字,可能預測的標點符號類別是「terminal period」,但針對下一個權杖,大小寫預測並不會預測「leading capitalized」。這種類型的錯誤雖然極少見,但會非常引人注意。為了處理這種狀況,我們會在損失函數中額外的懲罰項來懲罰這種類型的錯誤:
第一項是與在非「terminal period 」後出現「leading capitalized」的可能性相關,第二項則是與在「terminal period」後不會出現「leading capitalized」的可能性相關。 這個懲罰項能總結發生錯誤的權杖。此外,我們也會將前兩層的連續張量傳送到 softmax 層,才能有效降低懲罰項。最後,我們就得出了這個損失函數:
訓練時,我們會從內部 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 系列產品,並可註冊取得免費帳戶