基於BERT的ASR糾錯

導讀: 小愛同學是小米公司開發的智能語音系統,已廣泛應用在手機、手環、音箱、電視等電子產品中,並支持閒聊、問答、語音控制等多種語音交互場景。語音系統中語音內容識別 ( ASR ) 的精準性,是影響智能語音產品發展的關鍵制約因素,用戶query的文本,通常是由ASR系統將用戶的語音命令轉換而成,但由於技術上的原因,這些由ASR生成的文本可能包含錯誤,繼而導致後續的用戶意圖理解出現偏差。如何利用NLP技術對ASR的query文本進行預處理糾錯成了一個亟待解決的問題。

本次分享,將介紹小愛算法團隊基於近年來流行的BERT預訓練模型在這個問題上所進行的一些技術探索,以及在業務場景中的落地情況,主要內容包括:

  • ASR糾錯問題介紹
  • 糾錯相關工作
  • 我們的工作
  • 未來的方向

01 ASR糾錯問題的介紹

1. 語音交互流程

在分享語音糾錯的相關問題之前,先簡單介紹一下小愛同學語音使用流程:首先我們需要喚醒小愛同學,比如,手機按鍵或者語音喚醒,喚醒之後進入錄音模塊,啓動錄音前開啓Voice Activity Detection ( VAD ) 狀態,檢測當前有沒說話聲音,如果沒有則忽略,如果有,會把語音記錄下來傳遞到下一個模塊,就是最受關注的Automatic Speech Recognition ( ASR ),該模塊負責把語音轉譯成文字。

我們負責的是ASR接下來的一個模塊,文本理解模塊Natural Language Understanding ( NLU ),主要目的是試圖理解ASR轉換出的文本,準確識別用戶的意圖,然後給出相應技能執行的方案,最後一步就是技能執行了。

在這個語音交互流程中,前三步都涉及到語音相關的工作,很容易出現記錄噪音或者識別錯誤等情況,例如誤操作喚醒錄入了噪音;或者語音記錄過程中,把某種聲音誤以爲是人的聲音而記錄下來,在識別時轉譯成了錯誤的文本。另外,即便是純淨的人說話的語音,ASR模型轉換過程仍然會出現一定的錯誤。

2. ASR錯誤的例子

表格中展示的是ASR識別過程中常見錯誤例子。用戶問"給我播放一首 生僻字",識別的文本結果爲"給我播放一首 升壁紙",還有中文中夾帶英文的情況,如:“eraser 什麼意思”,識別的文本結果爲"意味着 什麼意思"。通過分析這些錯誤的case發現,語音識別過程對於發音因素類似的詞,識別準確的難度比較大。而我們的工作目標是把ASR識別後的錯誤query找出來,替換成正確的query。

此時我們需要思考,對於ASR識別糾錯是否爲良定義問題 ( well-posed )[1],良定義問題是說在當前給定信息的條件下能解決的問題,或者說使用貝葉斯分類器分類得到的準確率非常高。對於ASR的糾錯問題,從case中可以看出,要糾正這些query,有些根據句子的結構就可以糾正,比如,“你講話好像被句子”,可以通過語法結構的分析知道"被"在此處是不合適的,應該是背誦的"背";而有些是需要知道一些背景知識,才能進行糾錯,比如"生僻字"是一首歌,“右眼血斑"是常識,“布朗熊"是小愛同學業務的技能 ( 布朗熊跳個舞 ),甚至有些語法上沒有錯誤,需要根據原始的音頻才能糾正錯誤,如"播放第二個"與識別的文本結果"撥打第二個”,或者"eraser"識別爲"意味着”;有些可能聽音頻也沒有用,對於中文有很多的發音聲調都相同的詞,需要結合當時環境的上下文情景才能確定是哪一個詞。所以糾錯需要結合很多的信息,如果全部考慮知識、音頻、上下文環境,基本相當於重新做一個ASR識別系統。但ASR本身處理語音過程受限於一些內存、吞吐流量等物理條件,聲學模型和語言模型很難有很大的處理量,綜合考慮ASR的語言模型還是基於傳統的n-gram模型。但是使用NLP技術具有一些先天的優勢,能夠利用目前強大的預訓練模型,並且不需要音頻來進行糾錯。

