Омографы

Ответить
Аватара пользователя
evmir_troll-hunter
Администратор

Омографы

#1

Сообщение evmir_troll-hunter »

Омографы — это разные слова, пишущиеся одинаково, но различающиеся ударением.
► Показать
Обновлены (исправлены, расширены...) словари для "ручного" поиска омографов в тексте (*.hmg)

:download: Расширенный
:download: Сокращённый
:download: Ё-омоформы
:download: Ё-омоформы (спецформат. для программы "Книгодел")
:download: Ё-омоформы (спецформат. для Loquendo TTS)

Редакция: evilone, retigor, good_cat, E. Miroshnychenko


Что такое hmg-словари?
hmg-словари - файлы со списками замен, каждая строка которых содержит перечень словоформ искомого омографа и его искомую форму в тексте; между ними стоит знак равенства (=). Левая часть - искомый фрагмент текста, правая часть - варианты его замены, перечисленные через запятую.
Например:
замок=зАмок,замОк
По умолчанию различие между прописными и строчными буквами при рассмотрении шаблонов не делается. Если регистр букв имеет значение, добавляют символ "$" в начало строки также как и в словарях .dic
$Толстой=тОлстой,толстОй
Данный формат словарей поддерживается программами "Homograph","Балаболка", "Demagog".

В отличии от прочих словарей, hmg-словари используются только для ручной разметки текста. И хотя это очень долго и у многих не хватает терпения возиться со всем этим, особенно если текст весьма объемный, использование данного способа разметки позволяет практически полностью снять омонимию в тексте выставив нужную форму с проставленным ударением.

Аватара пользователя
SZ-Vtk
Обыватель

Yandex TTS

#2

Сообщение SZ-Vtk »

Об одном способе борьбы с омографами

Омографы - позор любой знаковой системы, признание неспособности системы справиться с материалом. Разрешать омографы - увлекательное дело сродни возведению прекрасных мостов через предварительно выкопанные ямы.
Лучше всего с омографами борется сам человек читающий, чуть хуже нейронные сети, далее мы, составители словарей, программисты и говорилкослушатели разной степени образованности и склонности к пуризму, Следует заметить, что даже человек разумный не всегда может с этим справиться (по крайней мере в рамках предложения). Пример. "Большая часть пространства между ветвями галактик заполнена водородом и пылью". Если вы ранее не знали "бОльшая" или "большАя", из приведенного выше предложения вы этого точно не узнаете.То есть в общем случае задача восстановления осмысленного текста из обычного является в русской орфографии нерешаемой.

Теперь о нашем. Я по-прежнему считаю, что наилушим является двухэтапный метод:
1) с помощью внешней программы (лучше интернет-сервиса) переводим обычный текст в текст с "ё" и ударениями в омографах
2) с помощью средств конкретных движков устраняем дефекты речи.
Способы, которыми мы обычно пользуемся, например, "*", не всегда хороши из-за побочных эффектов, а вызвано их применение дефицитом времени и памяти. В случае внешней обработки, не имея ограничений ни того, ни другого, мы можем пользоваться только точными заменами. Кроме того, как это ни удивительно, для некоторые классов омографов можно обрабытывать весь класс целиком.

Среди 5500 омографов русской орфографии имеется небольшой класс (около 200 штук) омографов вида <и.п.мн.ч / р.п.ед.ч.>: руки, ноги, спины, лица, стены, города, реки, леса, горы, моря и т.д. Класс небольшой, но достаточно распостранённый. Чтобы правильно поставить ударение в омографах этого класса, достаточно определить в каком числе (ед. или мн.) стоит омограф, а это определяется видом части речи предстоящего слова. Таким образом, нужно иметь таблицу всех слов русского языка во всех формах с указанием части речи и (для прилагательных) числа.Тогда получаем:

<Существ><омограф> - ед.число //на берегу рекИ
<Глагол><омограф> - мн.число //текут рЕки
<Прич><омограф> - мн.число //мчащиеся рЕки
<Дееприч><омограф> - мн.число //изгибая рЕки
<Прил ед.ч><омограф> - ед.число //голубой рекИ
<Прил мн.ч><омограф> - мн.число //синие рЕки
мои,твои,наши,ваши<омограф> - мн.число //мои рЕки
моей,твоей,нашей,вашей<омограф> - ед.число //моей рекИ

Аватара пользователя
Nxtpr
Постоялец

Yandex TTS

#3

Сообщение Nxtpr »

Усе уже сделано до нас https://goldlit.ru/component/slog, жаль не для нас.

Аватара пользователя
lplee

Yandex TTS

#4

Сообщение lplee »

Nxtpr писал(а):
17 июл 2019 01:41
Усе уже сделано до нас https://goldlit.ru/component/slog
Там ничего не сделано, обычный разбор предложения на отдельные слова и указание всех, в т.ч. канонической, форм слов

Аватара пользователя
lplee

Yandex TTS

#5

Сообщение lplee »

lplee писал(а):
17 июл 2019 10:36
Среди 5500 омографов русской орфографии имеется небольшой класс (около 200 штук) омографов вида <и.п.мн.ч / р.п.ед.ч.>: руки, ноги, спины, лица, стены, города, реки, леса, горы, моря и т.д
Составить правила для 200шт не проблема, никто ещё не сделал этого?
Вообще, для разбора текста есть неплохие библиотеки на Питоне. Я работал с одной из них (Gensim) для задач кластеризации текстов. Текст, семантические связи и тд понимает почти отлично. Вероятно можно найти и доработать что-нибудь для многострадальных ударений.

Аватара пользователя
Nxtpr
Постоялец

Yandex TTS

#6

Сообщение Nxtpr »

lplee писал(а):
17 июл 2019 10:36
Там ничего не сделано
Словарные базы сделаны. Кое-где и размеченный текст для машинного обучения. Но не для свободного доступа. Это основа. Без нее ничего не сделаешь.

Аватара пользователя
lplee

Yandex TTS

#7

Сообщение lplee »

