Chapter4-2_Speech_Synthesis(More than Tacotron)

文章目录

  • 1 Mispronunciation
  • 2 More information for Encoder
  • 3 Attention
  • 4 Fast Speech and DurIAN
  • 5 Dual Learning
  • 5 Controllable TTS
    • Speaker Embedding
    • GST-Tacotron
    • Two-stage Training

本文为李弘毅老师【Speech Synthesis - More than Tacotron】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。

下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 4-1 Tacotron

下篇 - 5 Speaker Verification

总目录

1 Mispronunciation

当打分者在给Tacotron打分的时候,打分者认为Tacotron比ground truth分数低的原因是,Tacotron有时会拼错音,这有点让人感到突兀。而这也是因为Tacotron训练时用到的数据集包含的词汇量太少了。如下图所示,最大的LibrTTS dataset,其中的词汇量也就只有七八万的样子,差不多时英文词汇量的十分之一,更关键的是,不断会有新的英文词汇在生活中涌现出来,面对这些新的词汇,Tacotron只能猜一猜了。
ch4-2-1

所以,有一种办法就是,构建一个把单词转化为发音单元的lexicon,然后输入发音单元就可以了。不过这种办法的问题在于,lexicon没法包含所有的词汇,比如下图中的"nCoV"这样没在lexicon中的单词出现了的话,模型就没办法了。不过这个lexicon可以一直更新。
ch4-2-2

2 More information for Encoder

(1)Syntactic information
加入文法的信息是对模型输出语音的停顿是有帮助的,所谓文法的信息就是下图所示的这样,表示了哪些单词可以组成一个短语,在句子中的成分是什么等等。可参见Exploiting Syntactic Features in a Parsed Tree to Improve End-to-End TTS。
ch4-2-3
(2)BERT embedding as input
有人也试过把文本embedding之后的信息作为输入,这也是有一定帮助的。可参见Pre-trained Text Embeddings for Enhanced Text-to-Speech Synthesis。

3 Attention

在上篇中,我们有提到过,希望Encoder steps和Decoder steps对应位置的attention都在对角线上,所有有一种很直接的做法就是,划出一块禁止有attention的区域,如果下图中红色位置的区域有attention的话,就对模型进行惩罚。这个就叫做Guided Attention。
ch4-2-4

除此之外,还有很多很多其他的Attention,比如在charpeter 1-2中讲过的Location aware。这些attention对模型最终的效果有着很大的影响,具体可参见Location-Relative Attention Mechanisms For Robust Long-Form Speech Synthesis。该文指出,如果只用数据集中长度较短的数据去训练,然后用各种长度的数据来Inference,就会发现,一个好的attention的表现一直很好,但是有些attention面对比较长的数据就坏掉了。下图中的GMMv2b和DCA就是表现比较好的。
ch4-2-5

百度也提出过一种attention,这种attention有两个特点。其一是说,它在inference的时候,加了一个mask,把非对角线上的attention给直接置0了。其二是说它在query和keys输入时,都加入了position encoding,然后这个position encoding是根据speaker embedding直接学出来的。这大概是因为不同的人说话的语速是不同的吧。speaker embedding在下面会讲。
ch4-2-6

4 Fast Speech and DurIAN

除了Tacotron之外,还有其他的一些效果比较好的Text to Speech(TTS)的模型。比如下图中的Fast Speech和DurIAN。这两个模型是由两个团队在相近的时间提出的,然后思路也基本是一致的。他们的做法是说,先把文字输入到一个encoder当中去抽出一个等长的sequence feature,然后把这个feature放到一个叫做Duration的模块当中去,去预测每个feature需要重复的长度。这里的长度也就是我们最终输出的语音念每个词的长度。结合这个给定的长度和encoder产生的feature,输出一个与最终输出长度相符的sequence feature,再把这个sequence feature放到一个decoder当中去,得到最终的Mel-spectrogram,也就是我们的语音。
ch4-2-7

那么,这个模型该怎么训练,用end-to-end的方法去硬train的话,是不work的,因为Durantion到Add length这里是不可微分的。虽然可以用强化学习去硬train,但是文章采取了另一种方法。那就是给Duration这里一个ground truth,同时也把ground truth直接喂给Add length,这样用多个loss去train。这里的Duration的ground truth是用类似Tacotron这样的模型跑出来的。
4-2-8

最终的结果,作者选了50个难念的句子试了一下,发现比Tacotron 2和其他模型要好很多。
4-2-9

5 Dual Learning

Automated Speech Recognition(ASR)和Text to Speech(TTS)是两个可以相互学习的模型。前者是输入语音,输出文字;后者是输入文字,输出语音。两者可以构成一个Speech Chain来相互学习,相互提升。
ch4-2-10

