语音合成任务并不需要像训练语音识别模型那样上万小时的有标注数据。数据集平均一个人的声音有 20 多个小时,就能保证合成出来的声音品质非常高。但是,20多个小时的人声是无法保证词汇量的。VCTK 数据集词汇大概在 5000 左右。就算是 Nancy 词汇量也不到 2 万。目前最大的公开数据集像 LibriTTS 的词汇量也才不到 10 万。一般英文词典的数量,都是十万以上。模型虽然能猜测英文的单词的音素。但是它看过的词汇不够,没法准确估计出每个词应有的发音方式。所以它在看到生僻词或新词时,会念错。使用者会对此难以接受。我们要怎么办呢?
一个解决方法是我们不把字符当作输入,而是找一个质量比较高的词表。这个词表有文字和音素之间对应的关系。我们先把单词通过词典转换为音素,再把音素喂给 Tacotron 问题似乎就能解决了。但是使用词表始终是有限的。它无法应对没有在词表中出现的词,比如说 新冠状病毒 nCoV。对于新词没有发音映射,世上的新词又太多了,而且每天都在更新。一个简单做法是把字符和音素一起输入给 Tacotron,训练的时候,随机地把某一些词汇用字符来表示,让 Tacotron 能够根据学到的字符和音素的对应关系来预测未登录词的音素发音。当然,另一种解决方法是让智能多一点"人工",如果模型预测的发音错了,我们也可以通过更新词表来解决这个问题。
句法信息对一个句子的发音也有重要的贡献。比如它能决定一个句子的短句和语气。如图1所示例子,these two boys 可以是一个短语,eating apples 可以是一个短语。通常我们会把一个完整意义的短语连读,而在分隔的短语之间,留有气息。对于一些歧义比较多的语言而言,比如中文,句法信息对断句的影响可能会造成你对某句话完全不同的理解。这和中文分词中的歧义是一样的。比如「欢迎新老师生前来就餐」可以被划分为:欢迎 / 新老师 / 生前 / 来就餐
欢迎 / 新老师生 / 前来 / 就餐
停顿的位置稍微不一样,意思就天差地别了。如果我们能把这些信息提前告诉给 Tacotron。
也有人把 BERT 的嵌入当作是 Tacotron 的输入来做语音合成。其中的直觉是,BERT 利用自注意力机制,它的每一个字嵌入都融合了上下文信息,当然也融合了语义句法信息。这些信息对语音合成是有帮助的。
Attention 对于 Tacotron 来说是非常重要的。训练好的 Tacotron,它的注意力权重矩阵可视化出来是一条集中的对角线。既然这就是我们想要的,何必之间把这个信息加入到训练的过程中呢。这样模型就会更有意识地去学出这样好的注意力权重矩阵。这便是 Guided Attention。原来的 Tacotron 损失是计算模型输出与目标语音越接近越好。而 Guided Attention 则是在原来的损失上,再加上一项对注意力的正则化。我们限定注意力权重矩阵得分不要超过如图中标黑的指定的区域。若超过了,在训练的时候就会有一个 penalty,计算的损失就会比较大,反向传播就需要更新更多的权重来调整模型学到的注意力权重集中在指定区域。
Guided Attention 只是一个指导,而不是强制学到的注意力权重就是要在对角线的地方。还有一些其它方法是会给非常强的限制。Monotonic Attention 会要求注意力权重一定要从左往右。还有在 ASR 中讲到过的 Location-aware attention。可以参照我的 过往笔记。Tacotron 的第二个版本用的就是这个 Location-aware attention。
Attention 还有许多值得研究的地方。ICASSP 2020 的这篇文章有分析注意力对语音合成有多么重要。这篇论文做了一个有趣的实验。它只拿 LJ Speech 数据集中小于 10s 的声音训练。但测试的时候,故意让机器去念哈利波特的很长的超过 10s 的句子。结果发现,如果 Attention 选的不好,比如用 Content-Based 都是会训练坏掉。衡量指标的计算方式为,用合成的声音,喂给现有的语言识别系统转换为文字后,对照目标的文稿看看有多少词汇是错的。这个错的差异越大,代表语音合成系统表现越糟。实验表明,用 GMMv2b 或 DCA的注意力结果就会好。可以点开链接看具体论文细节。注意力机制依然是一个非常值得研究的方向。
百度的第三代 DeepVoice 还提出了一些模型上的小技巧。既然我们希望解码器的注意力权重矩阵是成对角线的,何不直接在推断的时候,把非对角线的一个区域直接设置为0呢?结果发现这个技巧是很有用的。而且不需要改变训练过程。此外,还有一个神奇的技巧是,它把输入注意力的 Query (decoder 产生) 和 Keys (encoder 产生) 都加上了位置编码信息。这样可以加强注意力的计算。而且 Positional Encoding 是由 Speaker 的嵌入信息来调整操控的。这个 Speaker 嵌入包含了说话者的音色、感情和速度等信息。直觉上看,说话者的速度信息是会影响到位置编码的。
Fast Speech 和 Duration Informed Attention 是不同团队在同一时间提出的类似的想法。一般输入序列和输出序列是不同长度的任务最适合用 Seq2Seq 框架来解。而这两篇论文用的却不是 Seq2Seq。它在编码器和解码器之间,用的是一个预测每个单词要念多长的模型 Duration。这个 Duration 模块会输入一个单词嵌入,输出每个字符要说的长度。比如输出是2,它就要把当前的字符嵌入复制两次。我们期待解码器的输入与声学特征的长度是一样的,而通常编码器的输入都会比它短很多。所以 Duration 就需要学到怎么把字符嵌入拉长到刚好合适。这个思路是没有错的,但问题在要如何训练 Duration 这个模型呢?它输出是离散的数字。这里有不能微分的地方。论文的做法是推断的时候,让 Duration 的输出取拉长短的序列。但训练的时候,Duration 会用一个正确答案来训练。这个正确答案可以通过语音识别系统做 Alignment 来获得。从编码器到 Duration,计算损失的是这个正确答案。而解码器的输入不是 Duration 的输出,也是正确答案。
实验结果发现,FastSpeech 使用了 Duration 模块的好处是,它不会像 Tacotron 或 基于 Transformer 的 TTS 那样,有一些发音上的瑕疵,比如结巴,跳过词汇没念,念错词汇的情况。直觉上看,FastSpeech 在 Duration 上做了一个更大的限制,来避开这些错误。其实 Tacotron 也没有论文中说的表现那么差。之所以错误这么多,是因为测试的句子是一些特殊的案例。比如很多相同的单词,或念一段网址。由于 Tacotron 训练数据中缺乏这类的语料,所以说起来比较有难度。
TTS 和 ASR 是两个互为表里的任务。它们可以串在一起,变成一个循环,做 Dual Learning,互相去增强彼此的能力。这便是 Speech Chain。
我们如何让二者互相增强呢?我们先找到两个预训练好的 TTS 和 ASR 系统。ASR 系统可以把声音转成文字,再丢给 TTS 合成语音,让这段合成的语音与初始的声音越接近越好。我们也可以把文字丢给 TTS,让它输出语音。再把语音喂给 ASR 识别出文字,让这些文字与初始的文字越接近越好。
Dual Learning 一个好处是可以减少对 文字-语音数据对的依赖。如果局限于数据对去做训练,TTS 和 ASR 学到的东西都有限。因为没有机会接触未成对的海量数据。而使用了 Dual Learning 之后。只需要有文字或者有语音就可以进行训练。
Controllable TTS
一段声音信号中,它的组成其实包含了好几个维度,比如说的内容,说的方式,以及说的人的音色。过往的语音合成只关注说的内容正确,而这次我们希望能按照我们的方式去控制合成的语音,以不同的方式、不同的音色去说。
指定某个人去说一段话的技术叫声音克隆。现实中我们缺乏某个歌手高质量的语音数据去训练TTS 系统。这里往往会使用音色迁移技术。此外,同一句话说的方式是可以抑扬顿挫 (Prosody) 的,它包含了说的语调,重音,停顿和韵律等。ICML 18 年的一篇论文从反面去定义什么是抑扬顿挫。它不是内容,不是说话者的声纹,也不是环境的混响。
对于可控的 TTS,我们希望给定一段文字,再给定一段参考的声音(不一定要说文字内容),我们希望模型能够生成出语气、停顿和参考声音相仿的合成语音。对于人声克隆,可以用音色迁移技术。我们会给 VC 模型两段声音,其中一段会抽取出内容信息,另外一段声音会抽出说话者的特征,要求模型输出的声音能在内容和音色上与指定的一致。这两个模型其实非常相像。都是域的迁移。
训练时,就是让输出的声音与 我们标注的 Ground Truth 越接近越好。这两个模型看起来就像是 AutoEncoder,不同在,它多了一个文字的 Condition。为了防止模型学到直接把输入的语音复制,输出模型来最小化损失,我们希望用一个模型来提取输入语音的声纹特征。
这个声纹特征提取器是预训练好的,且固定参数不参与权重更新。我们希望最小化输入语音和条件输出后的语音的重构误差。这样就能保证我们用非常少量的人声语料做到声纹迁移。
GST 为 Global Styple Tokens 的缩写,GST-Tacontron 是可以做条件语音生成的模型。我们会先用一个 Encoder 来把文字变成嵌入,参考语音则会通过一个特征提取器变成音色的嵌入。这个特征提取器在这里是可以端对端训练的。我们把这两个嵌入相加或拼接起来,做 Attention。之后就和原版的 Tacontron 对特征向量解码。
同样为了防止模型复制输入语音输出,GST-Tacontron 做了特殊的设计,让输入的语音内容难以通过特征提取器传递给 Tacontron 解码。Encoder 会把参考语音编码成一个向量。这个向量不会直接当做输出,而是当做注意力权重。Vector Set 是特征提取器的参数。我们把二者加权求和,才得到特征提取器的最终输出。编码器只能够通过操控注意力的权重,这样就很难把内容信息直接带出来。更神奇的是,这些学到的 Vector set 每个维度向量对应了说话的每一种方式。如果你把它对应的 注意力权重调高,声音就会往相应维度风格变化,即某种抑扬顿挫的元素会被改变。
举例来说,某些 Style Vector 对应了说话声音的高低,有些则对应了说话的语速。
还有一种防止模型直接复制输入参考语音的方法是,我们采用二阶段训练。第二阶段会用一个ASR 来把输出合成语音做语音识别,然后最小化模型识别的文字和输入文字的误差。此外,我们也可以用 attention consistency 来解决这个问题。假设 TTS 和 ASR 的模型都是 Seq2Seq 模型。对于 TTS 的注意力而言,输入的字母会对应它产生的声音信号。我们期待 ASR 的注意力在看到同一段声音的时候,应该也要产生相同的字母。即让两个注意力权重矩阵保持一致。
最后总结下关于 GST-Tacontron 补充几个问题:
如何知道 GST-Tacontron 学到的不是 Speaker Identity,而是 Prosody 呢?
因为 GST 的数据集中只有一个说话人,所以不会有不同说话人的差异,只有抑扬顿挫的差异。如果我们想做得更好一点,我们需要把 Speaker Identity 和 Prosody 再做特征分离。在语音数据集中,我们需要知道哪些句子是同一个人说的。从这些句子中,我们会抽出某些共同的 Style Vector。除掉这些共同的特征后剩下的就会是表征 Prosody 信息的向量。
GST-Tacontron 只用一个向量来表征说话的风格,这是否足够表征抑扬顿挫信息呢?
一个向量的表征能力有限。这未必是一个好的解决思路。我们需要实验研究,说话风格能否用一个向量来表示。会不会太粗糙了,有些信息损失,没有表示到。因此有些做可控 TTS 的模型会考虑用一排向量,数量为输入序列的长度。这样每一小段声音信号,都有一个向量表征。或许这样才能真正地 Control 一个句子的 Prosody。这是一个尚待研究的问题。
视频见(需要梯子):https://www.youtube.com/watch?v=Eau1Fr2x86Y&feature=youtu.be
Reference
[Wang, et al., INTERSPEECH’17] Yuxuan Wang, R.J. Skerry-Ryan, Daisy Stanton, Yonghui Wu, Ron J. Weiss, Navdeep Jaitly, Zongheng Yang, Ying Xiao, Zhifeng Chen, Samy Bengio, Quoc Le, Yannis Agiomyrgiannakis, Rob Clark, Rif A. Saurous, Tacotron: Towards End-to-End Speech Synthesis, INTERSPEECH, 2017
[Shen, et al., ICASSP’18] Jonathan Shen, Ruoming Pang, Ron J. Weiss, Mike Schuster, Navdeep Jaitly, Zongheng Yang, Zhifeng Chen, Yu Zhang, Yuxuan Wang, RJ Skerry-Ryan, Rif A. Saurous, Yannis Agiomyrgiannakis, Yonghui Wu, Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions, ICASSP, 2018
[Wang, et al., INTERSPEECH’16] Wenfu Wang, Shuang Xu, Bo Xu, First Step Towards End-to-end Parametric TTS Synthesis: Generating Spectral Parameters with Neural Attention, INTERSPEECH, 2016
[Sotelo, et al., ICLR workshop’17] Jose Sotelo, Soroush Mehri, Kundan Kumar, Joao Felipe Santos, Kyle Kastner, Aaron Courville, Yoshua Bengio, Char2Wav: End-to-End Speech Synthesis, ICLR workshop, 2017
[Taylor, et al., INTERSPEECH’19] Jason Taylor, Korin Richmond, Analysis of Pronunciation Learning in End-to-End Speech Synthesis, INTERSPEECH, 2019
[Hayashi, et al., INTERSPEECH’19] Tomoki Hayashi, Shinji Watanabe, Tomoki Toda, Kazuya Takeda, Shubham Toshniwal, Karen Livescu, Pre-trained Text Embeddings for Enhanced Text-to-Speech Synthesis, INTERSPEECH, 2019
[Zhang, et al., arXiv’19] Liqiang Zhang, Chengzhu Yu, Heng Lu, Chao Weng, Yusong Wu, Xiang Xie, Zijin Li, Dong Yu, Learning Singing From Speech, arXiv, 2019
[Guo, et al., INTERSPEECH’19] Haohan Guo, Frank K. Soong, Lei He, Lei Xie, Exploiting Syntactic Features in a Parsed Tree to Improve End-to-End TTS, INTERSPEECH, 2019
[Wang, et al., ICML’18] Yuxuan Wang, Daisy Stanton, Yu Zhang, RJ Skerry- Ryan, Eric Battenberg, Joel Shor, Ying Xiao, Fei Ren, Ye Jia, Rif A. Saurous, Style Tokens: Unsupervised Style Modeling, Control and Transfer in End-to-End Speech Synthesis, ICML, 2018
[Skerry-Ryan, et al., ICML’18] RJ Skerry-Ryan, Eric Battenberg, Ying Xiao, Yuxuan Wang, Daisy Stanton, Joel Shor, Ron J. Weiss, Rob Clark, Rif A. Saurous, Towards End-to-End Prosody Transfer for Expressive Speech Synthesis with Tacotron, ICML, 2018
[Arik, et al., ICML’17] Sercan O. Arik, Mike Chrzanowski, Adam Coates, Gregory Diamos, Andrew Gibiansky, Yongguo Kang, Xian Li, John Miller, Andrew Ng, Jonathan Raiman, Shubho Sengupta, Mohammad Shoeybi, Deep Voice: Real-time Neural Text-to-Speech, ICML, 2017
[Ping, et al., ICLR’18] Wei Ping, Kainan Peng, Andrew Gibiansky, Sercan O. Arik, Ajay Kannan, Sharan Narang, Jonathan Raiman, John Miller, Deep Voice 3: Scaling Text-to-Speech with Convolutional Sequence Learning, ICLR, 2018
[Ren, et al., NeurIPS’19] Yi Ren, Yangjun Ruan, Xu Tan, Tao Qin, Sheng Zhao, Zhou Zhao, Tie-Yan Liu, FastSpeech: Fast, Robust and Controllable Text to Speech, NeurIPS, 2019
[Yu, et al, arXiv’19] Chengzhu Yu, Heng Lu, Na Hu, Meng Yu, Chao Weng, Kun Xu, Peng Liu, Deyi Tuo, Shiyin Kang, Guangzhi Lei, Dan Su, Dong Yu, DurIAN: Duration Informed Attention Network For Multimodal Synthesis, arXiv, 2019
[Raffel,et al., ICML’17] Colin Raffel, Minh-Thang Luong, Peter J. Liu, Ron J. Weiss, Douglas Eck, Online and Linear-Time Attention by Enforcing Monotonic Alignments, ICML, 2017
[Tachibana, et al., ICASSP’18] Hideyuki Tachibana, Katsuya Uenoyama, Shunsuke Aihara, Efficiently Trainable Text-to-Speech System Based on Deep Convolutional Networks with Guided Attention, ICASSP, 2018
[Jia, et al., NeurIPS’18] Ye Jia, Yu Zhang,Ron J. Weiss, Quan Wang, Jonathan Shen, Fei Ren, Zhifeng Chen, Patrick Nguyen, Ruoming Pang, Ignacio Lopez Moreno, Yonghui Wu, Transfer Learning from Speaker Verification to MultispeakerText-To-Speech Synthesis, NeurIPS, 2018
[Arik, et al., NeurIPS’18] Sercan O. Arik, Jitong Chen, Kainan Peng, Wei Ping, Yanqi Zhou, Neural Voice Cloning with a Few Samples, NeurIPS, 2018
[Tjandra, et al., ASRU’17] Andros Tjandra, SakrianiSakti, Satoshi Nakamura, Listening while Speaking: Speech Chain by Deep Learning, ASRU, 2017
[Liu, et al., SLT’18] Da-Rong Liu, Chi-Yu Yang, Szu-Lin Wu, Hung-Yi Lee, "Improving Unsupervised Style Transfer in End-to-End Speech Synthesis with End-to-End Speech Recognition", SLT, 2018
[Battenberg, et al., ICASSP’20] Eric Battenberg, RJ Skerry-Ryan, Soroosh Mariooryad, Daisy Stanton, David Kao, Matt Shannon, Tom Bagby, Location-Relative Attention Mechanisms For Robust Long-Form Speech Synthesis, ICASSP, 2020