Chapter4-1_Speech_Synthesis(Tacotron)

文章目录

  • 1 TTS before End-to-end
  • 2 Tacotron
    • 2.1 Encoder
    • 2.2 Attention
    • 2.3 Decoder
    • 2.4 Post processing
  • 3 How good is Tacotron?

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

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

文章索引:

上篇 - 3-2 Deep Clustering, PIT

下篇 - 4-2 More than Tacotron

总目录

1 TTS before End-to-end

我们现在的TTS(Text-to-Speech)都是end-to-end的神经网络,那么,在没有end-to-end之前,TTS是怎么做的呢?李老师在这里简单介绍了几个技术,最老的可以追溯到1939年。这里来看一下最接近end-to-end的Deep Voice,其他的有兴趣可以直接看李老师的视频,这里就不介绍了。

Deep Voice其实就是四个神经网络分别train好之后合在一起的模型。首先text会进入一个Grapheme-to-phoneme的模型,把书写的基本单元转化为发音的基本单元。然后这个phoneme会进入一个Duriation Prediction的模型,输出每个phoneme的发音时长是多少。同时这个phoneme也会进入一个叫做Fundamental Frequency Prediction的模型,用来输出每个phoneme的发音音调是怎样的。最后有一个模型,同时接收phoneme,发音时长和音调,然后输出合成的语音。
ch4-1-1

2 Tacotron

Tacotron在17年和18年都有发表论文,是一个end-to-end的语音合成模型。它的输入是character,输出是 (linear) spectrogram,spectrogram和真正的语音之差一个phase的信息,所以可以说是end-to-end的模型了。Tacotron中的Taco就是墨西哥料理中的Taco,作者们应该是一群吃货,在论文的注释中还特别注释了哪些人喜欢吃Taco,哪些人喜欢吃寿司。
ch4-1-2
Tacotron的整体结构如下图所示,可以分为Encoder,Attention,Decoder和Postprocessing四个部分。下面将对每个部分分别介绍。
ch4-1-3

2.1 Encoder

Encoder就是类似于讲Grapheme转化为phoneme的东西。首先输入的文本会经过一层embedding,然后经过一个由全连接+dropout组成的Pre-net,接着经过一个叫做CBHG的模块,最后输出一串sequence。这个CBHG是一个有点复杂的东西,李老师在这里没有细讲,就是几句话带过。总之,就是输入一个sequence,吐出一个sequence。
ch-4-1-4
在第二版的encoder当中,CBHG就被砍掉了,所以这其实也就是一个可有可无的东西,这也是李老师不做过多介绍的原因之一。第二版的encoder结构如下图所示。
ch4-1-5

2.2 Attention

这里的Attention就是正常的Attention,如果不知道Attention的原理的话,可以参考我的这篇博客。这里attention的作用其实就很像是预测每个phoneme的duration。输入的文字和输出的语音在时间上其实是有一种对应关系的,下图中纵坐标表示的是encoder steps,横坐标表示decoder steps,中间的这幅图就是attention的大小,如果学出来像是左图这样的一条斜直线的话,就说明学的比较好,如果学出来像右图这样的话,就说明没学好。
ch4-1-6

2.3 Decoder

Decoder就是一个会经过Pre-net且有Attention的RNN,不过每个time step的输出都会有3个或者多个sequence,因为一个phoneme对应的语音是比较长的。不过这里还有一个额外的model,用来判断这个RNN在这个time step是否可以结束了。
ch4-1-7

2.4 Post processing

decoder输出的sequence会再丢到一个CBHG里去,可以把CBHG想象成一大堆的CNN,然后再输出一个sequence。需要这个post processing的原因是,decoder产生的每个time step的输出是依赖于前一个time step的输出的,所以如果错了就没法修正了,加一个CBHG就是给模型一个修正的机会。最后的loss会结合decoder输出和Mel-spectrogram的偏差,以及CBHG输出和Mel-spectrogram的偏差。最终Inference的时候,我们用的是CBHG的输出。
ch4-1-8
当然这个输出不是语音,还需要一个额外的Vocoder才行,但这个Vocoder是单独train好的,这里不多做介绍。
ch4-1-9

有一点需要指出的是,Tacotron在Inference的时候,是需要加Dropout的,不然输出会坏掉~