如何去相互学习呢?有两种方法。一种是我们只有语音,没有对应的文字的情况,这个时候,我们就可以把ASR当做encoder输出文字,TTS当做decoder输出语音,然后希望TTS输出的语音和输入的语音越接近越好。其实本质上就是一个auto-encoder的过程。另一用就是我们只有文字,没有语音的情况,做法和前者类似。这里的ASR和TTS都是需要pretrain过的。
ch4-2-11
然后经过实验,这样train下来,对两者都有提升。
ch4-2-12

5 Controllable TTS

最后再来说一下如果去控制TTS。控制的方面主要分为三个方向:

  • 说什么
    这一块是通过我们输入的文字去控制的。
  • 谁在说
    谁在说的话可以通过收集某个人的大量语音资料,然后让模型去学习来做到。不过也有其他的方法。
  • 怎么说
    怎么说指的是说话的语调、重音和音律之类的。这个很难说清楚,英文叫做Prosody,翻译过来可以叫做抑扬顿挫。

“谁在说”和“怎么说”可以用类似Voice Conversion的做法去实现,就是加入一段reference audio,让模型去学得和这段声音的说话方式类似。在这种情况下,TTS的训练方式也是和VC非常类似的。
4-2-13
具体的训练方法是,比如我们有一段"hello"的text输入,然后又有一个“hello”的语音输入,我们希望最终输出的语音和我们输入的语音越接近越好。但是这样很可能会让模型偷懒,就是模型可能会无视输入的文字,直接把输入的语音输出了。最终的结果就是,在inference的时候,我们输入文字"hello"和语音"I love you",输出就直接是输入的"I love you"。所以,我们要让模型知道,要从输入的文字去获取内容信息,从输入的语音去获取语者的信息。
ch4-2-14

Speaker Embedding

所以,一种非常直观的做法,就是我找一个预训练好的只抽取语者特征的feature extractor来,固定住weights,不参与训练。然后把这个feature extractor输出的speaker embedding当做输入,这样一来,模型就只能够从输入的文字当中去获取输出内容的信息。这种方法,只需要少量的某个语者的语音数据,就可以train出一个该特定语者的TTS。
ch4-2-15

GST-Tacotron

除了speaker embedding之外,GST-Tacotron也可以把输入的reference audio的内容信息过滤掉,只提取语者的特征。文字部分,还是会通过一个Encoder输出对应的sequence feature,不过reference audio这里,会经过一个参与训练的feature extractor,然后这个feature extractor只输出一个vector,这个vector会复制成一个和encoder输出序列长度一样的序列,然后把这两个序列concat或者直接相加即可。这个结果再那去做attention,剩下的部分就可Tacotron一样了。
ch4-2-16

为什么这么做可以把reference audio中的内容信息过滤掉?这得益于feature extractor的独特设计。feature extractor的内部如下图右半部分所示。reference audio会经过一个encoder输出一系列的weights,然后这些weights会和一些Style Tokens去做相乘求和,最终得到一个vector的输出。这些Style Tokens也是学出来的,神奇的是,当训练完成之后,发现每一个token就会对应一种声音的特征,只要调整attention的weights就可以输出不同的声音。比如有的token代表低音,有的token代表语速等等。
ch4-2-17

Two-stage Training

最后再介绍一种two-stage training的方法来提取reference audio中的语者信息。这是一种非常直观的做法,既然我们的输入语音和目标语音一样会让模型直接copy输入语音的话,那么我们让输入语音和目标语音不一样就可以了。比如我们输入文字"good bye"和语音"I love you",模型输出语音"good bye"。但这样一来,我们的ground truth去哪里找?
ch4-2-18

于是,我们这里用到了和上文中提到的dual learning类似的方法。我们会把TTS输出的语音,再放到一个ASR当中去,然后希望ASR输出的文字和输入的文字一致。这里有一个训练attention的技巧,就是,居然输入的某个字符的attention对应这某段语音,那么我们也可以让这段语音的attention对应着某个位置的字符。这样做train起来会容易一些。
ch4-2-19

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【代码笔记】iOS-清除图片缓存UIActionSheet

一,效果图。 二,代码。 RootViewController.m //点击任何处出现sheet -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {UIActionSheet * sheet [[UIActionSheet alloc] initWithTitle:"确定要清空图片缓存?" d…

Chapter5_Speaker_Verification

文章目录1 Task Introduction2 模型架构3 模型介绍3.1 i-vector3.2 d-vector3.3 x-vector3.4 more4 End to End本文为李弘毅老师【Speaker Verification】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自于李宏毅…

python如何读取字典的关键字_python提取字典key列表的方法

python提取字典key列表的方法 更新时间:2015年07月11日 12:04:48 作者:企鹅不笨 这篇文章主要介绍了python提取字典key列表的方法,涉及Python中keys方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python提取字典key列表的方法…

使用express搭建服务器获取MySQL数据库数据