ASR糾錯與普通錯別字糾錯也是有區別的,普通錯別字糾錯是根據字形相似來糾錯,如"閥"和"閾"。而ASR糾錯是音似,發音相似導致難以識別正確的內容,所以ASR糾錯和普通錯別字糾錯面臨的問題和數據分佈是不同的。另外普通錯別字糾錯覆蓋的範圍也比ASR糾錯更廣一點,但這並不意味着普通錯別字糾錯可以用來ASR糾錯。“天下沒有免費的午餐”,也就是說沒有一個模型能夠很好的應用在不同的數據分佈上。比如文本"的"、“地”、“得"糾錯,假如句子中其他詞都是正確的,只有"的"需要糾正爲"得”,但是使用一個沒有結合先驗信息的普通模型來糾錯,很顯然容易把句中其他位置原本正確的詞糾正爲錯誤的,從而影響模型的準確率。正確的做法是根據先驗條件做出一個能適應當前數據分佈的糾錯模型。對於ASR糾錯模型也一樣,發音相似是ASR糾錯的一個限制條件,我們需要把普通錯別字模型結合這個限制條件,來設計針對ASR識別後的文本數據糾錯模型。

3. ASR糾錯問題設定

接着我們對ASR糾錯問題進行以下初步設定:

  • 只考慮 6 字以上中長 query:短的query不能體現充足的語境信息,糾錯比較難。
  • 不考慮上下文對話信息:上下文對話信息問題更復雜,並且在小愛同學對話信息中多輪對話只佔1%,目前先不考慮多輪對話的場景。
  • 不考慮音頻信息:作爲ASR下游的一個糾錯產品,只考慮文本信息。
  • 僅考慮一對一糾錯:基於BERT模型的糾錯,一對一比較容易實現,後續可以放寬限制。
  • 僅使用非監督語料:非監督語料節省人力成本,可以使用預訓練模型,數據分佈的頭部語料可以嵌入到模型中,但可能不利於尾部數據的糾錯,也就是說對於那些在語料中沒有出現過的信息,不太可能糾正過來。

這些設定條件跟目前一些ASR糾錯文獻中設定條件一致。

02 糾錯相關工作

1. BERT模型簡介

BERT[2]是目前效果最好的預訓練語言表示模型,引入了雙向的Transformer-encoder結構,已訓練好的模型網絡有12層BERT-small和24層的BERT-large。BERT包含兩種訓練任務,一種是Masked Language Model ( MLM ),另一種是Next Sentence Prediction ( NSP )。BERT模型主要作爲預訓練模型使用,提取特徵獲得具有語義的詞向量表示,提升下游任務的表現。

BERT模型中與ASR糾錯任務相關的是MLM部分, MLM訓練階段有 15% 的token被隨機替換爲 [MASK] ( 佔位符 ),模型需要學會根據 [MASK] 上下文預測這些被替換的token。例如對於輸入句子"明天武漢的 [MASK] 氣怎麼樣",模型需要預測出 [MASK] 位置原來的token是"天"。

如果只利用MASK機制訓練存在一些遷移的問題,因爲在其他任務中沒有MASK的情況,這樣就很難作爲其他任務的預訓練任務,所以作者通過MASK的方式進行了優化。

  • 其中10% 的 [MASK] 會被隨機替換成另一個token,此時"明天武漢的 [MASK] 氣怎麼樣"會變成"明天武漢的微氣怎麼樣",模型需要在訓練中學會將"微"字糾正爲 “天”。
  • 另外,還有 10% 的 [MASK] 會被"還原"。此時"明天武漢的 [MASK] 氣怎麼樣"會被還原成"明天武漢的天氣怎麼樣",而模型需要在訓練中學會根據上下文分辨 "天"字是否需要進行糾錯。
  • 其餘80%的 [MASK] 保留這個佔位符狀態,BERT訓練過程中計算的損失,只包括了MASK機制涉及到的token的損失,而不是整個句子的損失。

MLM實際上包含了糾錯任務,所以原生的BERT就具備了糾錯能力。但是BERT的MASK位置是隨機選擇的15%的token,所以並不擅長偵測句子中出現錯誤的位置;並且BERT糾錯未考慮約束條件,導致準確率低,比如:“小愛同學今 [明] 天天氣怎麼樣”,MASK的位置是"今", 那麼糾錯任務需要給出的結果是"今"。但是由於訓練預料中大多數人的query都是"明天天氣怎麼樣",這樣在沒有約束的條件下,大概率給出的糾正結果是"明",雖然句子結構是合理的,但結果顯然是不正確的。

