嘉賓| 王強強
整理| 劉雨瑤
在先前由51CTO主辦的AISummit全球人工智慧技術大會中,作業幫的語音團隊負責人王強強老師為廣大聽眾帶來了《作業幫語音技術實踐》的主題演講,從語音合成、語音評測、語音識別三個方面解讀了作業幫的語音技術實踐,內容覆蓋語音識別中的端到端實現與數據高效利用、高並發場景中的語音發音糾錯,以及模型的因素區分與抗干擾能力提升。
為了能讓更多對語音技術有興趣的同學了解到目前語音技術的發展態勢與前沿優秀技術實踐,現將王強強老師的演講內容整理如下,希望能為諸君帶來一些啟發。
對於傳統的語音合成技術而言,想要完整合成一個人的聲音,需要十小時甚至更長時間的錄音。這對於錄音者而言是一個不小的挑戰,很少有人能夠在如此長的時間中始終保持良好的發音狀態。而透過小數據量語音合成技術,我們只需要使用錄音者所說的幾十句話、幾分鐘的語音,就能達到完整的語音合成效果。
小數據量語音合成技術大致分為兩類。一類是對於標註和語音不匹配的情況,處理方式主要分為兩種:一是自監督學習,透過自監督的演算法學習得到建模單元和音訊之間的對應關係,再透過特定人的標註語料進行Finetune,以達到比較好的合成效果;二是透過ASR辨識未標註的語料,並利用TTS合成對偶函數、對偶學習的方式,逐步提升TTS的合成效果。
而對於文字和音訊配對的情況,主要的處理方式也分為兩種:一是建構有標註語料的多語種預訓練模型。另一種則是基於此方案之上,同語種內的多個說話者有標註資料預訓練,利用目標說話的人的資料進行Finetune,以達到預期的效果。
作業幫的語音合成技術框架,在聲素部分使用了FastSpeech2。 FastSpeech2擁有合成速度快的主要優勢,同時FastSpeech2也融合了Duration、Pitch、Energy Predictor,能夠為我們提供更大的可操作性空間;而在聲碼器的選擇上,作業幫語音團隊選用了Multi-Band MelGAN,這是由於Multi-Band MelGAN擁有良好的合成效果,且合成速度非常快。
在確定基礎框架後,接下來要做的就是多說話人的語音合成。多說話人語音合成常見的想法是將Speaker Embedding訊息加入Encoder中,學習特定說話人的訊息,而後利用模型訓練多說話人的語音合成模型。最後再利用特定的說話者進行一些簡單的Finetune。這套方案能夠將十小時的錄音需求壓縮到一小時左右,但在實際中,採集一小時時長的、能夠達到模型訓練標準的錄音還是存在一定難度。而小數據量語音合成的目標本質上是利用更少的聲音,合成一個相對不錯的聲音。
因此,作業幫語音團隊借鑒了M2VOC競賽的冠軍方案,最終選擇了D-Vector和基於ECAPA的Speaker Embedding的組合,並進行了三重升級,包括Speaker Embedding的升級;將FastSpeech2使用的Transformer升級到Conformer;以及將Speaker的資訊加入LayerNorm之中。
#作業幫的語音評測基礎技術框架,本質上還是用GOP打分判斷使用者單字或句子發音的好壞。但在模型方面已經升級到了Conformer以及CGC attention-based這種完全端到端的模型訓練流程。 GOP非常依賴聲音和音素,也就是建模單元對齊的程度,所以在訓練模型時,我們加入了透過GMM模型獲得的語料的對齊資訊。透過完全的認證模型,加之對齊的相應信息,能夠訓練出一個效果非常不錯的模型,結合兩者的長處,保障GOP的得分相對準確。
評估場景自然對時延比較敏感,因此時延和網路是GOP評測系統落地過程中的兩大問題。如果時延很高,即時性很差,整體的使用者體驗感就會受到很大的影響。此外,如果網路出現問題,使用者的網路環境波動,再加上網路時延,很容易使用戶感知的染色時間超過一秒,這會帶來非常明顯的感覺凝滯,使得整個的課程效果受到嚴重影響。
對於上述問題,從演算法上可以透過Chunk Mask的方式解決時延以及記憶體過大的問題。 Chunk向前最多看兩幀向後最多看五幀,時延的問題就解決掉了。
在實際中真正演算法去測試的時候,它的硬時延只有50毫秒左右,就是基本50毫秒就會啟動這個詞,50毫秒在人的感知上是很快的。所以至少在演算法層面,解決了硬延遲的問題。這是我們做的第一個層次的工作。
一套端雲一體平台可以解決高並發以及網路傳輸所造成的問題。這個平台能夠自動判斷使用者的手機算力是否足夠。如果有足夠的話,就會優先進行本地評測。如果算力不太夠的話,就將這個請求發到雲端,由雲端來進行評測。若本地出了任何問題,對它的生命週期也是有把控的。
透過這套方案,我們解決了瞬間高並發所帶來的問題,由於部分算力被轉移到端上,雲端只需要保留原來20%的機器就可以實現正常的運作,這大大的節省了資源。此外,在將演算法做到在地化後,延遲的問題也得到了解決,對於大段的測評任務,能夠實現良好的支撐,為用戶帶來更優質的視聽體驗。
發音糾錯的需求背景是語境問題和教育資源的稀缺,同樣的,這個痛點可以利用測評技術解決。透過對評估技術的最佳化,可以判定發音正確與否,辨識發音哪裡有問題。
在技術選型方面,雖然評測系統是基於GOP的穩定評測方案,但是GOP方案非常依賴音訊和建模單元的對齊,如果起始時間不準確,其偏差就會比較大,區分性就會變差。因此原先的方案便不太適合這種糾音的場景。而GOP的想法是透過一些專家知識,對讀音進行糾正與指導,糾音中的漏讀和增讀GOP處理起來會非常痛,需要太多的人工支持。這便需要一個更靈活的方案,因此我們最後選擇了ASR的方案來做發音糾錯。
ASR方案很大的優點就是訓練過程簡單,不需要太多的對齊資訊。即使發音錯誤,對上下文音素的判別也不會有太大的影響。 ASR處理增讀、漏讀,有天然的理論、技術上的優勢。所以我們最後選了純端到端的ASR模型來當我們發音糾錯的技術底座。
同時,作業幫也在此基礎上做了一些最佳化及創新工作。第一,將先驗的文字訊息透過Attention模組加入模型訓練;第二,透過隨機替換的方式模擬出錯以訓練模型,使其有糾錯能力;第三,由於模型區分度不夠,我們對錯誤做了分層,有些細微的錯誤就不判錯。透過以上方案,最終實現了虛警率的大幅下降,同時保障召回率損失不是特別大,診斷正確率也有提升。
作業幫的語音辨識技術框架是端對端的語音辨識框架,相對於原始的HMM-GMM/DNN方案有非常明顯的優勢:第一,避免了很多複雜地聚類操作以及對齊操作;第二,訓練流程稍微簡單;第三,端到端的框架不需要人工生成發音詞典;第四,能夠同時學習到音素資訊和序列資訊,相當於一起學習聲學模型、語言模型。
當然其劣勢也比較明顯,端對端模型剛開始難以利用更多的語音或文字數據,而標註語料成本是很高的。我們的要求是內部選型一定要達到的目的是必須有端到端的生成模型,必須跟上最新的演算法,也能夠將語料模型資訊融合。
提到CTC-CRF,需要先認識CTC。 CTC是為整句建模而生的,CTC出現後,訓練整句的聲學模型就不再需要做音素和音訊之間的對齊。 CTC的拓撲,一方面引入了一個Blank來吸收靜音,能夠把真正的有效的建模單元之外的靜音給吸收掉。另一方面它算整句機率的時候,是依照π,使用了動態規劃的演算法,讓整句的路徑在一個相對合理的規模範圍內,這樣便能夠大幅減輕計算量。這是CTC非常具有開創性的工作。
作業幫內部用的CTC-CRF語音辨識系統。透過CRF的方式來理解公式並擬合整句機率。整句機率是輸入為X的一個序列,輸出為π(π是用上文CTC的拓樸來表示),所以稱為CTC-CRF。
其中CRF很重要的是位勢函數以及位勢函數整個規劃。位能函數是輸入為X,輸出為πt的條件機率,再加上一個整句的機率,它們其實就對應CRF中的節點和邊。
CTC-CRF與常用的聲學模型思路有一定差異。常用的聲學模型有以下四個DNN-HMM、CTC、RNNT、AED。
RNNT基本的條件機率模型,就是輸入X、輸出Y的機率,而擬合的目標就是maxθ它的參數,讓這個機率最大化。
CTC如圖,CTC的一個假設很明顯,就是條件無關假設,它的狀態和狀態之間是沒有關聯的,沒有考慮它們之間的條件機率關係。
RNNT考慮了當前狀態跟所有歷史狀態的條件機率,如圖能明顯看出。 AED也是這樣,是考慮當前狀態跟歷史狀態的條件機率。
但CTC-CRF其實不是基於條件機率的局部歸一化模型,它是整句歸一化的模型,是全域歸一化的模型。所以我們看到它不僅依賴歷史,還依賴未來,它其實是能夠考慮整句的機率資訊的。這是它們在理論上的一個最大的差異。
我們對於CTC-CRF的利用,首先在Loss層,這是一個標準現階段用的Encoder、Decoder,然後加上CTC-CRF、Loss,訓練聲學模型,端到端聲學模型的流程。 Loss層上用的是CTC-CRF Loss,而不是原來的CTC Loss。 CTC-CRF是Phone層級建模的,但Attention這裡,我們的Attention做的時候考慮了Word層級的建模。使用了Phone和Word等級兩重特徵去訓練模型。
最後,關於具體效果方面,這是幾個開源工具在Aishell1測試集上效果,同時標示了參數數量。能看到基於CTC-CRF的相對來說還是比較有優勢的。
有了演算法,理論上的效果也非常不錯,結合業務方看,業務方還是有不同的,但是所有的業務方有一個共同的訴求,就是效率上要達到最優。為了解決這個問題,有了熱詞方案。熱詞方案能夠完美的解決這個問題、快速地辨識出業務方想要辨識出的字詞。
常見的熱詞方案是向TLG加入熱詞展開後的有向圖。上圖是常見的三級Ngram的WFST解碼圖,實線表示條件機率,虛線是回退機率。
作業幫的方案是基於前綴自動機的熱詞方案,這是因為熱詞的規模大到會產生效率瓶頸。用前綴自動機解多模式字串的匹配的問題就很合適,尤其是對一個串中、命中了、覆蓋了熱詞表中的某個熱詞。如sher這樣一個序列,它覆蓋了兩個熱詞,就是she和her,在這個前綴自動機方案中,檢索完she之後,可以直接跳到her,能夠快速的找到字符串中包含的多個熱詞。結論是,這個方案夠快,還能夠節省一部分的儲存空間。
這個方案實際使用的時候也出現了一些問題。建構前綴樹還是需要遍歷整個前綴樹,代價比較大。因為要即時添加熱詞,隨時添加,隨時生效。為了解決這個問題,最後也做了一兩個樹,一個是普通前綴樹,一個是前綴自動機,就是用戶熱詞是加在普通前綴樹裡的,普通前綴樹會馬上生效,相當於是隨時上線,可以激活熱詞了。超過一個閾值之後,前綴自動機會自動構建,基本上滿足了一批用戶的訴求。
上文主要是透過三個方向,每個方向一到兩個點,這種技術解密的方式梳理了作業幫語音技術的落地以及落地中執行過程中遇到的問題,以及最後怎麼輸出一套相對能夠滿足業務方訴求的方案。
但除了這三個點,語音組還累積了許多語音的原子能力。評測層面做得非常細,甚至增讀、漏讀、連讀、濁化、重音、升降調都做了,辨識也增加了中英文混合辨識、聲紋、降噪,以及年齡判別。
有了這些原子能力,演算法層面對於業務面的支撐和服務就更加得心應手了。
王強強,作業幫語音技術團隊負責人。在加入作業幫之前,曾任職於清華大學電子工程系語音處理與機器智慧實驗室,負責語音辨識演算法落地,建構工業級解決方案。 2018 年加入作業幫,負責語音相關演算法研究與落地,主導了語音辨識、評測、合成等演算法在作業幫的落地實踐, 為公司提供整套語音技術解決方案。
以上是作業幫語音技術實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!