Nxtpr писал(а):
17 июл 2019 11:31
Словарные базы сделаны. Кое-где и размеченный текст для машинного обучения. Но не для свободного доступа. Это основа. Без нее ничего не сделаешь.
Не понимаю о чем вы. Выше написали про ударения исходя из конструкции предложения (падежи и тд), вы дали ссылку на сайт, где обычный пословный разбор.
Задам вопрос просто: как это "уже все сделано" поможет проставить ударения правильно?
Вполне вероятно я чего-то не знаю, но вы и не объясняете ничего толком, кроме "все уже есть". Без обид только.

Аватара пользователя
Nxtpr
Постоялец

Yandex TTS

#8

Сообщение Nxtpr »

На что обижаться. Я к тому, что синтаксический анализ без соответствующих баз не сделаешь.
Почитайте https://habr.com/ru/post/148124/ Даже не статью - комментарии к ней.

Аватара пользователя
SZ-Vtk
Обыватель

Yandex TTS

#9

Сообщение SZ-Vtk »

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

Аватара пользователя
lplee

Yandex TTS

#10

Сообщение lplee »

SZ-Vtk писал(а):
16 июл 2019 23:41
Почитайте https://habr.com/ru/post/148124/ Даже не статью - комментарии к ней
Да, уже читал ее, и много других по теме. Есть еще от ABBYY Compreno, сам не юзал, но читал, она тоже разбирает текст на составные части, так сказать, но ещё более мощно. Кажется даже смысл текста понимает. Жаль только - платная, и, если не изменяет память, только доя юрлиц. Но не важно.
Вы это хорошо затронули тему семантического анализа текста для простановки ударений. Если получится реализовать, это же будет унифицированное средство обработки текста для последующей прослушки/записи на любом движке и программе. А то сейчас куча словарей и скриптов, какие-то правила и исключения, сплошное нагромождение не всегда эффективных костылей.....

Аватара пользователя
lplee

Омографы

#11

Сообщение lplee »

evmir_troll-hunter писал(а):
09 авг 2018 02:23
Что такое hmg-словари?
hmg-словари - файлы со списками замен, каждая строка которых содержит перечень словоформ искомого омографа и его искомую форму в тексте; между ними стоит знак равенства (=). Левая часть - искомый фрагмент текста, правая часть - варианты его замены, перечисленные через запятую.
Например:
замок=зАмок,замОк
Подскажите, каким образом выбирается нужно слово из 2х? Ниже вы написали про ручной метод, но это не вариант, 20-ые годы на дворе все-таки.
Например, я работаю с программами Балаболка и Демагог, как я могу применить данные словари?

Аватара пользователя
balabolka
V.I.P.

Омографы

#12

Сообщение balabolka »

lplee писал(а):
18 июл 2019 15:19
Ниже вы написали про ручной метод, но это не вариант, 20-ые годы на дворе все-таки.
20-ые годы, и что?! Вы знаете, где можно взять готовый компонент/сервис/библиотеку/консольную программу, которая умела бы в автоматическом режиме распознавать омографы и расставлять ударения? (И желательно бесплатно.) Если бы было такое готовое программное решение, да еще для разных языков, то можно подумать об использовании его в "Балаболке". Но ничего подобного не было двенадцать лет назад (когда обсуждался вопрос об обработке омографов в "Балаболке"), нет и сейчас.

Вот было бы здорово, если российское государство выделило несколько миллионов рублей на разработку программы или сервиса, преобразующего любой документ в текст, который без ошибок смог бы прочитать речевой синтезатор. Расстановка ударений в омографах или даже во всех словах, расшифровка сокращений и формул, замена чисел словами и т.д. Нужна команда из филологов и программистов с хорошим финансированием; и чтобы результаты их работы могли быть бесплатно использованы любыми желающими (как сервис, как программная библиотека, как компонент для разных языков программирования...). Как бы это пошло на пользу продвижению русского языка в цифровом пространстве...

А пока я смог реализовать лишь "ручной метод" расстановки ударений в омографах. В "Балаболке" это пункт главного меню "Текст|Искать омографы". Программа будет просматривать текст от начала, искать слова-омографы и показывать плавающее окно с вариантами замены. Или можно выбрать пункт главного меню "Вид|Показывать|Омографы": в этом случае все слова-омографы из выбранного словаря будут подсвечены в тексте другим цветом. Можно щелкнуть правой кнопкой мыши на слове и выбрать вариант замены в контекстном меню.

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

Код: Выделить всё

$Толстого=То<лстого,Толсто<го
||$Льва Толстого=Толсто<го
||$Льва Николаевича Толстого=Толсто<го

Аватара пользователя
lplee

Омографы

#13

Сообщение lplee »

balabolka писал(а):
18 июл 2019 16:19
Вы знаете, где можно взять готовый компонент/сервис/библиотеку/консольную программу, которая умела бы в автоматическом режиме распознавать омографы и расставлять ударения? (И желательно бесплатно.)
Нет, не знаю, но нужно искать.
balabolka писал(а):
18 июл 2019 16:19
ничего подобного не было двенадцать лет назад (когда обсуждался вопрос об обработке омографов в "Балаболке"), нет и сейчас.
Не соглашусь с вами. За последние несколько лет машинное обучение сильно ушло вперед, нейронки чуть не ежедневно удивляют, как с учителем, так и без.
balabolka писал(а):
18 июл 2019 16:19
А пока я смог реализовать лишь "ручной метод" расстановки ударений в омографах
За это вам большое спасибо! И за программу в целом! Но ручной метод это архаика, вы то точно это понимаете.
Сейчас я занимаюсь вопросом автоматизации этого момента, как будут результаты сразу вам обозначу.

Аватара пользователя
HaRpY
Наблюдатель

Омографы

#14

Сообщение HaRpY »

Хотелось бы узнать мнение общественности о полноте и достоверности словарей омографов, находящихся в шапке текущей темы (total_omoforms.hmg и yo_total.hmg).
Как вы думаете, следует ли эти словари актуализировать или пусть остаются «как есть»?

Аватара пользователя
tonio_k
V.I.P.

Омографы

#15

Сообщение tonio_k »