2. ELECTRA模型

ELECTRA[3]模型由Standford 大學團隊提出,其模型結構由一個生成器和一個判別器組成,看起來與GAN結構類似但不屬於GAN模型。

  • 生成器的作用是輸入一個正確的句子,負責生成一個錯誤的版本,如"the chef cooked the meal"經過生成器內部隨機抽樣15%的token進行MASK後,再對這些MASK的位置進行預測,輸出結果爲"the chef ate the meal",生成器中語言模型保證了生成的錯誤句子仍然是比較合理的,只是區別於原始句子。
  • 判別器 ( ELECTRA ) 是用來判別生成器輸出的句子中哪些位置的token被改動了,因此對每個token的位置進行original/replaced標註,如"cooked"變成了"ate",標註爲"repalced",其餘位置相同token標註爲"original",類似於序列標註任務,判別器的輸出爲0或1。

ELECTRA模型的判別器雖然可以檢測錯誤,但模型設計不是爲了糾錯,而是爲了在有限計算資源的條件下能提取更好特徵表示,進而得到更好的效果,文章中表示在GLUE數據集上表現明顯優於BERT。

ELECTRA的一個變體ELECTRA-MLM模型,不再輸出0和1,而是預測每個MASK位置正確token的概率。如果詞表大小是10000個,那麼每個位置的輸出就是對應的一個10000維的向量分佈,概率最大的是正確token的結果,這樣就從原生ELECTRA檢測錯誤變成具有糾錯功能的模型。

3. Soft-Masked BERT糾錯模型

最近發表的一個糾錯模型是Soft-Masked BERT[4],該模型通過對蒐集到的語料,進行同音字替換等簡單規則隨機生成錯誤樣本,然後得到錯誤-正確的樣本對作爲訓練數據。該網絡模型串聯了一個檢測模型 ( BiGRU ) 和一個糾錯模型 ( BERT ),雙向的GRU模型輸出每個token位置是錯誤詞的概率,當錯誤概率爲1時,退化爲原生BERT模型糾錯。

該模型的創新點在於BERT輸入的詞向量不是原始輸入的token,而是token的embbeding和 [MASK] 的embbeding的加權平均值,權重是BiGRU輸出序列中每個位置的錯誤概率,從而在MASK時起到soft-mask 的作用。舉個例子,假如GRU認爲某個位置的詞輸出錯誤概率是1,則輸入到BERT的詞向量就是 [MASK] 的詞向量;而如果是檢測模型認爲某個位置的詞是正確的,即錯誤概率是0,這時輸入到BERT模型的詞向量就是token的向量;但是如果檢測模型的某個位置輸出錯誤概率是0.5,此時輸入到BERT模型的詞向量爲二者加權後的結果 ( (1-0.5)* token_embedding + 0.5*[MASK]_embedding )。不同於之前檢測器輸出0/1,只有被MASK和未被MASK的Hard-Mask方式,因此該模型稱爲Soft-Mask BERT,文章指出這種方式糾錯比原生的BERT糾錯效果高出3%左右。

但是我們的工作在論文之前,並未參考該模型,未來會根據實際情況考慮。關於糾錯模型的文獻就先介紹到這裏,接下來介紹我們的工作內容。

03 我們的工作

1. 模型結構

我們的糾錯模型結構也類似生成器和判別器的模式,如上圖所示。

語料庫包括維基百科中文、知乎中文、爬取的一些新聞語料,以及小愛同學運行的用戶日誌,總共將近有1億條的數據,從語料庫中抽樣出原始樣本,類似"請播放歌曲芒種"、“布朗熊跳個舞”、“打開和平精英"等等。我們開發了專門模擬ASR生成錯誤數據的模糊音生成器,基於模糊拼音來對原始樣本處理生成錯誤樣本,生成結果如"請播放歌曲曼鍾”、“波蘭熊跳個舞”、"打開和平靜音"等等。構造好正確樣本和錯誤樣本的樣本對輸入到判別器模型,判別器進行端到端的糾錯,即給模型輸入錯誤樣本,模型輸出爲正確的樣本。

2. 模糊音生成器

