(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(93857963, "init", { defer: true, clickmap:true, trackLinks:true, accurateTrackBounce:true }); ym(93857963, 'hit', window.location.href);

Как из четырёх минут речи мы воссоздали голос молодого Леонида Куравлёва

Всем привет! Меня зовут Олег Петров, я руковожу группой R&D в группе компаний ЦРТ (и это тоже Сбер!). Мы давно работаем не только над распознаванием речи, но и умеем синтезировать голоса. Недавно к нам пришли коллеги с предложением поучаствовать в развлекательной истории — «озвучить» героя Леонида Куравлёва в новом ролике.

Лицо Куравлева для него было воссоздано по кадрам из фильма «Иван Васильевич меняет профессию» и наложено на лицо другого актера с помощью технологии Deepfake. Чтобы мы смогли не только увидеть, но и услышать в 2020 году Жоржа Милославского, мы решили помочь коллегам. Ведь с годами голос у всех нас меняется и даже если бы Леонид Вячеславович озвучил героя, эффект был бы не тот.

Под катом я расскажу, почему эта, уже во многом привычная задача голосового синтеза, оказалась чуть сложнее, чем мы ожидали, и поясню, почему такие голоса не смогут обмануть качественные системы биометрической авторизации.

«Иван Васильевич меняет профессию» вышел в прокат в 1973 году. В это десятилетие Леонид Куравлёв успел сняться в паре десятков полнометражных фильмов. Тем не менее это никак не упрощало нам задачу:

  • У персонажей могло быть мало длинных монологов
  • В художественных фильмах на речь накладываются акустические эффекты, фоновая музыка и пр.
  • Сам по себе звук старых фильмов 70-х годов, пусть даже оцифрованных, содержит дефекты
  • Актер всегда подстраивает манеру речи под персонажа, отыгрывает различные эмоции, а было необходимо повторить манеру речи именно персонажа Жоржа Милославского.

И, несмотря на большой уровень неопределённости, мы взялись за эту задачу, и вот как подошли к ее решению.

Сбор данных для обучения TTS

TTS (Text-to-speech) — это технология перевода печатного текста в звучащую речь. В настоящее время она реализуется, как правило, на стеке методов глубинного обучения, что позволяет добиться высокого качества звучания синтезированного голоса по сравнению с другими подходами. Например, используя возможности суперкомпьютера «Кристофари» модель для этого можно обучить всего за пару часов.

Основным источником речевого материала послужили фрагменты аудио из кинофильмов с участием Леонида Куравлева — «Глубокие родственники», «Не может быть», «Иван Васильевич меняет профессию», «Суета сует». Далеко не все эпизоды появления героя фильма являются подходящими для цели обучения системы TTS. Необходимо минимизировать наличие фоновой музыки и шумов, речи других актёров, различных неречевых проявлений. После кропотливого поиска подходящих фрагментов у нас набралось от силы 7 минут речи, довольно экспрессивной и разнообразно звучащей в зависимости от характера персонажа, которого играл Леонид. Кроме того, в каждом фильме была своя акустическая картина, что также сильно влияет на восприятие и усложняет задачу.

После подготовки текстовых транскрипций вырезанного материала в соответствии с нашим обычным пайплайном была построена фонемная транскрипция текста и её выравнивание со звуковой дорожкой. Натягивание последовательности фонем на звук необходимо для определения мест фактических пауз при произнесении текста диктором. Все эти действия мы выполнили при помощью лингвистического процессора собственной разработки и акустической модели, любезно предоставленной нам отделом распознавания речи.

Точное расположение фонем на записи не так важно для модели-синтезатора, если она содержит так называемый модуль внимания (Attention). Механизм внимания позволяет обучить модель самостоятельно различать фонемы, однако разметка по паузам куда более важна — во-первых, паузы могут сильно различаться по длине, и знание точной длины позволяет сохранить стабильность при обучении, а во-вторых, паузы часто являются индикаторами границ синтагм — самостоятельных структурных единиц речи — по которым часто можно провести границы независимых высказываний. Это позволяет разбить слишком длинные фразы на фразы покороче для более эффективного использования памяти GPU в процессе обучения, а также несколько увеличить набор данных путем перебора всех возможный вариантов разбиения.

Очистка данных

Хотя мы старались извлечь из фильмов как можно более чистые записи, но часть из них все равно сопровождалась посторонними звуками (шум города, звуки природы, шум воды и т.п.) или музыкой.

Для того, чтобы исправить это мы воспользовались двумя open-source проектами: моделью для улучшения качества речи, работающей непосредственно на сыром аудиосигнале, а также алгоритмом для разделения музыкальной композиции на партии: голос, барабаны, басы и остальное. Нам было необходимо получить чистые записи голоса диктора с максимальным качеством звука (для нашей системы TTS — 22050 Гц). Любые артефакты непременно просачиваются в нейронную модель голоса диктора, особенно когда речь идет о столь малой обучающей выборке. Благодаря перечисленным проектам удалось полностью отделить музыку от голоса без существенной потери качества примерно для половины собранных примеров.

В итоге, после всех манипуляций у нас осталось равно 4 минуты и 12 секунд чистой речи голоса Леонида Вячеславовича Куравлева. Стало понятно, что наша боевая архитектура TTS, которую, к слову, вы можете послушать в облаке), не подходит для такого случая. Однако, как нельзя кстати под рукой была относительно свежая необычная модель TTS от NVidia под названием Flowtron, основанная на методе обратных авторегрессионных потоков (Inverse Autoregressive Flow, IAF).

