NaturalSpeech:先定义“人类水平”,再宣称达到这一标准的模型
多年来,在有人尝试以可检验、而非只能口头断言的方式明确“听起来几乎像真人”究竟应该意味着什么之前,这句话一直是 TTS 营销中的常用说法。由微软亚洲研究院和 Microsoft Azure Speech 开发的 NaturalSpeech 先完成了这项基础工作——把人类水平质量定义为一项具体、可通过统计方法衡量的主张——随后又构建了一套真正为达到这一标准而设计的系统,而不是从营销目标反向推导技术方案。
什么是 NaturalSpeech?
NaturalSpeech 是一个完全端到端的文字到波形合成系统,它通过变分自编码器(VAE)直接根据文字生成音频,而不像许多更早的流水线那样经过分别训练的声学模型和声码器。不过,它最突出的区别并不完全在于架构——在提出模型本身之前,这项研究首先为 TTS 系统中的“人类水平质量”建立了严谨、可检验的定义,以及实际判断某个系统是否达到这一标准的方法。
把“人类水平质量”定义为真正的检验,而不是口号
这是 NaturalSpeech 最独特的贡献,值得仔细理解,因为它改变了后来 TTS 研究报告结果的方式。论文提出的定义是:如果在给定测试集上,通过对比较平均意见分(CMOS)进行正式的假设检验,系统生成语音的质量评分与对应真人录音的质量评分之间不存在统计显著差异,那么这个 TTS 系统就在该测试集上达到了人类水平质量。
将这一标准回溯应用后,研究发现,先前几种备受赞誉的 TTS 系统——尽管各自论文都把它们描述为接近人类水平——实际上并未通过这项具体而严谨的检验。NaturalSpeech 的构建目标就是弥合最后这段差距,而不是仅仅在相对比较中让语音比前一个系统稍好一些。
这一结果背后的四项设计选择
NaturalSpeech 基于 VAE 的架构围绕一个具体问题构建:从文字学习到的“先验”分布与从真实语音学习到的“后验”分布在复杂度上天然存在很大差异,而这种不匹配是合成语音与真实语音之间质量差距的主要来源。以下四项设计元素共同缩小了这一差距:
- 音素预训练。 音素编码器先在大型文本语料库上,针对音素序列使用掩码语言建模进行预训练——在概念上类似于 BERT 对文本的预训练方式——让模型在接触任何配对音频之前,就具备更好的语音结构理解起点。
- 可微分时长建模。 由于时序对非自回归 TTS 尤为关键,NaturalSpeech 使用了作者称为“durator”的组件——这是一个被设计为完全可微分的时长建模组件,使梯度能够在端到端训练期间流经该组件,而不是把时长当作单独优化的附属任务。
- 双向先验/后验建模。 后验(来自真实语音)在帧级运行,而先验(来自文字)在粒度更粗的音素级运行——NaturalSpeech 对二者之间的关系进行双向建模,专门用于缩小它们之间的复杂度差距。
- VAE 中的记忆机制。 新增的记忆组件让模型有更大能力在生成过程中保留和使用相关信息,而不是只依赖每一步的即时潜在表示。
这些选择共同减轻了 VAE 两端的负担——一方面简化后验需要表示的内容,另一方面增强先验仅从文字即可生成的内容——这正是其缩小真人录音差距,而非单纯扩大模型规模的核心策略。
基准测试结果
在广泛使用的单说话人 LJSpeech 数据集上评估时,NaturalSpeech 的 CMOS 评测显示,其结果与真实真人录音之间不存在统计显著差异——恰好达到了这项研究刚刚定义的标准。这里有必要准确说明适用范围:这一结果针对的是单说话人、录音室质量的基准数据集,并不是对任意真实环境语音或多说话人零样本生成的主张,而后者恰好是微软后续工作 NaturalSpeech 2 使用潜在扩散方法试图解决的更困难问题。
NaturalSpeech 入门
与微软另外几个语音研究项目一样,NaturalSpeech 的官方代码和预训练权重没有随论文公开发布。现在可以使用的是一个社区 PyTorch 复现版本:
- 使用社区复现版本。 GitHub 上的
heatz123/naturalspeech项目依据论文描述的架构提供了一个可运行的 PyTorch 实现,其中包括其自身训练运行产生的演示样本。 - 做好自行训练模型的准备。 与大多数仅用于研究的社区复现一样,这通常意味着需要准备自己的数据集并开展训练,而不是下载一个已经完成、可以直接使用的检查点。
- 如果你熟悉 VITS,可以直接对比二者的设计选择。 该复现项目自己的文档将若干组件——音素预训练、可微分 durator,以及帧级后验与音素级先验之间的划分——描述为相对于 VITS 的具体差异;如果你已经了解该架构,这会是一个很有用的参照点。
- 把 LJSpeech 作为自然的起始基准。 原始研究正是在这个数据集上进行评估,因此它是将你自己的训练结果与论文主张进行比较最直接的方式。
理解和使用 NaturalSpeech 的建议
- 正确限定人类水平质量主张的范围。 这是在单说话人基准数据集上经过统计检验的一项具体结果——主张本身确实严谨,但并不证明模型在多说话人、零样本或嘈杂的真实环境音频上也有相同表现,因为这些问题要困难得多。
- 如果你在开展相关研究,请分别研究四个架构组件。 每个组件都针对先验/后验复杂度不匹配中的不同部分——如果你想在其他地方采用类似思路,分别理解它们会比把它们视为一项笼统的改进更有帮助。
- 不要指望获得官方预训练检查点。 微软没有发布这类检查点,因此如果你想直接复现这一架构或以它为基础继续开发,需要为训练预留时间,而不能假定存在捷径。
- 如果你的用例需要零样本或多说话人能力,可以关注 NaturalSpeech 2。 原版 NaturalSpeech 专门面向单说话人、录音室质量的合成进行构建和评估;把系统扩展到多样化说话人和真实环境数据,正是续作使用另一种架构方法要解决的具体问题。
NaturalSpeech 与同期非自回归 TTS 对比
| NaturalSpeech | 典型的早期非自回归 TTS | NaturalSpeech 2(后续模型) | |
|---|---|---|---|
| 核心架构 | 基于 VAE,端到端 | 各不相同(通常为独立的声学模型 + 声码器) | 潜在扩散 + 神经编解码器 |
| 人类水平质量主张 | 正式定义并经过统计检验 | 通常为非正式断言 | 转而关注零样本、多说话人自然度 |
| 最适合的场景 | 单说话人、录音室质量基准 | 各不相同 | 多说话人、零样本、真实环境数据 |
| 时长建模 | 完全可微分(“durator”) | 通常为独立、不可微分的预测器 | 基于扩散的生成,方法完全不同 |
| 官方公开发布 | 无(只有社区复现) | 因项目而异 | 研究论文,无官方公开版本 |
NaturalSpeech 的长远贡献与其说是某个具体架构,不如说是它带来的严谨态度:把“人类水平”变成一项需要检验而不是只需断言的主张;此后,它自己的后续模型以及相当一部分 TTS 研究都受到这一标准影响,并以此方式报告结果。
常见问题
NaturalSpeech 研究中的“人类水平质量”具体是什么意思?
这是一项经过正式定义、可通过统计方法检验的主张:根据 CMOS 假设检验,如果在一个测试集上,TTS 系统生成语音的质量评分与真实真人录音的质量评分之间不存在统计显著差异,那么该系统就在这个测试集上达到了人类水平质量。
NaturalSpeech 真的通过了自己提出的检验吗?
是的,具体是在单说话人 LJSpeech 基准数据集上——其 CMOS 评测显示,模型结果与该测试集中的真实真人录音之间不存在统计显著差异。
我能从微软下载官方 NaturalSpeech 模型权重吗?
不能。微软没有发布原版 NaturalSpeech 的官方代码或预训练权重。虽然存在一个社区 PyTorch 复现版本(heatz123/naturalspeech),但它通常要求你自行训练模型,而不是下载一个已经完成的检查点。
NaturalSpeech 与 NaturalSpeech 2 有何不同?
原版 NaturalSpeech 是一个基于 VAE 的系统,重点面向单说话人、录音室质量的合成,并在这类任务上进行评估。NaturalSpeech 2 则使用结合神经音频编解码器的潜在扩散方法,针对多说话人、零样本、真实环境语音合成这一更困难的问题。
NaturalSpeech 是自回归还是非自回归模型?
非自回归。其基于 VAE 的端到端设计会生成完整波形,无需像早期编解码器语言模型 TTS 系统这类自回归模型那样逐 token 顺序生成。
在浏览器中把文字转换为语音
如果你希望完成相近的“文字 → 单人语音”流程,可以使用 Echora 的文字转语音。输入最多 5,000 个字符,选择内置音色或已保存的自定义音色,按需添加支持的表达标签并调整语音稳定度,然后试听结果并下载生成的 MP3。