Озвучить статьи на vc.ru

Менеджер по продукту «Комитета» рассказывает, чего это стоило.

Аудиоверсию этой статьи можно включить, нажав на кнопку «Слушать» в начале статьи.

Озвучить статьи на vc.ru

Филипп Концаренко, менеджер по продукту в «Комитете»

Как устроены наши сайты

Наши сайты — vc.ru, DTF и TJ — работают на одной платформе. Мы называем её «Основа». Единая платформа удобна с точки зрения разработки — наша команда работает над кодом одновременно для всех проектов. Кроме того, эксклюзивное решение под vc.ru можно быстро масштабировать на остальные площадки. К примеру, раздел «Вакансии» мы разрабатывали сначала на vc.ru, а потом за пару дней запустили его ещё и на DTF.

«Основа» — это набор модулей. Каждый из них независим и решает конкретную задачу: в одном можно создавать и редактировать статьи, а другой отвечает за их отображение. Все модули постоянно «общаются» между собой.

Такая структура «Основы» позволяет нам периодически проводить эксперименты. Мы можем спокойно проверить новую функцию в текущем или новом модуле, не переживая за работоспособность всей платформы.

Изобретаем механизм озвучки

Одним из таких экспериментов стала интеграция с «Яндекс.Облаком». Компания объявила об открытии API для озвучки текста (SpeechKit), и мы решили его попробовать на статьях.

Эта задача не потребовала сложной разработки: мы довольно быстро выстроили несколько процессов в логическую цепочку и выделили их в новый модуль.

Почему отдельный модуль? Во-первых, чтобы распределить нагрузку. Конвертация текста в аудио происходит в фоне, когда для этого есть свободные ресурсы сервера. Модуль получает запрос на озвучку, обрабатывает его и через какое-то время отправляет ответ со звуковой дорожкой.

Во-вторых, отдельный модуль — это универсальное решение, которым может пользоваться любой другой модуль «Основы». Если нужно озвучить ленту новостей или лучшие комментарии — это можно сделать простой отправкой запроса от модуля «Комментарии» или «Статья». При желании даже «Вакансии» могут запросить аудиоверсию объявлений.

У SpeechKit «Яндекса» опубликовано подробное описание API, поэтому всё подключение обошлось без общения с техподдержкой: прочитали, разработали, протестировали, оплатили, подключили. Первую рабочую версию получили уже через три дня.

А теперь подробнее про то, как мы озвучиваем статьи при помощи «Яндекс.Облака».

Из символа в звук: процесс изнутри

1. Формируем список статей для озвучки

Каждые 30 минут специальный алгоритм «Основы» собирает список из десяти наиболее популярных на текущий момент статей на vc.ru, TJ и DTF. Он учитывает множество параметров: на популярность влияет и количество прочтений, и оценки, и комментарии. Ещё мы смотрим на статус статьи: вносились ли в неё изменения и озвучивалась ли она раньше — это помогает в случаях, когда автор дополнил текст уже после озвучки.

2. Для каждой статьи из списка выбираем только текст

Справиться с этой задачей помогает модуль «Редактор», который отвечает за написание статей. Он сохраняет каждую заметку на vc.ru, TJ или DTF не как HTML-код, а как набор текстовых и медийных блоков, в которых содержание отделено от технических атрибутов.

Проще говоря, статья выглядит примерно так: в первом блоке — текст, во втором блоке — ссылка на картинку и подпись к ней. Достаточно попросить скрипт отфильтровать и выгрузить только текстовые блоки, и мы получим основное содержание материала.

3. Собираем все данные в «Гутенберг»

Полученные тексты отправляем на специальный внутренний сервис — мы называем этот модуль «Гутенбергом».

Он собирает все запросы на озвучку текстов с наших сайтов в единый поток, разбивает его на небольшие куски — по 5 тысяч символов, как этого требует API, добавляет параметр — озвучивать женским голосом или мужским и с какой скоростью. Далее выстраивается очередь из запросов для отправки в «Яндекс.Облако».

4. Отправляем запрос в «Яндекс.Облако»

В ответ «Яндекс.Облако» присылает нам файлы в формате OGG. Каждый из них — это озвучка фрагмента длиной не более 5 тысяч символов.

Таким образом, если статья состоит из двух тысяч символов, мы получим один OGG-файл. Для лонгрида в 24 тысячи символов — пять OGG-файлов.

5. Создаём MP3-файл и загружаем его на сервер

Для длинных статей «Гутенберг» сначала соединяет несколько OGG-файлов в один и генерирует на его основе MP3. Все популярные статьи получают свой MP3-файл.

Он загружается на наш сервер, а в параметр статьи добавляется дата его генерации и ссылка. Когда пользователь откроет статью, «Основа» увидит ссылку на аудиоверсию и отобразит иконку с наушниками.

