語音合成簡介 Text-to-speech

聲明:轉(zhuǎn)載請?jiān)跇?biāo)題標(biāo)明轉(zhuǎn)載梨熙,并添加原文鏈接俗慈。

簡介

這篇博客的主要內(nèi)容是對語音合成 (text to speech)的背景知識進(jìn)行介紹氨淌。 希望可以讓讀者通俗易懂的了解語音合成的工作原理谬泌, 并對為了理解state-of-the-art text to speech 的算法做基礎(chǔ)脖祈。


Computer talks like a human---Test-to-speech

這個(gè)簡介主要基于這篇論文 “Wavenet: a generative model for raw audio”的附錄介紹的年局。 論文鏈接如下: https://arxiv.org/pdf/1609.03499.pdf, 以及stanford CS224S的課程际看, 鏈接如下 http://web.stanford.edu/class/cs224s/lectures/224s.17.lec14.pdf

什么是語音合成

語音合成是通過文字人工生成人類聲音, 也可以說語音生成是給定一段文字去生成對應(yīng)的人類讀音矢否。 這里聲音是一個(gè)連續(xù)的模擬的信號仲闽。而合成過程是通過計(jì)算機(jī), 數(shù)字信號去模擬僵朗。 這里就需要數(shù)字信號處理模擬信號信息赖欣,詳細(xì)內(nèi)容可參考 [1]。

Fig. 1 an example of voice signal.??

圖片1验庙, 就是一個(gè)例子用來表示人類聲音的信號圖顶吮。 這里橫軸是時(shí)間, 縱軸是聲音幅度大小粪薛。聲音有三個(gè)重要的指標(biāo)悴了,振幅(amplitude), 周期(period)頻率(frequency)。 振幅指的是波的高低幅度,表示聲音的強(qiáng)弱湃交,周期和頻率互為倒數(shù)的關(guān)系熟空, 用來表示兩個(gè)波之間的時(shí)間長度,或者每秒震動的次數(shù)搞莺。? 而聲音合成是根據(jù)聲波的特點(diǎn)息罗, 用數(shù)字的方式去生成類似人聲的頻率和振幅, 即音頻的數(shù)字化才沧。了解了音頻的數(shù)字化迈喉,也就知道了我們要生成的目標(biāo)函數(shù)。

音頻的數(shù)字化主要有三個(gè)步驟温圆。

取樣(sampling):在音頻數(shù)字化的過程挨摸,采樣是指一個(gè)固定的頻率對音頻信號進(jìn)行采樣, 采樣的頻率越高捌木, 對應(yīng)的音頻數(shù)據(jù)的保真度就越好油坝。 當(dāng)然嫉戚, 數(shù)據(jù)量越大刨裆,需要的內(nèi)存也就越大。 如果想完全無損采樣彬檀, 需要使用Nyquist sampling frequency帆啃, 就是原音頻的頻率2倍。

量化 (quantization): 采樣的信號都要進(jìn)行量化窍帝, 把信號的幅度變成有限的離散數(shù)值努潘。比如從0 到 1, 只有 四個(gè)量化值可以用0坤学, 0.25疯坤, 0.5, 0.75的話深浮, 量化就是選擇最近的量化值來表示压怠。

編碼 (coding):編碼就是把每個(gè)數(shù)值用二進(jìn)制的方式表示, 比如上面的例子飞苇, 就可以用2bit 二進(jìn)制表示, 00, 01, 10, 11菌瘫。 這樣的數(shù)值用來保存在計(jì)算機(jī)上。

采樣頻率和采樣量化級數(shù)是數(shù)字化聲音的兩個(gè)主要指標(biāo)布卡,直接影響聲音的效果雨让。 對于語音合成也是同樣, 生成更高的采樣頻率和更多多的量化級數(shù)(比如16 bit), 會產(chǎn)生更真實(shí)的聲音忿等。? 通常有三個(gè)采樣頻率標(biāo)準(zhǔn)

1. 44.1kHz 采樣栖忠, 用于高品質(zhì)CD 音樂

2. 22.05kHz 采樣, 用于語音通話, 中品質(zhì)音樂

3. 11.025kHz 采樣庵寞, 用于低品質(zhì)聲音虚汛。

而量化標(biāo)準(zhǔn)一般有8位字長(256階)低品質(zhì)量化 和16位字長(65536階)高品質(zhì)量化。

還有一個(gè)重要參數(shù)就是通道(channel), 一次只采樣一個(gè)聲音波形為單通道皇帮, 一次采樣多個(gè)聲音波形就是多通道卷哩。

所以在語音合成的時(shí)候,產(chǎn)生的數(shù)據(jù)量是 數(shù)據(jù)量=采樣頻率* 量化位數(shù)*聲道數(shù)属拾, 單位是bit/s将谊。 一般聲道數(shù)都假設(shè)為1.。 采樣率和量化位數(shù)都是語音合成里的重要指標(biāo)渐白,也就是設(shè)計(jì)好的神經(jīng)網(wǎng)絡(luò)1秒鐘必須生成的數(shù)據(jù)量尊浓。

語音合成流程