Главной особенностью модели Flowtron является то, что с её помощью можно синтезировать различные варианты произношения одного и того же текста, с большим разнообразием интонаций и стиля речи. Но это свойство — «палка о двух концах», так как генерируемые моделью примеры получаются далеко не всегда адекватными с точки зрения восприятия. Интонации могут меняться очень резко и неестественно, частота основного тона (высота голоса) может изменяться в широких пределах, порождая забавное, но не требуемое звучание. Чем больше исходных данных для обучения, тем естественнее и стабильнее получается генерировать речь. Но даже при малом количестве материала иногда получается синтезировать хорошие примеры. Их мы и решили получить.

Для начала нужно было уже имеющуюся модель, обученную на большом экспрессивном наборе данных, обучить говорить новым голосом. Если просто взять и «скормить» ей все 4 минуты 12 секунд данных то, в зависимости от параметра, регулирующего чувствительность обучения, модель либо сразу переобучится (будет говорить очень плохо), либо обучится очень-очень плохо (тоже говорить новым голосом не будет). И «ловить» оптимальное значение параметра можно долго и увлеченно. Хорошей практикой является замешивание новых данных со «старыми» в удобной пропорции (например, один к десяти). Тогда до начала процесса переобучения, новые данные успеют неплохо «усвоиться». Так и поступили, но сначала нарезали примеры по паузам с перекрытием, что легким движением пальцев по клавиатуре превращает 4 минуты речи в 23.

Обученная таким образом модель уже смогла что-то синтезировать голосом артиста, но более-менее адекватные примеры получались в одном случае из двадцати. А еще важно получить необходимый стиль, интонацию, эмоцию, качество звука, чем в данном случае управлять крайне затруднительно. Таким образом нужно было синтезировать несколько десятков тысяч примеров, чтобы вручную отобрать из них несколько подходящих.

Тут нам на помощь приходят нормализующие потоки, на которых и построена сама модель. По сути, Flowtron обучается отображать акустические признаки речевого сигнала с учетом текста в точки из нормального распределения той же размерности, причем это отображение обратимое. Во время синтеза идет обратный процесс (поэтому потоки обратные и нормализующие). Таким образом можно взять запись, отобразить ее с помощью модели в конкретные точки, а из этих точек получить обратно эту же запись. Бесполезно? Не совсем! Можно эти точки аккуратно смешать с такими же из другой записи и тем самым частично перенести стиль последней. Можно к ним добавить немного шума и получить почти исходную запись, немного отличную от оригинала. Но если добавить много шума, то получится белиберда. Таким образом можно размножить исходный датасет, получив много похожих, но не совсем одинаковых примеров!

