Задачи автоматического перевода слов в фонемы (grapheme-to-phoneme или G2P), автоматической простановки ударения, и автоматической простановки буквы ё сейчас решаются довольно успешно даже на уровне открытых решений (например: 123).
Тем не менее, практически ни одно открытое решение не позволяет разрешать неопределённости, возникающие при обработке слов-омографов. И оказывается, что эта на первый взгляд незначительная деталь очень сильно влияет на восприятие результатов алгоритмов (будь то 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 просит на вход вручную размечать омографы, у меня так и не получилось подобрать кейс, на которых бы он ошибся. Демка Яндекса смогла разобрать даже кейс какой красивый зАмок / какой сложный замОк. Впрочем, это не сильно удивляет, учитывая причастность Яндекса к созданию НКРЯ и их финансовые возможности. Тем не менее, даже они просят размечать омографы руками.

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

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

Комментарии (4)


  1. snakers4
    19.11.2021 05:15
    +2

    На эту тему от себя добавлю - если искать банально открытые словари с ударениями, формами слов и фонемами - у нас с этим тоже как-то не очень. Я даже платные онлайн сервисы видел, хотя как по мне это абсурд какой-то.

    У наших братьев из Украины есть прекрасный онлайн словарь https://goroh.pp.ua ... Но омографов там кажется тоже нету)


  1. mix1122
    19.11.2021 11:02
    +2

    Also I could propose to use next online service for Russian or/and Belarusian languages -

    https://www.corpus.by/HomographIdentifier/?lang=en


    1. Sontref Автор
      19.11.2021 11:05
      +1

      Thanks for link, it can be useful for creating clean homograph dictionaries. That's really nice.

      However, it seems that this tool also helps only with homograph detection, but it does not disambiguate them.


  1. arthin
    19.11.2021 19:02
    +1

    Интересно, а записанный пиньинем китайский кто-нибудь осилил? И если да, то каков стек?