Проблема омографов в задачах G2P и автоматической простановки ударений

image-loader.svg

Задачи автоматического перевода слов в фонемы (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 невозможно отделить ситуации при которых, например, слово все это именно все, а не всё с непроставленной ё.

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

Где же открытые решения?

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

В русском сегменте, судя по всему, существует ровно один корпус предложений с проставленными ударениями — НКРЯ, который к тому же тщательно оберегается от конкурентов публики.

К сожалению, непонятно как получить оффлайн доступ (хотя бы частичный) к НКРЯ простому смертному. Но по онлайн интерфейсу можно предположить что:

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

  2. Даже НКРЯ не хватит для полноценного решения омографов с ё. В НКРЯ, так же как и в Википедии, буква ё проставлена не везде.

Единственный известный мне открытый инструмент, который, как заявлено, умеет корректно проставлять омографы, как раз и обучен на закрытых данных НКРЯ. Но последний апдейт там был 2 года назад, а на текущий момент он и вовсе перестал у меня работать.

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

Итоги

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

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

Из интересного, несмотря на то, что Yandex SpeechKit API просит на вход вручную размечать омографы, у меня так и не получилось подобрать кейс, на которых бы он ошибся. Демка Яндекса смогла разобрать даже кейс какой красивый зАмок / какой сложный замОк. Впрочем, это не сильно удивляет, учитывая причастность Яндекса к созданию НКРЯ и их финансовые возможности. Тем не менее, даже они просят размечать омографы руками.

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

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

© Habrahabr.ru