語音合成在語音助手中的應用及擴充套件
語音合成作為人機互動中必不可少的一個環節,隨著計算機的運算和儲存能力的迅猛發展,語音合成技術由早期的基於規則的引數合成,到基於小樣本的拼接調整合成,並逐漸發展為現在比較流行的基於大語料庫的拼接合成。與此同時,合成語音的自然度和音質都得到了明顯的改善,在一定程度上達到了人們的應用需求,從而促進了其在實際系統中的應用。目前,語音合成技術已經在自動應答呼叫中心(包括金融、電信和政府等)、電話資訊查詢(包括天氣、交通和旅遊等)、汽車導航以及電子郵件閱讀等方面得到廣泛的應用,同時針對娛樂和教育方面的應用也正在開展。總而言之,語音合成技術正在影響著現代社會的方方面面。
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結合起來搭建了一個特定場景的高質量的語音合成系統,只要錄製的場景下的語料越多,我們就能獲得接近於錄音的合成效果,這給後面的其他業務探索開了一個好頭。
後面,我們也會實現基於單元挑選與波形拼接的合成方法,搭建語音合成的雲服務,以更好的服務集團的業務。
相關文章
- 如何用Python語音合成,以及文字轉語音~Python
- 用C語言擴充套件Python的功能C語言套件Python
- 語音合成(TTS)技術在有道詞典筆中的應用實踐TTS
- GPT-SoVITS語音合成模型實踐GPT模型
- 好玩的github專案-科大訊飛語音linux線上語音合成後臺服務GithubLinux
- MRCP在美團語音互動中的實踐和應用
- 新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!JavaScript
- 語音標註的具體應用場景
- HTML5語音合成Speech Synthesis API簡介HTMLAPI
- 開源語音合成庫 coqui TTS 使用記錄UITTS
- Python 百度語音識別與合成REST API及ffmpeg使用PythonRESTAPI
- 聊聊這一年寫的 SPS 音樂擴充套件套件
- VSCode擴充套件應用VSCode套件
- easyui應用(四)--- easyui擴充套件UI套件
- 並查集擴充套件應用並查集套件
- 深度瞭解語音識別之發音詞典及語音資料採集標註
- Xamarin開發筆記—百度線上語音合成筆記
- [外掛擴充套件]蝦米音樂電臺外掛套件
- 全球最大的音樂公司正在幫助音樂家制作自己的人工智慧語音克隆人工智慧
- 在Mac中如何啟用語音輸入功能?Mac
- vue3 setup語法糖 擴充套件Vue套件
- SAP:檢索幫助擴充套件套件
- C# 10分鐘完成百度語音技術(語音識別與合成)——入門篇C#
- 語音翻譯軟體怎麼用?怎麼實現語音的翻譯
- Kaldi在語音資料庫timit上的聲學和語音模型訓練--1資料庫MIT模型
- 語音的關鍵聲學特徵(語音情感特徵提取)特徵
- C++對C語言的擴充套件(1)--引用C++C語言套件
- Bing Speech微軟必應語音認知服務-文字語音互轉微軟
- 訊息語音播報,微信語音自動播放,有點兒意思,可以看看這個應用
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- 詳解ASR語音轉寫場景下的應用
- 實時語音互動,打造更加智慧便捷的應用
- [譯]擴充套件 Node.js 應用套件Node.js
- 語音機器人教學:用Android語音玩樂高機器人機器人Android
- 用擴充套件的方式在 PHP 中使用 Kafka套件PHPKafka
- C++11語言擴充套件:常規特性C++套件
- XBRL(可擴充套件商業報告語言套件
- Go 語言編寫 CPython 擴充套件 goPyGoPython套件