韵律建模演进
语音不仅是音素的拼接,音高、时长和能量的动态变化(即韵律)才是让合成语音听起来像人的关键,韵律建模的根本动因是弥合"读对了字"与"说得像人"之间的鸿沟。
Dennis Klatt在MIT开发了Klatt合成器,用手工设计的参数(F0轮廓、共振峰频率、时长规则)控制语音输出。韵律完全由规则驱动——ToBI标注体系定义了英语的音调模式,工程师需要为每种句型编写升降调规则。这一范式确立了韵律作为独立建模对象的传统,但规则的脆弱性使其难以覆盖自然语音的丰富变化。
Tokuda等人将隐马尔可夫模型引入语音合成(HTS系统),F0和时长作为HMM状态输出的一部分被统计建模。决策树聚类将语言学特征(音素身份、词性、句位置等)映射到韵律参数分布。这是从手工规则到数据驱动的关键转折——系统第一次能从数据中"学习"韵律模式,但生成的语音仍带有明显的统计平滑感,缺乏自然语音的细节起伏。
Wang et al.(Google)的Tacotron直接从字符序列预测梅尔频谱,韵律隐含在注意力对齐机制中——模型自动学习每个音素应持续多长、音高如何变化。这消除了对显式韵律标注的依赖,但注意力机制的不稳定性导致跳字、重复和漏字等问题,韵律控制完全不可解释。
Wang et al.提出Global Style Tokens(GST),Skerry-Ryan et al.提出基于VAE的韵律潜在表示。两者的核心思想相同:将韵律从语言内容中解耦为独立的可控变量。用户可以通过选择不同的风格token或在潜在空间中插值来控制合成语音的情感和风格。这开启了可控表达性语音合成的时代。
Ren et al.(Microsoft)的FastSpeech引入显式时长预测器,FastSpeech 2进一步加入F0预测器和能量预测器,形成"方差适配器"(Variance Adaptor)架构。这一设计将韵律的三个维度显式分离建模,既保留了端到端训练的便利,又恢复了对韵律各维度的独立控制能力,成为非自回归TTS的标准范式。
VALL-E(Microsoft)、VoiceCraft(Meta)等基于语言模型的TTS将语音表示为离散codec token序列,韵律信息被编码在token中。但LLM的自回归采样倾向于生成训练集的"平均"韵律,缺乏特定说话人的风格特征。
如今日论文[21]所示,研究者在LLM-TTS框架中重新引入显式韵律预测模块,通过动态分析目标说话人的韵律模式并在生成时注入,显著提升说话人相似度。这标志着韵律建模在经历了"显式→隐式→显式回归"的螺旋演进后,进入了新的融合阶段。
韵律建模的数学核心是预测三个时变序列:基频 $F_0(t)$、音素时长 $d_i$ 和帧能量 $e(t)$。时长预测:给定音素隐藏表示 $h_i$,时长预测器输出帧数 $\hat{d}_i = \text{ReLU}(\text{Linear}(\text{Conv1D}(h_i)))$。训练损失在对数域计算:$\mathcal{L}_{dur} = \sum_{i=1}^{N} (\log \hat{d}_i - \log d_i^{*})^2$,取对数是因为时长分布呈正偏态,对数变换使其更接近高斯,有利于MSE回归。真实时长 $d_i^{*}$ 由强制对齐工具(如Montreal Forced Aligner)从配对音频中提取。F0预测:帧级隐藏表示 $h'_t$(经Length Regulator按预测时长展开)输入F0预测器得到 $\hat{f}_t$。F0值通过量化嵌入注入主干:先将连续F0量化到 $B$ 个等宽bin,再通过可学习嵌入层转换为向量 $e_{f_0}(t) = \text{Embedding}(\text{Quantize}(\hat{f}_t, B))$。量化的动机是避免将Hz量纲的连续值(50–500Hz)直接与隐藏表示相加引起的尺度不匹配。方差适配器融合:三个韵律维度通过加法注入解码器输入:$h''_t = h'_t + e_{f_0}(t) + e_{energy}(t)$。加性融合假设韵律与内容在表示空间中近似正交可叠加,这是简化但实践有效的假设。VAE韵律建模:在风格可控场景中,韵律被建模为潜在变量 $z$,后验 $q_\phi(z|x) = \mathcal{N}(\mu_\phi(x), \sigma^2_\phi(x))$,训练目标为 $\mathcal{L} = \mathcal{L}_{recon} + \beta \cdot D_{KL}(q_\phi(z|x) \| p(z))$,其中 $\beta$ 控制解耦程度——$\beta$ 过大导致韵律信息被压缩丢失(posterior collapse),过小则潜在空间不够规整,无法实现平滑的风格插值。
韵律建模的整体逻辑是从文本中提取语言学线索,显式预测音高、时长和能量三个超音段维度,并将其注入合成管线以控制语音的自然度和表现力。
从输入文本中提取影响韵律的语言学信息。音素编码器(通常为Transformer或带卷积的BERT变体)将音素序列编码为隐藏表示 $\mathbf{h} = (h_1, ..., h_N)$。编码器需要捕捉的关键信息包括:音素身份、词边界位置、句法结构(疑问句句末需升调)、重音标记等。为什么不直接用字符或子词:音素是语音学的最小单位,与声学实现有最直接的对应关系。如今日论文[27] CraBERT所示,通过将预训练子词BERT的知识通过对齐算法迁移到音素级编码器,可以同时获得语义理解能力和音素级精度。关键细节:中文等声调语言需要额外编码声调信息,因为声调本身就是韵律的一部分且具有区别意义。
将音素级表示展开为帧级表示。时长预测器为每个音素预测其持续的梅尔频谱帧数,Length Regulator将音素级隐藏状态按预测时长复制展开:若音素 $p_i$ 预测持续 $d_i$ 帧,则 $h_i$ 被复制 $d_i$ 次。这是非自回归TTS的关键创新——它将"何时说什么"的对齐问题从注意力机制中解耦出来,彻底消除了Tacotron中注意力失败导致的鲁棒性问题。为什么时长预测如此重要:时长决定了语速和节奏,是韵律中最容易被感知的维度。同一句话用不同节奏说出来,传达的情感和语义重点完全不同。推理时可通过全局缩放 $d'_i = \alpha \cdot \hat{d}_i$ 控制语速,或对特定音素局部调整实现重读效果。训练时长预测器需要外部对齐工具提供的真实时长标注,这是一个额外的数据准备步骤。
在帧级表示上预测基频轮廓和能量包络。F0预测器和能量预测器结构类似(2–3层Conv1D + Linear),但建模对象的物理含义不同:F0反映声带振动频率,决定音高感知;能量反映信号幅度,影响响度和重音感知。预测结果通过量化+嵌入转换为向量后加到帧级隐藏表示上。为什么用量化嵌入而非直接加连续值:F0的Hz值和能量的dB值与隐藏表示的数值范围不在同一量级,直接相加会导致梯度被韵律分支主导或淹没。量化到256个bin后通过可学习嵌入,让模型自己学习合适的表示尺度和非线性映射。关键细节:F0仅在浊音帧有定义(清音段声带不振动),需要对unvoiced帧做特殊处理——常见策略是插值、置零或使用额外的voiced/unvoiced二分类器。不同说话人的F0范围差异巨大(成年男性约80–200Hz,成年女性约150–400Hz),多说话人系统需要说话人归一化或条件化。
将预测的韵律特征注入解码器生成最终频谱。在FastSpeech 2中采用简单的加性融合 $h''_t = h'_t + e_{f_0}(t) + e_{energy}(t)$;在GST