天天看點

語音合成在語音助手中的應用及擴充

語音合成作為人機互動中必不可少的一個環節,随着計算機的運算和存儲能力的迅猛發展,語音合成技術由早期的基于規則的參數合成,到基于小樣本的拼接調整合成,并逐漸發展為現在比較流行的基于大語料庫的拼接合成。與此同時,合成語音的自然度和音質都得到了明顯的改善,在一定程度上達到了人們的應用需求,進而促進了其在實際系統中的應用。目前,語音合成技術已經在自動應答呼叫中心(包括金融、電信和政府等)、電話資訊查詢(包括天氣、交通和旅遊等)、汽車導航以及電子郵件閱讀等方面得到廣泛的應用,同時針對娛樂和教育方面的應用也正在開展。總而言之,語音合成技術正在影響着現代社會的方方面面。

從整個語音合成研究的發展曆史來看,早期的機械式語音合成器反應了人們對語音産生機理了解的比較粗略,現代語音合成的方法基本上都是采用一種語音模型來合成語音。總的說來,近期語音合成的方法可以歸結為四種:1)實體機理語音合成;2)源-濾波器語音合成;3)基于單元挑選與波形拼接技術的語音合成;4)可訓練的語音合成;其中現在大家常采用的合成方法為基于波形拼接技術的語音合成和可訓練的語音合成兩種。

本文涉及的内容為語音合成的後端,語音合成的前端也是文本處理的一部分,主要包括文本正則化、分詞、詞性标注、多音字消崎及韻律預測等,這裡不做具體介紹。

原理就是根據輸入文本分析得到的資訊,從預先錄制和标注好的語音庫中挑選合适的單元,進行少量的調整(也可以不進行調整),然後拼接得到最終的合成語音,其中用來進行單元挑選的資訊可以是前端分析得到的韻律文本,也可以是生成的聲學參數(比如基頻、時長和譜參數),或者兩者兼有。由于最終合成語音中的單元都是直接從音庫中複制過來的,其最大的優勢就是在于保持了原始發音人的音質。

基本思想就是基于一套自動化的流程,根據輸入的語音資料進行訓練,并形成一個相應的合成系統。一般而言,訓練是針對模型或者參數進行的。在語音信号進行中,最普遍有效的模組化方法就是隐馬爾可夫模型(hmm),它在語音識别中已經有非常成熟的應用,目前的可訓練語音合成技術也都是基于hmm 進行參數模組化

以上兩個合成方法他們各有其優缺點,也在不同的應用場合起到非常重要的作用:

語音合成在語音助手中的應用及擴充

是以,在網絡資源或者計算存儲資源充足的情況下,為了追求更高的音質和更好的合成語音自然度,可以采用單元挑選與波形拼接的方法來搭建合成系統;而在資源受限的情況下一般會采用可訓練的語音合成方法。

由于我們在語音助手中采用的主要是可訓練的語音合成方法,是以下面簡單介紹可訓練語音合成方法的原理及流程。

可訓練的語音合成方法分為訓練和合成兩個階段,在訓練過程中,利用hmm 訓練對基頻、時長以及譜參數進行模組化。在合成過程中,對輸入文本進行屬性分析,并利用訓練後的模型進行參數預測,最後通過參數合成器合成出語音。

在訓練模型之前,需要準備一個音庫,這個音庫包括兩個部分:聲學資料和标注資料嗎,聲學資料就是特定文本的錄音資料,而标注資料就是這些聲學資料對應的标注,如發音标注、停頓标注、句法标注等。

在準備好了資料之後,模型訓練階段首先将聲學資料通過相關工具提取出對應的頻譜和基頻參數,除了定義一些 hmm 參數以及準備訓練資料以外,模型訓練前還有一個重要的工作就是對上下文屬性集和用于決策樹聚類的問題集進行設計,即根據先驗知識來選擇一些對聲學參數(譜、基頻和時長)有一定影響的上下文屬性并設計相應的問題集,比如前後調、前後聲韻母等。需要注意的是,這部分工作是與語種(或者發音風格)相關的。除此之外,整個模組化訓練和合成流程基本上與語種(或者發音風格)無關。

hmm訓練過程就是傳統的訓練過程,方差下限估計-單音素模型訓練-上下文相關模型訓練-基于決策樹的模型聚類-聚類後的模型重估-時長模組化,模型訓練階段得到的結果包括譜、基頻和時長的hmm及對應的決策樹。

