当前位置: 首页 > 编程日记 > 正文

FastSpeech语音合成系统技术升级,微软联合浙大提出FastSpeech2

来源 | 微软研究院AI头条(ID: MSRAsia)

编者按:基于深度学习的端到端语音合成技术进展显著,但经典自回归模型存在生成速度慢、稳定性和可控性差的问题。去年,微软亚洲研究院和微软 Azure 语音团队联合浙江大学提出了快速、鲁棒、可控的语音合成系统 FastSpeech,近日研究团队又将该技术升级,提出了 FastSpeech 2 和 FastSpeech 2s,在提升语音合成质量的同时,大大简化了训练流程,减少了训练时间,加快了合成速度。

近年来,以 FastSpeech 为代表的非自回归语音合成(Text to Speech, TTS)模型相比传统的自回归模型(如 Tacotron 2)能极大提升合成速度,提升语音鲁棒性(减少重复吐词、漏词等问题)与可控性(控制速率和韵律),同时达到相匹配的语音合成质量。但是,FastSpeech 还面临以下几点问题:

  • FastSpeech 依赖 Teacher-Student 的知识蒸馏框架,训练流程比较复杂;

  • 由于知识蒸馏,FastSpeech 的训练目标相比真实语音存在信息损失,同时从 Teacher 模型获得的时长(Duration)信息不够准确,两者都会影响合成语音质量。

为了解决上述问题,微软亚洲研究院和微软 Azure 语音团队联合浙江大学提出了FastSpeech 的改进版 FastSpeech 2,它抛弃了 Teacher-Student 知识蒸馏框架降低训练复杂度,直接用真实的语音数据作为训练目标避免信息损失,同时引入了更精确的时长信息和语音中的其它可变信息(包括音高(Pitch)和音量(Energy)等)来提高合成的语音质量。基于 FastSpeech 2,我们还提出了加强版 FastSpeech 2s 以支持完全端到端的从文本到语音波形的合成,省略了梅尔频谱的生成过程。实验结果表明,FastSpeech 2 和 2s 在语音质量方面优于 FastSpeech,同时大大简化了训练流程减少了训练时间,还加快了合成的速度。

FastSpeech 2 和 2s 的样例音频网址已经公开在:

https://speechresearch.github.io/fastspeech2/

论文公开在:https://arxiv.org/pdf/2006.04558.pdf

模型框架

图1:FastSpeech 2 和 2s 模型框架。图1(b)中的 LR 表示 FastSpeech 中的序列长度适配操作,图1(c)中的 LN 表示层归一化,可变信息预测器(variance predictor)包括时长、音高和能量预测器。

主架构

FastSpeech 2 的模型架构如图1(a)所示,它沿用 FastSpeech 中提出的 Feed-Forward Transformer(FFT)架构,但在音素编码器和梅尔频谱解码器中加入了一个可变信息适配器(Variance Adaptor),从而支持在 FastSpeech 2 和 2s 中引入更多语音中变化的信息,例如时长、音高、音量(频谱能量)等,来解决语音合成中的一对多映射问题(文本到语音合成中,一条文本可以对应到多条可变的语音,这些可变信息包括语音时长、音高、音量等。FastSpeech 通过知识蒸馏降低语音训练目标的变化性来缓解一对多映射问题,但也造成了训练目标的信息损失。FastSpeech 2 通过引入对应的可变信息作为解码器输入,使输入输出信息尽量匹配,来解决这个问题)。

可变信息适配器(Variance Adaptor)

可变信息适配器如图1(b)所示,包含了多种可变信息的预测器。在本工作中引入了时长预测器、音高预测器和能量预测器。在训练时,模型直接使用可变信息的真实值,与编码器的输出融合,作为解码器的输入,同时训练预测器使其拟合真实的可变信息。在推理阶段,模型使用预测器预测的可变信息。