一、原始的mysql查询方法 先安装mysql cnpm install mysql --save 引入这个db.js之后,才能对数据库进行查询 进行查询 查询结果如下: 二、ORM 介绍 ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库…

Chapter6_Vocoder

文章目录1 Introduction2 WaveNet2.1 WaveNet的架构2.2 Softmax Distribution2.3 Causal Convolution和Dilated Convolution2.4 Gated Activation Unit2.5 小结3 FFTNet4 WaveRNN4.1 Dual Softmax Layer4.2 Model Coarse4.3 Model Fine4.4 小结5 WaveGlow本文为李弘毅老师【Voc…

show一下自己的文档编写功底

以我为例,我绝对相信,“才华”和颜值成反比。“才华”二字加了引号了,自知跟优秀有孙大圣一个筋斗云的距离,不过某些细节方面表现得被认为还不错,这里我要秀一下我的文档编写能力。在我这十年的工作生涯里,…

Chapter7-1_Overview of NLP Tasks

文章目录1 Introduction2 Part-of-Speech(POS) Tagging3 Word Segmentation4 Parsing5 Coreference Resolution6 Summarization7 Machine Translation8 Grammar Error Correction9 Sentiment classification10 Stance Detection11 Natural Language Inference(NLI)12 Search En…

python制作文本编辑器_Python小实战:制作文本编辑器

学了半年了,该施展一下了🍺 做什么呢?做一个简单的文本编辑器吧 来,开始 知识点: 1)做窗体的知识 2)文件操作 窗体用的是tkinter简单模块,系统自带模块 有人说了:“哇&am…

OGNL 详解

Struts2 OGNL详解 1.概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整…

完善获取数据库数据的写法

上一篇:使用express搭建服务器获取MySQL数据库数据 一、完善获取数据库数据的写法 asyncawait版本: const express require(express) const db require(./db/nodejs-orm/index.js)const app express()app.get("/get_data", (req, res) …

Chapter7-2_BERT and its family - Introduction and Fine-tune

文章目录1 What is pre-train model2 How to fine-tune2.1 Input2.2 Output2.3 Fine-tune2.4 Weighted Features3 Why fine-tune本文为李弘毅老师【BERT and its family - Introduction and Fine-tune】的课程笔记,课程视频youtube地址,点这里&#x1f4…

【BZOJ-2435】道路修建 (树形DP?)DFS

2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3115 Solved: 1002[Submit][Status][Discuss]Description 在 W 星球上有 n 个国家。为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通。但是每个国家的国王都…

CSRF跨站请求伪造

一、CSRF跨站请求伪造 CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。 CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。 包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品&a…

升级 ubuntu_Ubuntu 19.04 已经到期!现有用户必须升级到 Ubuntu 19.10

Ubuntu 19.04 已在 2020 年 1 月 23 日到期,这意味着运行 Ubuntu 19.04 的系统将不再会接收到安全和维护更新,因此将使其容易受到攻击。-- Abhishek Prakash(作者)Ubuntu 19.04 发布于 2019 年 4 月 18 日。由于它不是长期支持(LTS)版本,因此…

Chapter7-3_BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more

文章目录1 How to pre-train2 Predict next token3 Mask Input4 seq2seq的pre-train model5 ELECTRA6 Sentence Embedding本文为李弘毅老师【BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more】的课程笔记,课程视频youtube地址…

python中split函数_python strip()函数和Split函数的用法总结

strip函数原型 声明:s为字符串,rm为要删除的字符序列. 只能删除开头或是结尾的字符或是字符串。不能删除中间的字符或是字符串。 s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处&#xff0c…

express项目搭建 初始化详细步骤

案例 一、对每一个POST请求都设置CSRF防护 实际上,不仅仅转账需要CSRF防护,每一个post请求都需要做csrf的防护措施。 webA项目中的app.js: const router express.Router();router.all("/register",(res,req)>{.... })funct…

Chapter7-4_來自獵人暗黑大陸的模型 GPT-3

文章目录1 为何来自暗黑大陆2 GPT-3的野心3 GPT-3的效果4 Beyond GPT-3本文为李弘毅老师【來自獵人暗黑大陸的模型 GPT-3】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自于李宏毅老师的PPT,若有侵权…

二、PHP框架Laravel学习笔记——路由的定义和控制器

一.路由的定义 什么是路由?路由就是提供接受 HTTP 请求的路径,并和程序交互的功能; 简单点理解,就是为了提供访问程序的 URL 地址,所做的一些设置工作; phpstorm 支持 cmd 操作,左…

Chapter7-5_Multilingual BERT

文章目录1 什么是Multilingual BERT2 Zero-shot Reading Comprehension3 Cross-lingual Alignment4 How alignment happens本文为李弘毅老师【Multilingual BERT】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自…