Fig. 2 Two stage text-to-speech synthsis (source [2])??

文本分析(text analysis)

文本分析就是把文字轉(zhuǎn)成類似音標(biāo)的東西。 比如下圖就是一個(gè)文本分析纯衍,用來分析 “PG&E will file schedules on April 20. ” 文本分析主要有四個(gè)步驟栋齿, 文字的規(guī)范化, 語音分析襟诸, 還有韻律分析瓦堵。 下面一一道來。?

Fig. 3 文本分析

文本規(guī)范化 (Text normalization )

文本分析首先是要確認(rèn)單詞和句子的結(jié)束歌亲。 空格會被用來當(dāng)做隔詞符. 句子的結(jié)束一般用標(biāo)點(diǎn)符號來確定菇用, 比如問號和感嘆號 (?O菥尽), 但是句號有的時(shí)候要特別處理惋鸥。 因?yàn)橛行﹩卧~的縮寫也包含句號, 比如 str. "My place on Main Str.? is around the corner". 這些特別情況一般都會采取規(guī)則(rule)的方式過濾掉悍缠。

接下來 是把非文字信息變成對應(yīng)的文字卦绣, 比如句子中里有日期, 電話號碼飞蚓, 或者其他阿拉伯?dāng)?shù)字和符號滤港。 這里就舉個(gè)例子, 比如玷坠, I was born April 14. 就要變成蜗搔, I was born April fourteen.? 這個(gè)過程其實(shí)非常繁瑣,現(xiàn)實(shí)文字中充滿了 縮寫八堡,比如CS,? 拼寫錯(cuò)誤樟凄, 網(wǎng)絡(luò)用語, tmr --> tomorrow. 解決方式還是主要依靠rule based method兄渺, 建立各種各樣的判斷關(guān)系來轉(zhuǎn)變缝龄。

語音分析 (Phonetic analysis)

語音分析就是把每個(gè)單詞中的發(fā)音單詞標(biāo)出來, 比如Fig. 3 中的P, 就對應(yīng)p和iy, 作為發(fā)音。 這個(gè)時(shí)候也很容易發(fā)現(xiàn)叔壤,發(fā)音的音標(biāo)和對應(yīng)的字母 不是一一對應(yīng)的關(guān)系瞎饲,反而需要音標(biāo)去對齊 (allignment)。 這個(gè)對齊問題很經(jīng)典炼绘, 可以用很多機(jī)器學(xué)習(xí)的方法去解決嗅战, 比如Expectation–maximization algorithm.

韻律分析 (Prosody analysis)

韻律分析就是英語里的語音語調(diào), 漢語中的抑揚(yáng)頓挫俺亮。 我們還是以英語為例驮捍, 韻律分析主要包含了: 重音 (Accent),邊界 (boundaries),? 音長 (duration)脚曾,主頻率 (F0).

重音(Accent)就是指哪個(gè)音節(jié)發(fā)生重一點(diǎn)东且。 對于一個(gè)句子或者一個(gè)單詞都有重音。 單詞的重音一般都會標(biāo)出來本讥,英語語法里面有學(xué)過珊泳, 比如banana 這個(gè)單詞, 第二個(gè)音節(jié)就是重音拷沸。 而對于句子而言色查,一樣有的單詞會重音,有的單詞會發(fā)輕音堵漱。 一般有新內(nèi)容的名詞综慎, 動詞, 或者形容詞會做重音處理勤庐。 比如下面的英語句子, surprise 就會被重音了好港, 而句子的重音點(diǎn)也會落到單詞的重音上愉镰, 第二個(gè)音節(jié)rised, 就被重音啦。 英語的重音規(guī)則是一套英語語法钧汹,讀者可以自行百度搜索丈探。

I’m a little surprised to hear it characterized as upbeat.

邊界 (Boundaries) 就是用來判斷聲調(diào)的邊界的。 一般都是一個(gè)短語結(jié)束后拔莱,有個(gè)語調(diào)的邊界碗降。 比如下面的句子, For language, 就有一個(gè)邊界塘秦, 而I 后面也是一個(gè)邊界.

For language, I , the author of the blog, like Chinese.

音長(Duration)就是每個(gè)音節(jié)的發(fā)聲長度讼渊。 這個(gè)通俗易懂。 NLP 里可以假定每個(gè)音節(jié)單詞長度相同都是 100ms, 或者根據(jù)英語語法尊剔, 動詞爪幻, 形容詞之類的去確定。 也可以通過大量的數(shù)據(jù)集去尋找規(guī)律。

主頻率 (F0)就是聲音的主頻率挨稿。? 應(yīng)該說做傅里葉轉(zhuǎn)換后仇轻, 值 (magnitude) 最大的那個(gè)。 也是人耳聽到聲音認(rèn)定的頻率奶甘。一個(gè)成年人的聲音主頻率在 100-300Hz 之間篷店。 這個(gè)值可以用 線性回歸來預(yù)測, 機(jī)器學(xué)習(xí)的方法預(yù)測也可以臭家。一般會認(rèn)為船庇,人的聲音頻率是連續(xù)變化的,而且一個(gè)短語說完頻率是下降趨勢侣监。

