Синтез речи (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, обусловленный эмбеддингом голоса; мощно и рискованно.
Проверьте себя
1. Что выдаёт акустическая модель TTS перед вокодером?
AСразу звуковую волну
BМел-спектрограмму, которую вокодер превращает в звук
CТекст
DСписок фонем
2. Чем нейросетевой TTS (VITS) превосходит конкатенативный?
AОн склеивает записи диктора
BОн генерирует естественный звук end-to-end без рваных стыков
CОн звучит роботично
DОн не использует нейросети
3. Что такое клонирование голоса?
AРаспознавание речи
BTTS, обусловленный эмбеддингом конкретного голоса, чтобы говорить им любой текст
CПеревод речи
DШумоподавление