码迷,mamicode.com
首页 > 其他好文 > 详细

zhihutheirTTS1

时间:2019-12-05 13:11:57      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:box   状态   src   必须   image   动态   back   lazy   流程图   

https://zhuanlan.zhihu.com/p/88502449  from zhihu

最近研究了一段时间的TTS模型。然后将自己的一些成果研究分享一下下,有不对的地方还请忽略。

 

一、Merlin语音合成系统。

这个系统应该可以说是历史比较长久的一套系统了,其搭配了三个声码器,WORLD\STRAIGHT\WORLD2,感觉采用WORLD的偏多一点。WORLD的介绍网上已经很多啦,这里就不赘述了。

系统流程梳理:

先贴一张流程图:

技术图片

光看着就复杂。。。简单来说就四个模块:

技术图片

 

①文本处理前端

这个模块自己感觉是本系统里最难上手的地方,它要干的工作是:

1.将文字转化为自己的建模单元,比如文字转音素、韵律标注、词性标注等。

2.将标注转化为HTS格式。

3.根据设计的question来将每一个单元转化为向量。

HTS格式的详解和question的设计可以参考,里面也详细讲了一些所需的知识:

https://mtts.readthedocs.io/zh_CN/latest/merlin.html?mtts.readthedocs.io

我是没有把它完全弄懂。。。。

经过这个模块,得到Merlin接受的HTS格式标签

技术图片

 

 

然后就可以把config文件中的

NORMLAB : True

执行merlin脚本即可得到Merlin系统的输入啦,当然前提是把question准备好。

②时长模型、声学模型

时长模型,如字面意思就是预测每个单元的发音长度。

声学模型就是为了得到WORLD所需的各种参数。

获得时长模型的输入输出就需要:

1.每个单元对应的长度。

2.每个单元的向量。

单元向量在文本前端可以获得。长度的获得就比较麻烦了。以没有韵律对齐标签的数据为例,

参考MTTS这个项目

Jackiexiao/MTTS?github.com技术图片

首先利用alig工具,将音素对齐,然后再处理。跟着这个项目的Readme操作,比较容易。

主要是为了得到每个音素的长度。

技术图片

有了这个完整的.lab文件,就可以启动Merlin的 05、06脚本了,05脚本是处理时长模型的训练文件,06脚本是处理声学模型的训练文件。对应配置文件里,只需开启

技术图片技术图片

处理完毕后得到的文件,打开一下可以发现:

1.语言学特征文件(normal_lab文件夹里的文件)

以我624行的question为例,label为19行,首尾为‘sil’静音,会被去掉:

技术图片

 

2.时长模型训练目标文件

技术图片

可以看出其做法就是:

Label中的前两个数值相减,再除以5000(5ms,默认值)的个数,即多少个5ms。其预测的就是这个5ms的个数。

 

3.声学模型的输入输出文件:

技术图片

此时就比较关注(426,628)形状的来历,其做法:

技术图片技术图片

转换完628维度后的矩阵为(17,628),然后每一行重复时长个数,重复的不同在于倒数三维

技术图片

 

搞清楚了输入输出后,基本整个流程就清楚了。然后对应训练即可。

 

二、端到端系统

经过了麻烦的Merlin系统,来梳理一下端到端的系统。

端到端的系统就比较简单了。

1.准备自己的建模单元,想怎么建就怎么建。

2.找好vocoder,准备对应输出。

3.训练就好了。

 

首先用微软的FastSpeech来说

FastSpeech: Fast, Robust and Controllable Text to Speech?arxiv.org

和Merlin做个对比:

技术图片

区别在于:

Merlin的embbeding是由人工设定的(question)。

端到端的embbeding是训练过程中形成的。

 

论文中FastSpeech借助Tacotron2\transformerTTS的alig为duration标签用以训练它的时长预测能力。后面的做法都和Merlin一致,将embeding的输出复制几个送入Decoder。

星辰漫游者:FastSpeech复现笔记?zhuanlan.zhihu.com技术图片

这有大大复现的代码。

 

FastSpeech属于非自回归模型,所以其预测时间非常得短。并且可以调控duration的长短来进行发音长短的控制、一定韵律的控制。

 

然后自回归模型以Tacotron2\DeepVoice3为代表梳理一下,

 

技术图片

借一下别人的图。。。

自回归模型就是说,它必须一步一步地执行,自己判断或人为设定最大步数。相比Tacotron ,Tacotron2加入了一个stop token状态,从固定预测步数变为了动态的预测步数,可以一定程度上地减少运算量。

技术图片

从结构上看,自己感觉其实和Tacotron是一样的,不同的就是换成了全卷积,然后把attention优化了一下,循环的步骤只送入query,(key,value)都放到了encoder层面,这么做应该也是为了加速解码过程。Github上也有很多代码了,此处就不贴代码了。

所以相同的FLOAS能力下,非自回归模型显著要快于自回归模型。

自己实验得,同样十个字,生成mel图速率,FastSpeech在几十毫秒级,Tacotron2在三百毫秒级,DeepVoice3在一百五十毫秒级。

 

最后,贴一个实验结果,

最近看见Google发了一篇Tacotron控制韵律、节奏的论文,自己复现了一下,做法略有不同。

https://arxiv.org/pdf/1910.01709.pdf?arxiv.org

论文是一部分监督学习,一部分无监督学习,有两个控制参数,一个是由人控制,另一个是无监督训练的。

然后自己懒到不想标注数据,所以改成全部的无监督学习,采用了2维的flag向量生成一个控制信息。

采用了标贝公开的数据实验,网络自己总结的向量变化情况如下:

 

技术图片

当输入[-1,-1]时,生成的语音说话快,[1,1]时则很慢。

基本符合这个数据库的数据特点,情感变化不大,说话快慢变化比较凸显。

后续搭一个来展示各个模型的效果,和最后这个实验结果。

zhihutheirTTS1

标签:box   状态   src   必须   image   动态   back   lazy   流程图   

原文地址:https://www.cnblogs.com/skydaddy/p/11988228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!