在合成過程中,首先是對輸入文本進行分析,得到我們所需要的上下文屬性,然後根據這些屬性分别對時長、基頻和譜參數的聚類決策樹進行決策,并得到相應的模型序列,最後根據模型基于參數生成算法來生成基頻和譜參數,并通過合成器合成出最終的語音。

可訓練語音合成方法之是以能取得現在的效果,是因為有多項關鍵技術在模組化、訓練、合成以及應用各方面的支撐,這些關鍵技術包括:

采用的是基于源-濾波器的思想,它估計譜參數時去除了時間周期的影響,使得頻譜和基頻可以單獨模組化,它可以估計出平滑可靠的基頻參數,合成時,實作了基音同步疊加和最小相位沖擊響應,實作對時長,基頻和譜參數的調整。

在進行單音素模型訓練之後,為了提高模組化精度,我們對模型進行上下文屬性擴充和訓練。由于對基頻和譜參數采用統一模組化的方法,則需要考慮的上下文屬性較多,比如前後音素環境、前後聲調、韻律位置資訊等,進而導緻上下文屬性的組合數目成指數增長。在訓練過程中,相對于巨大的上下文相關模型數而言,訓練資料量是非常有限的,是以,在進行上下文相關hmm 訓練時,絕大多數的上下文相關模型隻有一到兩個訓練資料,進而産生模型對資料的過拟和現象。

為此,采用基于決策樹的聚類算法,對上下文相關模型進行聚類,使得聚類後的模型有足夠的訓練資料。

對基頻和譜參數采用統一的基于hmm 的模組化方式。由于基頻參數與譜參數有所不同,它在時間軸上是一個不連續的量,它在濁音段表現為一個一維的基頻值,而在清音段則沒有基頻值(不是很嚴格的話,可以認為基頻值為0),是以,傳統的hmm 并不能直接對基頻進行模組化。

基本思想是,樣本空間是由兩個子空間構成,一個是清音空間,另外一個是濁音空間,濁音空間采用的是連續的hmm模組化,清音空間則是一個均值和方差都為0的分布。

在語音合成時,如何根據決策得到的 hmm 序列來生成平滑的聲學參數序列,這也是目前可訓練語音合成架構下的關鍵技術之一,參數生成算法采用的是結合了動态特征的最大似然值的方法進行參數生成。

通過以上準備和流程,可以建構出一個基本的可訓練語音合成系統。

語音助手中的語音合成除了基本的可訓練語音合成系統外,還有一套基于不定長單元的挑選與拼接實作(nus),由于語音助手場景下,需要合成的文本經常是有固定的模式,為了追求極緻的合成效果,我們把這些模式預先錄制下來,這些預先錄制的語音切分為一個一個的非定長單元,合成階段,我們從這些非定長單元中挑選合适的單元,再輔以基本的合成子產品,就可以實作一個更高品質的語音合成系統,是以我們在語音助手場景下采用的是基于可訓練的語音合成方法+nus來實作語音合成。

在語音助手的語音合成系統中,錄制了如以下模式的一些文本:

“朝陽今天的溫度是20攝氏度”

“正在為您呼叫張三”

“那你是打算從北京出發嗎?”

“為您找到十一個車次,您是要選擇第幾個呢?”

假設需要合成的文本為“正在為您呼叫李四”,那麼,我們可以從預先錄制的語音中,先将“正在為您呼叫”這個單元取出來,然後“李四”這個單元(這種單元我們稱之為槽)采用基本的可訓練的語音合成方法将他合成出來,然後将兩個單元拼接在一起就可以得到nus的合成效果了。

語音助手的合成系統中,用于搭建基本合成系統的語料有數千句,其中大部分為純中文語料,剩下的包括英文字母和英文句子、中英文混讀句子等。而用于搭建nus系統的語料則視場景和footprint的限制決定、不斷擴充。

可以看出,基于nus的語音合成效果遠遠好于基本的基于可訓練的語音合成系統。

通過對語音助手場景的嘗試,我們将可訓練語音合成與nus結合起來搭建了一個特定場景的高品質的語音合成系統,隻要錄制的場景下的語料越多,我們就能獲得接近于錄音的合成效果,這給後面的其他業務探索開了一個好頭。

後面,我們也會實作基于單元挑選與波形拼接的合成方法,搭建語音合成的雲服務,以更好的服務集團的業務。

繼續閱讀