文章目录

  • 介绍
  • Beyond Tacotron
    • Mispronunciation
    • Syntactic information
    • Attention
      • Guided Attention
      • Monotonic Attention
      • Location-aware attention
      • 其他
    • Fast Speech
    • Dual Learning
  • Controllable TTS
    • Controllable TTS vs VC
    • Controllable TTS的训测
    • GST-Tacotron
    • Two-stage Training

介绍

本门课程是2020年李宏毅老师新课:Deep Learning for Human Language Processing(深度学习与人类语言处理)
课程网站
B站视频
公式输入请参考:在线Latex公式
整个语音合成包括下面四个内容
TTS before End-to-end:端到端学习之前的语音合成
Tacotron:End-to-end TTS:端到端的语音合成
Beyond Tacotron:端到端学习之后的语音合成
Controllable TTS:如何控制TTS
这节讲后面两个。
先把Tacotron的几个问题及改进讲解一下:

Beyond Tacotron

Mispronunciation

Tacotron存在的一个问题就是Mispronunciation,发音有错误。
The raters considered ground truth is better than Tacotron 2 because occasional mispronunciation by Tacotron is the primary reason.
语音合成不需要很大的语料(语音识别需要上万小时的数据),常见的语音合成语料有:
Lj speech,一个人的语音20多小时
VCTK,40多小时
Nancy :http://www.cstr.ed.ac.uk/projects/blizzard/2011/lessac_blizzard2011/
LibriTTS dataset: 585 hours
语音合成不需要很大的语料就可以收敛,但是时长短的话,那么所涵盖的词汇量就比较少了,如果模型碰到没有看过的词汇就可能瞎念,下图是几个语料库所涵盖的词汇量。



从上面可以看到,即使是LibriTTS 也只有大约8万词汇,还离最上面的15万的标准还有一段距离。
解决方法就是不要直接输入文字,而是输入lexicon,lexicon包含有字母和音素的对应关系,然后用音素作为Tacotron的输入。但是使用lexicon会有很多OOV词出现,例如:

新词模型还是不会念。
18年有研究人员提出• Character and phoneme hybrid input
当出现有新词不会念的时候,可以将新词添加到lexicon字典中,从而使得机器学会念这个新词。
If the pronunciation of machine is incorrect, one can add the word into the lexicon to fix the problem.

Syntactic information

可以把语法信息加入到语音合成模型中,例如:
这样分解了以后会使得语音合成模型在读句子的时候断句更加人性化,另外一个例子是:

当然还有用BERT embedding当做输入,效果也还不错。

Attention

下面看一下Tacotron中用到的Attention技巧

Guided Attention

Penalizing the non-diagonal attention matrix during training.
由于前面讲过在Decoder的解码的时候Attention在对角线效果最好,因此,有人就弄了一个Guided Attention,在下图的红色区域进行attention就会受到惩罚,导致loss变大,引导Attention在对角线区域进行计算。

Monotonic Attention

Guided Attention只是引导attention的区域,不是强制性的,Monotonic Attention就会要求一定是由左向右,具体不展开。[Raffel,et al., ICML’17]

Location-aware attention

这个方法在之前讲ASR中提过
每次生成下一个attention之前要用前一个时间步的attention作为输入。

其他

[Battenberg, et al., ICASSP’20]应该是一个概述里面分析了attention对语音合成的重要性,老师还提到了这个文章中的一个有趣的实验,用LJ speech中长度小于5秒和小于10秒的句子来训练模型,然后让模型生成哈利波特小说的句子,这些句子都很长。那么对比了四种attention模型,其中常规的Content-Based、Location-Sensitive的attention语音合成模型效果很差。

还有一个例子是百度的第三代deep voice?这个模型做了很多处改进
1.attention一定在对角线区域(只在inference的时候用)
2.在query和key中加上positional encoding的信息,positional encoding由说话的人来决定,不同人说话速度不一样。

Fast Speech

这个模型和另外一个模型DurIAN(Duration Informed Attention Network)一样
模型结构如下图所示:

输入是一串字母
输出是一串acoustic feature
之前讲Tacotron的时候我们用的是Seq2Seq模型吃输入吐输出,这里用Seq2Seq是因为输入输出的长度不一样,这里的Fast Speech先有一个Encoder,把字母变成embedding,然后接入一个Duration模型,这个模型根据字母embedding预测每个字母应该要念的时长,例如上图中是231,那么根据231将字母embedding分别复制2/3/1次,也就是经过Duration模型后字母embedding延展了,这里延展的长度和acoustic feature的长度是一样的,然后再经过Decoder得到最后结果。
这个模型前向传播没有问题,Duration模型的输出是整数,因此是不可导的,无法进行反向传播。
这里作者给出的解决方案是单独为Duration模型提供ground truth,单独训练。这个ground truth是先训练一个Tacotron,然后用Tacotron输出得到字母embedding应该要重复几次才能和acoustic feature长度一样。

