語(yǔ)音合成簡(jiǎn)介 Text-to-speech

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

簡(jiǎn)介

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


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

這個(gè)簡(jiǎn)介主要基于這篇論文 “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ǔ)音合成

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

Fig. 1 an example of voice signal.??

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

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

取樣(sampling):在音頻數(shù)字化的過(guò)程,采樣是指一個(gè)固定的頻率對(duì)音頻信號(hào)進(jìn)行采樣, 采樣的頻率越高, 對(duì)應(yīng)的音頻數(shù)據(jù)的保真度就越好。 當(dāng)然, 數(shù)據(jù)量越大,需要的內(nèi)存也就越大。 如果想完全無(wú)損采樣, 需要使用Nyquist sampling frequency, 就是原音頻的頻率2倍。

量化 (quantization): 采樣的信號(hào)都要進(jìn)行量化, 把信號(hào)的幅度變成有限的離散數(shù)值。比如從0 到 1, 只有 四個(gè)量化值可以用0, 0.25, 0.5, 0.75的話, 量化就是選擇最近的量化值來(lái)表示。

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

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

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

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

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

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

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

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

語(yǔ)音合成流程

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

文本分析(text analysis)

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

Fig. 3 文本分析

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

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

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

語(yǔ)音分析 (Phonetic analysis)

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

韻律分析 (Prosody analysis)

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

重音(Accent)就是指哪個(gè)音節(jié)發(fā)生重一點(diǎn)。 對(duì)于一個(gè)句子或者一個(gè)單詞都有重音。 單詞的重音一般都會(huì)標(biāo)出來(lái),英語(yǔ)語(yǔ)法里面有學(xué)過(guò), 比如banana 這個(gè)單詞, 第二個(gè)音節(jié)就是重音。 而對(duì)于句子而言,一樣有的單詞會(huì)重音,有的單詞會(huì)發(fā)輕音。 一般有新內(nèi)容的名詞, 動(dòng)詞, 或者形容詞會(huì)做重音處理。 比如下面的英語(yǔ)句子, surprise 就會(huì)被重音了, 而句子的重音點(diǎn)也會(huì)落到單詞的重音上, 第二個(gè)音節(jié)rised, 就被重音啦。 英語(yǔ)的重音規(guī)則是一套英語(yǔ)語(yǔ)法,讀者可以自行百度搜索。

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

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

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

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

主頻率 (F0)就是聲音的主頻率。? 應(yīng)該說(shuō)做傅里葉轉(zhuǎn)換后, 值 (magnitude) 最大的那個(gè)。 也是人耳聽(tīng)到聲音認(rèn)定的頻率。一個(gè)成年人的聲音主頻率在 100-300Hz 之間。 這個(gè)值可以用 線性回歸來(lái)預(yù)測(cè), 機(jī)器學(xué)習(xí)的方法預(yù)測(cè)也可以。一般會(huì)認(rèn)為,人的聲音頻率是連續(xù)變化的,而且一個(gè)短語(yǔ)說(shuō)完頻率是下降趨勢(shì)。

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

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

聲波生成(waveform synthesis)

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

這里說(shuō)所謂的waveform synthesis 就是用這些 語(yǔ)言特征值(text features)去生成對(duì)應(yīng)的聲波,也就是生成前文所說(shuō)的采樣頻率 和 振幅大?。▽?duì)應(yīng)的數(shù)字信號(hào))。 這里面主要有兩個(gè)算法。

串接合成(concatenative speech synthesis): 這個(gè)方法呢, 就是把記錄下來(lái)的音節(jié)拼在一起來(lái)組成一句話,在通過(guò)調(diào)整語(yǔ)音語(yǔ)調(diào)讓它聽(tīng)起來(lái)自然些。 比較有名的有雙音節(jié)拼接(Diphone Synthesis) 和單音節(jié)拼接(Unit Selection Synthesis)。這個(gè)方法比較繁瑣, 需要對(duì)音節(jié)進(jìn)行對(duì)齊(alignment), 調(diào)整音節(jié)的長(zhǎng)短之類的。

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

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

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

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

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

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

UCSB Digital Speech Processing Course 課程, 聲音信號(hào)處理的基礎(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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容