Дата файла нужна для того, чтобы можно было переозвучить статью, если её автор обнаружит опечатку или добавит дополнение. Алгоритм, который используется на первом шаге, сравнит дату изменения и дату генерации аудиоверсии. Если статья была обновлена после создания аудиоверсии, то статья снова попадёт в очередь на озвучку.

Что получилось

Мы рассматривали новую функцию как удобный инструмент для потребления контента и не ставили каких-либо продуктовых метрик.

Но результат приятно удивил. Выросла лояльность пользователей приложения. Заметно выросло количество положительных отзывов в App Store и Google Play — читатели благодарили за появившуюся возможность прослушивать статьи.

Кроме того, мы начали приучать читателей к новому каналу получения информации, который из года в год становится популярнее и качественнее.

А ещё мы делаем <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fmusic.yandex.ru%2Falbum%2F8364362&postId=80606" rel="nofollow noreferrer noopener" target="_blank">подкасты</a> на «Яндекс.Музыке» из RSS-ленты с озвученными статьями.
А ещё мы делаем подкасты на «Яндекс.Музыке» из RSS-ленты с озвученными статьями.
Озвучить статьи на vc.ru

Никита Ткачёв, менеджер по развитию бизнеса в «Яндекс.Облаке»

Самый популярный сценарий использования SpeechKit — это голосовые роботы в телефонии. Но мы с интересом смотрим и за развитием других вариантов. К примеру, владельцы колл-центров строят на базе речевых технологий тренажёры для своих операторов, либо просто распознают их диалоги для проверки. Кто-то распознаёт речь в видео и быстро понимает, о чём оно. А стримеры озвучивают зрительские послания, чтобы во время трансляций не отвлекаться на текст.

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

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

Правда, среди доступных голосов нет Алисы, голосового ассистента «Яндекса»: её голос — эксклюзив для наших сервисов, хотя она тоже работает на базе SpeechKit. Но если попросить её озвучить актуальные новости, то она передаст слово своим коллегам — Джейн, Захару и другим голосам, которые можно подключить.

Сейчас главное направление нашей работы — «очеловечить» речь, на данный момент она легко отличима от живой. На это есть несколько причин: холодная механическая подача, ровный ритм, монотонные паузы. Рецепт один: улучшить разметку датасета — материала для работы нейросети.

Чем больше метрик мы будем использовать для дикторских записей, тем качественнее робот будет подражать человеческой речи. Если раньше мы выделяли фонемы и паузы, то теперь мы переходим к работе с достаточно тонкими материями — показываем роботу, где диктор говорит вдохновлённо, где его голос идёт «на повышение», ускоряется, становится мрачным или весёлым.

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

Сейчас мы обкатываем синтез на принципиально новой архитектуре и результаты нас очень радуют: синтезированная речь стала более приятной на слух — модель учится имитировать человеческое дыхание и паузы.

Из существующих недостатков синтеза речи, можно выделить классическую контекстную ловушку: иногда робот не понимает, речь идёт о зАмке или замкЕ — и здесь ему нужна помощь проставленным ударением.

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

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

В этом помогают специальные теги внутри текста (SSML) — единственные кусочки кода, которые робот не станет произносить. С их помощью можно даже вручную управлять стилем речи — менять произношение, удлинять паузы или расшифровывать аббревиатуры. К примеру, произность vc.ru как «ви-си-ру».

Пример тега, который добавляет паузу в одну секунду:

<speak>Эй, секундочку<break time="1s"/> Что вы делаете?</speak>

Разработчикам и продуктовым командам, как правило, не составляет труда разобраться с API самостоятельно. Бизнесу это сложнее, поэтому мы работаем с партнёрами, которые берут эти заботы на себя — к примеру, с командой Speechkit, которая поставила озвучку контента на поток.

К нам часто приходят запросы на запись индивидуального голоса. Пока мы не берём такие проекты — слишком большие накладные расходы на запись диктора, обработку датасета и контроль качества. Но в этом направлении есть сдвиги, и вскоре мы сможем реализовывать такие проекты за разумные деньги.

1 рубль 71 копейка
Стоимость озвучки этой статьи — в ней 9360 символов
3636
27 комментариев

молодцы, но слушать это конечно же невозможно

35
Ответить

Комментарий недоступен

2
Ответить

Комментарий недоступен

12
Ответить

Твердыйзнак твердыйзнак твердыйзнак ц ц ц ц ц ц ц ц ц

1
Ответить

Комментарий недоступен

Ответить

Да не будет оправданий. Сегодня технология позволяет ударение легко исправить, а завтра и ошибки не будет.

13
Ответить

Это по следам дубляжа Дискавери: крепИм, кашИца, битОй и недавно я пополнил коллекцию словом соплО.

Ответить