文章目录
时间:2019.5
作者:renyi
单位:浙大&微软
网友开源的代码:https://github.com/xcmyz/FastSpeech
- 主要的改进在于:(1)duration 预测模型是单独的,不是基于无法直接控制的attention module;(2)先训练一个自回归的FastSpeech,选出最好的attention提供非自回归FastSpeech训练阶段的duration,以及将自回归的FastSpeech预测的mel作为非自回归FastSpeech训练的target(teacher student,知识蒸馏)。----使用了attention的结果,实际上attention会产生固定的偏移,因此这样做也会更好。
abstract
- 如tacotron2这样的工作先将文本转成mel,然后用wavenet将mel生成wav。nn语音合成和传统的参数或者拼接系统相比,生成质量跟高,但是==(1)nn的infer速度更慢,会出现跳字或者重复词的情况,而且语速和韵律缺乏控制==。
- (1)本文提出一种基于transformer的前传网络,可以并行的生成mel,用于TTS。
- (2)从encoder-decoder based teacher model中提取attention alignment用于phoneme duration prediction,用length regulator 用于将phone序列扩展到对应的mel序列等长。在ljspeech上的结果表明我们的方法极大的改善了跳词和多词的现象,并且可以平滑的调节语速。而且,和自回归的transformer TTS相比,mel谱生成速度270x,语音生成速度提升38x。
1. introduction
之前的nn-TTS都是自回归生成mel,因为mel谱比较长以及自回归本身的原因,会遇到这些问题:
- 预测速度慢,mel谱长度一般都是数百/数千帧,自回归需要上一步的输出,导致mel谱生成很慢;
- 不鲁棒:因为误差传播以及text-mel的错误alignment,生成的mel谱很难解决跳词和重复词的问题;
- 难控制:之前的模型mel是自动生成的,没有很好的利用text-mel的对齐,因此很难控制语速和韵律。
对应的本文提出的解决方案:
- 加快合成速度:因为text-speech的单调对齐,利用输入非自回归的并行生成mel。前馈网络基于transformer中的sel-attention和1D conv。
- 解决丢词和重复词的问题:phoneme duration predictor是phone和mel之间的hard alignment,和自回归模型的soft alignment, auto-alignment不一样。避免了错误传递和attention 对齐错误的问题,因此不会出现跳词和重复词的现象。
- 调语速:length regulator可以通过家常菜或者缩短phoneme持续时间调整语速,也可以在相邻音素之间加break调整韵律。
结果:语音质量和自回归的结果差不多,但是速度有百倍的提升。
2 background
- sequence-to-sequence learning:经典的seq2seq是基于encoder-attention-decoder结构。本文是用feed-forward network并行的生成sequence output。
- Non-Autoregressive Sequence Generation:非自回归生成是说当前的输出不依赖于之前时间步的输出。(1)之前有一些基于非自回归生成的模型用于机器翻译或语音合成的任务,但是他们仅仅是为了inference加速。本文不仅仅inference加速,还提高TTS的可控性和鲁棒性;(2)有一些工作比如Parallel WaveNet,ClariNet,WaveGlow,并行的输出audio,但是他们需要mel输入,mel谱是自回归生成的。
有同期的工作可以并行的生成Mel谱,但是这些工作仍然基于encoder-decoder + attention的机理,(1)需要teacher model 2-3x的参数量,比FastSpeech的inference速度慢,(2)不能完全解决跳字和重复的问题,但是FastSpeech几乎已经完全解决了。
3. fast speech
3.1 Feed-Forward Transformer
我们提出一个feed-forward transformer的结构,区别于之前的seq2seq based attention。它是多个FFT block(包含transform中的self-attention+2层1D conv—原来的dense换成conv) 的堆叠完成phone到mel的转换,phoneme side和mel side各N个FFT Block,中间有一个length regulator弥补phoneme和mel之间长度的区别。
FFT block参考slef-attention实现,包括一个multi-head attention提取 cross-position information,以及一个改良的两层1D conv。将dense改成1D conv的动机是认为对于语音任务相邻隐层在phone和mel上的相关度更高。(并且后边实验也验证了conv1d的有效性)
3.2 Length Regulator
- 作用:解决phone和mel之间长度不匹配的问题 & 控制语速 & 调节韵律
- phone duration:一个phoneme对应的mel长度
对于phone duration—d, length regulator把phone序列的隐层长度扩展d次,使得与mel谱长度一致。
假设phoneme序列
H
p
h
o
=
[
h
1
,
h
2
,
.
.
.
,
h
n
]
H_ pho = [h_1, h_2, ..., h_n]
Hpho=[h1,h2,...,hn]
duration 序列
D
=
[
d
1
,
d
2
,
.
.
.
,
d
n
]
D = [d_1, d_2, ..., d_n]
D=[d1,d2,...,dn] 其中
Σ
d
i
=
m
Σd_i = m
Σdi=m, m是mel的总长度,图1©非常生动形象;
公式1中
a
a
a是调节速度的超参数,
D
∗
a
D*a
D∗a结果四舍五入保留整数。(1)调节
a
a
a调节整个句子的速度;(2)也通过调节句子中space charater的duration改善韵律(已经预测的长度上整体均匀调整)。
3.3 Duration Predictor
phone duration的预测对于length regulator非常关键。
在对数域预测duration,因而更加高斯和容易训练。用MSE计算phone duration的预测误差。
- 训好的duration predictor只在TTS infer的时候用。
- 训练的时候可以直接用自回归teacher网络提取的phoneme duration.
phone duration的提取:
- 训练一个机遇transformer-TTS的 encoder-attention-decoder模型,ref【13】;
- 从训练的teacher网络中提取decoder-to-encoder 的attention alignment,因为是multi-head,所以并不是所有的都满足对角线特性(phoneme和mel满足单调对齐)。提出一个Focus rate F:衡量attention head多接近diagonal。
S S S—真正的mel谱长度
T T T—真正的phoneme长度
a s , t a_{s,t} as,t----attention矩阵s行,t列的元素
对于每一个head计算F,并且挑选最大F对应的head.
大概意思类似于:attention求解的矩阵,拿到序列对齐的最大概率之和。
每次基于当前的phone挑选最佳对应的mel长度。
- 然后根据duration extractor提取到的 d i d_i di拿到整体的phone duration sequence D D D
3. experiment
dataset
dataset | librispeech |
---|---|
train (12500) validation(300) | test (300) |
用内部的grapeme-to-phoneme转换 |
model
FFT Block | 6 per side |
---|---|
self-attention and 1D conv | 384 |
nums of attention heads | 2 |
kernel_size | 3 |
2层conv in/out | 384/1536 1536/384 |
duration 2层conv | 384/384 |
自回归transformer-TTS
(1)提取phone duration,作为训练duration predictor的target。
(2)生成mel谱用作sequence-level knowledge distillation----------参考机器翻译知识蒸馏的成功尝试,用Auto-transformer-TTS预测的mel-spec,直接用于并行transformer-TTS的训练(txt— predicted-mel pair)
网络的参数量和fastspeech差不多
training and inference
- 首先训练transformer-TTS,通过80K step达到一个很好地性能。
- 把训练的句子重新送到训好的模型中,得到encoder-decoder的attention 对齐,用于duration predictor的训练。
- 利用序列级别的知识蒸馏(在非自回归的机器翻译上已经达到较好的性能)进行teacher model到student model的迁移—训好的tranformer-TTS模型根据输入text-seq预测mel-seq,然后这两者用于训练FastSpeech。
- 训练FastSpeech以及duration predictor,为了加速训练过程
- 利用自回归Transformer TTS 的phoneme embedding
- 用自回归Transformer TTS的encoder权重初始化FastSpeech的phoneme side,因为他们的模型一样。
- inference的时候,用waveglow将mel恢复成语音
4. results
比较了语音质量,inference加速比,鲁棒性,可控性。
结论:
- 语音质量和transformer-TTS+waveglow差不多
- inference ,mel加速270x, +waveglow之后加速38x
- 随着infer语句长度的增加,需要时间增长,但是没有自回归Transformer TTS敏感,因为FastSpeech是并行输出。
- 鲁棒性:在50个非常难的句子上测试
- 平滑的调整速度(0.5x-1.5x)