HaRpY писал(а):
24 ноя 2019 17:47
актуализировать или пусть остаются «как есть»?
мое мнение, оставить как есть. А смысл их править? Эти словари нужны в первую очередь тем, кто применяет ручной метод проверки омографов, причем таких пользователей не так уж и много.
Лично я к ним не отношусь. Кроме, разве что, все=всЕ,всЁ - это единственное что я могу себе позволить вручную проверить перед озвучкой книги :smile1:
В словарях выше представлены практически 95% всех встречаемых и хоть иногда употребляемых омографов в книгах.
5% - это настолько маленькая погрешность из очень редко встречающихся омографов, что актуализация словарей погоду не сделает - качество озвучки в целом не изменит.
Более того, со временем, пользователь так или иначе переходит к личному "сокращенному словарю" состоящего из наиболее часто встречаемых или, точнее, статистически часто двояко звучащих омогрфов. С таким словарем можно за относительно небольшой промежуток времени проверить все сомнительные омографы и приступить к прослушиванию книги.

Аватара пользователя
HaRpY
Наблюдатель

Омографы

#16

Сообщение HaRpY »

tonio_k писал(а):
25 ноя 2019 23:10
Эти словари нужны в первую очередь тем, кто применяет ручной метод проверки омографов, причем таких пользователей не так уж и много.
Спасибо за высказанное мнение.
Мне кажется, что считать данные словари омографов исключительно словарями для ручной правки неправильно. При программной обработке текста (не регулярными выражениями), для того чтобы определить является ли конкретное слово омографом или нет тоже нужен подобный словарь. Вы же для ручной расстановки омографов, как раз и используете программу, которая с данным словарем работает.
tonio_k писал(а):
25 ноя 2019 23:10
В словарях выше представлены практически 95% всех встречаемых и хоть иногда употребляемых омографов в книгах.
Ох уж эти 95% :smile1:

Код: Выделить всё

архимед=архимЁд,архимЕд
tonio_k писал(а):
25 ноя 2019 23:10
Более того, со временем, пользователь так или иначе переходит к личному "сокращенному словарю"
Если личный «сокращенный словарь» представляет собой подмножество исходного полного, то это одно (нормально). Если в личном словаре есть омоформы, которых нет в исходном, то другое (плохо).
Может кто из разработчиков программ выскажется?

Аватара пользователя
tonio_k
V.I.P.

Омографы

#17

Сообщение tonio_k »

Посмотрите словарь all_omographs.hmg идущий в комплекте с программой Homograph от ув. good_cat
https://mytts.info/viewtopic.php?f=22&t=81
Словарь выглядит актуализированным

Аватара пользователя
HaRpY
Наблюдатель

Омографы

#18

Сообщение HaRpY »

Если я правильно разобрался, то all_omographs.hmg более древний (от 12.05.2017), чем словари в шапке (от 13.08.2018). Его же и использовали как источник:
good_cat писал(а):
27 июл 2018 18:37
Обновление программы Homograph
27.07.2018 Версия 2.0.0.379 (релиз программы)
(+) Словарь омографов пополнен и разбит на 2 словаря.
total_omoforms.hmg - основной словарь;
yo_total.hmg - словарь омографов Ё/Е.
P.S.
tonio_k писал(а):
26 ноя 2019 12:50
Ну тогда , если у вас есть Что добавить или предложение по изменению
HaRpY писал(а):
26 ноя 2019 11:31
Может кто из разработчиков программ выскажется?
Подождём, что скажут (и скажут ли вообще :boss: ) "начальники транспортных цехов"... Может они тоже считают оптимальным вариантом: оставить "как есть"

Аватара пользователя
good_cat
Администратор

Омографы

#19

Сообщение good_cat »

Словарь омографов all_omographs.hmg был пополнен, очищен от найденных ошибок и разбит на 2 словаря:

total_omoforms.hmg - основной словарь;
yo_total.hmg - словарь омографов Ё/Е.

Тем не менее словарь all_omographs.hmg может быть полезен, если пользователю нужна частота
появления омографов в тексте.
Словари естественно не полны и вряд ли могут быть "окончательно пополнены", учитывая обилие словоформ русского языка.

В последнюю редакцию словарей не вошли некоторые омографы.
Например:

сети=сЕти,сетИ

т.к до конца не ясно, являются ли они нормой русского языка или
это профессионализмы (жаргон).

Аватара пользователя
HaRpY
Наблюдатель

Омографы

#20

Сообщение HaRpY »

good_cat писал(а):
26 ноя 2019 14:29
В последнюю редакцию словарей не вошли некоторые омографы.
Например:

сети=сЕти,сетИ

т.к до конца не ясно, являются ли они нормой русского языка или
это профессионализмы (жаргон).
Думаю ничего страшного не произойдет если для "сети" ударение будет только "сЕти". Вроде бы смысл от этого не меняется, только субъективное восприятие. Считаю, что правильно исключили.

С другой стороны что-то вроде "инспекторА" (используемое вместо правильного "инспекторы"), вполне вероятно встретить в тексте (например: "А вы товарищи инспекторА, что думаете?" - обращение во множественном числе) . Ударение в другом месте уже искажает смысл. Подобные омографы, должны оставаться в словаре.

Аватара пользователя
Lecron
Специалист

Омографы

#21

Сообщение Lecron »

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

