聲明:轉(zhuǎn)載請(qǐng)聲明作者,并添加原文鏈接。
簡(jiǎn)介
這篇博客主要解讀WaveNet 語(yǔ)音識(shí)別/合成算法泼疑。 這篇論文另辟蹊徑血公, 主要使用dilated casual CNN? 而不是LSTM 去實(shí)現(xiàn)語(yǔ)音算法, 非常值得學(xué)習(xí)睦霎。 主要內(nèi)容可以總結(jié)如下
1.? ? WaveNet 通用模型介紹梢卸, 不只是針對(duì)于語(yǔ)音模型
2.? ? WaveNet 實(shí)驗(yàn)結(jié)果介紹
3.? ? 實(shí)戰(zhàn)tensorflow WaveNet 的實(shí)驗(yàn)過(guò)程, 實(shí)戰(zhàn)選擇的是 WaveNet ASR. 主要原因是ASR 的標(biāo)注比較容易判斷, 而語(yǔ)音合成text-to-speech很不好判斷副女, 主要通過(guò)人工打分蛤高。
本文實(shí)戰(zhàn)代碼是 https://github.com/buriburisuri/speech-to-text-wavenet, WaveNet 論文是https://arxiv.org/pdf/1609.03499.pdf
WaveNet 模型
通用WaveNet
這里dilated casual convolution 翻譯成帶洞因果卷積。帶洞對(duì)應(yīng)的就是dilated,? 就是和普通卷積步長(zhǎng)stride 不同,? stride會(huì)更大一些戴陡, 這樣關(guān)注的范圍 (receptive field)就變大了. casual 對(duì)應(yīng)的就是因果塞绿,主要就是不要用未來(lái)的輸出/結(jié)果做當(dāng)前的輸入。? 這個(gè)方法對(duì)比RNN, 好處就是可以并行計(jì)算恤批, 提高預(yù)測(cè)訓(xùn)練速度异吻。 但是這個(gè)方法還是有他本身的局限性。 在測(cè)試時(shí)喜庞,需要使用自回歸 當(dāng)前的輸出語(yǔ)言當(dāng)做輸入進(jìn)行下一時(shí)刻的計(jì)算 (auto regressive) 限制了他的速度诀浪。下面這個(gè)圖, Fig. 2 解釋了自回歸的特點(diǎn)延都, 即當(dāng)前的輸出會(huì)當(dāng)做下一時(shí)刻的輸入進(jìn)行計(jì)算笋妥。
Fig. 3 這里介紹了多層的帶洞卷積wavenet. 這樣做的目的就是提高感受視野(receptive field). 比如Fig. 3的output, 就是基于16 個(gè)Input 產(chǎn)生的, 這樣感受視野會(huì)遠(yuǎn)遠(yuǎn)大于dilation =1 的多層網(wǎng)絡(luò)窄潭。 WaveNet 的文章里用的dilation 是1, 2, 4, …, 512, 1, 2, 4, …, 512, 1, 2, 4, …, 512春宣, 這個(gè)相當(dāng)于有30層帶洞卷積, 能關(guān)注的視野也就很大了嫉你。 具體計(jì)算月帝,1,2,4,...512 需要有1024個(gè)輸入。 那么1024*3/(16*1000)幽污, 就能關(guān)注192ms的信息了嚷辅, 對(duì)于16kHz 的聲音信號(hào)。
WaveNet的整體結(jié)構(gòu)就如Fig. 4 所示距误, 其中包含了殘差連接簸搞,和gated activation unit.這個(gè)就是圖中的兩路, tanh 和sigmoid 的計(jì)算准潭。 其他也沒(méi)什么復(fù)雜的啦趁俊。
Conditional WaveNet
前面講的都是WaveNet 的通用屬性,還沒(méi)涉及到text-to-speech 或者speech recognition.? 文章這里加了個(gè)h, 就是用來(lái)加一些依賴(lài)關(guān)系刑然。 比如添加聲音ID, 音樂(lè)器械的信息之類(lèi)的寺擂。 對(duì)于text-to-speech, h 的信息就應(yīng)該是 語(yǔ)音/語(yǔ)言特征值了。這里要說(shuō)下泼掠, 由于使用了提前算好的特征值怔软, WaveNet不是端到端的訓(xùn)練。
WaveNet 實(shí)驗(yàn)結(jié)果
WaveNet 這里的實(shí)驗(yàn)結(jié)果是主觀測(cè)試择镇, 判斷生成的生意是否聽(tīng)起來(lái)自然挡逼。打分如下。
1: Bad, 2: Poor, 3: Fair, 4: Good, 5: Excellent
所以也就是算所有人打分的平均值啦腻豌。
實(shí)戰(zhàn)tensorflow WaveNet
使用的代碼再次強(qiáng)調(diào) https://github.com/buriburisuri/speech-to-text-wavenet
模型架構(gòu)
Fig. 5 WaveNet-ASR
這里使用的是MFCC feature. MFCC? 如果不了解家坎, 讀者可以去學(xué)這個(gè)課叹谁。
https://nlp.stanford.edu/courses/lsa352/lsa352.lec6.6up.pdf
CTC loss 在我以前的博客中有講解過(guò)。
整體的架構(gòu) 就如Table, Layer 1, 2 就是front layer, 主要是全連接層+bn, 接下來(lái)Layer3-10 就是一個(gè)block乘盖, 這樣的block 有 15個(gè)。 這些block 的區(qū)別就是dilation 不同憔涉。 dialtion 會(huì)從1订框, 2, 4, 8, 16 這樣改變,重復(fù)三次兜叨, 就是15個(gè)block.
數(shù)據(jù)集
這個(gè)實(shí)驗(yàn)使用的數(shù)據(jù)集是
Libir speech http://www.openslr.org/12/http://www.openslr.org/12/
這個(gè)實(shí)驗(yàn)我跑了一會(huì)就停止跑了穿扳, 需要的計(jì)算資源太大了, 跑出結(jié)果需要三四天国旷。