語音合成作為人機互動中必不可少的一個環節,隨著計算機的運算和存儲能力的迅猛發展,語音合成技術由早期的基於規則的參數合成,到基於小樣本的拼接調整合成,並逐漸發展為現在比較流行的基於大語料庫的拼接合成。與此同時,合成語音的自然度和音質都得到了明顯的改善,在一定程度上達到了人們的應用需求,從而促進了其在實際系統中的應用。目前,語音合成技術已經在自動應答呼叫中心(包括金融、電信和政府等)、電話信息查詢(包括天氣、交通和旅遊等)、汽車導航以及電子郵件閱讀等方面得到廣泛的應用,同時針對娛樂和教育方面的應用也正在開展。總而言之,語音合成技術正在影響著現代社會的方方面面。
1.語音合成方法簡介
從整個語音合成研究的發展歷史來看,早期的機械式語音合成器反應了人們對語音產生機理了解的比較粗略,現代語音合成的方法基本上都是採用一種語音模型來合成語音。總的說來,近期語音合成的方法可以歸結為四種:1)物理機理語音合成;2)源-濾波器語音合成;3)基於單元挑選與波形拼接技術的語音合成;4)可訓練的語音合成;其中現在大家常採用的合成方法為基于波形拼接技術的語音合成和可訓練的語音合成兩種。
本文涉及的內容為語音合成的後端,語音合成的前端也是文本處理的一部分,主要包括文本正則化、分詞、詞性標註、多音字消崎及韻律預測等,這裡不做具體介紹。
1.1基於單元挑選與波形拼接技術的語音合成
原理就是根據輸入文本分析得到的信息,從預先錄製和標註好的語音庫中挑選合適的單元,進行少量的調整(也可以不進行調整),然後拼接得到最終的合成語音,其中用來進行單元挑選的信息可以是前端分析得到的韻律文本,也可以是生成的聲學參數(比如基頻、時長和譜參數),或者兩者兼有。由於最終合成語音中的單元都是直接從音庫中複製過來的,其最大的優勢就是在於保持了原始發音人的音質。
1.2可訓練的語音合成
基本思想就是基於一套自動化的流程,根據輸入的語音數據進行訓練,並形成一個相應的合成系統。一般而言,訓練是針對模型或者參數進行的。在語音信號處理中,最普遍有效的建模方法就是隱馬爾可夫模型(HMM),它在語音識別中已經有非常成熟的應用,目前的可訓練語音合成技術也都是基於HMM 進行參數建模
以上兩個合成方法他們各有其優缺點,也在不同的應用場合起到非常重要的作用:
所以,在網絡資源或者計算存儲資源充足的情況下,為了追求更高的音質和更好的合成語音自然度,可以採用單元挑選與波形拼接的方法來搭建合成系統;而在資源受限的情況下一般會採用可訓練的語音合成方法。
由於我們在語音助手中採用的主要是可訓練的語音合成方法,所以下面簡單介紹可訓練語音合成方法的原理及流程。
2.可訓練的語音合成
可訓練的語音合成方法分為訓練和合成兩個階段,在訓練過程中,利用HMM 訓練對基頻、時長以及譜參數進行建模。在合成過程中,對輸入文本進行屬性分析,並利用訓練後的模型進行參數預測,最後通過參數合成器合成出語音。
2.1數據準備
在訓練模型之前,需要準備一個音庫,這個音庫包括兩個部分:聲學數據和標註數據嗎,聲學數據就是特定文本的錄音數據,而標註數據就是這些聲學數據對應的標註,如發音標註、停頓標註、句法標註等。
2.2模型訓練
在準備好了數據之後,模型訓練階段首先將聲學數據通過相關工具提取出對應的頻譜和基頻參數,除了定義一些 HMM 參數以及準備訓練數據以外,模型訓練前還有一個重要的工作就是對上下文屬性集和用於決策樹聚類的問題集進行設計,即根據先驗知識來選擇一些對聲學參數(譜、基頻和時長)有一定影響的上下文屬性並設計相應的問題集,比如前後調、前後聲韻母等。需要注意的是,這部分工作是與語種(或者發音風格)相關的。除此之外,整個建模訓練和合成流程基本上與語種(或者發音風格)無關。
HMM訓練過程就是傳統的訓練過程,方差下限估計-單音素模型訓練-上下文相關模型訓練-基於決策樹的模型聚類-聚類後的模型重估-時長建模,模型訓練階段得到的結果包括譜、基頻和時長的HMM及對應的決策樹。
2.3後端合成
在合成過程中,首先是對輸入文本進行分析,得到我們所需要的上下文屬性,然後根據這些屬性分別對時長、基頻和譜參數的聚類決策樹進行決策,並得到相應的模型序列,最後根據模型基於參數生成算法來生成基頻和譜參數,並通過合成器合成出最終的語音。
2.4關鍵技術
可訓練語音合成方法之所以能取得現在的效果,是因為有多項關鍵技術在建模、訓練、合成以及應用各方面的支撐,這些關鍵技術包括:
1. 基於 STRAIGHT 的分析合成算法;
採用的是基於源-濾波器的思想,它估計譜參數時去除了時間周期的影響,使得頻譜和基頻可以單獨建模,它可以估計出平滑可靠的基頻參數,合成時,實現了基音同步疊加和最小相位衝擊響應,實現對時長,基頻和譜參數的調整。
2. 基於決策樹的模型聚類算法用於提高模型的魯棒性;
在進行單音素模型訓練之後,為了提高建模精度,我們對模型進行上下文屬性擴展和訓練。由於對基頻和譜參數採用統一建模的方法,則需要考慮的上下文屬性較多,比如前後音素環境、前後聲調、韻律位置信息等,從而導致上下文屬性的組合數目成指數增長。在訓練過程中,相對於巨大的上下文相關模型數而言,訓練數據量是非常有限的,因此,在進行上下文相關HMM 訓練時,絕大多數的上下文相關模型只有一到兩個訓練數據,從而產生模型對數據的過擬和現象。
為此,採用基於決策樹的聚類算法,對上下文相關模型進行聚類,使得聚類後的模型有足夠的訓練數據。
3. 通過多空間概率分布 HMM(MSD-HMM)對基頻進行建模;
對基頻和譜參數採用統一的基於HMM 的建模方式。由於基頻參數與譜參數有所不同,它在時間軸上是一個不連續的量,它在濁音段表現為一個一維的基頻值,而在清音段則沒有基頻值(不是很嚴格的話,可以認為基頻值為0),因此,傳統的HMM 並不能直接對基頻進行建模。
基本思想是,樣本空間是由兩個子空間構成,一個是清音空間,另外一個是濁音空間,濁音空間採用的是連續的HMM建模,清音空間則是一個均值和方差都為0的分布。
4. 結合參數的動態特性(一階二階差分)進行參數生成;
在語音合成時,如何根據決策得到的 HMM 序列來生成平滑的聲學參數序列,這也是目前可訓練語音合成框架下的關鍵技術之一,參數生成算法採用的是結合了動態特徵的最大似然值的方法進行參數生成。
通過以上準備和流程,可以構建出一個基本的可訓練語音合成系統。
3.語音助手中的語音合成
語音助手中的語音合成除了基本的可訓練語音合成系統外,還有一套基於不定長單元的挑選與拼接實現(NUS),由於語音助手場景下,需要合成的文本經常是有固定的模式,為了追求極致的合成效果,我們把這些模式預先錄製下來,這些預先錄製的語音切分為一個一個的非定長單元,合成階段,我們從這些非定長單元中挑選合適的單元,再輔以基本的合成模塊,就可以實現一個更高質量的語音合成系統,所以我們在語音助手場景下採用的是基於可訓練的語音合成方法+NUS來實現語音合成。
在語音助手的語音合成系統中,錄製了如以下模式的一些文本:
「朝陽今天的溫度是20攝氏度」
「正在為您呼叫張三」
「那你是打算從北京出發嗎?」
「為您找到十一個車次,您是要選擇第幾個呢?」
假設需要合成的文本為「正在為您呼叫李四」,那麼,我們可以從預先錄製的語音中,先將「正在為您呼叫」這個單元取出來,然後「李四」這個單元(這種單元我們稱之為槽)採用基本的可訓練的語音合成方法將他合成出來,然後將兩個單元拼接在一起就可以得到NUS的合成效果了。
語音助手的合成系統中,用於搭建基本合成系統的語料有數千句,其中大部分為純中文語料,剩下的包括英文字母和英文句子、中英文混讀句子等。而用於搭建NUS系統的語料則視場景和footprint的限制決定、不斷擴充。
可以看出,基於NUS的語音合成效果遠遠好於基本的基於可訓練的語音合成系統。
4.展望
通過對語音助手場景的嘗試,我們將可訓練語音合成與NUS結合起來搭建了一個特定場景的高質量的語音合成系統,只要錄製的場景下的語料越多,我們就能獲得接近於錄音的合成效果,這給後面的其他業務探索開了一個好頭。
後面,我們也會實現基於單元挑選與波形拼接的合成方法,搭建語音合成的雲服務,以更好的服務集團的業務。
更多了解智能語音交互技術>>http://click.aliyun.com/m/4630/
更多大牛分享就在雲棲社區>>http://click.aliyun.com/m/4631/