Сразу перечислю проблемные темы.
  1. Понимание и перевод на русский, грамматических признаков выдаваемых программой. см. файл omograf.txt.
  2. Нужна оценка качества работы библиотеки. Модель обучена на новостях, поэтому качество вроде хорошее, но насколько, мне непонятно. Может вообще не стоит затевать движуху?
    1. для проверки, сохраните любой текст в файл grammar_group_src.txt, запустите grammar_group.py и в файле grammar_group_res.txt будут группы признаков и слова им соответствующие.
    2. для детального разбора одного предложения, запустите demo.py "тестируемое предложение".
  3. Нужна помощь спецов по машинному обучению и NLP. Существуют эмбединги (чтобы это слово не значило) для худлита navec_hudlit_v1_12B_500K_300d_100q.tar, обученные по librusec, но для них нет или я не нашел готовых коэффициентов для библиотеки SlovNet (morph, syntax, ner), что может существенно повысить качество определения признаков. Тема для меня настолько чуждая, что создать их не могу.
  4. Какие признаки/правила необходимы для достаточно качественного разрешения омографа? Библиотека умеет определять грамматические признаки, позволяет получить связь слов в предложении, то есть подчиненное и родительское слово для омографа, а также нормализовать их.
  5. На данный момент пользуюсь сторонней самописной программой, не имеющей документации. Её словарь omograph_idx.omn, еще та кракозябра. Для лучшего понимания, перевел цифровые коды в русские аббревиатуры omograph_abbr.omn.
    1. насколько правильно перевел?
    2. насколько правильно составлен словарь с позиции языкознания?
    3. нужна помощь в лучшем понимании его формата и какие признаки из словаря можно сравнительно безболезненно проигнорировать, без существенно ухудшения качества работы?
      • на данный момент понятно что < и > указатели соответственно на подчиненное и родительское слово
      • # — указатель на анализ исходного текста. Вероятно будет проигнорировано, так как лучше перенести в dic/rex словарь, который применять до грамматического снятия омографии.
      • Что значат скобки [] и {}, символы : и @, как связаны токены в правиле "и" или "или", пока непонятно.
  6. сейчас можно протестировать предельной краткий, демонстрационный вариант словаря omograph.omn. Тестируемый текст сохраняете в файл aomo.txt и запускаете aomo.py.
  7. кто-то знающий должен взять ответственность за пополнение и актуализацию словаря.
    Для помощи ответственному, могу написать модуль тестирования, где для каждого омографа, в отдельном файле будут записаны части правил и текст позволяющий их проверить. Если нет ошибок, словарь будет собираться из этих правил автоматически. Плюсы: шире участие пользователей, ответственному проще проверять предложенные правки. Минус: нельзя оперативно вносить правки в сам словарь.
  8. ...вероятно что-то упустил. Предлагайте, уточняйте, общайтесь.
для запуска приложений, нужен установленный Python 3.8 и сама библиотека (установить pip install natasha в командной строке). Если ассоциации ОС установились, достаточно запустить сам .py файл, например aomo.py. Если нет, запускать как python aomo.py.

Если качество библиотеки будет признано достаточным и пойдет коллективная работа, будет проработано удобство использования, прописаны опции командной строки и возможность работать с произвольными файлами. Для релиза, можно будет попробовать упаковать в exe файл. А пока, что есть, то есть. Демка.
omogramm.zip
(57.98 КБ) 71 скачивание

Аватара пользователя
Lecron
Специалист

Омографы

#22

Сообщение Lecron »

Прогнал слова из списка омографов используемой мной программы, через сервис progaonline.com/accent. Вроде он неплохо расставляет ударения и указывает для них грамматические признаки. Для желающих составить словарь, надеюсь будет неплохим подспорьем. Пример:

Код: Выделить всё

благом=благо`м: прл ед муж пр | благо`м: прл ед ср пр | бла`гом: сущ неод ед ср тв | благо`м: сущ неод ед ср пр
omograph_grammar.txt
(168.55 КБ) 69 скачиваний

Аватара пользователя
Lecron
Специалист

Омографы

#23

Сообщение Lecron »

Уфф. Ценой кучи времени и глаз в кучу, собрал наконец словарь
omograph.omn.zip
(15.09 КБ) 68 скачиваний
К счастью, ¾ правил сводились к простому противопоставлению ед/мн, сущ/гл, муж/жен. С остальными пришлось повозится, а некоторые так и остались неразрешенными (чуть меньше 100 шт). К сожалению, это превышает мои знания и настойчиво прошу помощи у знающих язык коллег. Впрочем и остальные правила неплохо бы просмотреть. При таком количестве, глаз замыливается и легко допустить ошибку. Проблемные правила:
► Показать
Напомню, библиотека умеет определять связи слов в предложении и нормализовать слова. Поэтому возможны варианты типа "подчиненное слово 'глагол'" или "омограф — подлежащее (nsubj)".
Словарь составлялся с оглядкой на возможности библиотеки, но в некоторых случаях, если разрешение омографов выходило за ее рамки, во главу угла ставился алгоритм, а не его конкретная реализация.
На данный момент, формат словаря таков:

Код: Выделить всё

омограф=вариант0 : вариант1|правило11|пр12||пр1N| : вариант2|пр21| : вариантN|ghN1|
вертела=ве`ртела : ве`ртела|сущ ед| : верте`ла|гл| : вертела`|сущ мн|
позднее=по`зднее : поздне`йе|нар|прл сравн|предл| : по`зднее|прл|
брони=бро`ни : бро`ни|@$брони| : брони`|@$броня|
берегу=бе`регу : бе`регу|сущ дат| : берегу`|гл|сущ|
саду=саду` : са`ду|дат|
Правило состоит из нескольких токенов, которые могут быть морфологическим признаком или $словом. Для сработки необходимо соблюдение всех условий. Правило может применяться к естественной форме слова (как есть) и к @нормализованной. Например @$броня. И хоть библиотека распознать не может, возможно даже такое: паря`щая|@гл неперех| — нормальная форма слова "паря`щая" должна быть непереходным глаголом, т.е. "пари`ть".
Правила для варианта проверяются последовательно. Варианты также проверяются последовательно. Обычно это не важно, они взаимоисключающие, но иногда (например "берегу") менять местами нельзя. Слово по умолчанию (вариант0), используется когда не сработало ни одно правило. Происходит когда библиотека неверно сработала, определяя признаки, или само правило подразумевает его использование (например "саду").
Если для разрешения омографов понадобятся другие возможности, формат будет расширен.

PS. Сам скрипт применения словаря в новом расширенном формате пока не написан. Акцентировался на составлении словаря, который как можно точнее описывал предметную область. Думаю это важнее всего.

Аватара пользователя
tonio_k
V.I.P.

Омографы

#24

Сообщение tonio_k »

Lecron писал(а):
08 окт 2020 17:54
declension_dynast это функция
тут понятно. Здесь можно сделать через lua так: находим участок текста в по регулярному выражению например, в пределах одного предложения. Это предложение сохраняем в отдельный файл. Передаём этот файл утилите которая применит к этому файлу вашу функцию declension_dynast, перезапишет файл. В lua генерируем простое правило замен dic:
Текст оригинальный=текст измененный функцией declension_dynast
Применяем это правило к тексту (необходимости вставить текст в то же место смысла нет - достаточно замены)

