SpeechKit — сервис распознавания и синтеза речи. В SpeechKit мы уже создали модели распознавания речи для 15 языков, а также модели синтеза речи для пяти языков. Недавно мы добавили узбекский язык.
Шестнадцатый в SpeechKit: как мы добавили узбекский язык в сервис
Елена Белоброва и Антон Ермилов рассказывают, как научили Yandex SpeechKit распознавать и синтезировать речь на узбекском языке, как мы обучаем ML-модели и какие встречаются сложности.
Примерно с середины 2022 года к нам в команду стали приходить регулярные запросы от партнёров и клиентов на узбекский. Этот язык сейчас поддерживают на хорошем уровне не так много разработчиков речевых технологий. На фоне высокого спроса на автоматизацию процессов в узбекских компаниях, в частности — на речевые технологии, мы решили добавить синтез и распознавание на узбекском в SpeechKit.
Стоит отметить, что пользователи не всегда разделяют речевые технологии на синтез и распознавание, хотя это два кардинально разных в плане создания и эксплуатации продукта. Сейчас в Yandex Cloud не на всех 16 языках возможен и синтез, и распознавание. Дело здесь в потребностях клиентов: для целей речевой аналитики синтез не нужен, а для озвучки текстового контента, например создания аудиокниг, не нужно распознавание. Но наши клиенты в Узбекистане в основном используют речевые технологии для создания голосовых ботов, поэтому нам были нужны обе модели.
Самое важное при создании моделей и синтеза, и распознавания — иметь хорошие датасеты для обучения. Эти базы организованы одинаково — аудио с точной текстовой разметкой, а вот требования к аудио различаются. В случае синтеза аудио должно быть максимально качественными, а в случае распознавания — максимально близким к тому, которое планируется распознавать — преимущественно аудио из телефонного канала, то есть сжатый до 8 кГц звук с посторонними шумами и помехами на линии.
Распознавание речи на узбекском
Для распознавания требуется гораздо больше данных, потому что синтезируем мы один конкретный голос, а распознавать требуется очень разнородную речь: разные голоса, манеры речи, разные типы акустики. Мы берём для базы распознавания записи из двух источников: краудсорсингового сервиса, где пользователи озвучивают заданный текст, и переданных нам материалов клиентов и партнёров, которые мы очищаем от персональных данных и конфиденциальной информации.
Перед обучением все аудиодорожки нужно разметить и каждой присвоить текстовое значение. Для этого мы привлекаем носителей узбекского языка из краудсорсинговой платформы. При разметке клиентских записей все аудио анонимизируются, разбиваются на маленькие кусочки, каждый из которых затем предлагается записать текстом. Все полученные расшифровки далее нужно проверить — эту задачу также доверяем краудсорсингу. Если несколько исполнителей сошлись во мнении, что расшифровка корректна, то отрывок используется для обучения. Этот процесс пока занимает продолжительное время, однако при постоянной работе сервиса над задачами в Узбекистане количество исполнителей постепенно увеличивается.
После сбора все данные предобрабатываются: тексты приводятся к единому виду, а аудиозаписи аугментируются — меняются частоты, скорость, громкость. Это важно, чтобы модель училась распознавать аудио разного качества: с диктофона, с телефона, из шумного помещения, с разными шумовыми эффектами, высокой и низкой частотой. При этом тексты распознавания должны генерироваться единообразно. Для узбекского это важно в том числе из-за наличия апострофов, для записи которых реальные люди часто используют похожие, но всё-таки разные символы. Эти предобработанные данные подаются на вход модели.
Больше 20 лет в стране используется латинский алфавит, но помимо этого есть буквы с характерным для узбекского языка произношением. Например, «X» — это твёрдый звук «х», и автомобиль Nexia синтез прочитает не как «Нэксия», а как «Нехийа», так как не может понять, где английский, а где — узбекский язык. Такие исключения из правил исправляют вручную: какие-то популярные названия мы будем корректировать самостоятельно, а также дадим пользователям возможность настраивать произношение с помощью фонем. Помимо этого, язык активно развивается и в нём появляются новые буквы.
Все языки в SpeechKit работают в рамках единой мультиязычной модели, что возможно во многом благодаря её трансформерной архитектуре. Поэтому модель обучается распознавать не только узбекскую речь, но и речь на других языках. С одной стороны, это облегчает жизнь разработчикам, потому что обучение и эксплуатация единой модели требует меньше ресурсов. С другой стороны, такой подход помогает модели лучше обучаться распознаванию языков даже с малым количеством данных за счёт переиспользования информации из других языков. Например, для узбекского это работает благодаря его схожести с турецким и казахским языками, которые мы уже давно умеем распознавать.
Процесс синтеза: четыре нейросети под капотом
Для синтеза на новом языке нам необходимо записать в течение примерно 30 часов речь хорошего диктора. Хорошего — значит, помимо приятного голоса, диктор должен ещё правильно дышать, иметь стабильный тембр, правильную, соответствующую контексту, подачу, хорошую дикцию. Также имеет большое значение место, где записывается диктор. Например, фоновый шум даже в минимальном объёме может вызвать артефакты и помехи в синтезе.
Далее вычищенный от некорректных дублей материал используется для обучения модели. Но перед обучением ML-модели данные нужно привести к специальному формату: извлечь акустические признаки из аудиодорожек, снять интонационный контур и т. д. Все эти действия требуются для последующего обучения наших моделей.
Целиком модель синтеза речи состоит из 4 компонентов, которые в зависимости от используемой архитектуры могут обучаться независимо или совместно. Каждый из блоков решает свою задачу: первые два предсказывают длительность и интонационные контуры для каждой из букв, третий предсказывает акустические признаки речевого сигнала, а четвёртый — конвертирует их в настоящую аудиодорожку.
После обучения модели синтеза речи нельзя сразу её использовать, нужно сначала убедиться в том, что качество работы модели удовлетворит ожиданиям пользователей. В этом также помогают носители языка из краудсорсинговых платформ. Так мы выявляем несоответствия в звучании и определяем вектор для дальнейшего улучшения синтеза речи. В работе по подготовке модели синтеза речи участвуют не только разработчики и аналитики, но и тысячи обычных людей, занимающихся краудсорсингом.
Процесс нормализации
Когда нейросеть научилась читать и говорить или слушать и писать, начинается следующий этап — нормализация. Это перевод числительных, сокращений и символов в оптимальный для использования формат. Например, чтобы озвучить автомобильный номер «Х777АХ750», без нормализации потребовалось бы вводить весь текст: «ха семьсот семьдесят семь, а ха семьсот пятьдесят». Это неудобно.
Мы делаем нормализацию поэтапно. Начали с числительных и далее будем добавлять более редкие сценарии, например даты, популярные сокращения (условно «ул. Пушкина, д. 4, кв. 1») и другие. Это не самый быстрый процесс, так как для нормализации нужно понимать особенности языка и учитывать много деталей.
Сейчас мы берём открытые датасеты, собираем синтетические данные и по возможности подключаем краудсорсинг. Всё было бы проще, если бы могли использовать какие-то правила. Но нормализация зачастую зависит от контекста, а создание правил требует работы нескольких экспертов-лингвистов. Поэтому параллельно мы ведём проект по разработке универсальной модели, которую можно будет перенести и на другие языки с локальными особенностями с минимальными трудозатратами.
Бесконечная история: улучшение языка после создания
После того как мы создаём первую версию языковой модели, начинается вторая часть работы — её улучшение. Этот процесс может продолжаться бесконечно. Над распознаванием речи на русском языке мы работаем уже более пяти лет, но мы по-прежнему находим области для улучшения. Это могут быть слова узкой тематики, такие как национальные блюда или юридические термины, а могут быть новые акустические условия — аудио с диктофона или с микрофона в шумном помещении. У нас в Yandex Cloud выстроен процесс дообучения моделей, работает он на основе обратной связи от клиента, так и на основе результатов внутренней оценки качества. Есть два вида данных, которые мы используем для дообучения: аудио, которые мы размечаем и добавляем в модель, и тексты, которые мы озвучиваем и также добавляем в модель. Работы по дообучению всегда бесплатны для клиента.
Для улучшения синтеза нам важно учесть на своей стороне особенности, необходимые всем клиентам, такие как нормализация, и дать каждому проекту инструмент для настройки индивидуальных нюансов, например звучания фамилий и названий товаров. Для этого мы обучаем наши модели синтезировать речь не только из текста, но и из его фонемной записи, которая, в отличие от текста, не зависит от особенностей конкретного языка. И в таком варианте появляется возможность корректировать произношение отдельных слов, если они должны быть озвучены не по правилам языка.
Что дальше?
Для узбекского языка сейчас доступны синтез и распознавание, проводится нормализация. Также сейчас мы работаем над улучшением процесса создания новых языковых моделей, чтобы добавлять другие языки быстрее.
В русском мы расширяем функционал моделей распознавания — добавляем определение эмоций и пола говорящего. Думаем над внедрением сущностей, которые будут распознавать, какие фрагменты аудио являются фамилией, адресом, датой и т. д. После того как реализуем всё это для русского, будем протягивать в другие языки.