Однако полностью полагаться на порядочность модели в этом случае нельзя. Она может насинтезировать много всякого. Пришлось прослушать несколько тысяч таких примеров размноженного датасета и экспертно отобрать качественные. Такой подход можно назвать «модель с ушами». Он позволил из исходных 23 минут (с учетом нарезки по паузам) получить целый час обучающих данных.

Такая многостадийная схема обучения дала свои плоды. Хоть и большая часть синтезируемых с её помощью примеров уже звучала вполне достойно, все равно потребовался «brute force». К исходным точкам мы подмешали точки от примеров из «Ивана Васильевича». Где-то получился эффект старой пленки или большого помещения. Или фраза получилась голосом артиста, но не по-«милославски». Выбирать уже пришлось «всего» из пары тройки тысяч сэмплов. Получилось около трех сотен примеров требуемых коротких фраз с большим разнообразием стилей и интонаций, для чего мы, собственно, и отобрали семплы для проморолика Сбера.

Таким образом, проведя своеобразный недельный хакатон в нашей команде синтеза речи ЦРТ, мы смогли всего лишь по 4-м минутам речи воссоздать голос 50-ти летней давности. Технология, опробованная нами, открывает возможности по воссозданию давно утраченных голосов известных личностей по экстремально малому объему материала. То, что из всего этого получилось в итоге, вы можете посмотреть.

Прочитав все это, вы наверняка подумали, что такие технологические возможности ставят под сомнение надежность биометрических систем, ведь голос любого публичного человека, видеоблогера или обычного пользователя соцсетей, который публикует любительские видеоролики, легко подделать. Несмотря на то, что на слух синтезированный голос Леонида Куравлева неотличим от реального, — это все-таки синтез. А значит содержит такие характеристики звука, которые указывают на то, что голос не является живым. Антиспуфингу, защите от хакеров, часто посвящают специальные научные конкурсы, в том числе мировые, где наша команда не раз побеждала. Мы в ЦРТ считаем, что разработчики всегда должны быть на шаг впереди, и не только создавать новые технологии и продукты на их основе, но и постоянно искать новые средства защиты, не останавливаясь на достигнутом.

0
82 комментария
Написать комментарий...
Rabbit Rabbin

Дорогой Сбер. Вы каждый день будете на этом по кусочкам хайпиться?)
Ну ладно. Где наглядный материал для юных дипфейкеров? Вся статья о том, как 24 минут выжимали образцы голоса Куравлева, когда можно было просто взять и добавить к обучению как минимум ближайшие фильмы из его фильмографии))

Ответить
Развернуть ветку
Юрий Б.

1. В ближайших фильмах тот же персонаж? С таким же голосом и оборотами?
2. «Каждый день» - да этой рекламе второй день. Реклама (если отбросить смыслы, широко раскритикованные в соседней статье) - довольно яркая (хотя и прямолинейная). Есть про что рассказать. Это сайт про предпринимателей или маркетинг ведь, не все же про проблемы Озона в приемной читать.
3. Пиарится не самолично Сбер, тут немного смещены акценты.

Ответить
Развернуть ветку
Rabbit Rabbin

Я может не секу в голосовом дипфейкинге, но обороты речи "машине" не особо то и нужны. Манера речи - может быть, но не речевые обороты. ИИшка же не фразы для персонажа рекламы продумывала?

Ответить
Развернуть ветку
Юрий Б.

Тут соглашусь, но хотелось бы узнать мнение @Сбер 

Ответить
Развернуть ветку
79 комментариев
Раскрывать всегда