Аватара пользователя
Lecron
Специалист

Омографы

#25

Сообщение Lecron »

После недавнего видео от wasyaka по редактированию омографов, подумал, что правильнее видеть все фразы из большого количества книг для одного омографа. Лучше видно закономерности. Легко проверить ошибочность утверждения, что мол в таком контексте ударение такое и только такое. Дошли руки до "замок". А когда посмотрел на почти 3000 фраз, во-первых стало страшно, а во-вторых, подумал почему бы вместо захардкоженного словаря, не использовать нейросети.
замок.zip
(56.27 КБ) 47 скачиваний
В архиве 3 файла.
замок.cor - очищенные от излишнего контекста фразы. Их в принципе не сложно превратить в словарь. Хоть для одного слова он будет достаточно полон))). Но в тоже время, "впускает в за`мок" из словаря не поймает "впускает их|его|ее в свой за`мок"
замок.test - ударение проставлено, но контекст сохранен. Можно посмотреть на реальные экзерсисы авторов. Используется для оценки качества работы нейросети.
замок.model — собственно нейросетевая модель. Из 552 замо`к и 326 за`мок, угадала 85%

Код: Выделить всё

              precision    recall  f1-score   support

      за`мок       0.71      0.83      0.76       276
      замо`к       0.92      0.84      0.88       602

    accuracy                           0.84       878
   macro avg       0.81      0.84      0.82       878
weighted avg       0.85      0.84      0.84       878
Для желающих попробовать на своем материале, нужен Питон и установленный пакет sklearn.

Код: Выделить всё

import joblib
model = joblib.load('замок.model')
model.predict(['замок не прокручивался'])
>>['замо`к']
model.predict(['замок разваливался'])
>>['за`мок']

Впечатления в целом. Проблема омографов вполне решаема. По грамматическим признакам глагол/существительное, единственное/множественное, мужской/женский, или статистическими для неразрешимых а-ля "замок". Для уверенно владеющих темой нейросетей и подготовки данных для их обучения, думаю несложно добиться точности 90+%. Но это большая муторная работа. Извлечь данные из корпуса текстов несложно, но вот разметить их, проставить ударение и очистить от мусора — бррррр!
Кстати, если кто-то захочет составить классический словарь, было бы любопытно оценить его точность?

Аватара пользователя
tonio_k
V.I.P.

Омографы

#26

Сообщение tonio_k »

Lecron писал(а):
06 ноя 2020 16:41
Проблема омографов вполне решаема
лично очень сомневаюсь. С трудом верится в безграничность возможностей нейросетей vs могучего русского языка.
Lecron писал(а):
06 ноя 2020 16:41
Но это большая муторная работа.
вот именно! Если этим вопросом не займётся какой нибудь институт или объединение программистов, то задача для одного не подёмная.
Lecron писал(а):
06 ноя 2020 16:41
А когда посмотрел на почти 3000 фраз, во-первых стало страшно, а во-вторых, подумал почему бы вместо захардкоженного словаря, не использовать нейросети.
а проводилась ли сравнительная статистика применения словарей? Что бы сравнить её с результатами работы нейросети.
Вот ваша фраза: "Из 552 замо`к и 326 за`мок, угадала 85%", мне интересно, а каким результатом "угадывания" обладают словари имеющиеся в сборках на форуме? Небольшой офтоп под спойлером:
► Показать
это я к тому, что высокий процент угадывания для нейросети надо правильно сравнивать с результатами работы словарей с правилами, и только тут понятно будет на сколько нейросеть , при всех связанных с ней трудозатратах и скорости работы, будет лучше, чем создания правил для словарей?
причём высокий процент угадывания может быть из-за "по русски" составленного предложения. Например:
В этом замке проживал граф Толстой. А как словари или нейросети будут срабатывать в тексте написанном в стиле магистра Йода:
Толстой граф проживал в замке этом.

UPD и вообще, если результат работы нейросети предпологает последующее прослушивание и корректировку, то чем она координально отличается от составления словарей по старинке?

Аватара пользователя
Lecron
Специалист

Омографы

#27

Сообщение Lecron »

