Синтез речи (TTS): как машина говорит
Обратная к ASR задача: превращаем текст в естественно звучащий голос.
TTS (Text-to-Speech) — синтез речи: система, которая по тексту генерирует звук голоса, стараясь сделать его естественным, с правильными ударениями и интонацией.
Если ASR превращает звук в текст, TTS делает обратное. Это сложнее, чем кажется: одно и то же слово можно произнести десятками способов, а ошибка в ударении или интонации сразу выдаёт «робота». Разберём, как машина учится говорить.
Конвейер синтеза
Классический путь TTS состоит из нескольких этапов, превращающих сухой текст в звуковую волну.
текст "привет" --> нормализация (числа, сокращения) --> фонемы (как произносить): п р' и в' э т --> просодия (ударения, интонация, паузы) --> акустическая модель --> мел-спектрограмма --> вокодер --> звуковая волна
Заметьте: предпоследний шаг выдаёт мел-спектрограмму — ту самую, что мы изучали. То есть TTS «рисует» спектрограмму голоса, а вокодер превращает её в слышимый звук.
Три поколения TTS
| Поколение | Как | Звучание |
| Конкатенативный | склейка кусочков живой речи | натурально, но «рвано» |
| Параметрический | модель генерирует параметры голоса | гладко, но «роботично» |
| Нейросетевой | сеть учит всё end-to-end | почти как человек |
Конкатенативный синтез нарезал записи диктора на кусочки и склеивал — звучало живо, но на стыках были скачки. Параметрический генерировал параметры (F0, форманты) по правилам — ровно, но безжизненно. Нейросетевой победил оба.
Нейросетевой TTS: Tacotron и VITS
Tacotron — seq2seq с attention: по тексту порождает мел-спектрограмму, затем отдельный вокодер (WaveNet, HiFi-GAN) превращает её в звук. VITS пошёл дальше — это end-to-end модель, генерирующая звук прямо из текста за один проход, с естественной вариативностью интонации. Современные ассистенты звучат живо именно благодаря таким моделям.
Голосовые клоны
Отдельное направление — клонирование голоса: по короткой записи (иногда секунды) модель синтезирует любой текст этим голосом. Технически это TTS, обусловленный «отпечатком» голоса-эмбеддингом. Применений масса — от озвучки до восстановления голоса людям, теряющим речь, — но и рисков тоже (об этике поговорим отдельно).
Идея вокодера на пальцах
Вокодер по спектру (амплитуды частот) синтезирует волну. Покажем самую суть: сложим синусоиды заданных частот с заданными амплитудами — получим звук.
import math
# "спектр": (частота-множитель, амплитуда)
spectrum = [(1, 1.0), (2, 0.5), (3, 0.25)]
n = 12
def sample(i):
s = sum(a * math.sin(2 * math.pi * f * i / n) for f, a in spectrum)
return round(s, 3)
wave = [sample(i) for i in range(n)]
print("Синтезированная волна:", wave)Вывод:
Синтезированная волна: [0.0, 1.183, 1.299, 0.75, 0.433, 0.317, 0.0, -0.317, -0.433, -0.75, -1.299, -1.183]
Из трёх чисел спектра мы собрали 12 отсчётов волны. Настоящий нейровокодер делает то же, но учит сложнейшие зависимости, чтобы звук был неотличим от живого.
Разделение TTS на акустическую модель и вокодер удобно сравнить с работой художника и печатника. Акустическая модель — художник: она решает что сказать и с какой интонацией, и рисует это в виде мел-спектрограммы, своего рода ноты голоса. Вокодер — печатник: он не придумывает содержание, а лишь качественно «озвучивает» готовый рисунок, превращая спектрограмму в слышимую волну. Прелесть в том, что их можно менять независимо: подставить более быстрый вокодер ради реального времени или новую акустическую модель ради другого голоса, не переучивая всю систему целиком.
Для русского языка камень преткновения TTS — ударение, и недооценивать это нельзя. Пары вроде «зАмок» и «замОк», «бЕлки» и «белкИ» пишутся одинаково, а звучат и значат разное; правильный вариант диктует только смысл предложения. Английскому здесь проще, а русский TTS обязан либо иметь словарь ударений, либо угадывать их по контексту нейросетью. Сюда же добавляется нормализация: «в 1990 г.» нужно произнести как «в тысяча девятьсот девяностом году», а не по цифрам. Именно на этих «скучных» этапах подготовки текста чаще всего и спотыкается синтез, ещё до всякой нейросети.
Технология голосовых клонов — отличный пример того, как одно и то же изобретение бывает и благом, и угрозой. С одной стороны, по нескольким секундам записи можно вернуть голос человеку, теряющему речь из-за болезни, или озвучить аудиокнигу голосом любимого актёра. С другой — те же модели открывают дорогу телефонному мошенничеству «голосом родственника» и подделке записей. Технически клон — это обычный TTS, дополнительно обусловленный эмбеддингом голоса-образца. Поэтому параллельно с синтезом активно развивают антиспуфинг — детекторы, отличающие живой голос от синтезированного.
Как работает под капотом
Разделение на «акустическую модель → вокодер» удобно: акустическая модель отвечает за что сказать (содержание спектра), вокодер — за как это звучит (качество волны). Можно менять их независимо. HiFi-GAN-вокодеры генерируют звук в десятки раз быстрее реального времени, что и сделало нейро-TTS практичным для ассистентов и навигаторов.
Частые ошибки
- Игнорировать нормализацию текста. «1990» надо произнести словами, иначе синтез ошибётся.
- Забывать про ударения. Для русского ударение критично («зАмок/замОк»); без разметки TTS промахивается.
- Путать акустическую модель и вокодер. Первая делает спектрограмму, второй — звук из неё.
Итоги
- TTS: текст → фонемы → просодия → мел-спектрограмма → вокодер → звук.
- Три поколения: конкатенативный, параметрический, нейросетевой.
- Tacotron и VITS сделали синтез почти неотличимым от человека.
- Клонирование голоса — TTS, обусловленный эмбеддингом голоса; мощно и рискованно.