3 How good is Tacotron?

再来看一下Tacotron的效果如何。这里用到的评价指标叫做mean opinion score。这个就是找一堆人,来听声音打分,分数为1分到5分的整数,1分最低,5分最高,觉得声音越真实,打分就可以越高。话说这个其实和历史模型做比较,就有点不太靠谱,不同人的主观感受是不太一样的。

结果就是第一版的Tacotron分数一般,但是第二版的Tactron就逼近ground truth了。
ch4-1-10
两个版本的最大差异,其实是在vocoder这里。用了WaveNet之后,分数直线飙升。
ch4-1-11

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

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

相关文章

python基础编码规范_Python语言的基本语法和编码规范.doc

Python 语言的基本语法和编码规范 Python 编程教程教师 : 工作 :Python 语言的基本语法和编码标 准课程描述本章将介绍 Python 语言的基本语法和编码标准,重点介 绍 Python 语言的基本知识,如数据类型、运算符、常量、变量、表 达式和常用语句&#xff0…

第三方模块config的使用

作用:允许开发人员将不同运行环境下的应用配置信息抽离到单独的文件中,模块内部自动判断当前应用的运行环境, 并读取对应的配置信息,极大提供应用配置信息的维护成本,避免了当运行环境重复的多次切换时,手动…

ACM/ICPC 之 Floyd练习六道(ZOJ2027-POJ2253-POJ2472-POJ1125-POJ1603-POJ2607)

以Floyd解法为主的练习题六道 ZOJ2027-Travelling Fee //可免去一条线路中直接连接两城市的最大旅行费用&#xff0c;求最小总旅行费用 //Time:0Ms Memory:604K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using nam…

Chapter4-2_Speech_Synthesis(More than Tacotron)

文章目录1 Mispronunciation2 More information for Encoder3 Attention4 Fast Speech and DurIAN5 Dual Learning5 Controllable TTSSpeaker EmbeddingGST-TacotronTwo-stage Training本文为李弘毅老师【Speech Synthesis - More than Tacotron】的课程笔记&#xff0c;课程视…

art-template模板引擎详解

1. 模板引擎 art-template中文文档&#xff1a;https://www.kancloud.cn/lanju/art-template/1500276 1.1 Ajax 项目中存在的问题 数据和HTML字符串拼接导致代码混乱&#xff0c;拼接容易出错&#xff0c;增加修改难度。 业务逻辑和用户界面混合&#xff0c;代码不易维护。 …

python3语法糖_Python笔记3:语法糖

运算 数字运算 运算会根据结果自动判断结果是int还是float 用到除法的时候&#xff0c;结果自动输出为float 双斜杠//得到的结果是int 取模(余数)还是% >>> 22 4 >>> 50-5*6 20 >>> (50-5*6)/4 5.0 >>> 8/5 1.6 >>> 5.0/1.6 3.12…

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

一&#xff0c;效果图。 二&#xff0c;代码。 RootViewController.m //点击任何处出现sheet -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {UIActionSheet * sheet [[UIActionSheet alloc] initWithTitle:"确定要清空图片缓存&#xff1f;" 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】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自于李宏毅…

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

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

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

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

java GZIP压缩和解压

最近碰到了一个按GZIP解压指定的输入流数据&#xff0c;备份下 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream;/*** 压缩&#xff…

python数据库连接池_Python实现数据库连接池

1.初始化 def __init__(self, **kwargs): self.size kwargs.get(size, 10) self.kwargs kwargs self.conn_queue queue.Queue(maxsizeself.size) for i in range(self.size): self.conn_queue.put(self._create_new_conn()) size&#xff1a;连接池支持的连接数&#xff0c;…

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一下自己的文档编写功底

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

mysql命令速查手册

数据准备 -- 创建数据库 create database qianduan_test charsetutf8;-- 使用数据库 use qianduan_test;-- students表 create table students(id int unsigned primary key auto_increment not null,name varchar(20) default ,age tinyint unsigned default 0,height decima…

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小实战:制作文本编辑器

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

OGNL 详解

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

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

上一篇&#xff1a;使用express搭建服务器获取MySQL数据库数据 一、完善获取数据库数据的写法 asyncawait版本&#xff1a; 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】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f4…