tonio_k писал(а):
06 ноя 2020 17:52
вот именно! Если этим вопросом не займётся какой нибудь институт или объединение программистов, то задача для одного не подёмная.
Ничуть. Достаточно среднеразвитого сообщества.
Из всего многообразия типовых словарей омографов, наибольшее распространение имеют всего 1000 слов. Ну и еще несколько сотен, когда омографом является имя собственное — То`лсто`го, О`ди`н. Из этой тысячи, 900 разрешаются по грамматическим признакам (ре`ки|сущ мн| : реки`|гл|сущ ед|), которые современные нейросети определяют с 95+ успехом уже сейчас. Осталось разметить только 100 слов, для успешной обработки которых хватит корпуса на 1000-2000 фраз на омограф. И даже 200-300 уже дадут неплохой результат.
Почему так уверенно говорю. Я собрал датасет для этой сотни из 374Мб txt-файлов. Получил вырезку на 9Мб. Из которых 50% вхождений приходится всего на 4 слова — минут, самом, самого, стоит. А 50% слов занимают всего 250Кб. Вот такое оно веселое распределение.
tonio_k писал(а):
06 ноя 2020 17:52
а проводилась ли сравнительная статистика применения словарей? Что бы сравнить её с результатами работы нейросети.
Самому интересно. Но я в ассортименте словарей не силен. Попробуйте проверить сами.
Корпус для теста я предоставил. Удаляете символ ударения, применяете словари и сравниваете построчно с оригиналом (скриптом). Если строка совпала — правильно, нет — неверно.
Предположу убедительную победу сетей.
tonio_k писал(а):
06 ноя 2020 17:52
В этом замке проживал граф Толстой.
Толстой граф проживал в замке этом.
Как раз это для сетей не проблема. Они оперируют не порядком слов, а окружением и дистанцией. Причем даже не по словам, а по n-граммам. Грубо: проживал — прож, рожи, оживал, живал. Ей все равно: проживал граф этом замке, проживал граф замке, проживал этом граф замке, проживал этом замке, проживал замке.
В всех случая результат правильный — за`мок

Аватара пользователя
Lecron
Специалист

Омографы

#28

Сообщение Lecron »

tonio_k писал(а):
06 ноя 2020 17:52
UPD и вообще, если результат работы нейросети предпологает последующее прослушивание и корректировку, то чем она координально отличается от составления словарей по старинке?
Хороший вопрос. Для ответа на него собрал полный датасет по омографам, которые считаю важными.
Обработано книг: 923 штук / 359 Мб
Омографов: 943
Вхождений: 1723179
stat.csv
(18.55 КБ) 48 скачиваний
Грамматически неразрешимые омографы (109 штук) дают 142151 или 8%
10 самых распространенных омографов дают 725122 вхождения или 42%.
18 распространненных — 50%.
Из них, 14 грамматически разрешимые, которые дают 792965 или 46%

Вначале взял для каждого из них 0.063% записей, чтобы в сумме получить 500 и проверил их на правильность расстановки ударений, исходя из их грамматических признаков. Ударения то правильные и правило когда надо сработает правильно, но вероятность для у`же, по`том, гла`за, о`дин, нача`л, то`му, мало`, ноги` очень мала, а на статистику влияет.
check.zip
(12.06 КБ) 49 скачиваний
Если учесть только "все", "чем", "руки", "стороны", "слова", "дома", получаем 263 теста, из которых 7 ошибочных или всего 2.7%. По полной выборке — 1.8% (они дали еще 2 ошибки). Но реальная точность еще лучше. Грамматика анализируется по всему предложению, со знаками препинания, а у нас выдернутые куски, иногда очень короткие для точного анализа.

Достаточно для того, чтобы исключить "последующее прослушивание и корректировку"?
tonio_k писал(а):
06 ноя 2020 17:52
лично очень сомневаюсь (что проблема обографов решена). С трудом верится в безграничность возможностей нейросетей vs могучего русского языка
И это только грамматика. Если к ним добавить 85% точность для входящих в первую 20-ку четырех неразрешимых омографов (8%) — минут, самом, стоит, самого, — головная боль снята.

Аватара пользователя
Lecron
Специалист

Омографы

#29

Сообщение Lecron »

В очередной раз убеждаюсь, что чтобы задать правильный вопрос, нужно знать половину ответа.

Ища инфу про омографы находил довольно мало. Но как столкнулся с темой Разрешение лексической многозначности, к каковой принадлежат омографы, оказалось работы вовсю идут и есть любопытные результаты. Например алгоритм Яровского.
использует в качестве базового классификатора правила принятия решений и на каждом шаге выполняет следующие действия:
1.составление правил принятия решений на основе небольшого обучающего множества;
2.классификация остальных документов в корпусе;
3.построение нового обучающего множества, определяя экземпляры, размеченные свероятностью, большей определенного порога;
4.обучение классификатора на новом обучающем множестве.
5. повторить с пункта 3
Если по-русски, никаких нейросетей. Алгоритм абсолютно предсказуем. На основе списка фраз с омографом и небольшой подсказки что есть что, сам определяет какие слова окружающие омограф и в каком виде (правила принятия решений) могут характеризовать то или иное применение. Если разобраться, эти правила даже можно конвертировать в dic формат. Причем при определении правил, смотрит не только на размеченные подсказки, но и "умнеет" с каждым шагом.
Например он узнал, что для за`мок свойственно слово старый где-то спереди, а для замо`к слово щелкнул с любой стороны. Найдя похожие случаи, он увидит слово электронный и заметит его использование только для замо`к — вуяля, создано новое правило. Ищем следующие... И следующие...

В моем лабораторном примере, на корпусе из 2000 фраз, я ему "подсказал" 150, в которых алгоритм нашел 280 правил, которые самостоятельно расширил до 980, корректно распознав еще 550 ударений, всего с 2 ошибками.

Алгоритм достаточно прост, не требует библиотек и может быть реализован почти любым программистом. Сейчас ковыряю GitHub - juhokallio/YarowskyWSD: Word-sense disambiguation project for natural language processing course. Как рабочая программа не годится, но для понимания работы алгоритма и отсутствия необходимости изобретать велосипед — самое то. Всего 400 строк кода.

Аватара пользователя
Lecron
Специалист

Омографы

#30

Сообщение Lecron »

Продолжаю делиться впечатлениями по алгоритму Яровского.
tl;dr Отличный инструмент для снятия омонимии. Только его надо правильно приготовить.

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

Назначение алгоритма:
Вначале я ошибся, посчитав его полноценным классификатором, способным классифицировать 100% фраз. На самом деле, алгоритм классифицирует 30-40% фраз, но с количеством ошибок стремящихся к 0. Для чего надо вручную разметить очень небольшое количество образцов.

Исследование алгоритма:
Провел 3 пробы. В каждой из которых, последовательно размечал по 10 случайно выбранных из корпуса фраз, после чего проводил обучение и смотрел, сколько фраз доразметилось автоматически.

Код: Выделить всё

[631, 0, 0, 15, 0, 0, 8, 6, 0, 1, 1, 0, 38, 6, 5] Всего: 711
[0, 0, 0, 0, 642, 1, 19, 9, 1, 44, 11, 6, 1, 7, 12] Всего: 753
[0, 711, 4, 0, 8, 0, 3, 2, 21, 5, 0, 4, 3, 0, 6] Всего: 767
Основной выхлоп дала разметка соответственно 10, 50, 20 фраз. Что дает результативность от 1:13 до 1:63 (количество автоматических на 1 ручную). Если же во главу угла ставить не минимизацию ручного труда, а качество классификации в целом, оптимально размечать 10-20% от размера корпуса. Который в моем случае составлял чуть больше 2000 записей.

Примечание: Насколько понял работу алгоритма, его эффективность зависит не столько от количества размеченных, сколько от размера самого корпуса, количества фраз доступных алгоритму для оценки.