可变信息预测器如图1(c)所示,由 ReLU 激活的2层一维卷积网络组成,每个网络后加上 Layer Norm 和 Dropout,以及最后输出标量的线性层。这个模块堆叠在音素编码器之上,并与 FastSpeech 2 模型共同训练,使用均方误差(MSE)作为损失函数。可变信息预测器的输出是对应的可变信息序列。其中音高预测器的输出是梅尔频谱对应的音高序列,能量预测器的输出是梅尔频谱的能量序列,而时长预测器的输出是音素的时长序列,与 FastSpeech 中的时长信息提取方式(使用自回归 Teacher 模型提取时长信息)不同,FastSpeech 2 使用一种开源的文字语音对齐工具(Montreal Forced Aligner, MFA)来提取更精准的时长信息。

FastSpeech 2s

在 FastSpeech 2 的基础上,我们提出了 FastSpeech 2s 以实现完全端到端的文本到语音波形的合成。FastSpeech 2s 引入了一个波形解码器,如图1(d)所示,它以可变信息适配器的输出隐层序列为输入,以波形为输出。在训练时,为了帮助可变信息预测器的训练,梅尔频谱解码器及其训练损失函数被保留。在生成阶段,将梅尔频谱解码器丢弃后,使其成为一个文本到波形的端到端系统。

实验评估

为了验证 FastSpeech 2 和 2s 的有效性,我们从声音质量、训练和生成速度、可变信息分析、可控制性几个方面来进行评估和分析。

声音质量

我们选用 LJSpeech 数据集进行实验,LJSpeech 包含13100个英语音频片段和相应的文本,音频的总长度约为24小时,并对测试样本作了权威的 MOS 测试,每个样本至少被20个英语母语评测者评测。MOS 指标用来衡量声音接近人声的自然度和音质。对比我们的方法与以下语音样本:1) GT(Ground Truth),真实音频数据;2) GT (Mel + PWG),用 Parallel WaveGAN(PWG)作为声码器(Vocoder)将真实梅尔频谱转换得到的音频;3) Tacotron 2 (Mel + PWG);4) Transformer TTS (Mel + PWG);5) FastSpeech(Mel + PWG)。

从结果(如表1所示)中可以看出,FastSpeech 2 和 2s 的音质优于 FastSpeech,这证明了利用真实语音目标来训练模型的优势,同时也显示了通过提供额外的可变信息(音高、能量和更准确的音素时长)以解决一对多映射的有效性。

表1:语音合成质量 MOS 测试

训练速度和合成速度

我们将 FastSpeech 2 和 2s 与具有相似参数量的 FastSpeech 的训练速度和合成语音速度作对比(结果如表2所示)。可以看出,在训练速度上,由于 FastSpeech 2 去除了蒸馏的过程,该模型可以实现3倍的训练加速。在合成语音速度上,它可以在单卡上实现近205倍实时的毫秒级的端到端语音合成。在波形生成速度上,比自回归的 Transformer TTS 提速将近170倍。

表2: FastSpeech 2 和 2s 与 FastSpeech 的训练速度和合成速度作对比。RTF 代表合成1秒的音频需要的时间。训练和测试的时间统计均在 36 Intel Xeon CPU,256GB内存和单张 V100 GPU 上进行,批大小分别是48和1。

可变信息调节

FastSpeech 2 可以在模型中调节语速、音高和能量。这里展示音高调节效果,通过实验发现,将音高降低到 0.75x 或者升高到 1.5x,生成的语音均很清晰且不失真(结果如图2所示)。

图2:音高调节实验。红色曲线代表修改后的基频曲线。对应的文本是:“They discarded this for a more completely Roman and far less beautiful letter.”

消融对比实验

我们也比较了模型中一些重要组件和方法(包括引入音高、能量和更准确的时长信息)对生成音质效果的影响,通过 CMOS 的结果来衡量影响程度。由表3和表4可以看出,这些组件和方法确实有助于模型效果的提高。

表3:从 Teacher 模型和 MFA 得到的 Duration 对比

表4:消融实验

未来工作

未来,我们将在 FastSpeech 2 中尝试引入更多的可变信息来提高并行语音合成的音质,并且尝试更加轻量的模型,从而进一步提升生成语音的速度。

我们一直致力于语音方面的研究,包括文本到语音合成、低资源语音合成与识别、语音翻译、歌声及音乐合成等。欢迎关注我们语音方面的研究工作:https://speechresearch.github.io/

论文链接:

[1] FastSpeech: Fast, Robust and Controllable Text to Speech

paper: https://arxiv.org/pdf/1905.09263.pdf

demo: https://speechresearch.github.io/fastspeech/

article (Chinese): https://mp.weixin.qq.com/s/aHupAjPNFdUdaG9Uof_obQ

article (English): https://www.microsoft.com/en-us/research/blog/fastspeech-new-text-to-speech-model-improves-on-speed-accuracy-and-controllability/

[2] FastSpeech 2: Fast and High-Quality End-to-End Text to Speech

paper: https://arxiv.org/pdf/2006.04558.pdf

demo: https://speechresearch.github.io/fastspeech2/

本文作者:任意、胡晨旭、谭旭、秦涛、赵晟、赵洲、刘铁岩

推荐阅读
  • 图灵奖得主Judea Pearl:从“大数据革命”到“因果革命”

  • Python 玩出花儿了!一文教你用 Python 制作吃豆人游戏 | 附代码

  • 陆奇:疫情下的创业者,最不能缺两大能力

  • 时隔 15 年,苹果的自研 ARM 芯片为何能取代 Intel 处理器?

  • 程序员端午炫富指南~

  • 科普 | 哈希函数的过去、现在与未来

你点的每个“在看”,我都认真当成了AI

相关文章:

如果有大型 Web 应用程序,可考虑执行预批编译

每当发生对目录的第一次请求时都会执行批编译。如果目录中的页面没有被分析并编译,此功能会成批分析并编译目录中的所有页面,以便更好地利用磁盘和内存。如果这需要很长时间,则将快速分析并编译单个页面,以便请求能被处理。此功能…

深入理解javascript函数系列第二篇——函数参数

前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同。函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数。本文是深入理解javascript函数系列第二篇——函数参数 arguments javascript中的函数定义并…

linux下如何查看某个软件 是否安装??? 安装路径在哪???

<1>.在linux下如何判断是否已经安装某个软件&#xff1f; 我的系统是red hat我用命令rpm查是否安装了某个软件&#xff08;例如&#xff1a; matlab 与 fluent &#xff09;&#xff0c;得到了如下的结果&#xff1a;我用rpm -qa &#xff08;| grep&#xff09; matlab …

适当地使用公共语言运行库的垃圾回收器和自动内存管理

小心不要给每个请求分配过多内存&#xff0c;因为这样垃圾回收器将必须更频繁地进行更多的工作。另外&#xff0c;不要让不必要的指针指向对象&#xff0c;因为它们将使对象保持活动状态&#xff0c;并且应尽量避免含 Finalize 方法的对象&#xff0c;因为它们在后面会导致更多…

AI又进阶!除了鉴别PS图片,还能一键卸妆

作者 | 马超编辑 | 伍杏玲封图 | 视觉中国出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;最近CVPR2020的论文集合在GitHub火了&#xff0c;CVPR2020-Paper- Code 的项目&#xff08;https://github.com/extreme-assistant/CVPR2020-Paper-Code-Interpretation&#…

[转]Git忽略规则及.gitignore规则不生效的解决办法

在git中如果想忽略掉某个文件&#xff0c;不让这个文件提交到版本库中&#xff0c;可以使用修改根目录中 .gitignore 文件的方法&#xff08;如无&#xff0c;则需自己手工建立此文件&#xff09;。这个文件每一行保存了一个匹配的规则例如&#xff1a; # 此为注释 – 将被 Git…

改善代码设计 —— 简化条件表达式(Simplifying Conditional Expressions)