文本分析就介紹完了鸭轮,這個(gè)方向比較偏語言學(xué), 傳統(tǒng)上是語言學(xué)家的研究方向橄霉,但是隨著人工智能的興起窃爷,這些feature 已經(jīng)不用人為設(shè)計(jì)了,可以用端到端學(xué)習(xí)的方法來解決姓蜂。 比如谷歌的文章 TACOTRON: TOWARDS END-TO-END SPEECH SYNTHESIS 就解救了我們按厘。

https://arxiv.org/pdf/1703.10135.pdf

聲波生成(waveform synthesis)

這個(gè)部分就比較像我們算法工程師的工作內(nèi)容了。 在未來的博客里钱慢, 會詳細(xì)介紹如何用Wavenet 和WaveRNN 來實(shí)現(xiàn)這一步驟的逮京。 今天這個(gè)博客就是簡介一下算法。

這里說所謂的waveform synthesis 就是用這些 語言特征值(text features)去生成對應(yīng)的聲波束莫,也就是生成前文所說的采樣頻率 和 振幅大欣撩蕖(對應(yīng)的數(shù)字信號)。 這里面主要有兩個(gè)算法览绿。

串接合成(concatenative speech synthesis): 這個(gè)方法呢策严, 就是把記錄下來的音節(jié)拼在一起來組成一句話,在通過調(diào)整語音語調(diào)讓它聽起來自然些饿敲。 比較有名的有雙音節(jié)拼接(Diphone Synthesis) 和單音節(jié)拼接(Unit Selection Synthesis)妻导。這個(gè)方法比較繁瑣, 需要對音節(jié)進(jìn)行對齊(alignment)怀各, 調(diào)整音節(jié)的長短之類的倔韭。

參數(shù)合成 (Parametric Synthesis): 這個(gè)方法呢, 需要的內(nèi)存比較小瓢对,是通過統(tǒng)計(jì)的方法來生成對應(yīng)的聲音寿酌。 模型一般有隱馬爾科夫模型 (HMM),還有最近提出的神經(jīng)網(wǎng)絡(luò)算法Wavenet, WaveRNN.?

對于隱馬爾科夫模型的算法沥曹, 一般都會生成梅爾頻率倒譜系數(shù) (MFCC)份名,這個(gè)是聲音的特征值碟联。 感興趣的可以參考這篇博客 去了解 MFCC。

https://www.cnblogs.com/BaroC/p/4283380.html

對于神經(jīng)網(wǎng)絡(luò)的算法來說僵腺, 一般都是生成256 個(gè) quantized values 基于softmax 的分類器鲤孵, 對應(yīng) 聲音的 256 個(gè)量化值。 WaveRNN 和wavenet 就是用這種方法生成的辰如。

學(xué)習(xí)資料

下面是我學(xué)習(xí)語音合成的一些資料普监, 其中stanford cs224s 是強(qiáng)力推薦的,但是這個(gè)講義講的邏輯不是很清楚琉兜, 要反復(fù)看才會懂凯正。

UCSB Digital Speech Processing Course 課程, 聲音信號處理的基礎(chǔ)。 建議讀一遍豌蟋, 鏈接如下廊散,? https://www.ece.ucsb.edu/Faculty/Rabiner/ece259/

Stanford CS224S http://web.stanford.edu/class/cs224s/

WaveRNN,? https://arxiv.org/pdf/1609.03499.pdf

音頻的數(shù)字化, https://wenku.baidu.com/view/68fbf1a4f61fb7360b4c658b.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梧疲,一起剝皮案震驚了整個(gè)濱河市允睹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幌氮,老刑警劉巖缭受,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異该互,居然都是意外死亡米者,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門宇智,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔓搞,“玉大人,你說我怎么就攤上這事普筹“苊鳎” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵太防,是天一觀的道長。 經(jīng)常有香客問我酸员,道長蜒车,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任幔嗦,我火速辦了婚禮酿愧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邀泉。我一直安慰自己嬉挡,他們只是感情好钝鸽,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庞钢,像睡著了一般拔恰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上基括,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天颜懊,我揣著相機(jī)與錄音,去河邊找鬼风皿。 笑死河爹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桐款。 我是一名探鬼主播咸这,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼魔眨!你這毒婦竟也來了媳维?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤冰沙,失蹤者是張志新(化名)和其女友劉穎侨艾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拓挥,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唠梨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侥啤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片当叭。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盖灸,靈堂內(nèi)的尸體忽然破棺而出蚁鳖,到底是詐尸還是另有隱情,我是刑警寧澤赁炎,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布醉箕,位于F島的核電站,受9級特大地震影響徙垫,放射性物質(zhì)發(fā)生泄漏讥裤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一姻报、第九天 我趴在偏房一處隱蔽的房頂上張望己英。 院中可真熱鬧,春花似錦吴旋、人聲如沸损肛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽治拿。三九已至摩泪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忍啤,已是汗流浹背加勤。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留同波,地道東北人鳄梅。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像未檩,于是被迫代替她去往敵國和親戴尸。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容