Оценка ошибок: Проверив вручную результат работы первой пробы, нашел 17 ошибок классификации или 2.4% (помечены -1 в файле log_auto.txt). Отмечу, что многие из них, следствие работы стемминга (удаления окончаний и суффиксов). Заменив стемминг на нормализацию (заперта, запер, заперев -> запереть) из pymorphy, количество ошибок сократилось до 5 (0.8%) без существенного влияния на количество размеченных. Но так как это внешняя зависимость затрудняющая исследование алгоритма, за основу взят именно стемминг.

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

Но какое бы ни было применение, для работы нужен корпус фраз. Он может быть сформирован пользователем самостоятельно, на основе свой библиотеки. Но оптимально, чтобы его формировала сама программа. Встретился омограф, извлекли фразу с ним и сохранили в соответствующий файл. Думаю скрипты Демагога от ув. flegont с этим справятся легко. В идеале, это совместно формируемый корпус, куда сливаются результаты работы программы у всех пользователей. В отличии от уникальных и личных словарей, здесь никакой уникальности нет, главное размер. (см. примечание из "Исследование алгоритма")

а) Формирование правил для словарей. Трудность представляет правило k_nearest анализирующее слова на отдалении от омографа и предварительное удаление стоп-слов. Если это не получится автоматически напрямую, составителям словарей такая подсказка общих признаков, окажет существенное подспорье.

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

в) непосредственная классификация. Перед применением классических словарей.
yarowsky_wsd.zip
(118.35 КБ) 9 скачиваний
Код стеммера и классификатора, исходный корпус, результат 3 проб.

Аватара пользователя
flegont
V.I.P.

Омографы

#31

Сообщение flegont »

скрипты Демагога
Составление корпуса фраз с омографами - да, скриптами это решается.
К примеру, один скрипт может перелопатить указанные файлы книг, и сверяясь с заданным списком омографов, собрать до кучи все фразы, содержащие эти омографы. Попутно записывая в лог: какие книги уже обработаны. Чтобы можно было продолжать работу, с того места, где она была прервана пользователем.
Второй скрипт, привязанный к горячей клавише - просто бы читал выделенное слово в тексте, и если это омограф, то добавлял бы фразу с этим словом в корпус. Предварительно проверяя, что ее там еще нет.

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

Аватара пользователя
Lecron
Специалист

Омографы

#32

Сообщение Lecron »

flegont писал(а):
21 мар 2021 18:54
WSD-проблема относится к числу еще не решенных.
Никто не утверждает о ее решенности. Специально указал процент типовых фраз, т.е. фраз попадающих под алгоритм, и количество ошибок. Речь скорее о существенном сдвиге, а не окончательном решении. Плюс очень невысокой цене этого сдвига. Как для программиста, так и для пользователя.
Можно долго ждать пока нам сделают голос, меньше нуждающийся в затыкивании словарями и тем более словарями содержащими банальные правила, а можно минимальными усилиями попробовать сделать хорошо самим.
flegont писал(а):
21 мар 2021 18:54
Второй скрипт, привязанный к горячей клавише - просто бы читал выделенное слово в тексте, и если это омограф, то добавлял бы фразу с этим словом в корпус.
Не то. Нужна простота! Поэтому упомянул hmg словарь.
Программа, прозрачно для пользователя, при любой озвучке/обработке текста, должна находить вхождения в него всех указанных в словаре омографов и распихивать их по корпусам. Точнее по wal-файлам (write-ahead log). А по горячей клавише или еще какому событию, для всех корпусов сразу, проводить дедупликацию и сливать с основным корпусом. Тогда и вести лог, из какой это книги, не будет надобности.

ЗЫ. Пока писал ответ, пришла еще одна мысль.
► Показать

Аватара пользователя
wasyaka
V.I.P.

Омографы

#33

Сообщение wasyaka »

