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