Задачи автоматического перевода слов в фонемы (grapheme-to-phoneme или G2P), автоматической простановки ударения, и автоматической простановки буквы ё
сейчас решаются довольно успешно даже на уровне открытых решений (например: 1, 2, 3).
Тем не менее, практически ни одно открытое решение не позволяет разрешать неопределённости, возникающие при обработке слов-омографов. И оказывается, что эта на первый взгляд незначительная деталь очень сильно влияет на восприятие результатов алгоритмов (будь то G2P или автоматические ударения). В статье предлагаются некоторые способы решения проблемы омографов, а также указывается основная причина того, что эта задача до сих пор не решена публично.
Что такое омографы и почему они важны
Согласно Википедии, омографы — это слова, которые совпадают в написании, но различаются в произношении, например, "за́мок/замо́к", "бе́рега/берега́", и т.д.
В русском языке омография иногда возникает и при игнорировании на письме точек над буквой ё
. Так, например, слова "все" и "всё" не являются омографами, но становятся таковыми, если опустить точки над ё
.
Подобные слова являются серьёзной проблемой при решении задач автоматического перевода слов в фонемы, автоматической расстановки ударений и буквы ё
. Cтандартные подходы (поиск по словарю и нейросети) зачастую неспособны справиться с омографами без привлечения дополнительных средств. Это приводит к ухудшению итогового качества алгоритма, и, возможно, к необходимости ручной коррекции его результатов.
Немного статистики - количество омографов
Давайте постараемся описать насколько массовым является это явление:
Число омографов по отношению к общему объёму словаря составляет ~2-4% в зависимости от словаря. В данном разделе в качестве словаря использован словник русскоязычного wiktionary. К сожалению, качество омографов, полученных оттуда, оставляет желать лучшего: в словарь попали и некоторые слова, которые омографами не являются. Но зато это бесплатно и открыто для всех.
Отсортируем словарь по встречаемости слов (по количеству раз, которые слово встретилось в корпусе). Лично я снимал встречаемость на дампах Википедии (около 29 миллионов предложений), но подойдёт и любой другой корпус текстов. Затем разделим слова на три группы по встречаемости следующим образом. Пусть в группу
high
попадёт 3% самых частых слов словаря, в группуmedium
попадёт 7% самых частых слов из оставшихся, и в группуlow
— все остальные слова. Получим следующее распределение:high
medium
low
Встречаемость
>=40к
9к - 40к
<=9к
Число омографов к размеру группы
7%
5%
3%
Количество омографов
~800
~1.2к
~12к
Несмотря на то, что омографов вообще немного относительно общего размера словаря, эти 5-7% встречаемости на medium
и high
группах и представляют проблему. В рассматриваемом корпусе почти каждое второе предложение содержит хотя бы один омограф (1.88 омографов в среднем). Впрочем, здесь снова стоит сделать скидку на качество словаря омографов.
Способы решения
Обучение моделей с учетом контекста слов
Суть заключается в том, чтобы тренировать модели не только на "голых" словарях слов, но и, например, на фразах или предложениях, с добавлением дополнительных тегов к словам для снятия омонимии, и т.д. Такая модель на практике должна будет обращать внимание на контекст слов, что автоматически решает проблему омографов для большинства случаев.
+ Освобождает от необходимости использовать вспомогательные инструменты для снятия омонимии на инференсе.
+ Пайплайн тренировки одной модели легко переносится на другие языки.
− Качественных датасетов для решения этой задачи нет в открытом доступе.
− Ручное составление датасета для задачи очень затратный по времени процесс.
Морфологический парсинг предложений
Для использования парсера при простановке ударений нужен словарь вида "слово - ударение - часть речи, род, число, падеж". Аналогично для фонем и простановки буквы ё
. Тогда текст сперва подаётся в парсер, а затем слова с проставленными тегами ищутся в словаре, либо подаются в нейросеть, но необходимость словаря для обучения модели это не отменяет.
+ Можно использовать просто поиск по словарю вместо нейросетей для собственно простановки ударений/фонем.
− Существуют неразрешаемые кейсы (например, с точки зрения парсера, фразы какой красивый за́мок
и какой сложный замо́к
идентичны).
− Возникает необходимость либо в разработке собственного парсера, либо в использовании в своем пайплайне сторонних зависимостей.
− Точность финального алгоритма зависит не только от точности простановки ударений (фонем), но и от точности парсера (которая может составлять сама по себе 85%-95%).
− Алгоритмические парсеры не масштабируются на другие языки (больше языков -> больше зависимостей).
Проблема простановки буквы ё
Способы решения проблемы тут точно такие же как и для ударений и фонем с одной оговоркой.
В самых больших корпусах текстов на русском языке (включая даже небезызвестный НКРЯ) буква ё
проставлена не всегда. Из-за чего такой корпус становится непригодным к использованию в данной задаче, т.к. в ground truth невозможно отделить ситуации при которых, например, слово все
это именно все
, а не всё
с непроставленной ё
.
Отчасти это можно решить, выбрав из корпусов лишь предложения, для которых заранее известно, что в них проставляется буква ё
. Но размер отфильтрованного таким образом корпуса зачастую получается довольно маленьким.
Где же открытые решения?
При том, что существует множество открытых решений для автоматического перевода слов в фонемы, автоматической простановки ударения, и даже буквы ё
, практически никакие из них не решают проблему омографов.
Главная (и, возможно, единственная) причина, по которой эта задача до сих пор не решена в паблике, это отсутствие публично доступных датасетов.
В русском сегменте, судя по всему, существует ровно один корпус предложений с проставленными ударениями - НКРЯ, который к тому же тщательно оберегается от конкурентов публики.
К сожалению, непонятно как получить оффлайн доступ (хотя бы частичный) к НКРЯ простому смертному. Но по онлайн интерфейсу можно предположить что:
Акцентуированного корпуса должно хватить для решения проблемы омографов в задачах акцентуации (а, значит, косвенно, и G2P).
Даже НКРЯ не хватит для полноценного решения омографов с
ё
. В НКРЯ, так же как и в Википедии, букваё
проставлена не везде.
Единственный известный мне открытый инструмент, который, как заявлено, умеет корректно проставлять омографы, как раз и обучен на закрытых данных НКРЯ. Но последний апдейт там был 2 года назад, а на текущий момент он и вовсе перестал у меня работать.
Ещё один популярный инструмент лишь умеет находить омографы, но не умеет снимать неопределённости, оставляя это пользователю. Вообще, многие тулкиты придерживаются именно такой политики по поводу омографов: предложить пользователю список возможных вариантов, чтобы он выбирал нужный вручную.
Итоги
Если перейти к рассмотрению закрытых решений, то всё равно увидим, что проблема омографов остаётся местами нерешённой даже у крупных компаний.
Так, Маруся от mail.ru не всегда умеет разбирать омографию в ударениях (в чём можно убедиться, послушав озвучку Марусей их собственных новостей). Могу ошибиться, но мне показалось, исходя из ошибок, что mail.ru как раз используют подход с парсером. Многие кейсы всё же у них получается разбирать корректно.
Из интересного, несмотря на то, что Yandex SpeechKit API просит на вход вручную размечать омографы, у меня так и не получилось подобрать кейс, на которых бы он ошибся. Демка Яндекса смогла разобрать даже кейс какой красивый зАмок
/ какой сложный замОк
. Впрочем, это не сильно удивляет, учитывая причастность Яндекса к созданию НКРЯ и их финансовые возможности. Тем не менее, даже они просят размечать омографы руками.
В сухом остатке имеем, что на данный момент возможностей полноценно решить задачу омографов у комьюнити нет. А значит, и все публичные решения перевода в фонемы и простановки ударения и буквы ё
(как следствие, и синтеза речи), работают с точностью до омографов, и требуют ручного вмешательства для достижения максимального качества. А для дальнейшего прогресса в области необходим толчок в виде либо масштабного публичного датасета со снятой омонимией и ударениями / фонемами, либо хотя бы корпуса предложений с полностью размеченными ударениями.
Также от себя подмечу, что корпорации, у которых явно есть на это ресурсы, вместо решения прикладных задач и публикации открытых датасетов, к сожалению, обычно публикуют "потемкинские" датасеты (которые зачастую бывают на порядок - два меньше датасетов от людей) и тратят кварталы загрузки огромных кластеров видеокарт на повторение "хайповых" работ, имеющих спорную практическую ценность.