通過分析ASR錯誤樣本的規律,在模糊音生成器中定義了模糊等級和模糊候選集,如上圖所示。

根據模糊音的相似性劃分爲5個等級,等級越高,發音越不相似,比如level1是發音完全相同 ( “愛"和"艾” ),level2的發音相同,聲調不同 ( “幾"和"季” ),level3是常見的平捲舌和前後鼻音模糊 ( “shi"和"si”,“l"和"n” ),level4的拼音編輯距離爲1,level5拼音的編輯距離大於1,基本上發音已經不一樣了。

拼音的編輯距離計算採用的非標準拼音方案,如雖 ( “sui"使用"suei”,“sui"是縮寫形式 ),“四"的發音"si"使用"sI”,由於"i"在"si"中和在"di"中發音是不同的,因此使用"I"來代替"i"在"si"中的發音。再比如"有” ( “you"使用"iou"代替 ) 是因爲"y"並不是真正的聲母,當"i"作爲聲母時用"y"替換"i”,這裏相當於還原了這種實際發聲拼音規則,還有"挖" ( “wa"使用"ua” ),“w"作爲聲母時真正的發音實際上是"u”。

標準的拼音方案不能很好的體現漢字的發音相似問題,比如"挖"和"華"讀音很相似,如果使用標準拼音方案時,拼音的編輯距離爲2 ( “wa”,“hua” ),而採用我們定義的非標註方案時,編輯距離爲1 ( “ua”,"hua ),所以採用非標準拼音方案更能準確地描述ASR語音出現錯誤的規律,找到合適的編輯距離計算方案。

模糊音生成器的工作流程如上圖所示,輸入文本爲"小愛同學請播放音樂",假設MASK位置隨機到"愛",模糊等級level=1時,發音與"愛"相同的候選集爲{“哎”,“艾”,“礙”,“曖”,…},然後基於n-gram語言模型在模糊候選集中選擇最可能的替代詞,如果計算的詞序列概率最大的是"艾",那麼"愛"被替換成了"艾",最後的輸出爲"小艾同學請播放音樂"。

我們通過人工標記了一些ASR錯誤樣本的數據,研究了聲母和韻母的特徵,例如平捲舌,前後鼻音等出現的識別錯誤。人工標註的數量畢竟有限,所以根據掌握的規律,通過調整模糊音生成器的超參數 ( MASK的數量,fuzzy的比例等 ),使生成的錯誤樣本分佈儘可能接近真實ASR系統中錯誤樣本的數據分佈,以便糾錯模型可以更容易地用於ASR識別的糾錯任務中。

3. 糾錯判別器

糾錯判別器結構如上圖所示,輸入數據爲漢字和拼音的特徵,其中漢字經過BERT預訓練模型得到漢字的詞向量,而拼音數據則是通過BERT模型重新訓練一個關於拼音數據的詞向量,二者拼接後經過Softmax層,計算交叉熵損失。

爲什麼使用拼音的數據呢?這是因爲正確的字發音一般比較相似,那麼可以通過拼音來縮小搜索正確詞的範圍,所以拼音是一個重要的特徵。並且通過嘗試後,拼音和漢字單獨訓練再拼接提取的特徵優於其他組合方式,這種方式類似於Ensemble模型。先用漢字語料訓練一個端到端的糾錯模型BERT,再訓練一個拼音到漢字的解碼模型,兩個模型拼接後通過輸出層softmax訓練每個位置的交叉熵損失,這點不同於原生的BERT模型只計算MASK位置的損失,而是類似於ELECTRA模型的損失函數。

關於拼音特徵的處理過程,比較合理的做法是將拼音拆分成聲母、韻母、聲調,根據發音特徵來得到相似發音的embedding表示向量,並且有相似發音的embedding向量要儘可能接近。漢字的拼音表示只有有限個,所有聲母韻母組成的網格也只有幾百個,並且拼音的寫法變化也不多,所以拆分成聲母、韻母、聲調之後做embedding是合理的。如果直接對拼音做embedding的訓練,得到的拼音表示向量無法表示出相似的發音。

4. 評測集的表現

模型中使用到了兩個trick:

  • 詞表過濾

    如果詞表很大,比如10000維,想要限制一下端到端糾錯模型在糾錯時的搜索範圍,可以對詞表增加限制,比如只允許在過濾後的300甚至幾十個相似的詞語中選擇,理論上召回有所損失,但是糾正的準確率大大提升,並且這種過濾程度可以調整。實際測評中顯示,加入詞表過濾,顯著提升了模型的效果和性能。

  • 遞歸預測

    BERT在糾錯過程中是一對一的糾錯,如果一個句子中有多個錯誤的位置,但是對於端到端輸入模型一次Feed Forward 過程可能只糾正了一個位置,若要整個句子實現糾錯,那麼需要把糾正後的結果放到句子中再次輸入模型,進行遞歸糾錯。如果兩次遞歸結果相同則停止遞歸糾錯,否則會遞歸糾錯最多3次。

    從結果中發現,原生BERT微調之後直接糾錯,模型評測指標爲9.3%,加入詞表過濾和遞歸預測後,f1提升到21.6%,加入糾錯訓練後f1大幅提升到65%,加入trick後,又提升到73.4%,再加入拼音特徵數據,效果提升明顯,f1提升到77.6%。

5. 糾錯的表現

從表中糾錯的例子中可以看出,之前分析的ASR識別錯誤類型的query,基本上能實現糾錯了,比如"播放洛天依唱的忙種"能夠糾正爲"播放洛天依唱的芒種",“你能幫我玩和平基因嗎"糾正爲"你能幫我玩和平精英嗎”,"清理一下聽懂灰塵"糾正爲"清理一下聽筒灰塵"等

雖然沒有引入知識庫,但是對於語料數據分佈的頭部知識仍然是可以糾正的,比如"芒種"、“和平精英”、"新冠肺炎"等,在語料中的佔比比較高,但是對於尾部的知識,該模型糾錯效果並不理想。

04 未來的方向

  • 儘管遵循目前關於NLP糾錯模型的設定條件,但是該模型在糾錯方面仍然存在一定的侷限性。後續可以考慮BERT-Decoder結構的模型如 GPT系列模型,BERT-Decoder是seq2seq模型,不會侷限於一對一的糾錯方式。
  • 目前模型的領域知識是由參與訓練的語料庫來體現,因此對於那些小衆的、處於長尾分佈的數據無法實現糾錯。要解決這個問題,可以借鑑ASR中基於Contextual attention的方式,把領域知識數據顯示的通過某種特殊結構模型引入到糾錯模型中,強制模型依賴領域知識來實現糾錯。
  • 模型需要實時更新,比如時下熱點"傳聞中的陳芊芊",ASR識別成了"傳聞中的成仙仙",這是由ASR模型對時事熱點反應不及時造成的。如果用於糾錯的NLP語料庫也是是歷史信息的話,很難把這類的問題進行糾正。如果只是通過不斷收集新的語料來更新整個模型,對於這種龐大而臃腫的模型很難做到實時更新,因此需要探索一種讓模型具備某種結構或者機制,只更新少量信息就能適應最新的時事熱點。

這三個方向是未來考慮的重點,另外還可以將模型中使用的N-gram語言模型替換成其他強語言模型,增加任務的難度,進而可能提高糾錯任務的表現。

今天的分享就到這裏了,謝謝大家!

05 參考文獻

  1. S. Shalev-Shwartz and S. Ben-David (2014) . Understanding Machine Learning: From Theory to Algorithm.
  2. Devlin J, Chang M W, Lee K, et al(2017). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding[J].
  3. K.Clark et al (2019) .ELECTRA: Pretraining Text Encoders as Discriminators Rather Than Generators.
  4. Zhang Shaohua et al (2020) Spelling Error Correction with Soft-Masked BERT.

作者介紹

魏天聞,小米人工智能部小愛基礎算法團隊負責人

本科畢業於武漢大學數學系,博士畢業於法國里爾一大數學系,主要研究領域包括獨立成分分析、非監督表示學習、語言模型等,有多篇論文發表於IEEE Trans. Information Theory, IEEE Trans. Signal Processing、ICASSP等知名學術期刊或會議上。魏天聞於2018年加入小米人工智能部,目前主要負責小愛同學語言模型有關算法研發與落地。

本文來自 DataFunTalk

原文鏈接

https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247503412&idx=1&sn=75ef312902713d3766a43a6c71e1024e&chksm=fbd77c58cca0f54e3a9ffbe9ec075a144e8b16a171287367173d4a0d69f511106335c7b05298&scene=27#wechat_redirect

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章