作者| 劉忠明亮
整理| 盧鑫旺
審查| 雲昭
近年來,智慧語音語言技術蓬勃發展,逐漸改變人們生產生活的方式,在社交領域更是對智慧語音技術提出了更高的要求。
日前,在51CTO主辦的AISummit全球人工智慧技術大會上,Soul語音演算法負責人劉忠亮,帶來了主題演講《Soul智慧語音技術實踐之路》,立足於Soul的一些商業場景,分享了Soul在智慧語音技術的一些實務經驗。
現在將演講內容整理如下,希望對大家有所啟發。
Soul是一個基於興趣圖譜推薦的具有沉浸感的社交場景,在這個場景下,語音交流非常多,所以在過去一段時間累積了許多的數據。目前大概一天有上百萬小時的量級,如果去除掉語音通話當中的一些靜音、噪音等等,只統計這些有意義的音訊片段的話,大概有六、七億個音訊片段。 Soul的語音業務入口主要是以下幾個:
群組可以建立房間,許多使用者在裡面進行語音聊天。
影片派對
###Soul平台的用戶,其實大部分是不希望露臉的,不希望暴露自己的,所以我們就做了一個自研的3D的Avatar形像或是頭套給用戶使用,幫助用戶更好地去表達自己或是無壓力的表達自己。 #########狼人殺遊戲#########也是一個房間,裡面也可以是好多人一起玩遊戲。 #########語音匹配#########一個比較有特色的場景,就是語音匹配,或者說它跟微信打電話一樣,就是可以一對一的去聊天。 ############基於這些場景,我們建構了自研語音能力,主要圍繞兩大方向:第一是自然的人機交互,第二是內容理解與生成。主要四個面向:第一個是語音辨識和語音合成;其次是語音分析和語音動畫,下圖是我們用到的常見的語音工具,主要有語音分析,例如音質、音效、音樂這些方向。然後是語音識別,例如中文辨識、歌聲辨識、中英混讀。第三是語音合成相關的,像是文娛轉換、語音轉換、歌聲合成相關的事情。第四是語音動畫,主要是做了一些文字驅動口形、語音驅動口形等等一些語音動畫的技術。 #####################基於這些語音演算法能力,我們有許多語音應用形式,例如語音品質的偵測,包括增強,語音審核,文字配音、語音話題、虛擬環境音,像是這些3D的空間音效等等。以下針對語音審核和虛擬形象兩個業務場景下所用到的技術進行介紹。 #########語音內容審核#########語音內容審核是透過對音訊片段進行涉政、色情、辱罵、廣告等這些維度的內容進行打標籤,或者是進行識別,透過這些違規標籤的偵測和審核,來保障網路安全。這裡面用到的最核心的技術就是端到端語音識別,它輔助將用戶的音訊轉成文字,然後再給下游的審核人員進行二次質檢。 #########端對端的語音辨識系統#########下圖是我們目前正在使用的端對端語音辨識框架,首先它會抓取使用者的一個片段音頻進行特徵提取,目前用到的特徵很多,我們主要是用了Alfa-Bank特徵,在一部分場景下嘗試用了Wav2Letter這種預訓練得到的特徵。得到音頻特徵之後會進行一個端點偵測,就是偵測這個人是不是在說話,這個音頻片段有沒有人聲。目前用到的基本上是一些經典的能量VD和模型DNVD。 ################拿到這些特徵之後,我們會送到一個聲學打分的模組,這個聲學模型我們在開始的時候是用的Transformer CDC,目前已經迭代到了Conformer CDC。經過這個聲學評分之後,我們會把一系列的序列的分數送給解碼器,解碼器負責解碼出文字來,它會基於識別結果再進行二次打分。在這個過程中,我們用到的模型基本上還是一些像是傳統的EngelM模型,還有一些目前比較主流的Transformer深度學習的模型進行重打分數。最後,我們還會做一個後處理,例如經過一些標點的檢測、文本正則化、語句順滑等這些處理,最終得到一個有意義的比較準確的識別文字結果,比如“2022年全球人工智能大會” 。
在端對端語音辨識系統裡面,其實我們講的端到端主要是在聲學打分這部分我們是使用了端到端技術,其他的主要還是一些傳統的和一些經典的深度學習方式。
在建構上面這個系統過程中,我們其實是遇到了很多問題,這裡主要是列舉三個:
#針對這幾個問題,我們主要是透過以下三個方式去解決的。
Soul的場景多且比較複雜。例如群聊派對,它會出現多個人交疊的狀況或是AB一直在對話。例如在線上KTV,它會出現一些邊唱歌邊說話的狀況。但是我們在標註數據的時候,因為它比較昂貴,所以我們會選取這些場景下面比較乾淨的數據進行標註,例如可能會標註一萬小時乾淨數據。但是乾淨的資料跟真實場景的資料的複雜性是不一樣的,所以我們會根據這些乾淨資料做一些資料預處理。例如一些經典的加噪、加殘響、調速,比較把速度調快一些或是調慢一些,調能量,把能量調大調小一些,經過這些比較經典的一些數據預處理方式。
除了這些方式,我們會針對我們業務場景下出現的一些問題,我們會做一些針對性的資料預處理或資料增廣。例如剛才提到群聊派對很容易出現多說話人交疊的情形,所以我們會做一個多說話人拼接音頻,也就是說把ABC三個說話人的音頻片段我們會做一個cut,一起去做數據增廣。
因為在音視訊通話裡面有一些會在整個音訊前端做一些基本的3D演算法的預處理,例如自動迴聲消除、智慧降噪等等,所以說我們也會為了適配線上的使用場景也會做一些3D演算法的預處理。
經過這些方式的資料預處理之後,我們可以得到多樣性的這些數據,例如這些有雜訊的、有一些混響的、多人甚至多風格的這種數據都會增廣出來。例如我們會把一萬小時增廣成大概五萬小時甚至比如八九萬小時這麼一個量級,這樣的話,數據的覆蓋度、廣度就會非常高。
我們所使用的模型的主要架構還是Conformer結構。在這個Conformer結構左邊就是經典的Encoder CDC框架。右邊是一個Attention Decoder。但大家注意到,我們在右邊這個Loss裡邊,原來的Conformer結構是一個CE Loss,而我們這邊把它換成了Focal Loss。主要是我們是使用Focal Loss去解決稀疏單元、稀疏資料訓練不收斂的問題,或是訓練差的問題,它是可以解決的。
例如在中英混讀裡面,有些英文單字我們在訓練資料裡面是很少的,這種情況下這個單元是學不好的。透過Focal Loss我們可以把它的Loss權重調高一些,可以緩解一部分數量問題或訓練不好的問題,能夠解決一部分bad case。
第二個點,我們在訓練策略上會不一樣,例如我們在訓練策略也會採用一些混合訓練的方式,例如在前期訓練的時候,我們訓練Decode這部分輸入的時候,我們還是採用精標的Label序列資料作為輸入。但隨著訓練模型收斂,後期的時候我們會按照一定機率去採樣一部分預測出來的Label作為Decoder的輸入,來做一些Trick,這個trick主要解決什麼?就是訓練模型跟線上推理模型的輸入特徵不一致的現象,透過這種方式我們是可以解決一部分的。
但還有一個問題就是,其實在這個Conformer模型原來或像是Vnet或ESPnet他們提供的模型裡面,預設是一個絕對位置資訊。但是絕對位置資訊它不能解決序列過長的時候的識別問題,所以我們會把絕對位置資訊改成相對位置編碼來解決這個問題。透過這種方式,可以解決辨識過程中出現的比如說有些字重複或是偶發的丟字或是丟詞的現象,這個問題也是可以解決的。
第一個是聲學模型,我們會把自迴歸的模型改成這個基於Encoder CDC WFST解碼的方式,先解出一部分辨識結果,例如NBest、10best或20best。基於20best,我們會送到Decorde Rescore去做一個二遍重打分,這樣的話可以避免時序依賴的關係,便於GPT並行的進行計算或推理。
除了經典的這種加速的方式,我們還做了混合量化的方式,就是我們在深度學習前向推理的過程中,我們一部分使用8Bit進行計算,但是在核心的一部分,例如金融函數這部分我們依然使用16bit,主要是在速度和精確度方向上我們會做一個適當的平衡。
經過這些最佳化之後,整個推理速度是比較快的。但在我們的實際上線過程中,我們也發現了一些小問題,我覺得也算是一個Trick。
在語言模型層面上,在語言模型層面上,例如我們場景閒聊的文本比較多,但是也有唱歌的,我們要同一個模型既要解決說話,又要解決歌聲。在語言模型上面,例如閒聊文本,它通常比較碎、比較短,所以我們經過實驗之後,我們發現三元的是比較好的,五元反而沒有帶來提升。
但是例如歌聲的話,它的文字比較長,且它的句式、文法相對比較固定,所以在實驗過程中,五元是比三元好的。出現這種情況,我們使用的是混合文法來對閒聊文本和歌聲文本共同進行語言模型的建模。使用了「三元五元」混合的模式,但這個「三元五元」混合並不是我們傳統意義上說的差值,我們並沒有做差值,而是把閒聊的三元的文法跟四元的歌聲和五元的文法拿過來直接做一個合併。這麼得到的arpa目前是更小的,在解碼的過程中也比較快,更重要一點就是顯存佔用比較小。因為在GPU上解碼的話,顯存大小是固定的。所以說我們是需要控制一定的語言模型大小的情況下,來盡可能透過語言模型提升辨識的效果。
經過聲學模型和語言模型的一些最佳化和Trick之後,目前我們的推理速度也是非常快的。實時率基本上能到0.1、0.2的水準。
主要是透過將聲音、口形、表情、姿態等這些內容進行生成,來幫助使用者更無壓力或更自然、更自由地去表達,這背後需要的核心技術之一就是多模態語音合成。
下圖是目前正在使用的語音合成系統的基本框架。首先我們會取得使用者的輸入文字,例如“2022全球人工智慧大會”,然後我們會送到文本分析這個模組,這個模組主要是對文本進行一些各方面的分析,例如進行文本的正則化,還有一些分詞,最重要一點是自轉移,把文字轉成音素,還有一些韻律預測等等功能。經過這個文本分析之後,我們就可以拿到使用者的這句話的一些語言學特徵,這個特徵會送到聲學模型裡面。聲學模型目前我們主要使用的基於FastSpeech這個框架所做的一些模型的改進和訓練。
聲學模型得到聲學特徵,例如梅爾特徵,或是長度或能量等等訊息,它的特徵流向會分成兩部分。一部分我們會送到聲碼器裡面,主要是用來產生我們可以聽的音訊波形。另外一個流向是送到唇形預測裡面,我們透過唇形預測模組可以預測出口形對應的BS係數。得到BS特徵值之後,我們會送到影片產生模組,這部分是由視覺團隊負責,可以產生虛擬頭像,就是這種帶有口形、帶有表情的虛擬形象。最終我們會把虛擬頭像和音訊會做一個合併,最終生成音視頻動畫。這就是我們整個多模態語音合成的基本架構、基本流程。
多模態語音合成過程中的主要問題:
#Soul的處理方式與在改進端到端的語音識別系統中類似。
我們的音庫來源是比較多的,左邊這個圖就是第一我們會採集錄製。第二,當然我們非常感謝開源的數據公司,它會開源一些音庫,我們也會用它來做一些實驗。第三,我們平台上在公司級會有一些公開的營銷視頻,在做視頻的時候,請了一些優質主播來做,所以這裡面的音色也是非常優質的。第四,一些公開的網路數據,例如在對話的過程中,有些音色品質比較高,所以我們也會爬取一些,然後做一些預標註,主要是做一些內部的實驗和預訓練。
針對這些資料複雜性,我們做了一些資料預處理,例如短句的拼接,剛才提到在採集的過程中,句子是有長有短的,我們為了擴增音庫的時長,我們會把短句做一個cut,過程中我們會去掉一些靜音,靜音太長的話也會有一些影響。
第二,就是去噪,例如在拿到的這些網絡數據或者營銷視頻,在這裡面的噪聲我們會通過一些語音增強的方式把噪聲去掉。
第三,其實現在的標註大部分是標註的音轉字,但音素的邊界現在基本上就不作為標註了,所以我們通常是透過這種MFA強制對齊的方式去獲得音素的邊界資訊。
然後下面人聲分離的話是比較特殊的,因為是在行銷影片裡面我們是有背景音樂,所以說我們會做一個人聲分離,會把背景音樂給去掉,取得到乾聲數據。我們也做一些能量規則,還有一些VAD,VAD主要是在對話或網路資料裡面,我透過VAD去偵測到有效的人聲,再拿去做一些預標註或預訓練。
#我們在做FastSpeech的過程中,我們主要做了三個面向的改變。左邊這個圖左邊這一類是FastSpeech的基礎模型,我們首先做了第一個變化就是我們會把音素和音調進行解耦建模,就是正常情況下大家的文本前端轉出來的是音素序列,像左邊這個圖一樣,「你好」這種單調的音素序列。但是我們會把它拆成右邊這部分,兩個部分,就是左邊一部分是音素序列,只有音素,沒有聲調。右邊是只有聲調,沒有音素。這樣的話我們會分別輸送到一個ProNet(音)裡面,會得到兩個Embedding。兩個Embedding會cut在一起,來替代之前的這種Embedding的方式。這樣的話,好處就是它可以解決稀疏發音的問題,或是有些發音不在我們的訓練語料裡面,這種問題基本上是都可以解決的。
第二個我們改動的方式是原來的方式是先預測一個時長,就是右邊這個圖,然後再基於這個時長我們把聲音集進行擴展,然後預測能量和Pitch。現在我們是換了一下順序,我們會基於音素級的去預測Pitch和Energy,然後預測完之後我們才會去對它進行一個幀級別的時長的擴展。這樣的好處就是,在整個完整的音素的發音過程中,它的發音就比較穩定,這是在我們場景下的一個變化。
第三個就是我們在Decoder這部分,就是最上面這部分,Decoder這部分我們做了一個替代變化。原來的Decoder裡面是用的這種Attention的方式,我們現在換成了這種Iconv或Convolution的方式。這個好處就是因為Self-Attention它雖然能捕捉到很強大的歷史資訊、上下文訊息,但是對逐步建模的能力是比較差的。所以說換成Convolution之後,我們在處理這種局部建模的能力會比較好。例如在發音的時候,剛才提到的這種發音比較啞音或模糊的現象,基本上它是可以解決的。這是我們目前的一些主要的變化。
#左邊是合成口形,右邊是合成聲音,他們共享聲學模型裡面的一些Encoder和時長資訊.
我們主要是做了三個動作。第一個是,我們是真實的採集了一些高精度的數據,比如我們會找一些真人佩戴一些高精度傳感器,去驅動我們已經預測好的Avatar形象,得到高分辨率的音視頻,做一些標註。這樣就會得到文字、音訊、視訊的三者同步的一些資料。
第二件事就是,可能也提到我們要怎麼解決音畫一致性呢?因為我們最開始是先透過合成,文字合成聲音,拿到聲音之後,我們會做一個聲音到口形的預測,這個過程中它會出現幀級不對稱的現象。目前我們是透過這種合成口形和合成聲音共享聲學模型的方式,並且在幀級序列進行擴展之後去做。目前是可以保證在幀級上是可以對齊的,並且能夠保證音畫一致性。
最後,我們目前並沒有基於序列的方式去預測口形或BS基,我們是基於LSTM的這種方式去預測BS基。預測的BS係數之後,但是它有可能預測得有些異常,我們還會做一些後處理,比如正則化,比如BS基太大或者太小,都會導致口形張得太大甚至變化太小,我們都會設置一個範圍,不能太大了,會控制在一個合理的範圍之內。目前基本上是可以保證音畫一致性的。
一是多模態識別,在高雜訊情況下,音訊結合口形做多模態識別,提高辨識準確率。
二是多模態的語音合成即時語音轉換,可以保留使用者的情緒、風格這些特徵,只是把使用者的音色轉換到另外一個音色上面。
以上是Soul智慧語音科技實務之路的詳細內容。更多資訊請關注PHP中文網其他相關文章!