无音素级时长 TTS 的文本—语音对齐机制对比
七篇工作真正的分水岭不是“用不用 duration”,而是如何先决定长语音序列的总长度,再把短文本序列放到这条时间轴上:前缀 filler、均匀展开、句级长度 + attention、固定窗口,或从 forced alignment 稀疏化出锚点。
| 模型 | 文本→语音时间轴 | 总长度从哪来 | 声学表示 / 主干 | 论文中的可懂度口径 |
|---|---|---|---|---|
| E2 TTS | 字符后补 filler 到 mel 同长,self-attention 隐式对齐 | 外部估计或人为给定 | 100-dim mel / 335M Transformer CFM | LibriSpeech-PC WER 1.9–2.0 |
| F5-TTS | E2 filler + ConvNeXt V2 文本精炼 | 参考语音的字符—帧比例估计 | mel / 336M DiT CFM | Seed test-en 1.83;LS-PC 在不同复现表中 1.88 或 2.42 |
| ZipVoice | phone states 做 Average Upsampling,余数位用 filler | 参考 speech/text ratio 估计 | mel / 123M Zipformer CFM | LibriSpeech-PC WER 1.67–1.68 |
| DiTTo-TTS | token cross-attention 学细粒度对齐 | 独立 Speech Length Predictor | 10.76 Hz Mel-VAE / DiT | continuation 1.78;cross-sentence 2.56;2.93–3.07 为特定小模型/消融 |
| SimpleSpeech | text/speaker/time/duration 作为 diffusion Transformer prefix | 训练用真实句长,推理用 GPT-3.5 估计 | scalar latent / GPT2-like diffusion Transformer | LibriTTS WER 3.3 |
| E3 TTS | BERT token cross-attention | 固定 10.92 s,后处理裁静音 | 24 kHz waveform / 1D U-Net DDPM | 未报 WER/CER;单说话人 MOS 4.24 |
| MegaTTS 3 / S-DiT | 每音素保留一个 sparse anchor,attention 补细节 | 音素时长/锚点来自对齐与 duration 管线 | 25 Hz WaveVAE / LLaMA-style RF Transformer | LibriSpeech 1.82;LibriSpeech-PC 2.31 |
1. 先把两个问题拆开
Section titled “1. 先把两个问题拆开”NAR diffusion/flow TTS 在推理前至少要回答两个问题:
- 长度问题:目标语音要生成 帧/latent tokens?
- 对齐问题: 个文本 tokens 在 个语音位置中分别对应哪些范围?
E2/F5 只取消了第二问的显式音素级答案,第一问仍需给定总时长。DiTTo/SimpleSpeech 把第一问降级为句级预测,第二问交给 attention。E3 用固定窗口回避第一问。MegaTTS 3 则从显式对齐中抽出少量锚点,同时约束两个问题。
2. filler token 与 Average Upsampling 的差别
Section titled “2. filler token 与 Average Upsampling 的差别”- E2/F5:文本仍是前缀,后面的大量位置都是相同 filler。优点是极简;缺点是对齐起点很弱,需更大数据/模型学出单调关系。
- ZipVoice:若 phone 数为 、语音帧数为 ,每个 phone state 重复 次,剩余位置才用 filler。它不是真实时长,但给了更接近帧坐标的粗脚手架。
ZipVoice 删除 Average Upsampling 后 WER 从 1.68 升到 20.19,说明就算“均匀错开”也比“全在前缀后面填空”的起点强得多。
3. cross-attention 不是自动的可懂度保证
Section titled “3. cross-attention 不是自动的可懂度保证”E3、DiTTo 都使用 text cross-attention,但两者结果差异很大:
- E3 在 raw waveform 上做 1000-step DDPM,输出固定 10.92 秒,只报单声道主观 MOS。
- DiTTo 先把语音压到 10.76 Hz,再用经 speech-text 联合预训练或语义注入的表示,并另外预测总长度。
因此真正的组合是 cross-attention + 合适时间分辨率 + 语义对齐的条件/目标 latent + 可靠总长度。只把 attention 模块放进 U-Net/DiT 并不会自动得到稳定 TTS。
4. sparse alignment 是中间点,不属于 alignment-free
Section titled “4. sparse alignment 是中间点,不属于 alignment-free”MegaTTS 3 先获得完整音素时长,再每个音素只留一个锚点。它依然支付了 G2P/aligner 的数据准备成本,但生成器不再被每一帧 hard path 绑定。这是“完整 forced alignment”与“纯隐式 attention”之间的折中。
从消融看,sparse 与 forced 的 WER 几乎一样(1.82 vs 1.80),sparse 的 CMOS 高 0.17;无任何 alignment 时 WER 2.14。因此作者的核心论据是韵律—稳定性折中,不是稀疏对齐在绝对 WER 上胜过完整对齐。
5. WER 为什么不能直接横排
Section titled “5. WER 为什么不能直接横排”用户给出的数字来自至少四种口径:
- LibriSpeech-PC 的不同 prompt 采样/复现实现;
- LibriSpeech continuation 与 cross-sentence 两种任务;
- Seed-TTS test-en;
- LibriTTS test-clean。
同一模型 F5-TTS 就会出现 1.83、1.88、1.96、2.42 等多个值,原因是数据、checkpoint、ASR、prompt 和文本正规化不同。所以这些数字适合说明“该方法在自己设置下已可懂”,不适合作为一张绝对排行榜。
| 研究目的 | 最值得看的方法 | 原因 |
|---|---|---|
| 学极简 mel-flow baseline | E2 TTS / F5-TTS | 最少对齐组件,任务定义清晰 |
| 小模型高效 flow TTS | ZipVoice | 123M Zipformer、粗展开与 4 NFE 蒸馏 |
| 研究 text cross-attention 如何稳定对齐 | DiTTo-TTS | 有完整的长度、latent、语义注入与架构消融 |
| 研究 scalar latent 与 prefix conditioning | SimpleSpeech | SQ-Codec 和句级长度的早期组合 |
| 理解 waveform diffusion TTS 的早期尝试 | E3 TTS | 直接 waveform + cross-attention,但局限也最清楚 |
| 研究强稳定与韵律自由的折中 | MegaTTS 3 / S-DiT | 每音素一锚点,保留 duration control 且减少 hard path 约束 |