TTS系统长期面临一个根本矛盾:自然语音的韵律(时长、停顿、语调)是高度动态的,而早期系统只能生成"平均化"的机械语音——这一矛盾驱动了时长建模从隐式到显式、从粗粒度到细粒度的整条演进路线。
早期TTS(如Bell Labs的Vocoder)直接拼接预录音素片段,时长由规则字典硬编码,完全不具备上下文感知能力。停顿只能靠标点符号触发固定静音帧,韵律极度机械。这一阶段奠定了"时长是独立可控变量"的基本认知。
以Tokuda等人在ICASSP 1995提出的HMM-TTS为代表,时长建模首次被纳入统计框架:用独立的Duration HMM对每个音素的帧数建模,均值和方差从语料中学习。这是"数据驱动时长"的起点,但HMM假设帧间独立,生成语音仍显平滑过度(over-smoothing),缺乏自然的局部变化。
Google的Tacotron(Wang et al., 2017)彻底抛弃显式时长模型,改用seq2seq+注意力机制让模型自己学习文本到声学帧的对齐。这带来了显著的自然度提升,但也引入了注意力跳帧、重复、崩溃等稳定性问题,且时长完全不可控——用户无法干预某个词说多快。
Ren et al.(Microsoft, 2019, NeurIPS)提出FastSpeech,核心创新是引入显式Duration Predictor:一个轻量CNN网络预测每个音素对应的帧数,再通过Length Regulator将音素序列扩展到帧序列。这使推理速度提升270倍(并行非自回归),且时长可直接缩放控制语速。FastSpeech 2(2020)进一步引入pitch和energy预测器,构成完整的细粒度韵律控制体系。
以Grad-TTS、Voicebox(Meta, 2023)、Matcha-TTS为代表,时长建模被整合进连续流匹配框架:Monotonic Alignment Search(MAS)或外部对齐器提供软对齐,扩散/流过程在对齐后的帧空间上建模声学细节。时长控制从"整数帧数"升级为"连续时长分布采样",兼顾可控性与自然度。
MAGIC-TTS等工作将控制粒度推进到单个令牌(subword/phoneme)级别的时长和停顿,支持毫秒级精确操控,面向有声书、配音、辅助沟通等对时序精度要求极高的场景。
设文本序列为 $\mathbf{x} = (x_1, x_2, \ldots, x_N)$,对应声学帧序列为 $\mathbf{y} = (y_1, y_2, \ldots, y_T)$,其中 $T \gg N$。 Duration Predictor 的目标是学习映射 $d_i = f_\theta(x_i, \mathbf{c})$,其中 $d_i \in \mathbb{Z}^+$ 为第 $i$ 个音素的帧数,$\mathbf{c}$ 为上下文(如句子级韵律嵌入)。训练时用MSE损失(对数域更稳定): $$\mathcal{L}_\text{dur} = \frac{1}{N} \sum_{i=1}^{N} \left( \log \hat{d}_i - \log d_i^* \right)^2$$ 其中 $d_i^*$ 由强制对齐工具(MFA、Montreal Forced Aligner)从真实语音中提取,取对数是因为时长分布高度右偏(少数音素极长)。 Length Regulator 将音素表示扩展为帧级表示: $$\mathbf{H}_\text{mel} = \text{LR}(\mathbf{H}_\text{phoneme},\ \mathbf{d}) = \bigoplus_{i=1}^{N} \underbrace{h_i, h_i, \ldots, h_i}_{d_i \text{ 次}}$$ 其中 $\bigoplus$ 表示拼接,$h_i$ 为第 $i$ 个音素的隐向量重复 $d_i$ 次。 停顿建模可视为特殊的静音音素 $\langle\text{sil}\rangle$,其时长 $d_\text{sil}$ 由独立分支预测,或通过条件变量 $p_i \in \{0,1\}$ 指示是否在第 $i$ 个词后插入停顿,时长从 $\mathcal{N}(\mu_p, \sigma_p^2)$ 采样。 推理时,用户可通过缩放因子 $\alpha$ 控制整体语速:$\hat{d}_i \leftarrow \lfloor \alpha \cdot \hat{d}_i \rceil$,或对特定音素单独设置 $d_i = d_\text{target}$ 实现精确时序控制。
TTS时长控制系统的整体逻辑是:先从文本提取语言特征,再预测每个单元的时长,然后将音素级表示扩展为帧级表示,最后在帧级空间生成声学特征——时长预测是连接语言空间与声学空间的"时间桥梁"。
做什么:用Montreal Forced Aligner(MFA)或CTC强制对齐,从(文本, 音频)对中提取每个音素的起止时间戳,转换为帧数 $d_i^*$。 为什么这样设计:Duration Predictor是监督学习,必须有ground truth时长标签。注意力机制虽能隐式对齐,但对齐质量不稳定且不可直接读取为整数帧数。MFA基于HMM-GMM,对齐精度在10ms级别,足够TTS使用。 关键细节:对齐在音素级而非字符级进行,需要G2P(Grapheme-to-Phoneme)转换;静音帧单独标注为 $\langle\text{sil}\rangle$ 音素;帧移通常为10ms(80样本@8kHz或160样本@16kHz)。
做什么:在音素编码器输出的隐向量 $\mathbf{H}$ 上,用轻量网络预测每个音素的时长。 为什么这样设计:FastSpeech用2层Conv1D+LayerNorm+ReLU+Linear,参数量极小(<1M),因为时长预测是相对低维的回归任务,不需要复杂容量。在对数域预测($\log d$)而非直接预测 $d$,是因为时长分布是对数正态的——"a"在快语速下可能1帧,慢语速下可能20帧,对数域使分布更对称,MSE损失更有效。 关键细节:推理时对预测值取指数再四舍五入得到整数帧数:$d_i = \text{round}(\exp(\hat{d}_i))$;MAGIC-TTS等工作在此基础上引入条件变量(如情感标签、语速标量)作为额外输入,实现条件化时长控制。
做什么:将音素级隐向量序列 $(h_1, \ldots, h_N)$ 按时长 $(d_1, \ldots, d_N)$ 重复扩展为帧级序列,总长度 $T = \sum_i d_i$。 为什么这样设计:这是非自回归并行生成的关键——扩展后的帧级序列可以并行送入声学解码器,无需逐帧自回归。相比注意力对齐,Length Regulator保证了严格的单调对齐(每帧只对应一个音素),消除了跳帧和重复问题。 关键细节:停顿控制通过在特定位置插入额外的 $\langle\text{sil}\rangle$ 帧实现;MAGIC-TTS支持在任意两个令牌之间插入指定时长的停顿,实现毫秒级精确控制。
python def length_regulator(H, durations): # H: [N, d_model], durations: [N] (integers) frames = [] for i, d in enumerate(durations): frames.extend([H[i]] * d) # 重复d次 return torch.stack(frames) # [T, d_model]做什么:在扩展后的帧级表示上,用Transformer/Conformer解码器生成Mel频谱,同时可联合预测pitch(F0)和energy曲线。 为什么这样设计:时长控制只解决了"每个音素说多久",但自然语音的韵律还包括音调变化(pitch)和响度变化(energy)。FastSpeech 2引入Pitch Predictor和Energy Predictor,三者(时长、音调、能量)共同构成完整的细粒度韵律控制体系,且三者在帧级对齐后可独立控制,互不干扰。 关键细节:Pitch用连续F0曲线表示(对数域),通过WORLD声码器或CREPE提取;推理时可对F0曲线进行移调(整体升降)或局部修改(强调某个词);与时长控制组合,可实现"慢速+高音调"等复合韵律效果。
做什么:用户通过API指定特定令牌的目标时长(毫秒)或停顿位置,系统将其转换为帧数并覆盖预测值。 为什么这样设计:对于有声书配音、视频配音、辅助沟通设备等场景,自动预测的时长可能与视频时间轴或用户意图不符,必须支持精确覆盖。MAGIC-TTS的创新在于将此能力暴露为一等公民接口,而非事后的音频拉伸(拉伸会引入音质损失)。 关键细节:时长覆盖在Length Regulator之前进行,确保声学生成在正确的时间尺度上进行;对于极端时长(如要求1个音素持续500ms),需要额外的稳定性处理(如重复帧的平滑插值)。
FastSpeech系列已成为工业界非自回归TTS的标准架构,被微软Azure TTS、字节跳动、科大讯飞等广泛采用。显式时长控制使有声书制作、视频配音、语言学习应用成为可能——用户可精确控制每个词的发音时长。在辅助沟通设备(AAC)领域,时长控制是保障沟通自然度的核心能力。随着多模态生成(视频+语音同步)需求增长,帧级精确时序控制的价值将持续提升。
当前热点包括:①连续时长建模(用扩散/流匹配替代整数帧数,避免量化误差);②跨语言时长迁移(不同语言的音素时长分布差异极大);③基于LLM的韵律预测(用大模型理解语义后预测更自然的时长分布);④实时流式场景下的时长预测(必须在看到完整句子前做出决策)。核心开放问题:如何在不牺牲自然度的前提下实现毫秒级精确时序控制。