tictoc正方形网络模型_语音合成模型梳理

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

一、Merlin语音合成系统。

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

系统流程梳理:

先贴一张流程图:

38a6b782-6517-eb11-8da9-e4434bdf6706.png

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

3aa6b782-6517-eb11-8da9-e4434bdf6706.png

①文本处理前端

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

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

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

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

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

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

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

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

3ca6b782-6517-eb11-8da9-e4434bdf6706.png

然后就可以把config文件中的

NORMLAB : True

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

②时长模型、声学模型

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

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

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

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

2.每个单元的向量。

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

参考MTTS这个项目

Jackiexiao/MTTS​github.com
3ea6b782-6517-eb11-8da9-e4434bdf6706.png

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

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

42a6b782-6517-eb11-8da9-e4434bdf6706.png

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

45a6b782-6517-eb11-8da9-e4434bdf6706.png

47a6b782-6517-eb11-8da9-e4434bdf6706.png

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

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

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

4ea6b782-6517-eb11-8da9-e4434bdf6706.png

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

52a6b782-6517-eb11-8da9-e4434bdf6706.png

可以看出其做法就是:

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

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

56a6b782-6517-eb11-8da9-e4434bdf6706.png

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

5ca6b782-6517-eb11-8da9-e4434bdf6706.png

d5a6b782-6517-eb11-8da9-e4434bdf6706.png

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

dea6b782-6517-eb11-8da9-e4434bdf6706.png

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

二、端到端系统

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

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

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

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

3.训练就好了。

  • 自回归模型和非自回归模型

一般端到端的系统可以分为自回归模型和非自回归模型这两种,

他们的区别在于,

自回归模型不需要音素的对齐信息,这类模型的文章你大概率会看到对齐信息的图,如下图所示,模型会自己去学习出每步对应哪个音素,最后自己判断是否停止

e3a6b782-6517-eb11-8da9-e4434bdf6706.png

非自回归模型模型需要音素的对齐信息,需要其它工具提供音素对应的时长信息。

  • FastSpeech1/2

首先用微软的FastSpeech来说。FastSpeech2的做法和Merlin一模一样,如法炮制,感兴趣的可以去了解一下。

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

和Merlin做个对比:

e7a6b782-6517-eb11-8da9-e4434bdf6706.png

区别在于

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

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

FastSpeech的做法需要音素的对齐信息。

FastSpeech借助Tacotron2transformerTTS的alig为duration标签用以训练它的时长预测能力。

FastSpeech2中则是和Merlin中一样的做法,用音素对齐工具得到对齐信息。

后面的做法都和Merlin一致,将embeding的输出复制几个送入Decoder。

https://zhuanlan.zhihu.com/p/67939482​zhuanlan.zhihu.com

这有大大复现的代码。

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

  • Tacotron2DeepVoice3

自回归模型以Tacotron2DeepVoice3为代表梳理一下,

efa6b782-6517-eb11-8da9-e4434bdf6706.png

借一下别人的图。。。

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

faa6b782-6517-eb11-8da9-e4434bdf6706.png

从结构上看,自己感觉其实和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向量生成一个控制信息。

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

ffa6b782-6517-eb11-8da9-e4434bdf6706.png

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

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

后续搭一个http://github.io来展示各个模型的效果,和最后这个实验结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值