最后Duration模型就相当于一个regression模型,看到红色的embedding就复制2次,蓝色的embedding就复制3次。。。
整个大模型就避开Duration模块,进行反向传播

最后原文给出了结果:

这里不是原来模型太差,而是测试的句子比较变态,都是念数字或者网址之类的,例如:
zero zero zero zero zero zero zero zero two seven nine eight F three forty zero zero zero zero zero six four two eight zero one eight
c five eight zero three three nine a zero bf eight FALSE zero zero zero bba3add2-c229-4cdb-
Calendaring agent failed with error code 0x80070005 while saving appointment.
Exit process-break 1d-Load module-output ud-Unload module-ignore ser-System error-ignore ibp-Initial breakpoint -
h t t p colon slash slash teams slash sites slash T A G slash default dot aspx As always, any feedback, comments, two thousand and five h t t p colon slash slash news dot com dot com slash islash n e slash f d slash two zero zero three slash fd

Dual Learning

根据之前学的两个模型,ASR和TTS,刚好可以组成一个循环

具体思路如下,Given pretrained TTS and ASR system。
如果有语音数据,没有文字标签,那么可以:

如果有文本数据,没有语音标签,那么可以:

实际上就是AE的思想。

Controllable TTS

一段声音包含三部分内容。
说什么:说话的内容由文本决定
怎么说:说话的语气
谁说的:语者的声音特征
后面两个因素是可以控制的,接下来看如何控制。
对于谁在说,可以实现的应用有:
• Synthesize speech for a specific person (voice cloning)
但是问题是:
• Lack of high quality single speaker data to train a speech synthesis system
对于怎么说,可以控制因素有:
• Intonation (语调), stress (重音), rhythm (韵律) …
• Prosody (抑扬顿挫):Prosody is the variation in speech signals that remains after accounting for variation due to phonetics, speaker identity, and channel effects (i.e. the recording environment).[ Skerry-Ryan, et al, ICM’18]

Controllable TTS vs VC

Controllable TTS的输入是文字,输出是一段文字对应的语音信号,这里要实现抑扬顿挫的效果,还需要附加一份reference audio,使得输出语音信号跟着reference audio语气一样的输出。

VC的输入是语音,输出的是语音,也有reference audio,要用reference audio的特征来念黄色语音信号中的内容。

二者还比较类似。

Controllable TTS的训测

训练时inference audio实际上就是ground truth。我们希望模型可以学习如何从inference audio中抽取语者的特征以及语气等特征。

测试的时候可以换一个人的声音作为inference,那么就可以合成想要的结果。

这样做有一个问题,我们仔细看模型的目标,把reference audio看出输入,实际上是要最小化reference audio和输出的reconstruction error,那么模型就会耍赖,无论你拿什么当reference audio,直接照抄后输出相同的东西,这样的reconstruction error就最小了,从而忽略了文本内容。

这样在测试的时候就变成:

解决这个问题我本来以为是要加另外一个constraint,就是使得输出的语音文字要和输入文字越相近越好。结果不是,而是希望TTS模型只尽量抽取reference audio的语者信息和语调信息,不要抽取文字或者内容信息。因此加一个模块叫:Speaker Embedding,经过这个模型后reference audio就会过滤掉内容信息。

GST-Tacotron

GST = global style tokens
模型吃文字的部分,先将文字经过Encoder按字母转成embedding,然后按Tacotron的思路用attention生成语音合成结果
语音部分,reference audio也会通过Feature Extractor(这个模块是和整个大模型一起训练出来的)得到一个向量,然后将这个向量复制,个数要和Encoder的输出一样多。然后蓝色绿色concat起来,然后走Tacotron的attention的路子。

下面来看为什么Feature Extractor能够过滤掉文本内容?
语音信号经过Encoder得到不是最终结果,而是attention的权重,然后在和一组vector做点乘后相加才得到最后的结果。这组vector是模型学习出来的,也就是global style tokens,他的每个维度对应的是语音的某个style。

调整global style tokens某个维度语音合成的效果就会出现不一样的效果。
• What does the tokens effect?
• One token corresponds to a lower pitch voice
• One token for a decreasing pitch
• One token for a faster speaking rate
具体可视化结果可以看原文。

Two-stage Training

另外一种过滤文本信息的方法就是Two-stage Training,这个方法在VC中有介绍,这个时候训练的文本和语音内容不一样,这个时候没有ground truth。训练的目标不好定,这个时候需要利用GAN的思想在后面接ASR。

看到这里就是上面我提到过的思想。。。

当然还可以加上两个模型attention的对应限制:

