Created 02/28/2020 at 11:35PM

记录一下从寒假开始以来做的关于Fully End to End Non-Autoregressive TTS Model的实验,时间从2020年2月5日开始,一直到2月28日。这期间受疫情影响,一直在家写代码,跑实验,主要关注的是如何在不依赖teacher model的情况下让Non-Autoregressive TTS model可以实现端到端的训练,为何研究这一课题,我个人认为主要有一下目的:

我尝试了多种方法试图实现Fully End to End训练,而我认为最大的难点就在于缺少alignment的target,模型需要自己去学alignment,此外,模型的input和output长度不一致也是一个重要的问题,下面是我的几种思路和尝试的结果

强化学习帮助模型学到Alignment

参考笔记RL-LightSpeech,这个尝试失败,最主要原因是reward不具有实际意义,根源在于训练阶段模型的output和target长度不一致无法对齐,从而reward不具有实际意义。强行照搬FastSpeech结构结合Reinforcement Learning注定会失败,RL主要用在有多轮游戏的场景当中,且reward要有实际意义,这里只有一层决策,且reward在大部分情况下是错误的。

构建Parallel Attention

Tacotron2模型是基于Attention结构来学到alignment的,或许可以构建一个Parallel Attention结构来让模型学到Attention,我首先将encoder output expand十倍长度,然后送进一个Parallel Attention模块得到10倍text length的decoder input,这时长度是大于mel spectrogram的长度的,于是我将decoder分成了pre和post两个部分,pre阶段的output经过一个线性网络预测是否保留,将保留的部分送入post decoder最后得到模型的output,可以参考One Attempt about Non-Teacher-Model FastSpeech。这个想法也失败了,我认为最主要原因在于expand十倍的做法太过粗暴,且parallel attention模块的设计有臆想的色彩,并没有对attention模块有深入的了解就照葫芦画瓢,显然欠妥,最根本原因是搜索空间太大,模型无法收敛。

后续进行了模型的改进,加入了一个dual decoder,试图用到ground truth的信息来缩小模型的搜索空间,但是收效甚微

Tacotron's Attention Decoder & FastSpeech

上述两种方案都无法直接学到alignment,于是我在思考能否将Tacotron2的attention结构和FastSpeech结合,让Tacotron2来学习alignment,FastSpeech来精细化Mel Spectrogram,后来经过分析,这样的速度和tacotron2其实差不多,而且跳词重读的问题也无法解决,这就没有意义了。为了实现上述思想,我让Tacotron2的decoder input变成dual decoder的output(以mel spectrogram作为input),并通过similarity loss让decoder input和dual decoder output相接近,经过尝试,这种方法行不通,最主要的原因在于dual decoder的output无法直接取代decoder input,导致模型并没有学到实际的信息。

后来我又尝试了将dual decoder和FastSpeech decoder并联变成一个auto encoder进行学习,结果依然无法收敛,猜测可能是代码存在bug导致auto encoder无法收敛,但是没有继续往下尝试,因为就算成功了,这个模型也是没有意义的。

后续

最近看到了一篇直接通过parallel的方式学习alignment的paper,明天读一读,如果不错的话,尝试复现它,FPETS