Lecron писал(а):
21 мар 2021 22:17
Не то. Нужна простота! Поэтому упомянул hmg словарь.
Из около 200 книг выбрал, по ходу, все омо подлежащие замене (зАмок -по умолчанию, выбирались соответственно где замОк) и т.д.
Всё в формат dic(ключ-Слово + омограф или наоборот)...
Сравнил - словарь до (начальный) и словарь с дополнением из 200 книг...
Кол-во необракботанных омографов одинаково...
При добавление этих ключевых слов в рэкс - с разбежкой в два - три слова (от омографа, буквально после одной книги 4 сработки...
Lecron писал(а):
15 мар 2021 18:33
для за`мок свойственно слово старый где-то спереди, а для замо`к слово щелкнул с любой стороны.
А когда старый ржавый замок?
Вывод - или смирится или 10-15 минут врукопашную (доточка рэкс - слишком трудо-время ёмкое занятие с минимальным выхлопом на выходе).
Все всё равно не победим...

Аватара пользователя
tonio_k
V.I.P.

Омографы

#34

Сообщение tonio_k »

Lecron писал(а):
21 мар 2021 22:17
Программа, прозрачно для пользователя, при любой озвучке/обработке текста, должна находить вхождения в него всех указанных в словаре омографов и распихивать их по корпусам.
месяц назад ещё сделал такой скрипт В окне Демагога вставляем список слов (омографов) каждое слово с новой строки и запускаем скрипт. Указываем папку с книгами и папку куда сохранить найденные корпуса слов. Корпуса слов создаются в виде тестового файла (имя файла - искомое слово омограф. В файле сохраняются найденные предложения с искомым словом. "Вытащить" только фразы с искомым словом без знаков препинания можно одним регулярным выражением. Либо дописать или сделать отдельный скрипт, который будет это делать автоматически. Получение и хранение корпуса в виде предложениий удобно для понимания смысла контекста фраз без знаков препинания.
Предложенный скрипт можно адаптировать по своему вкусу так, что бы корпуса "дописывались" к ранее созданным файлам с корпусами, а внутри удалялись дубликаты. Можно этот скрипт вставить и в скрипт, который обрабатывает книги словарями что бы "в фоне" дописывал в файлы с корпусами слов, но по мне, так лучше пачку книг разных жанров накидать в папку и найти по ним корпуса слов разом до их прослушки, чем копить корпус слов по мере подготовки книги к прослушке.

Аватара пользователя
wasyaka
V.I.P.

Омографы

#35

Сообщение wasyaka »

tonio_k писал(а):
21 мар 2021 23:40
В файле сохраняются найденные предложения с искомым словом.
А дополнить регистрозависимость?
Чтоб обработанные фразы c омографом не "мешались"?

Аватара пользователя
Lecron
Специалист

Омографы

#36

Сообщение Lecron »

wasyaka писал(а):
21 мар 2021 22:51
А когда старый ржавый замок?
Предыдущий ваш текст, не понял от слова совсем. А со старым ржавым все просто. Порядок применения правил. Для сочетания будет создано два правила left:ржавый и k_nearest: старый, где left правила имеют больший вес. Дальше зависит от статистики. Если старый * зАмок будет встречаться гораздо чаще, чем ржавый замОк, может и перевесит.
Плюс я не утверждаю, что правила Яровски со 100% вероятность транслируются в классические правила. Просто очень похоже что это так. Достаточно посмотреть на файл log_auto.txt из архива. Там сортировка по правилам и сгрупированы фразы которое оно "зацепило".
tonio_k писал(а):
21 мар 2021 23:40
по мне, так лучше пачку книг разных жанров накидать в папку и найти по ним корпуса слов разом до их прослушки, чем копить корпус слов по мере подготовки книги к прослушке.
Вначале, для запуска работы алгоритма, так действительно лучше. Но как писал, его качество зависит от размера корпуса. То есть нужно его непрерывно пополнять. И это должно быть прозрачно. Как сбор данных, так и их использование. Настолько же прозрачно, как работа с классическими словарями.

Отметил галочкой словарь, внес в него запись в некотором формате "замок=з^амок,зам^ок" (записей будет десятки или даже сотни) и забыл. Через некоторое время, после достижения определенного размера корпуса для какого-то правила, программа предложила разметить некоторое количество фраз. Сделал и опять забыл. Корпус сам пополняется, алгоритм Яровски сам дообучается, правила сами перестраиваются и применяются к тексту.
Только в таком виде оно даст выхлоп.


Может сложится впечатление, что я кого-то уговариваю. Оно ошибочно. Просто делюсь впечатлениями от алгоритма который мне понравился. Представляю его лицом. Примете его на вооружение, уговорив разработчиков сделать удобно, или продолжите сожалеть что в теме неоднозначностей ничего не происходит, продолжив опираться только на классические словари, выбор ваш.

Аватара пользователя
Lecron
Специалист

Омографы

#37

Сообщение Lecron »

tonio_k, wasyaka, Еще несколько замечаний по теме в общем.
Каков бы ни бы алгоритм...
а) ...ВСЕ алгоритмы будут не похожи на словари. Поэтому придется осваивать и пилить разработчиков, что бы их удобно встроили в программу, а не прилепили сбоку как что-то вторичное. Без этого не взлетит ни один. Вопрос только, насколько трудоемок метод для пользователя.
б) ...ВСЕ алгоритмы не будут точными, то есть будут ошибаться. Вопрос только насколько.
в) ...из словарей уже выжали все возможное, а ВСЕ алгоритмы освоены на уровне пощупать энтузиастами. Проявите фантазию и представьте, что для них уже тоже накоплена база.

Возьмем Яровского и "замок". 30% омографов будет разрешено с точностью 97.6%, с возможностью повысить до 99.2%. А остальные, просто скажет "не знаю". Все что для алгоритма надо, в форме отметить галочкой предложения со словом "зАмок"

Код: Выделить всё

[ ] автоматический замок
[ ] аккуратно вырезал замок
[ ] амбарный замок
[x] архитектурными вывертами древний замок
[x] атаковать ваш замок
[x] без каких-либо препятствий вошли в замок
Просто? Элементарно. Однако что делать с остальными? Вопрос на 100000000. Предположу, кто-то скажет "а зачем вообще?", все это решается словарями. Но Яровски как раз и формирует тривиальные правила, из которых состоят эти словари. А то с чем не справился он, скорее всего не справятся и словари. При этом в словари, наверное бояться лезть даже их составители, настолько там невообразимая и неконтролируемая сложность.

Кстати, решил заодно вытянуть все правила. В порядке убывания веса/значимости. 0/1 — метка зАмок/замОк
rules.txt.zip
(3.16 КБ) 15 скачиваний
Есть ли в словарях что-то, что Яровски не увидел? И насколько оно значимо? В моем предыдущем архиве корпус из 2000+ упоминаний омографа.

Аватара пользователя
wasyaka
V.I.P.

Омографы

#38

Сообщение wasyaka »

Lecron писал(а):
22 мар 2021 11:43
Предыдущий ваш текст, не понял от слова совсем.
По простому: наиболее употребительные около 40 тысяч слов уже в какой-то мере заложены в словарях в связке с омографом, а остальные более пяти лимонов - это редкие, вплоть до разового употребления.

Аватара пользователя
Lecron
Специалист

Омографы

#39

Сообщение Lecron »

wasyaka писал(а):
22 мар 2021 19:21
40 тысяч слов уже в какой-то мере заложены в словарях в связке с омографом, а остальные более пяти лимонов
Ужос! Не зря я кажется написал: в словари, наверное бояться лезть даже их составители, настолько там невообразимая и неконтролируемая сложность.

Аватара пользователя
wasyaka
V.I.P.

Омографы

#40

Сообщение wasyaka »

Lecron писал(а):
22 мар 2021 20:54
Ужос! Не зря я кажется написал: в словари, наверное бояться лезть даже их составители, настолько там невообразимая и неконтролируемая сложность.
НЕ так и страшно..
Выбрано из 9000 книг (всё что было на винте).
Использованы и уже имеющие правила...
бЕрег-берёг.rar
(8.75 КБ) 8 скачиваний
Если разделить на 100 пользователей -делов на пару недель не напрягаясь - :writer: :drunkpals:
В одиночку - пару лет... :wall: :wall: :wall: :drinking:
Остатком не попавшем в список можно пренебречь...
И в процессе использования найдутся и ошибки...

Ответить

Вернуться в «Омонимия»