李宏毅DLHLP.14.Speech Synthesis.2/2.More than Tacotron相关推荐

  1. 【论文学习】《“Hello, It’s Me”: Deep Learning-based Speech Synthesis Attacks in the Real World》

    <"Hello, It's Me": Deep Learning-based Speech Synthesis Attacks in the Real World>论文 ...

  2. 【论文学习】《A Survey on Neural Speech Synthesis》

    <A Survey on Neural Speech Synthesis>论文学习 文章目录 <A Survey on Neural Speech Synthesis>论文学习 ...

  3. 语音合成(speech synthesis)方向十一:聊一聊增量式语音合成(iTTS)进化史

    声明:工作以来主要从事TTS,VC以及ASR等等相关工作,平时看些文章做些笔记.文章中难免存在错误的地方,还望大家海涵.平时搜集一些资料,方便查阅学习:TTS 论文列表 http://yqli.tec ...

  4. 语音合成(TTS)论文优选:Location-Relative Attention Mechanisms for Robust Long-Form Speech Synthesis

    声明:语音合成(TTS)论文优选系列主要分享论文,分享论文不做直接翻译,所写的内容主要是我对论文内容的概括和个人看法.如有转载,请标注来源. 欢迎关注微信公众号:低调奋进 Location-Relat ...

  5. Speech Synthesis(文字转语音)

    将文字转换成语音. Speech Synthesis是作为一个管理iOS.iPadOS.tvOS.watchOS的语音和语音合成框架.如果要在macOS上使用文字转语音,需要使用NSSpeechSyn ...

  6. GST--Style Tokens: Unsupervised Style Modeling, Control and Transfer in End-to-End Speech Synthesis

    和这篇文章是前后两天出来的 <Towards End-to-End Prosody Transfer for Expressive Speech Synthesis with Tacotron& ...

  7. 语音合成(speech synthesis)方向七:脑机接口之基于脑电图语音合成

    声明:工作以来主要从事TTS工作,平时看些文章做些笔记.文章中难免存在错误的地方,还望大家海涵.平时搜集一些资料,方便查阅学习:TTS 论文列表 http://yqli.tech/page/tts_p ...

  8. 读《STRENGTHNET: DEEP LEARNING-BASED EMOTION STRENGTH ASSESSMENT FOR EMOTIONAL SPEECH SYNTHESIS》

    从客观角度来说,情感信息难以被标记和量化,大多数方法不能准确衡量同一类情感语音之间的强弱差异,多数数据集只有根据情绪分类的粗粒度标签,直接利用标签信息参与训练往往会导致合成情感语音的风格较为平均,表现 ...

  9. html识别文字转语音,Speech Synthesis API入门 - web前端识别文字转语音

    Speech Synthesis API非常容易实现.事实上,只需两行代码即可让您的网络应用与用户交流.const msg = new SpeechSynthesisUtterance("h ...

最新文章

  1. java session原理_java web开发—session的工作原理总结
  2. Element Select下拉框 选中后视图没有渲染等问题
  3. 【要闻】Kubernetes安全问题严峻、Linux v5.4安全性浅谈
  4. .NET Core 学习资料精选:进阶
  5. 深度学习pytorch--多层感知机(二)
  6. 性能超最先进卷积!用Transformer进行图像语义分割!
  7. oracle怎么装系统,【Oracle安装与操作系统用户组】
  8. 由浅入深探究mysql索引结构原理、性能分析与优化
  9. python如何转换数据集_将数据集转换为HDF5数据
  10. sqlserver执行生成rpt文件怎么回事_使用生成脚本功能和数据导出工具实现SQL Server2014数据降级2008R2版本...
  11. swift野梦抄袭 taylor_霉霉Taylor Swift今日出新单,歌词甜腻得让我联想到多年前的那位“野梦男主”!...
  12. dw01均衡电路_电池平衡电路工作原理
  13. 2014网络红人排行榜
  14. python怎么表达我喜欢你的句子_20句暗示“我喜欢你”的告白句子,句句触动人心...
  15. 20行Python小程序批量删除GitHub仓库,包
  16. [LeetCode javaScript] 881. 救生艇
  17. 【转】8家公司笔面试经历-百度-联发科-瑞晟--
  18. 迷你计算机可玩游戏,迷你电脑小主机打游戏可还行?
  19. postgresql源码学习(53)—— vacuum②-lazy vacuum之heap_vacuum_rel函数
  20. 【小甲鱼C语言】课后笔记第一章第四节——数据类型

热门文章

  1. 机器学习之MATLAB代码--SMA_LSSVM(十一)
  2. 使用Vue实现数据可视化大屏功能(二)
  3. python之ATM
  4. mysql 列转行union all_SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理]
  5. 纯html css动画效果,8个超震撼的HTML5和纯CSS3动画源码
  6. 超牛逼的性能调优神器 — 火焰图
  7. 智慧社区的介绍,为什么要做智慧社区
  8. lenet5跑cifar_基于PaddlePaddle2.0-构建卷积网络模型LeNet-5
  9. 大多数linux分区的文件系统,Linux分区、文件系统
  10. 51nod1298 圆与三角形