TTS GRPO Test-time
Zero-shot TTS

VoiceTTA: test-time RL подстраивает zero-shot TTS под редкие стили речи

S-SIM 0.64

VoiceTTA атакует слабое место zero-shot TTS: модель хорошо копирует “обычный” голос из референса, но хуже переносит редкие стили — акцент, детскую речь, смазанную артикуляцию, сценические реплики или диалекты. Вместо fine-tuning на новом датасете авторы делают test-time adaptation: на каждом prompt-е оптимизируются маленькие learnable prefixes, а веса TTS-модели остаются замороженными.

Как устроена адаптация

Backbone — F5-TTS на flow matching. В первый DiT layer добавляются 4 learnable prefixes. Для каждого test sample модель генерирует несколько кандидатов, получает reward и обновляет только prefixes через GRPO. Это похоже на “мини-RLHF на лету”, но с очень узкой областью действия: не перепрошить голосовую модель, а чуть сдвинуть conditioning под конкретный референс.

Reward составной. Два компонента измеряют стиль через coefficient of variation для F0 и energy, третий — speaker similarity, четвертый — intelligibility через WER по Whisper-Large V3. Последний компонент важен: без него модель легко начинает имитировать странность референса ценой разборчивости.

Эксперименты

  • Внутренний набор: 200 samples с uncommon styles — 90 accented, 40 children, 30 slurred, 40 Chinese sketches.
  • Для диалектов: 160 utterances из KeSpeech, по 20 на каждый из 8 китайских диалектов.
  • Сравнение идет с CosyVoice, MaskGCT, Vevo и базовым F5-TTS.

В среднем VoiceTTA получает WER 3.12 против 3.19 у F5-TTS, 3.26 у MaskGCT, 4.57 у CosyVoice и 12.41 у Vevo. По speaker similarity результат тоже лучший: S-SIM 0.64 против 0.57 у F5-TTS и 0.62 у MaskGCT. В subjective similarity MOS модель набирает 3.27, слегка выше CosyVoice 3.25 и заметно выше F5-TTS 3.07. Naturalness остается почти на уровне F5-TTS: 3.35 против 3.36, хотя CosyVoice по натуральности выше — 3.58.

Почему ablation важнее среднего числа

Если оптимизировать только intelligibility reward, WER падает до 3.10, но S-SIM проседает до 0.43: речь понятная, но стиль не перенесен. Если взять только style rewards, S-SIM растет до 0.67, зато WER улетает к 7.04. Полная версия держит баланс: WER 3.12 и S-SIM 0.64. Это хорошо иллюстрирует реальную дилемму TTS-персонализации: “похожесть” без разборчивости быстро превращается в красивую ошибку.

Практический вывод

VoiceTTA интересен не как замена дообучению, а как легкий per-prompt repair для случаев, где пользователю нужен редкий стиль, но нет корпуса для speaker/style adaptation. Минус очевиден: 50 GRPO steps на sample — это не бесплатный realtime path. Зато для офлайн-синтеза, voice design и студийных сценариев подход дает удобный контрольный слой поверх сильной zero-shot TTS.

Фишка из статьи. VoiceTTA явно показывает конфликт между стилем и разборчивостью. Если оптимизировать только похожесть голоса или только F0/energy-стабильность, WER заметно растет; если добавить intelligibility reward, WER резко возвращается к сильным TTS-бейзлайнам.

СистемаWERS-SIMS-MOSN-MOS
CosyVoice4.570.543.25 ± 0.923.58 ± 0.73
MaskGCT3.260.623.14 ± 0.933.14 ± 1.07
Vevo12.410.342.05 ± 1.031.91 ± 1.01
F5-TTS3.190.573.07 ± 1.073.36 ± 1.04
VoiceTTA3.120.643.27 ± 0.623.35 ± 0.77
Reward setWERS-SIMСмысл
rF0-CV7.620.53просодия без контроля текста
rEnergy-CV7.760.51энергия не спасает разборчивость
rS-SIM6.580.62голос похож, но ошибок больше
rIntel3.100.43текст чистый, стиль проседает
три style rewards7.040.67максимум стиля, плохой WER
все четыре rewards3.120.64компромисс стиля и intelligibility

Еще одна тонкость: больше prefix-примеров не всегда лучше. На Seed-TTS максимум достигается уже с одним prefix, а на KeSpeech и внутреннем датасете больше контекста помогает, пока не начинает мешать.

Оригинальная статья на arXiv