本文综述近年来深度学习用于语音合成的一些方法。
在自回归生成模型在图像和文本领域广泛应用的时候,WaveNet [4] 尝试将这些思想应用于语音领域。仿照PixelRNN (van den Oord et al., 2016)图像生成的做法, WaveNet依据之前采样点来生成下一个采样点。生成下一个采样点的模型为CNN结构。为了生成指定说话人的声音,以及生成指定文本的声音,引入了全局条件和局部条件,来控制合成内容。为了扩大感受野,带洞卷积,使filter的按照指数扩张。
WaveNet存在的问题是,1) 每次预测一个采样点,速度太慢;2)如果用于TTS,那初始采样点选择将会很重要;3)以及需要文本前端的支持,前端分析出错,将直接影响合成效果。
WaveNet之后,百度第一代Deep Voice出现了。为了解决速度慢这个问题,我们看看百度在Deep Voice第一代 [1] 是怎么做的。
百度deep voice的做法是仿照传统参数合成的各个步骤,将每一阶段用一个神经网络模型来代替。那整个模型就是一个大的神经网络。拆开成多个子模块独立进行好处是:1) 每一阶段为一个独立模型,单独训练更见容易;2) 调试方便,如果合成出错,单独调试某个模块就可以;3) 可以方便人为控制,如果某个模块输出错误,还可以通过人工的方式纠正;4) 每一模块都是一个神经网络,这样不需要太多人工特征,让模型自己学,减少专家知识。
和目前(截至百度发表此论文)已有论文,主要是WaveNet, SampleRNN [5], Char2Wav [6]相比,百度优势如下:
虽然百度用的特征少,但训练数据中也需要一些标注,包括:重音、基频(用Praat工具产生)。
Deep voice将语音合成分成5各部分进行,分别是:手写体转音素(G2P)、音频切分、音素时长预测、基频率预测、声学模型,下面我们按照传统参数合成分工方式,看看其每一模块原理:
参数合成前端往往是分析文本全上下文标签的,比如WaveNet使用的局部条件[4],使用了HTS full format labels(Zen, 2006);如果去看看就知道有多复杂了,对每一个音素,一共需要知道53组特征,包括词性、是否发音、是否重读、元音、音节数量等等。
百度Deep voice的前端相对简单很多,只需要知道音素、重音标注、音素发音时长、基频F0。简单的好处是,容易快速适配到新数据集。为了得到上述四组特征,使用了下列几个模型:
G2P目标是得到音素。手写体转音素使用的是encoder-decoder结构,基于的是Yao & Zweig (2015)那篇文章。
音频切分目标是得到音素和音频的对齐信息,知道每句话中每个音素在对应音频中的起点和终点。使用的方法是语音识别Deep Speech 2中的对齐方法(Amodei et al., 2015)。这些对齐信息只是用来训练时长模型,inference阶段不需要使用。为了让对齐更加精细,使用类似bigram的组合方式。
时长预测和基频预测模型为同一个模型多任务预测方式。模型输入为带有重音标注的音素序列,输出为时长、是否发音概率、基频F0。
得到这些特征之后,全部输入到声学模型中合成语音。
WaveNet合成很慢,百度改进了一下,达到400倍加速。前端得到的特征作为WaveNet的局部条件,以合成指定文本。百度对WaveNet改进方向主要是:改变网络层数、残差通道数、用矩阵乘代替上采样卷积、CPU优化、GPU优化等。
无论语音合成前端或者参数合成各个阶段,都需要大量领域知识,有许多设计技巧。Tacotron [7]探索了一种端到端的方式,输入文本,直接输出语音。使用端到端语音合成好处如下:
一方面,Tacotron是一个生成式模型,截至Tacotron发布,目前已有的使用生成式模型于TTS的论文有:WaveNet和DeepVoice,前者需要文本分析前端,后者整体上看是端到端,但每一部分单独训练,并非端到端训练。
另一方面,Tacotron是一个端到端模型,截至Tacotron发布,目前已有的端到端模型有:Wang [8]、Char2Wav [6]。但是,Wang需要一个预训练的HMM模型用于对齐,模型预测的是声学参数,仍需要vocoder合成语音;Char2Wav可以直接输入字符进行合成,但是仍是预测出声学参数,需要使用vococder(文中使用了SampleRNN [5] 作为vocoder)进行合成语音。
可以认为Tacotron是最端到端语音合成的了,直接依据文本合成出原始频谱。其模型结构为encoder-decoder with attention 架构,是seq2seq常见模型。
Encoder目标时编码输入文本。结构:embedding + pre-net + CBHG
其中,pre-net为两层的NN,为瓶颈层,并使用dropout;CBHG结构为:convolution bank + highway networks + B-GRU
Decoder目标是使用注意力机制的RNN,再加输入和输出的一些变换。
Tacotron发布后不久,百度的第二代Deep Voice [3]诞生了。Deep Voice 2和其前代相比最大变化是:1) 将Griffin-Lim替换成了WaveNet模型,2) 引入说话人向量,使Tacotron支持多说话人合成。
深度学习方法在语音合成上已经有大量应用(例如,时长预测、基频预测、声学建模、自回归语音生成 [4, 5]),但大多是单一说话人合成。对于多说话人合成,传统方法是先构建一个综合语音模型,然后再适配到不同的说话人。这一综合语音模型常用多说话人语料来训练,模型采用HMM或DNN,用i-vector、不同说话人输出层等方式来区别不同说话人,作为模型额外输入。
Deep voice 2可以合成多说话人,同时,不需要i-vector这种特征,而是模型自己学习说话人向量。前者好处不言而喻。后者好处是:1) 模型自己学到的说话人向量比i-vector这种特征更好;2) 不要说话人输出层,可以减少参数量,减少训练数据。
上面是宏观上看deep voice 2,下面我们具体看看其模型结构。从内容布局上,Deep Voice 2论文结构不是很紧密,做的工作比较多,这些工作或许足够拆开成3篇论文了。我们将按照以下三个部分分别介绍:1)对上代改进;2)Tacotron模型增加多说话人支持;3) Deep Voice模型增加多说话人支持。
为什么要这样做?下面我们对上述每一点推测以下这样做的动机:
这一部分是说如何改进Tacotron使其支持多说话人合成,这在Tacotron论文里其实也有提到。Deep Voice 2的做法是:千方百计加入说话人信息。说话人向量加入方式有四种模式:1) 说话人向量FC变换;2) RNN初始状态;3) 和输入做拼接;4) 激活函数作用前做点乘。
具体而言,在encoder、decoder、vocoder三处加入了说话人信息,注意,并没有在post processing net中加入。说话人信息,是自动从语音数据中学习一个16维的向量。让后将这个向量做一些变换,加入到原来的Tacotron模型中。
原始Tacotron使用Griffin-Lim算法将频谱转为幅度,百度使用WaveNet替换掉了Griffin-Lim。论文中给出的原因是:频谱中有少量噪音,将会导致Griffin-Lim算法产生的语音存在可以察觉的音质下降。因此,为了产生更好的音质,用WaveNet替代Griffin-Lim。
需要改变Deep Voice 2模型中四大子结构,使其支持多说话人合成,其中G2P不用变,因为G2P和说话人没关系:
从单一说话人合成看,联合训练改成独立训练,各模块任务更加明确,但同时模型数量变多了,增加复杂性。
多说话人合成,相较于单一说话人合成,Deep Voice模型改动多,4/5都需变。
文中提到用VCTK的108人训练多说话人合成,合成的这些人的声音和原始声音相似性如何,不得而知。用分类正确率虽然可以衡量合成的多说话人声音区分度,但也难以说明和原始声音的相似程度。
用一个模型来合成多个说话人声音,而非每个说话人训一个模型,好处是找到不同人发音时的共同特点,共同的部分使用权值共享,不同的地方再单独定制;这样应该可以减少每个人语音数据量,取长补短,不失为未来合成的一个方向;然而究竟不同说话人间哪些参数应该共享,哪些参数因人而异,至关重要,本文留给了未来。
在适配新说话人时,本文总结部分提到固定模型参数,只训练说话人向量。如果可以,或许可以合成任何人声音。然而,只训练说话人向量可能不够,还需训练和说话人向量相关的别的权值,本质还是分清可共享参数和不可共享参数。
自学习说话人向量和i-vector作为多说话向量的区别,本文没有探讨。
一言以蔽之: Multi-speaker speech synthesis based on convolutional sequence-to-sequence model
卷积式序列到序列结构采用Facebook 2017 ICML论文模型。
(注意:纯属个人瞎猜,不代表原作任何想法)
WaveNet提出基于CNN的自回归生成式模型用于语音合成,将说话人信息、文本信息通过局部条件、全局条件的方式加入CNN各层中,每一预测下一采样点。
Tacotron使用端到端的方式进行语音合成,采用encoder-decoder的架构,用注意力机制建立起encoder和decoder的联系。decoder主要采用RNN结构来预测下一帧。
那么,能不能通过融合上述两篇文章的思想,提出一种新的模型结构。答案是肯定的,借鉴WaveNet的CNN结构,借鉴Tacotron每次预测一帧的思路,借鉴Tacotron encoder-decoder端到端的想法,于是诞生了Deep Voice 3。
既然都叫Deep Voice,那第三代和前两代有何区别和连系呢——没什么关系,除了和第二代中的多说话人思想延续了下了。Deep Voice 一代和二代主要思想是仿照参数合成步骤,每一阶段用一个NN替代。二代和一代相比,引入说话人向量,实现一个模型合成多个说话人声音。第三代则“颠覆"性的,走上了端到端的道路。
本文利用Facebook fairseq卷积encoder-decoder的框架,和Tacotron模型的思想,应用于端到端语音合成。然后比较了众多vocoder性能,发现还是从一代就开始用的WaveNet最好。
和Deep Voice 3参考Facebook那篇卷积seq2seq一样,日本Tachibana也想到了这种移花接木之术。于是有了论文[9]。
[1] Sercan Ömer Arik, Mike Chrzanowski, Adam Coates, Gregory Frederick Diamos, Andrew Gibiansky, Yongguo Kang, Xian Li, John Miller, Andrew Y. Ng, Jonathan Raiman, Shubho Sengupta, Mohammad Shoeybi: Deep Voice: Real-time Neural Text-to-Speech. ICML 2017: 195-204
[2] Wei Ping, Kainan Peng, Andrew Gibiansky, Sercan O.Arık, Ajay Kannan, Sharan Naran: DEEP VOICE 3: 2000-SPEAKER NEURAL TEXT-TO-SPEECH. CoRR abs/1710.07654 (2017)
[3] Sercan Ömer Arik, Gregory F. Diamos, Andrew Gibiansky, John Miller, Kainan Peng, Wei Ping, Jonathan Raiman, Yanqi Zhou: Deep Voice 2: Multi-Speaker Neural Text-to-Speech. CoRR abs/1705.08947 (2017)
[4] Aäron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew W. Senior, Koray Kavukcuoglu: WaveNet: A Generative Model for Raw Audio. CoRR abs/1609.03499 (2016)
[5] Soroush Mehri, Kundan Kumar, Ishaan Gulrajani, Rithesh Kumar, Shubham Jain, Jose Sotelo, Aaron C. Courville, Yoshua Bengio: SampleRNN: An Unconditional End-to-End Neural Audio Generation Model. CoRR abs/1612.07837 (2016)
[6] Sotelo, J., Mehri, S., Kumar, K., Santos, J. F., Kastner, K., Courville, A., & Bengio, Y. (2017). Char2Wav: End-to-end speech synthesis.
[7] Yuxuan Wang, R. J. Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc V. Le, Yannis Agiomyrgiannakis, Rob Clark, Rif A. Saurous: Tacotron: A Fully End-to-End Text-To-Speech Synthesis Model. CoRR abs/1703.10135 (2017)
[8] Wang, W., Xu, S., & Xu, B. (2016). First Step Towards End-to-End Parametric TTS Synthesis: Generating Spectral Parameters with Neural Attention. INTERSPEECH.
[9] Tachibana, H., Uenoyama, K., & Aihara, S. (2017). Efficiently Trainable Text-to-Speech System Based on Deep Convolutional Networks with Guided Attention. arXiv preprint arXiv:1710.08969.
仅为个人浅薄理解,或存在诸多纰漏,欢迎批评指正。
转自:https://gist.github.com/candlewill/aeaca14975d8ba4417f6a99ea91f196b
相关内容:
https://www.cnblogs.com/mengnan/p/9474111.html