系列博客 1. 改善代码设计 —— 优化函数的构成(Composing Methods) 2. 改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects) 3. 改善代码设计 —— 组织好你的数据(Composing Data) 4. 改善代码设计 —— 简化条件表达式(Simplifying Conditional Express…

必要时调整应用程序每个辅助进程的线程数

ASP.NET 的请求结构试图在执行请求的线程数和可用资源之间达到一种平衡。已知一个使用足够 CPU 功率的应用程序&#xff0c;该结构将根据可用于请求的 CPU 功率&#xff0c;来决定允许同时执行的请求数。这项技术称作线程门控。但是在某些条件下&#xff0c;线程门控算法不是很…

嵌入式开发「坑」太多?MathWorks 高级工程师教你 debug

文/ 朱雪妍据博思数据发布的《2018-2023年中国嵌入式软件行业市场发展现状调研与投资趋势前景分析报告》表明&#xff1a;2018年上半年我国嵌入式系统软件收入达4240.2亿元&#xff0c;累计增长6.6%&#xff0c;并将持续保持高速增长。嵌入式系统是当前最热门、最具发展前途的I…

[转]cocos2d-js 3.0 屏幕适配方案 分辨率适应

首先介绍一个api和相应的参数&#xff1a; cc.view.setDesignResolutionSize(1024, 768, cc.ResolutionPolicy.FIXED_WIDTH); 这里设置游戏制作的目标尺寸和显示的模式。 模式包括&#xff1a; cc.ResolutionPolicy {// The entire application is visible in the specified a…

两个程序员的泰国普吉岛之行

十一长假后&#xff0c;我和女朋友一起去了普吉岛游玩&#xff08;作为两个程序员&#xff0c;不能每天敲代码&#xff0c;也应该放松下自己&#xff09;&#xff0c;玩的很Happy&#xff0c;也是我们第一次出国&#xff0c;所以更带有许多兴奋。也许是由于玩的太High&#xff…

使用 HttpServerUtility.Transfer 方法在同一应用程序的页面间重定向

采用 Server.Transfer 语法&#xff0c;在页面中使用该方法可避免不必要的客户端重定向。

90行Python代码,让张小龙的微信地球转起来

作者 | xiaorang来源 | 数据分析与统计学之美1.微信地球手机重启后打开微信的一瞬间&#xff0c;会看到一幅有名的图片&#xff0c;上面站着一个张小龙。你可曾想过这样一个问题&#xff0c;如果上面那个地球转起来会是怎样&#xff1f;2.效果图效果简直不要太酷炫&#xff0c;…

70.打印所有Spring boot载入的bean【从零开始学Spring Boot】

【从零开始学习Spirng Boot—常见异常汇总】 问题的提出&#xff1a; 我们在开发过程当中&#xff0c;我们可能会碰到这样的问题&#xff1a;No qualifying bean 就是我们定义的bean无法进行注入&#xff0c;那到底是什么原因呢&#xff0c;有时候挺难定位的&#xff0c;当然这…

了解 C# “.NET研究”4 中的 Dynamic 关键字

dynamic 关键字和动态语言运行时 (DLR) 是 C# 4 和 Microsoft .NET Framework 4 中的重大新增功能。 这些功能在宣布时就引起了人们的极大兴趣&#xff0c;并伴随着许多疑问。 同时人们也给出了很多答案&#xff0c;但这些答案现在已散布于各种文档以及各种技术博客和文章之中。…

“我,懂数据,不怕被裁”:这项核心能力到底有多香?

我见过市面上很多的 Python 讲解教程和书籍&#xff0c;他们大都这样讲 Python 的&#xff1a;先从 Python 的发展历史开始&#xff0c;介绍 Python 的基本语法规则&#xff0c;Python 的 list, dict, tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0…

使请求管线内的所有模块尽可能高效

请求管线内的所有模块在每次请求中都有机会被运行。因此&#xff0c;当请求进入和离开模块时快速地触发代码至关重要&#xff0c;特别是在不使用模块功能的代码路径里。分别在使用及不使用模块和配置文件时执行吞吐量测试&#xff0c;对确定这些方法的执行速度非常有用。

PHP smarty缓存

缓存一个页面 test.php <?php//定义该页面缓存文件存放的路径 $filename "../cache/cachetest.html";//定义缓存有效期 $cachetime 5;//判断缓存文件是否存在 if(!file_exists($filename) || filemtime($filename)$cachetime<time()) {//开启内存缓存ob_sta…

在 Visual Basic .NET 或 JScript 代码中使用早期绑定

以往&#xff0c;开发人员喜欢使用 Visual Basic、VBScript 和 JScript 的原因之一就是它们所谓“无类型”的性质。变量不需要显式类型声明&#xff0c;并能够简单地通过使用来创建它们。当从一个类型到另一个类型进行分配时&#xff0c;转换将自动执行。不过&#xff0c;这种便…

Use MVS Dsbame convensions. windows下ftp.exe客户端上传错误

环境:主机 220-FTPD1 IBM FTP CS V1R11 at BT11 windows下的ftp.exe客户端 现象:windows下ftp.exe命令上传文件,报"Use MVS Dsbame convensions." 错误 原因: 主要是IBM FTP Server 文件系统的命名规范造成的: 8个基本字符 解决: 通过 cd 根目录.目录1.目录2----…

算法对建筑业的影响,不仅仅是画图

拿什么来拯救&#xff0c;这些奇葩的设计&#xff1f;奇葩造型位于英国伦敦芬乔奇街 20 号的一座摩天大楼&#xff0c;由于造型像「对讲机」&#xff0c;被取外号「对讲机大楼」。其实造型奇葩倒没什么&#xff0c;也有一些人觉得还挺好看。但问题是&#xff0c;建成之后&#…

如何参与团队合作?

现在&#xff0c;团队合作就是竞争力。随着市场竞争的日益激烈&#xff0c;企业更加强调团队精神&#xff0c;建立群体共识&#xff0c;以达到更高的工作效率。特别是有遇到大型项目时&#xff0c;想凭借一己之力去取得卓越的成果&#xff0c;可能非常困难。想必你也意识到&…

200 个工具分析机器学习十年:开源是大势,工程师是核心

【编者按】人工智能和机器学习经过十年多的发展&#xff0c;在过去的几年间&#xff0c;各类工具数量迎来了持续的爆发式的增长&#xff0c;机器学习也正式由科研走进工业生产阶段。本文作者 —— 来自硅谷一家初创公司的计算机科学家 Chip Huyen 梳理挖掘出 202 个机器学习工具…

将调用密集型的 COM 组件迁移到托管代码

.NET Framework 提供了一个简单的方法与传统的 COM 组件进行交互。其优点是可以在保留现有投资的同时利用新的平台。但是在某些情况下&#xff0c;保留旧组件的性能开销使得将组件迁移到托管代码是值得的。每一情况都是不一样的&#xff0c;决定是否需要迁移组件的最好方法是对…

性能优化工具 MVC Mini Profiler

MVC MiniProfiler是Stack Overflow团队设计的一款对ASP.NET MVC、WebForm 以及WCF 的性能分析的小程序。可以对一个页面本身&#xff0c;及该页面通过直接引用、Ajax、Iframe形式访问的其它页面进行监控,监控内容包括数据库内容&#xff0c;并可以显示数据库访问的SQL&#xff…

刷新UITableView

【from】http://www.superqq.com/blog/2015/08/18/ios-development-refresh-uitableview/ UITableView对于iOS开发者来说一定不会陌生&#xff0c;很有可能你的APP很多界面都用到它。关于UITableView的文章&#xff0c;想必已经不计其数&#xff0c;没事可以多看看。特别是UITa…

算术运算中隐式类型转换

转载于:https://www.cnblogs.com/strider/articles/2220313.html

高文、张钹、杨强隔空论道:AI精度与隐私的博弈

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;AI时代&#xff0c;如何保护大众的隐私&#xff1f;以联邦学习为代表的AI技术能否实现AI协作&#xff0c;提升模型精度的同时&#xff0c;实现数据隐私的保护&#xff1f;中国如何抢占人工智能安全发展的制高点&#x…

避免单线程单元 (STA) COM 组件

默认情况下&#xff0c;ASP.NET 不允许任何 STA COM 组件在页面内运行。若要运行它们&#xff0c;必须在 .aspx 文件内将 ASPCompattrue 属性包含在 Page 指令中。这样就将执行用的线程池切换到 STA 线程池&#xff0c;而且使 HttpContext 和其他内置对象可用于 COM 对象。前者…

将 SQL Server 存储过程用于数据访问

在 .NET Framework 提供的所有数据访问方法中&#xff0c;基于 SQL Server 的数据访问是生成高性能、可缩放 Web 应用程序的推荐选择。使用托管 SQL Server 提供程序时&#xff0c;可通过使用编译的存储过程而不是特殊查询获得额外的性能提高。