Омографы
- evmir_troll-hunter
- Администратор
-
Омографы
Сообщение evmir_troll-hunter »
Омографы — это разные слова, пишущиеся одинаково, но различающиеся ударением.
► Показать
Омонимия — это отношения лексических единиц, совпадающих по форме и не связанных по значению. В отличие от многозначности, которая носит регулярный характер и встречается у значительной части лексических единиц, омонимия — явление в языке сравнительно редкое, характерное для отдельных лексических образований. Например, существительное бич с давних пор имеет два значения: прямое — длинная плеть, кнут и переносное — то, что регулярно, периодически причиняет бедствия, неприятности, несчастья. Не так давно появилось второе существительное бич, являющееся аббревиатурой — бывший интеллигентный человек, — никак не связанное ни с одним из значений первого. Образованные от этих существительных глаголы также не связаны между собой: бичевать — подвергать суровой критике и бичевать — вести образ жизни бичей. К разным частям речи принадлежат слова: благо (существительное) — добро, благополучие, общее благо) и благо — союз, служащий для присоединения слов со значением благоприятного обстоятельства (благо деньги есть). Такие слова, тождественные по форме и не связанные по значению, называются омонимами или лексическими омонимами.
Лексические омонимы разделяют на полные и частичные.
Полные лексические омонимы относятся к одной части речи и имеют одну и ту же систему форм:
1) брак — семейные, супружеские отношения между мужчиной и женщиной и брак — дефект, изъян произведенного предмета;
2) вешать — подвергать смертной казни в висячем положении и вешать — определять вес.
Частичные лексические омонимы могут принадлежать как к одной части речи, так и к разным, но даже принадлежа к одной части речи, они имеют системы форм, совпадающие не полностью:
1) глагол бродить в значении "ходить медленно или бесцельно" имеет все формы спряжения в настоящем времени: брожу, бродишь, бродит, бродим, бродите, бродят, а глагол бродить в значении "находиться в брожении" — только одну форму 3 л. ед.ч.: бродит (о вине);
2) бухнуть в значении "расширяться, увеличиваться в объеме от влажности" имеет несовершенный вид, но в 1 и 2 л. не употребляется, а бухнуть в значении "произвести короткий глухой звук" имеет совершенный вид и употребляется во всех личных формах;
3) существительное вал в значении "длинная земляная насыпь" имеет все формы, присущие словам мужского рода (вал, -а; о вале, на валу; мн. -ы), а вал в значении "общий объем продукции за какой-нибудь период в стоимостном выражении" не имеет форм мн.ч. и формы на -у в П.п. ед.ч.
В ряде случаев частичные омонимы совпадают только в одной форме (существительное благо и союз благо).
Полные и частичные лексические омонимы представляют собой ядро омонимии, вокруг которого располагаются языковые единицы (омоформы, омоморфемы, омофоны и омографы), созвучие которых определяется грамматическими, словообразовательными и фонетическими факторами.
Омоформы — это совпадающие по звучанию формы разных слов, принадлежащих к одной или к различным частям речи. Например, есть — принимать пищу и есть — 3 л. ед.ч. наст.вр. от "быть" со значением "существовать, иметься". Если первый глагол спрягается, хотя и нестандартно (ем, ешь, ест, едим, едите, едят), то второй употребляется, причем без изменений, в значении не только 3 л., но и других лиц и мн.ч. наст.вр. от быть вследствие утраты старинных форм спряжения (есмь, еси и т.д.). Кроме того, существует междометие есть как ответ подчиненного (в армии, на флоте), обозначающий, что команда понята и принята к исполнению.
Омоформы чаще всего представляют собой инфинитивы односложных глаголов и созвучные с ними формы именительного-винительного падежей существительных: знать (что? — новости) и знать (какая? — придворная), печь (что? — блины) и печь (какая? — русская), течь (куда? — в море) и течь (какая? — сильная). При спряжении или склонении этих слов ни одна из их форм не совпадает по звучанию.
Омоморфемы — это морфемы (корни, приставки, суффиксы, окончания), одинаково звучащие, но не связанные между собой по значению:
1) корень аккорд со значением "созвучие" является опорой словообразовательного гнезда, включающего производные аккордовый, секстаккорд, септаккорд, а корень аккорд со значением "соглашение" — гнезда аккордный, аккордно, аккордно-сдельный, сдельно-аккордный;
2) приставка раз- со значением "разделить на части" (разбить, развязать, развешать) представляет собой самостоятельную морфему, отличную от приставки раз- со значением высокой степени проявления признака (разудалый, развеселый);
3) суффикс -ищ(е) с увеличительным значением (амбарище, огородище) является омонимичным по отношению к суффиксу -ищ(е) со значением "место, где находилось то, что названо производящей основой" (городище);
4) формообразующее окончание прилагательных -ой (морской, родной) явно отличается от синкретического окончания -ой в прилагательном золотой, одновременно образующего прилагательное от существительного золото и придающего первому форму м.р. ед.ч.; или, например, слова объедала и подметала — как существительные общего рода ед.ч. и глаголы прошедшего времени ж.р. ед.ч.
Здесь омонимичными являются и суффиксы -л- (в первом случае субстантивный, а во втором — глагольный), и окончания -а (в одном случае указывающее на общий род существительных, а в другом — на ж.р. ед.ч. глаголов).
Омофоны — это разные слова, которые произносятся одинаково, но отличаются написанием. Их называют еще фонетическими омонимами: гриб и грипп произносятся одинаково [гр'ип]; труд и трут (от тереть) пишутся по-разному, но имеют одинаковое звучание [трут].
Омографы — это разные слова, пишущиеся одинаково, но различающиеся ударением. Например, ко́злы — подставка в виде брусьев на ножках и козлы — множественное число от козел — животное; по́том — творительный падеж от пот и пото́м — затем.
Лексические омонимы разделяют на полные и частичные.
Полные лексические омонимы относятся к одной части речи и имеют одну и ту же систему форм:
1) брак — семейные, супружеские отношения между мужчиной и женщиной и брак — дефект, изъян произведенного предмета;
2) вешать — подвергать смертной казни в висячем положении и вешать — определять вес.
Частичные лексические омонимы могут принадлежать как к одной части речи, так и к разным, но даже принадлежа к одной части речи, они имеют системы форм, совпадающие не полностью:
1) глагол бродить в значении "ходить медленно или бесцельно" имеет все формы спряжения в настоящем времени: брожу, бродишь, бродит, бродим, бродите, бродят, а глагол бродить в значении "находиться в брожении" — только одну форму 3 л. ед.ч.: бродит (о вине);
2) бухнуть в значении "расширяться, увеличиваться в объеме от влажности" имеет несовершенный вид, но в 1 и 2 л. не употребляется, а бухнуть в значении "произвести короткий глухой звук" имеет совершенный вид и употребляется во всех личных формах;
3) существительное вал в значении "длинная земляная насыпь" имеет все формы, присущие словам мужского рода (вал, -а; о вале, на валу; мн. -ы), а вал в значении "общий объем продукции за какой-нибудь период в стоимостном выражении" не имеет форм мн.ч. и формы на -у в П.п. ед.ч.
В ряде случаев частичные омонимы совпадают только в одной форме (существительное благо и союз благо).
Полные и частичные лексические омонимы представляют собой ядро омонимии, вокруг которого располагаются языковые единицы (омоформы, омоморфемы, омофоны и омографы), созвучие которых определяется грамматическими, словообразовательными и фонетическими факторами.
Омоформы — это совпадающие по звучанию формы разных слов, принадлежащих к одной или к различным частям речи. Например, есть — принимать пищу и есть — 3 л. ед.ч. наст.вр. от "быть" со значением "существовать, иметься". Если первый глагол спрягается, хотя и нестандартно (ем, ешь, ест, едим, едите, едят), то второй употребляется, причем без изменений, в значении не только 3 л., но и других лиц и мн.ч. наст.вр. от быть вследствие утраты старинных форм спряжения (есмь, еси и т.д.). Кроме того, существует междометие есть как ответ подчиненного (в армии, на флоте), обозначающий, что команда понята и принята к исполнению.
Омоформы чаще всего представляют собой инфинитивы односложных глаголов и созвучные с ними формы именительного-винительного падежей существительных: знать (что? — новости) и знать (какая? — придворная), печь (что? — блины) и печь (какая? — русская), течь (куда? — в море) и течь (какая? — сильная). При спряжении или склонении этих слов ни одна из их форм не совпадает по звучанию.
Омоморфемы — это морфемы (корни, приставки, суффиксы, окончания), одинаково звучащие, но не связанные между собой по значению:
1) корень аккорд со значением "созвучие" является опорой словообразовательного гнезда, включающего производные аккордовый, секстаккорд, септаккорд, а корень аккорд со значением "соглашение" — гнезда аккордный, аккордно, аккордно-сдельный, сдельно-аккордный;
2) приставка раз- со значением "разделить на части" (разбить, развязать, развешать) представляет собой самостоятельную морфему, отличную от приставки раз- со значением высокой степени проявления признака (разудалый, развеселый);
3) суффикс -ищ(е) с увеличительным значением (амбарище, огородище) является омонимичным по отношению к суффиксу -ищ(е) со значением "место, где находилось то, что названо производящей основой" (городище);
4) формообразующее окончание прилагательных -ой (морской, родной) явно отличается от синкретического окончания -ой в прилагательном золотой, одновременно образующего прилагательное от существительного золото и придающего первому форму м.р. ед.ч.; или, например, слова объедала и подметала — как существительные общего рода ед.ч. и глаголы прошедшего времени ж.р. ед.ч.
Здесь омонимичными являются и суффиксы -л- (в первом случае субстантивный, а во втором — глагольный), и окончания -а (в одном случае указывающее на общий род существительных, а в другом — на ж.р. ед.ч. глаголов).
Омофоны — это разные слова, которые произносятся одинаково, но отличаются написанием. Их называют еще фонетическими омонимами: гриб и грипп произносятся одинаково [гр'ип]; труд и трут (от тереть) пишутся по-разному, но имеют одинаковое звучание [трут].
Омографы — это разные слова, пишущиеся одинаково, но различающиеся ударением. Например, ко́злы — подставка в виде брусьев на ножках и козлы — множественное число от козел — животное; по́том — творительный падеж от пот и пото́м — затем.





Редакция: evilone, retigor, good_cat, E. Miroshnychenko
Что такое hmg-словари?
hmg-словари - файлы со списками замен, каждая строка которых содержит перечень словоформ искомого омографа и его искомую форму в тексте; между ними стоит знак равенства (=). Левая часть - искомый фрагмент текста, правая часть - варианты его замены, перечисленные через запятую.
Например:
По умолчанию различие между прописными и строчными буквами при рассмотрении шаблонов не делается. Если регистр букв имеет значение, добавляют символ "$" в начало строки также как и в словарях .dicзамок=зАмок,замОк
Данный формат словарей поддерживается программами "Homograph","Балаболка", "Demagog".$Толстой=тОлстой,толстОй
В отличии от прочих словарей, hmg-словари используются только для ручной разметки текста. И хотя это очень долго и у многих не хватает терпения возиться со всем этим, особенно если текст весьма объемный, использование данного способа разметки позволяет практически полностью снять омонимию в тексте выставив нужную форму с проставленным ударением.
evmir_troll-hunter
Yandex TTS
Об одном способе борьбы с омографами
Омографы - позор любой знаковой системы, признание неспособности системы справиться с материалом. Разрешать омографы - увлекательное дело сродни возведению прекрасных мостов через предварительно выкопанные ямы.
Лучше всего с омографами борется сам человек читающий, чуть хуже нейронные сети, далее мы, составители словарей, программисты и говорилкослушатели разной степени образованности и склонности к пуризму, Следует заметить, что даже человек разумный не всегда может с этим справиться (по крайней мере в рамках предложения). Пример. "Большая часть пространства между ветвями галактик заполнена водородом и пылью". Если вы ранее не знали "бОльшая" или "большАя", из приведенного выше предложения вы этого точно не узнаете.То есть в общем случае задача восстановления осмысленного текста из обычного является в русской орфографии нерешаемой.
Теперь о нашем. Я по-прежнему считаю, что наилушим является двухэтапный метод:
1) с помощью внешней программы (лучше интернет-сервиса) переводим обычный текст в текст с "ё" и ударениями в омографах
2) с помощью средств конкретных движков устраняем дефекты речи.
Способы, которыми мы обычно пользуемся, например, "*", не всегда хороши из-за побочных эффектов, а вызвано их применение дефицитом времени и памяти. В случае внешней обработки, не имея ограничений ни того, ни другого, мы можем пользоваться только точными заменами. Кроме того, как это ни удивительно, для некоторые классов омографов можно обрабытывать весь класс целиком.
Среди 5500 омографов русской орфографии имеется небольшой класс (около 200 штук) омографов вида <и.п.мн.ч / р.п.ед.ч.>: руки, ноги, спины, лица, стены, города, реки, леса, горы, моря и т.д. Класс небольшой, но достаточно распостранённый. Чтобы правильно поставить ударение в омографах этого класса, достаточно определить в каком числе (ед. или мн.) стоит омограф, а это определяется видом части речи предстоящего слова. Таким образом, нужно иметь таблицу всех слов русского языка во всех формах с указанием части речи и (для прилагательных) числа.Тогда получаем:
<Существ><омограф> - ед.число //на берегу рекИ
<Глагол><омограф> - мн.число //текут рЕки
<Прич><омограф> - мн.число //мчащиеся рЕки
<Дееприч><омограф> - мн.число //изгибая рЕки
<Прил ед.ч><омограф> - ед.число //голубой рекИ
<Прил мн.ч><омограф> - мн.число //синие рЕки
мои,твои,наши,ваши<омограф> - мн.число //мои рЕки
моей,твоей,нашей,вашей<омограф> - ед.число //моей рекИ
Омографы - позор любой знаковой системы, признание неспособности системы справиться с материалом. Разрешать омографы - увлекательное дело сродни возведению прекрасных мостов через предварительно выкопанные ямы.
Лучше всего с омографами борется сам человек читающий, чуть хуже нейронные сети, далее мы, составители словарей, программисты и говорилкослушатели разной степени образованности и склонности к пуризму, Следует заметить, что даже человек разумный не всегда может с этим справиться (по крайней мере в рамках предложения). Пример. "Большая часть пространства между ветвями галактик заполнена водородом и пылью". Если вы ранее не знали "бОльшая" или "большАя", из приведенного выше предложения вы этого точно не узнаете.То есть в общем случае задача восстановления осмысленного текста из обычного является в русской орфографии нерешаемой.
Теперь о нашем. Я по-прежнему считаю, что наилушим является двухэтапный метод:
1) с помощью внешней программы (лучше интернет-сервиса) переводим обычный текст в текст с "ё" и ударениями в омографах
2) с помощью средств конкретных движков устраняем дефекты речи.
Способы, которыми мы обычно пользуемся, например, "*", не всегда хороши из-за побочных эффектов, а вызвано их применение дефицитом времени и памяти. В случае внешней обработки, не имея ограничений ни того, ни другого, мы можем пользоваться только точными заменами. Кроме того, как это ни удивительно, для некоторые классов омографов можно обрабытывать весь класс целиком.
Среди 5500 омографов русской орфографии имеется небольшой класс (около 200 штук) омографов вида <и.п.мн.ч / р.п.ед.ч.>: руки, ноги, спины, лица, стены, города, реки, леса, горы, моря и т.д. Класс небольшой, но достаточно распостранённый. Чтобы правильно поставить ударение в омографах этого класса, достаточно определить в каком числе (ед. или мн.) стоит омограф, а это определяется видом части речи предстоящего слова. Таким образом, нужно иметь таблицу всех слов русского языка во всех формах с указанием части речи и (для прилагательных) числа.Тогда получаем:
<Существ><омограф> - ед.число //на берегу рекИ
<Глагол><омограф> - мн.число //текут рЕки
<Прич><омограф> - мн.число //мчащиеся рЕки
<Дееприч><омограф> - мн.число //изгибая рЕки
<Прил ед.ч><омограф> - ед.число //голубой рекИ
<Прил мн.ч><омограф> - мн.число //синие рЕки
мои,твои,наши,ваши<омограф> - мн.число //мои рЕки
моей,твоей,нашей,вашей<омограф> - ед.число //моей рекИ
SZ-Vtk
Yandex TTS
Сообщение lplee »
Там ничего не сделано, обычный разбор предложения на отдельные слова и указание всех, в т.ч. канонической, форм слов
lplee
Yandex TTS
Сообщение lplee »
Составить правила для 200шт не проблема, никто ещё не сделал этого?
Вообще, для разбора текста есть неплохие библиотеки на Питоне. Я работал с одной из них (Gensim) для задач кластеризации текстов. Текст, семантические связи и тд понимает почти отлично. Вероятно можно найти и доработать что-нибудь для многострадальных ударений.
lplee
Nxtpr
Yandex TTS
Сообщение lplee »
Не понимаю о чем вы. Выше написали про ударения исходя из конструкции предложения (падежи и тд), вы дали ссылку на сайт, где обычный пословный разбор.
Задам вопрос просто: как это "уже все сделано" поможет проставить ударения правильно?
Вполне вероятно я чего-то не знаю, но вы и не объясняете ничего толком, кроме "все уже есть". Без обид только.
lplee
Yandex TTS
На что обижаться. Я к тому, что синтаксический анализ без соответствующих баз не сделаешь.
Почитайте https://habr.com/ru/post/148124/ Даже не статью - комментарии к ней.
Почитайте https://habr.com/ru/post/148124/ Даже не статью - комментарии к ней.
Nxtpr
SZ-Vtk
Yandex TTS
Сообщение lplee »
Да, уже читал ее, и много других по теме. Есть еще от ABBYY Compreno, сам не юзал, но читал, она тоже разбирает текст на составные части, так сказать, но ещё более мощно. Кажется даже смысл текста понимает. Жаль только - платная, и, если не изменяет память, только доя юрлиц. Но не важно.SZ-Vtk писал(а): ↑16 июл 2019 23:41Почитайте https://habr.com/ru/post/148124/ Даже не статью - комментарии к ней
Вы это хорошо затронули тему семантического анализа текста для простановки ударений. Если получится реализовать, это же будет унифицированное средство обработки текста для последующей прослушки/записи на любом движке и программе. А то сейчас куча словарей и скриптов, какие-то правила и исключения, сплошное нагромождение не всегда эффективных костылей.....
lplee
Омографы
Сообщение lplee »
Подскажите, каким образом выбирается нужно слово из 2х? Ниже вы написали про ручной метод, но это не вариант, 20-ые годы на дворе все-таки.evmir_troll-hunter писал(а): ↑09 авг 2018 02:23Что такое hmg-словари?
hmg-словари - файлы со списками замен, каждая строка которых содержит перечень словоформ искомого омографа и его искомую форму в тексте; между ними стоит знак равенства (=). Левая часть - искомый фрагмент текста, правая часть - варианты его замены, перечисленные через запятую.
Например:
замок=зАмок,замОк
Например, я работаю с программами Балаболка и Демагог, как я могу применить данные словари?
lplee
- balabolka
- V.I.P.
-
Омографы
20-ые годы, и что?! Вы знаете, где можно взять готовый компонент/сервис/библиотеку/консольную программу, которая умела бы в автоматическом режиме распознавать омографы и расставлять ударения? (И желательно бесплатно.) Если бы было такое готовое программное решение, да еще для разных языков, то можно подумать об использовании его в "Балаболке". Но ничего подобного не было двенадцать лет назад (когда обсуждался вопрос об обработке омографов в "Балаболке"), нет и сейчас.
Вот было бы здорово, если российское государство выделило несколько миллионов рублей на разработку программы или сервиса, преобразующего любой документ в текст, который без ошибок смог бы прочитать речевой синтезатор. Расстановка ударений в омографах или даже во всех словах, расшифровка сокращений и формул, замена чисел словами и т.д. Нужна команда из филологов и программистов с хорошим финансированием; и чтобы результаты их работы могли быть бесплатно использованы любыми желающими (как сервис, как программная библиотека, как компонент для разных языков программирования...). Как бы это пошло на пользу продвижению русского языка в цифровом пространстве...
А пока я смог реализовать лишь "ручной метод" расстановки ударений в омографах. В "Балаболке" это пункт главного меню "Текст|Искать омографы". Программа будет просматривать текст от начала, искать слова-омографы и показывать плавающее окно с вариантами замены. Или можно выбрать пункт главного меню "Вид|Показывать|Омографы": в этом случае все слова-омографы из выбранного словаря будут подсвечены в тексте другим цветом. Можно щелкнуть правой кнопкой мыши на слове и выбрать вариант замены в контекстном меню.
Подробнее про словари омографов написано в файле справки "Балаболки". Словарь предусматривает и автоматические замены для выражений со словом-омографом (но реализована замена очень упрощенно, серьезным решением проблемы с офографами это назвать нельзя).
Код: Выделить всё
$Толстого=То<лстого,Толсто<го
||$Льва Толстого=Толсто<го
||$Льва Николаевича Толстого=Толсто<го
balabolka
Омографы
Сообщение lplee »
Нет, не знаю, но нужно искать.
Не соглашусь с вами. За последние несколько лет машинное обучение сильно ушло вперед, нейронки чуть не ежедневно удивляют, как с учителем, так и без.
За это вам большое спасибо! И за программу в целом! Но ручной метод это архаика, вы то точно это понимаете.
Сейчас я занимаюсь вопросом автоматизации этого момента, как будут результаты сразу вам обозначу.
lplee
- tonio_k
- V.I.P.
-
Омографы
мое мнение, оставить как есть. А смысл их править? Эти словари нужны в первую очередь тем, кто применяет ручной метод проверки омографов, причем таких пользователей не так уж и много.
Лично я к ним не отношусь. Кроме, разве что, все=всЕ,всЁ - это единственное что я могу себе позволить вручную проверить перед озвучкой книги

В словарях выше представлены практически 95% всех встречаемых и хоть иногда употребляемых омографов в книгах.
5% - это настолько маленькая погрешность из очень редко встречающихся омографов, что актуализация словарей погоду не сделает - качество озвучки в целом не изменит.
Более того, со временем, пользователь так или иначе переходит к личному "сокращенному словарю" состоящего из наиболее часто встречаемых или, точнее, статистически часто двояко звучащих омогрфов. С таким словарем можно за относительно небольшой промежуток времени проверить все сомнительные омографы и приступить к прослушиванию книги.
tonio_k
- HaRpY
- Наблюдатель
-
- Сообщения: 4
- Зарегистрирован: 24 ноя 2019 17:42
Омографы
Спасибо за высказанное мнение.
Мне кажется, что считать данные словари омографов исключительно словарями для ручной правки неправильно. При программной обработке текста (не регулярными выражениями), для того чтобы определить является ли конкретное слово омографом или нет тоже нужен подобный словарь. Вы же для ручной расстановки омографов, как раз и используете программу, которая с данным словарем работает.
Ох уж эти 95%

Код: Выделить всё
архимед=архимЁд,архимЕд
Если личный «сокращенный словарь» представляет собой подмножество исходного полного, то это одно (нормально). Если в личном словаре есть омоформы, которых нет в исходном, то другое (плохо).
Может кто из разработчиков программ выскажется?
HaRpY
- HaRpY
- Наблюдатель
-
- Сообщения: 4
- Зарегистрирован: 24 ноя 2019 17:42
Омографы
Если я правильно разобрался, то all_omographs.hmg более древний (от 12.05.2017), чем словари в шапке (от 13.08.2018). Его же и использовали как источник:
) "начальники транспортных цехов"... Может они тоже считают оптимальным вариантом: оставить "как есть"
P.S.
Подождём, что скажут (и скажут ли вообще

HaRpY
- good_cat
- Администратор
-
Омографы
Словарь омографов all_omographs.hmg был пополнен, очищен от найденных ошибок и разбит на 2 словаря:
total_omoforms.hmg - основной словарь;
yo_total.hmg - словарь омографов Ё/Е.
Тем не менее словарь all_omographs.hmg может быть полезен, если пользователю нужна частота
появления омографов в тексте.
Словари естественно не полны и вряд ли могут быть "окончательно пополнены", учитывая обилие словоформ русского языка.
В последнюю редакцию словарей не вошли некоторые омографы.
Например:
сети=сЕти,сетИ
т.к до конца не ясно, являются ли они нормой русского языка или
это профессионализмы (жаргон).
total_omoforms.hmg - основной словарь;
yo_total.hmg - словарь омографов Ё/Е.
Тем не менее словарь all_omographs.hmg может быть полезен, если пользователю нужна частота
появления омографов в тексте.
Словари естественно не полны и вряд ли могут быть "окончательно пополнены", учитывая обилие словоформ русского языка.
В последнюю редакцию словарей не вошли некоторые омографы.
Например:
сети=сЕти,сетИ
т.к до конца не ясно, являются ли они нормой русского языка или
это профессионализмы (жаргон).
good_cat
- HaRpY
- Наблюдатель
-
- Сообщения: 4
- Зарегистрирован: 24 ноя 2019 17:42
Омографы
Думаю ничего страшного не произойдет если для "сети" ударение будет только "сЕти". Вроде бы смысл от этого не меняется, только субъективное восприятие. Считаю, что правильно исключили.
С другой стороны что-то вроде "инспекторА" (используемое вместо правильного "инспекторы"), вполне вероятно встретить в тексте (например: "А вы товарищи инспекторА, что думаете?" - обращение во множественном числе) . Ударение в другом месте уже искажает смысл. Подобные омографы, должны оставаться в словаре.
HaRpY
- Lecron
- Специалист
-
Омографы
Наткнулся в сети на статью Проект Natasha. Набор качественных открытых инструментов для обработки естественного русского языка (NLP) и подумал, почему бы не приспособить это для снятия омографии. Только проблема в том, что если в алгоритмизации и программировании я что-то понимаю, то по русскому языку, мне ставили 3, чтобы не портить двойкой жизнь ученику отлично успевающему по естественным наукам. Поэтому без помощи сообщества языкознатцев, исследовательская демка, так и останется исследовательской демкой.
Сразу перечислю проблемные темы.
Если качество библиотеки будет признано достаточным и пойдет коллективная работа, будет проработано удобство использования, прописаны опции командной строки и возможность работать с произвольными файлами. Для релиза, можно будет попробовать упаковать в exe файл. А пока, что есть, то есть. Демка.
Сразу перечислю проблемные темы.
- Понимание и перевод на русский, грамматических признаков выдаваемых программой. см. файл omograf.txt.
- Нужна оценка качества работы библиотеки. Модель обучена на новостях, поэтому качество вроде хорошее, но насколько, мне непонятно. Может вообще не стоит затевать движуху?
- для проверки, сохраните любой текст в файл grammar_group_src.txt, запустите grammar_group.py и в файле grammar_group_res.txt будут группы признаков и слова им соответствующие.
- для детального разбора одного предложения, запустите demo.py "тестируемое предложение".
- Нужна помощь спецов по машинному обучению и NLP. Существуют эмбединги (чтобы это слово не значило) для худлита navec_hudlit_v1_12B_500K_300d_100q.tar, обученные по librusec, но для них нет или я не нашел готовых коэффициентов для библиотеки SlovNet (morph, syntax, ner), что может существенно повысить качество определения признаков. Тема для меня настолько чуждая, что создать их не могу.
- Какие признаки/правила необходимы для достаточно качественного разрешения омографа? Библиотека умеет определять грамматические признаки, позволяет получить связь слов в предложении, то есть подчиненное и родительское слово для омографа, а также нормализовать их.
- На данный момент пользуюсь сторонней самописной программой, не имеющей документации. Её словарь omograph_idx.omn, еще та кракозябра. Для лучшего понимания, перевел цифровые коды в русские аббревиатуры omograph_abbr.omn.
- насколько правильно перевел?
- насколько правильно составлен словарь с позиции языкознания?
- нужна помощь в лучшем понимании его формата и какие признаки из словаря можно сравнительно безболезненно проигнорировать, без существенно ухудшения качества работы?
- на данный момент понятно что < и > указатели соответственно на подчиненное и родительское слово
- # — указатель на анализ исходного текста. Вероятно будет проигнорировано, так как лучше перенести в dic/rex словарь, который применять до грамматического снятия омографии.
- Что значат скобки [] и {}, символы : и @, как связаны токены в правиле "и" или "или", пока непонятно.
- сейчас можно протестировать предельной краткий, демонстрационный вариант словаря omograph.omn. Тестируемый текст сохраняете в файл aomo.txt и запускаете aomo.py.
- кто-то знающий должен взять ответственность за пополнение и актуализацию словаря.
Для помощи ответственному, могу написать модуль тестирования, где для каждого омографа, в отдельном файле будут записаны части правил и текст позволяющий их проверить. Если нет ошибок, словарь будет собираться из этих правил автоматически. Плюсы: шире участие пользователей, ответственному проще проверять предложенные правки. Минус: нельзя оперативно вносить правки в сам словарь. - ...вероятно что-то упустил. Предлагайте, уточняйте, общайтесь.
Если качество библиотеки будет признано достаточным и пойдет коллективная работа, будет проработано удобство использования, прописаны опции командной строки и возможность работать с произвольными файлами. Для релиза, можно будет попробовать упаковать в exe файл. А пока, что есть, то есть. Демка.
omogramm.zip
- (57.98 КБ) 94 скачивания
Lecron
- Lecron
- Специалист
-
Омографы
Прогнал слова из списка омографов используемой мной программы, через сервис progaonline.com/accent. Вроде он неплохо расставляет ударения и указывает для них грамматические признаки. Для желающих составить словарь, надеюсь будет неплохим подспорьем. Пример:
Код: Выделить всё
благом=благо`м: прл ед муж пр | благо`м: прл ед ср пр | бла`гом: сущ неод ед ср тв | благо`м: сущ неод ед ср пр
omograph_grammar.txt
- (168.55 КБ) 89 скачиваний
Lecron
- Lecron
- Специалист
-
Омографы
Уфф. Ценой кучи времени и глаз в кучу, собрал наконец словарь
К счастью, ¾ правил сводились к простому противопоставлению ед/мн, сущ/гл, муж/жен. С остальными пришлось повозится, а некоторые так и остались неразрешенными (чуть меньше 100 шт). К сожалению, это превышает мои знания и настойчиво прошу помощи у знающих язык коллег. Впрочем и остальные правила неплохо бы просмотреть. При таком количестве, глаз замыливается и легко допустить ошибку. Проблемные правила:
Напомню, библиотека умеет определять связи слов в предложении и нормализовать слова. Поэтому возможны варианты типа "подчиненное слово 'глагол'" или "омограф — подлежащее (nsubj)".
Словарь составлялся с оглядкой на возможности библиотеки, но в некоторых случаях, если разрешение омографов выходило за ее рамки, во главу угла ставился алгоритм, а не его конкретная реализация.
На данный момент, формат словаря таков:
Правило состоит из нескольких токенов, которые могут быть морфологическим признаком или $словом. Для сработки необходимо соблюдение всех условий. Правило может применяться к естественной форме слова (как есть) и к @нормализованной. Например @$броня. И хоть библиотека распознать не может, возможно даже такое: паря`щая|@гл неперех| — нормальная форма слова "паря`щая" должна быть непереходным глаголом, т.е. "пари`ть".
Правила для варианта проверяются последовательно. Варианты также проверяются последовательно. Обычно это не важно, они взаимоисключающие, но иногда (например "берегу") менять местами нельзя. Слово по умолчанию (вариант0), используется когда не сработало ни одно правило. Происходит когда библиотека неверно сработала, определяя признаки, или само правило подразумевает его использование (например "саду").
Если для разрешения омографов понадобятся другие возможности, формат будет расширен.
PS. Сам скрипт применения словаря в новом расширенном формате пока не написан. Акцентировался на составлении словаря, который как можно точнее описывал предметную область. Думаю это важнее всего.
omograph.omn.zip
- (15.09 КБ) 90 скачиваний
► Показать
Код: Выделить всё
брони=бро`ни : бро`ни|@$брони| : брони`|@$броня|
ведомая=ведо`мая : ве`домая|прл|прч| : ведо`мая|сущ| # неразрешимое
ведомого=ведо`мого : ве`домого|прл| : ведо`мого|сущ|прч| # неразрешимое
ведомое=ве`домое : ве`домое|прл| : ведо`мое|прч| # неразрешимое
ведомы=ведо`мы : ведо`мы|прл| : ведо`мы|прч| # неразрешимое
ведомые=ве`домые : ве`домые|прл| : ведо`мые|сущ|прч| # неразрешимое
ведомый=ве`домый : ве`домый|прл| : ведо`мый|прч|сущ| # неразрешимое
временной=вре`менной : вре`менной|@$временный| : временно`й|муж|@$временной|
временном=вре`менном : вре`менном|@$временный| : временно`м|@$временной|
временному=вре`менному : вре`менному|@$временный| : временно`му|@$временной|
временными=вре`менными : вре`менными|@$временный| : временны`ми|@$временной|
все=все` : все`|мест| : всё|союз|нар|част|межд| # неразрешимое
гвоздики=гвозди`ки : гво`здики|мн| : гвозди`ки|ед| # неразрешимое
глазками=гла`зками : гла`зками|сущ мн тв| : глазка`ми|сущ мн тв| # неразрешимое
горе=го`ре : го`ре|ср|межд| : горе`|жен|нар| # потенциально проблемное
деревца=де`ревца : де`ревца|@$деревце| : деревца`|@$деревцо|
деру=дёру : деру`|гл| : дёру|сущ|нар| # потенциально проблемное
должно=должно` : до`лжно|нар| : должно`|прл ед ср крат| # потенциально проблемное
дымки=ды`мки : ды`мки|ед|@$дымка| : дымки`|@$дымок|
замка=замка` # неразрешимое!
замками=за`мками # неразрешимое!
замке=за`мке # неразрешимое!
замки=замки` # неразрешимое!
замком=замко`м # неразрешимое!
замку=за`мку # неразрешимое!
замок=за`мок # неразрешимое!
запах=за`пах : запа`х|гл|@$запахнуть| : за`пах|сущ|
запахнув=запа`хнув # неразрешимое!
заплачу=запла`чу : запла`чу|@$заплакать| : заплачу`|@$заплатить| # проблемное для natasha
клубах=клу`бах # неразрешимое!
крою=кро`ю : кро`ю|@$крыть|сущ| : крою`|@$кроить|
кроя=кро`я : кро`я|@$крыть|сущ| : кроя`|@$кроить|
лекарства=лека`рства # неразрешимое!
леса=ле`са : ле`са|ед| : леса`|мн| # проблемное. для /ед жен им/ возможны оба ударения ле`са`
лесу=ле`су : ле`су|муж| : лесу`|жен| # неразрешимое
мастерской=мастерско`й : ма`стерской|прл пр|прл дат| : мастерско`й|сущ|прл тв|прл вин| # потенциально проблемное
мечу=ме`чу : ме`чу|@$метить| : мечу`|@$метать|сущ|
минут=мину`т : ми`нут|прч|гл| : мину`т|сущ| # проблемное. у причастия и/или глагола возможны оба ударения ми`ну`т
мочи=мо`чи : мо`чи|сущ пр|сущ дат|@$мочь| : мочи`|гл|@$моча|
мука=му`ка # неразрешимое!
мукой=му`кой # неразрешимое!
муку=му`ку # неразрешимое!
небу=не`бу # неразрешимое! не`бу нёбу
орган=о`рган # неразрешимое!
органа=о`ргана # неразрешимое!
органе=о`ргане # неразрешимое!
органов=о`рганов # неразрешимое!
органов=о`рганов # неразрешимое!
органу=о`ргану # неразрешимое!
органы=о`рганы # неразрешимое!
парил=пари`л : па`рил|гл перех| : пари`л|гл неперех| # библиотекой natasha неподдерживается
парила=пари`ла : па`рила|гл перех| : пари`ла|гл неперех| # библиотекой natasha неподдерживается
парили=пари`ли : па`рили|гл перех| : пари`ли|гл неперех| # библиотекой natasha неподдерживается
парило=па`рило : па`рило|гл перех| : пари`ло|гл неперех| # библиотекой natasha неподдерживается
парить=пари`ть : па`рить|гл перех| : пари`ть|гл неперех| # библиотекой natasha неподдерживается
парного=па`рного : па`рного|@$парный| : парно`го|@$парной|
парное=па`рное : па`рное|@$парный| : парно`е|@$парной|
парной=па`рной : па`рной|прл @$парный| : парно`й|сущ|прл @$парной|
парном=па`рном : па`рном|@$парный| : парно`м|@$парной|
парному=па`рному : па`рному|@$парный| : парно`му|@$парной|
парную=па`рную : па`рную|прл @$парный| : парну`ю|сущ|прл @$парной|
парным=па`рным : па`рным|прл @$парный| : парны`м|сущ|прл @$парной|
паря=паря` : па`ря|сущ|@гл перех| : паря`|@гл неперех| # библиотека не умеет, но это единственный (?) сопособ
парящая=паря`щая : па`рящая|@гл перех| : паря`щая|@гл неперех| # библиотека не умеет, но это единственный (?) сопособ
переносном=переносно`м : перено`сном|@$переносный| : переносно`м|@$переносной|
подводной=подво`дной : подво`дной|@$подводной| : подводно`й|@$подводный|
пора=пора` : по`ра|сущ неод ед жен им| : пора`|предик|нар| # неразрешимое! сущ по`ра кожи, унылая пора`
поры=по`ры : по`ры|ед| : поры`|мн| # неразрешимое! по`ры, поры`
приводов=при`водов # неразрешимо при`во`дов
проводов=про`водов : проводо`в|муж| # неразрешимо https://ru.wiktionary.org/wiki/проводов
промокнуть=промо`кнуть # неразрешимо промо`кну`ть
пропусках=про`пусках # неразрешимо про`пуска`х
рассыпавшиеся=рассы`павшиеся # неразрешимо рассы`па`вшиеся
родах=ро`дах : рода`х|@$род| : ро`дах|@$роды| # проблемно для natasha
родов=ро`дов : родо`в|@$род| : ро`дов|@$роды| # проблемно для natasha
рожками=ро`жками # неразрешимо ро`жка`ми
самого=са`мого : самово`|сущ|@#сам| : са`мого|@#самый|
самой=са`мой : само`й|сущ|@#сам| : са`мой|@#самый|
самом=са`мом : само`м|сущ|@#сам| : са`мом|@#самый|
самому=са`мому : самому`|сущ|@#сам| : са`мому|@#самый|
сведению=све`дению # неразрешимо све`де`нию
складной=скла`дной : скла`дной|@#складный| : складно`й|@#складной|
следа=сле`да # неразрешимо сле`да`
сложен=сло`жен : сло`жен|прч|прл @#сложный| : сложён|прл @#сложённый|
соски=со`ски : со`ски|@#соска| : соски`|@#сосок|
стоим=стои`м : сто`им|@#стоить| : стои`м|@#стоять|
стоит=сто`ит : сто`ит|@#стоить| : стои`т|@#стоять|
стоите=стои`те : сто`ите|@#стоить| : стои`те|@#стоять|
стоишь=сто`ишь : сто`ишь|@#стоить| : стои`шь|@#стоять|
стою=стою` : сто`ю|@#стоить| : стою`|@#стоять|
стоят=стоя`т : сто`ят|@#стоить| : стоя`т|@#стоять|
стоящая=сто`ящая : сто`ящая|прч @#стоить|прл| : стоя`щая|прч @#стоять|
стоящего=стоя`щего : сто`ящего|прч @#стоить|прл| : стоя`щего|прч @#стоять|
стоящее=сто`ящее : сто`ящее|прч @#стоить|прл| : стоя`щее|прч @#стоять|
стоящей=сто`ящей : сто`ящей|прч @#стоить|прл| : стоя`щей|прч @#стоять|
стоящем=сто`ящем : сто`ящем|прч @#стоить|прл| : стоя`щем|прч @#стоять|
стоящему=стоя`щему : сто`ящему|прч @#стоить|прл| : стоя`щему|прч @#стоять|
стоящие=стоя`щие : сто`ящие|прч @#стоить|прл| : стоя`щие|прч @#стоять|
стоящий=стоя`щий : сто`ящий|прч @#стоить|прл| : стоя`щий|прч @#стоять|
стоящим=стоя`щим : сто`ящим|прч @#стоить|прл| : стоя`щим|прч @#стоять|
стоящими=сто`ящими : сто`ящими|прч @#стоить|прл| : стоя`щими|прч @#стоять|
стоящих=стоя`щих : сто`ящих|прч @#стоить|прл| : стоя`щих|прч @#стоять|
стоящую=стоя`щую : сто`ящую|прч @#стоить|прл| : стоя`щую|прч @#стоять|
тая=та`я : та`я|собст|@#таять| : тая`|@#таить|
трусах=тру`сах : тру`сах|@#трус| : труса`х|@#трусы|
трусить=тру`сить # неразрешимо тру`си`ть
трусы=тру`сы : тру`сы|@#трус| : трусы`|@#трусы|
хлопка=хлопка` # неразрешимо хло`пка`
хлопком=хлопко`м # неразрешимо хло`пко`м
хлопку=хлопку` # неразрешимо хло`пку`
хлопок=хлопо`к # неразрешимо хло`по`к
Словарь составлялся с оглядкой на возможности библиотеки, но в некоторых случаях, если разрешение омографов выходило за ее рамки, во главу угла ставился алгоритм, а не его конкретная реализация.
На данный момент, формат словаря таков:
Код: Выделить всё
омограф=вариант0 : вариант1|правило11|пр12||пр1N| : вариант2|пр21| : вариантN|ghN1|
вертела=ве`ртела : ве`ртела|сущ ед| : верте`ла|гл| : вертела`|сущ мн|
позднее=по`зднее : поздне`йе|нар|прл сравн|предл| : по`зднее|прл|
брони=бро`ни : бро`ни|@$брони| : брони`|@$броня|
берегу=бе`регу : бе`регу|сущ дат| : берегу`|гл|сущ|
саду=саду` : са`ду|дат|
Правила для варианта проверяются последовательно. Варианты также проверяются последовательно. Обычно это не важно, они взаимоисключающие, но иногда (например "берегу") менять местами нельзя. Слово по умолчанию (вариант0), используется когда не сработало ни одно правило. Происходит когда библиотека неверно сработала, определяя признаки, или само правило подразумевает его использование (например "саду").
Если для разрешения омографов понадобятся другие возможности, формат будет расширен.
PS. Сам скрипт применения словаря в новом расширенном формате пока не написан. Акцентировался на составлении словаря, который как можно точнее описывал предметную область. Думаю это важнее всего.
Lecron
- tonio_k
- V.I.P.
-
Омографы
тут понятно. Здесь можно сделать через lua так: находим участок текста в по регулярному выражению например, в пределах одного предложения. Это предложение сохраняем в отдельный файл. Передаём этот файл утилите которая применит к этому файлу вашу функцию declension_dynast, перезапишет файл. В lua генерируем простое правило замен dic:
Текст оригинальный=текст измененный функцией declension_dynast
Применяем это правило к тексту (необходимости вставить текст в то же место смысла нет - достаточно замены)
tonio_k
- Lecron
- Специалист
-
Омографы
После недавнего видео от wasyaka по редактированию омографов, подумал, что правильнее видеть все фразы из большого количества книг для одного омографа. Лучше видно закономерности. Легко проверить ошибочность утверждения, что мол в таком контексте ударение такое и только такое. Дошли руки до "замок". А когда посмотрел на почти 3000 фраз, во-первых стало страшно, а во-вторых, подумал почему бы вместо захардкоженного словаря, не использовать нейросети.
В архиве 3 файла.
замок.cor - очищенные от излишнего контекста фразы. Их в принципе не сложно превратить в словарь. Хоть для одного слова он будет достаточно полон))). Но в тоже время, "впускает в за`мок" из словаря не поймает "впускает их|его|ее в свой за`мок"
замок.test - ударение проставлено, но контекст сохранен. Можно посмотреть на реальные экзерсисы авторов. Используется для оценки качества работы нейросети.
замок.model — собственно нейросетевая модель. Из 552 замо`к и 326 за`мок, угадала 85%
Для желающих попробовать на своем материале, нужен Питон и установленный пакет sklearn.
Впечатления в целом. Проблема омографов вполне решаема. По грамматическим признакам глагол/существительное, единственное/множественное, мужской/женский, или статистическими для неразрешимых а-ля "замок". Для уверенно владеющих темой нейросетей и подготовки данных для их обучения, думаю несложно добиться точности 90+%. Но это большая муторная работа. Извлечь данные из корпуса текстов несложно, но вот разметить их, проставить ударение и очистить от мусора — бррррр!
Кстати, если кто-то захочет составить классический словарь, было бы любопытно оценить его точность?
замок.zip
- (56.27 КБ) 69 скачиваний
замок.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
Код: Выделить всё
import joblib
model = joblib.load('замок.model')
model.predict(['замок не прокручивался'])
>>['замо`к']
model.predict(['замок разваливался'])
>>['за`мок']
Впечатления в целом. Проблема омографов вполне решаема. По грамматическим признакам глагол/существительное, единственное/множественное, мужской/женский, или статистическими для неразрешимых а-ля "замок". Для уверенно владеющих темой нейросетей и подготовки данных для их обучения, думаю несложно добиться точности 90+%. Но это большая муторная работа. Извлечь данные из корпуса текстов несложно, но вот разметить их, проставить ударение и очистить от мусора — бррррр!
Кстати, если кто-то захочет составить классический словарь, было бы любопытно оценить его точность?
Lecron
- tonio_k
- V.I.P.
-
Омографы
лично очень сомневаюсь. С трудом верится в безграничность возможностей нейросетей vs могучего русского языка.
вот именно! Если этим вопросом не займётся какой нибудь институт или объединение программистов, то задача для одного не подёмная.
а проводилась ли сравнительная статистика применения словарей? Что бы сравнить её с результатами работы нейросети.
Вот ваша фраза: "Из 552 замо`к и 326 за`мок, угадала 85%", мне интересно, а каким результатом "угадывания" обладают словари имеющиеся в сборках на форуме? Небольшой офтоп под спойлером:
► Показать
Древние люди в с реднем жили до 30 лет. Однако до 80 лет прекрасно доживали. Так откуда взялись 30 лет? А это из за высокой детской смертности. Если из 6 детей до 80 доживает один а остальные только до 5-14, то в среднем их продолжительность жизни 30 лет.
причём высокий процент угадывания может быть из-за "по русски" составленного предложения. Например:
В этом замке проживал граф Толстой. А как словари или нейросети будут срабатывать в тексте написанном в стиле магистра Йода:
Толстой граф проживал в замке этом.
UPD и вообще, если результат работы нейросети предпологает последующее прослушивание и корректировку, то чем она координально отличается от составления словарей по старинке?
tonio_k
- Lecron
- Специалист
-
Омографы
Ничуть. Достаточно среднеразвитого сообщества.
Из всего многообразия типовых словарей омографов, наибольшее распространение имеют всего 1000 слов. Ну и еще несколько сотен, когда омографом является имя собственное — То`лсто`го, О`ди`н. Из этой тысячи, 900 разрешаются по грамматическим признакам (ре`ки|сущ мн| : реки`|гл|сущ ед|), которые современные нейросети определяют с 95+ успехом уже сейчас. Осталось разметить только 100 слов, для успешной обработки которых хватит корпуса на 1000-2000 фраз на омограф. И даже 200-300 уже дадут неплохой результат.
Почему так уверенно говорю. Я собрал датасет для этой сотни из 374Мб txt-файлов. Получил вырезку на 9Мб. Из которых 50% вхождений приходится всего на 4 слова — минут, самом, самого, стоит. А 50% слов занимают всего 250Кб. Вот такое оно веселое распределение.
Самому интересно. Но я в ассортименте словарей не силен. Попробуйте проверить сами.
Корпус для теста я предоставил. Удаляете символ ударения, применяете словари и сравниваете построчно с оригиналом (скриптом). Если строка совпала — правильно, нет — неверно.
Предположу убедительную победу сетей.
Как раз это для сетей не проблема. Они оперируют не порядком слов, а окружением и дистанцией. Причем даже не по словам, а по n-граммам. Грубо: проживал — прож, рожи, оживал, живал. Ей все равно: проживал граф этом замке, проживал граф замке, проживал этом граф замке, проживал этом замке, проживал замке.
В всех случая результат правильный — за`мок
Lecron
- Lecron
- Специалист
-
Омографы
Хороший вопрос. Для ответа на него собрал полный датасет по омографам, которые считаю важными.
Обработано книг: 923 штук / 359 Мб
Омографов: 943
Вхождений: 1723179
stat.csv
- (18.55 КБ) 70 скачиваний
10 самых распространенных омографов дают 725122 вхождения или 42%.
18 распространненных — 50%.
Из них, 14 грамматически разрешимые, которые дают 792965 или 46%
Вначале взял для каждого из них 0.063% записей, чтобы в сумме получить 500 и проверил их на правильность расстановки ударений, исходя из их грамматических признаков. Ударения то правильные и правило когда надо сработает правильно, но вероятность для у`же, по`том, гла`за, о`дин, нача`л, то`му, мало`, ноги` очень мала, а на статистику влияет.
check.zip
- (12.06 КБ) 74 скачивания
Достаточно для того, чтобы исключить "последующее прослушивание и корректировку"?
И это только грамматика. Если к ним добавить 85% точность для входящих в первую 20-ку четырех неразрешимых омографов (8%) — минут, самом, стоит, самого, — головная боль снята.
Lecron
- Lecron
- Специалист
-
Омографы
В очередной раз убеждаюсь, что чтобы задать правильный вопрос, нужно знать половину ответа.
Ища инфу про омографы находил довольно мало. Но как столкнулся с темой Разрешение лексической многозначности, к каковой принадлежат омографы, оказалось работы вовсю идут и есть любопытные результаты. Например алгоритм Яровского.
Например он узнал, что для за`мок свойственно слово старый где-то спереди, а для замо`к слово щелкнул с любой стороны. Найдя похожие случаи, он увидит слово электронный и заметит его использование только для замо`к — вуяля, создано новое правило. Ищем следующие... И следующие...
В моем лабораторном примере, на корпусе из 2000 фраз, я ему "подсказал" 150, в которых алгоритм нашел 280 правил, которые самостоятельно расширил до 980, корректно распознав еще 550 ударений, всего с 2 ошибками.
Алгоритм достаточно прост, не требует библиотек и может быть реализован почти любым программистом. Сейчас ковыряю GitHub - juhokallio/YarowskyWSD: Word-sense disambiguation project for natural language processing course. Как рабочая программа не годится, но для понимания работы алгоритма и отсутствия необходимости изобретать велосипед — самое то. Всего 400 строк кода.
Ища инфу про омографы находил довольно мало. Но как столкнулся с темой Разрешение лексической многозначности, к каковой принадлежат омографы, оказалось работы вовсю идут и есть любопытные результаты. Например алгоритм Яровского.
Если по-русски, никаких нейросетей. Алгоритм абсолютно предсказуем. На основе списка фраз с омографом и небольшой подсказки что есть что, сам определяет какие слова окружающие омограф и в каком виде (правила принятия решений) могут характеризовать то или иное применение. Если разобраться, эти правила даже можно конвертировать в dic формат. Причем при определении правил, смотрит не только на размеченные подсказки, но и "умнеет" с каждым шагом.использует в качестве базового классификатора правила принятия решений и на каждом шаге выполняет следующие действия:
1.составление правил принятия решений на основе небольшого обучающего множества;
2.классификация остальных документов в корпусе;
3.построение нового обучающего множества, определяя экземпляры, размеченные свероятностью, большей определенного порога;
4.обучение классификатора на новом обучающем множестве.
5. повторить с пункта 3
Например он узнал, что для за`мок свойственно слово старый где-то спереди, а для замо`к слово щелкнул с любой стороны. Найдя похожие случаи, он увидит слово электронный и заметит его использование только для замо`к — вуяля, создано новое правило. Ищем следующие... И следующие...
В моем лабораторном примере, на корпусе из 2000 фраз, я ему "подсказал" 150, в которых алгоритм нашел 280 правил, которые самостоятельно расширил до 980, корректно распознав еще 550 ударений, всего с 2 ошибками.
Алгоритм достаточно прост, не требует библиотек и может быть реализован почти любым программистом. Сейчас ковыряю GitHub - juhokallio/YarowskyWSD: Word-sense disambiguation project for natural language processing course. Как рабочая программа не годится, но для понимания работы алгоритма и отсутствия необходимости изобретать велосипед — самое то. Всего 400 строк кода.
Lecron
- Lecron
- Специалист
-
Омографы
Продолжаю делиться впечатлениями по алгоритму Яровского.
tl;dr Отличный инструмент для снятия омонимии. Только его надо правильно приготовить.
Код, на примере которого знакомился с алгоритмом, при близком рассмотрении больше похож на лабораторную работу. Неэффективен ни по архитектуре, ни по оптимизации. После причесывания, понять алгоритм оказалось еще проще.
Назначение алгоритма:
Вначале я ошибся, посчитав его полноценным классификатором, способным классифицировать 100% фраз. На самом деле, алгоритм классифицирует 30-40% фраз, но с количеством ошибок стремящихся к 0. Для чего надо вручную разметить очень небольшое количество образцов.
Исследование алгоритма:
Провел 3 пробы. В каждой из которых, последовательно размечал по 10 случайно выбранных из корпуса фраз, после чего проводил обучение и смотрел, сколько фраз доразметилось автоматически.
Основной выхлоп дала разметка соответственно 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 анализирующее слова на отдалении от омографа и предварительное удаление стоп-слов. Если это не получится автоматически напрямую, составителям словарей такая подсказка общих признаков, окажет существенное подспорье.
б) проверка правил в словарях. Многие правила уже добавлены в них, но также представляю какой в них бардак. Так как точность алгоритма высока, есть резон классифицировать фразу с омографом алгоритмом и сравнивать с результатом его обработки словарями, в случае расхождения уведомлять пользователя.
в) непосредственная классификация. Перед применением классических словарей.
Код стеммера и классификатора, исходный корпус, результат 3 проб.
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
Примечание: Насколько понял работу алгоритма, его эффективность зависит не столько от количества размеченных, сколько от размера самого корпуса, количества фраз доступных алгоритму для оценки.
Оценка ошибок: Проверив вручную результат работы первой пробы, нашел 17 ошибок классификации или 2.4% (помечены -1 в файле log_auto.txt). Отмечу, что многие из них, следствие работы стемминга (удаления окончаний и суффиксов). Заменив стемминг на нормализацию (заперта, запер, заперев -> запереть) из pymorphy, количество ошибок сократилось до 5 (0.8%) без существенного влияния на количество размеченных. Но так как это внешняя зависимость затрудняющая исследование алгоритма, за основу взят именно стемминг.
Применение алгоритма:
Тут скорее мои фантазии и наброски идей. В общем же, это совсем иной, не словарный способ предобработки текста, который в идеале требует отдельного встраивания в процесс и интерфейса работы со "словарем" (где "словарем" выступает корпус фраз). Тема требующая отдельного обсуждения и выходящая за рамки данной заметки. На мой взгляд, это должно быть расширением обработки словарем формата hmg.
Но какое бы ни было применение, для работы нужен корпус фраз. Он может быть сформирован пользователем самостоятельно, на основе свой библиотеки. Но оптимально, чтобы его формировала сама программа. Встретился омограф, извлекли фразу с ним и сохранили в соответствующий файл. Думаю скрипты Демагога от ув. flegont с этим справятся легко. В идеале, это совместно формируемый корпус, куда сливаются результаты работы программы у всех пользователей. В отличии от уникальных и личных словарей, здесь никакой уникальности нет, главное размер. (см. примечание из "Исследование алгоритма")
а) Формирование правил для словарей. Трудность представляет правило k_nearest анализирующее слова на отдалении от омографа и предварительное удаление стоп-слов. Если это не получится автоматически напрямую, составителям словарей такая подсказка общих признаков, окажет существенное подспорье.
б) проверка правил в словарях. Многие правила уже добавлены в них, но также представляю какой в них бардак. Так как точность алгоритма высока, есть резон классифицировать фразу с омографом алгоритмом и сравнивать с результатом его обработки словарями, в случае расхождения уведомлять пользователя.
в) непосредственная классификация. Перед применением классических словарей.
yarowsky_wsd.zip
- (118.35 КБ) 34 скачивания
Lecron
- flegont
- V.I.P.
-
Омографы
Составление корпуса фраз с омографами - да, скриптами это решается.скрипты Демагога
К примеру, один скрипт может перелопатить указанные файлы книг, и сверяясь с заданным списком омографов, собрать до кучи все фразы, содержащие эти омографы. Попутно записывая в лог: какие книги уже обработаны. Чтобы можно было продолжать работу, с того места, где она была прервана пользователем.
Второй скрипт, привязанный к горячей клавише - просто бы читал выделенное слово в тексте, и если это омограф, то добавлял бы фразу с этим словом в корпус. Предварительно проверяя, что ее там еще нет.
Насчет самого алгоритма WSD (хоть Яровского, хоть еще какого) - тут я не владею вопросом в должной степени, знаю лишь, что WSD-проблема относится к числу еще не решенных. Хотя полвека назад был большой энтузиазм и надежды на скорое алгоритмически полноценное решение.
flegont
- Lecron
- Специалист
-
Омографы
Никто не утверждает о ее решенности. Специально указал процент типовых фраз, т.е. фраз попадающих под алгоритм, и количество ошибок. Речь скорее о существенном сдвиге, а не окончательном решении. Плюс очень невысокой цене этого сдвига. Как для программиста, так и для пользователя.
Можно долго ждать пока нам сделают голос, меньше нуждающийся в затыкивании словарями и тем более словарями содержащими банальные правила, а можно минимальными усилиями попробовать сделать хорошо самим.
Не то. Нужна простота! Поэтому упомянул hmg словарь.
Программа, прозрачно для пользователя, при любой озвучке/обработке текста, должна находить вхождения в него всех указанных в словаре омографов и распихивать их по корпусам. Точнее по wal-файлам (write-ahead log). А по горячей клавише или еще какому событию, для всех корпусов сразу, проводить дедупликацию и сливать с основным корпусом. Тогда и вести лог, из какой это книги, не будет надобности.
ЗЫ. Пока писал ответ, пришла еще одна мысль.
► Показать
Яровски — алгоритм нацеленный на выявление дискретных закономерностей. Если найти алгоритм разбиения слов на слоги и в качестве "меток" подсовывать Яровски слог в ударном и безударном варианте, то имея уже размеченные корпуса (dic словари) из сотен тысяч слов, можно получить удивительный результат, заменив большинство из них правилами со *
Lecron
- wasyaka
- V.I.P.
-
Омографы
Из около 200 книг выбрал, по ходу, все омо подлежащие замене (зАмок -по умолчанию, выбирались соответственно где замОк) и т.д.
Всё в формат dic(ключ-Слово + омограф или наоборот)...
Сравнил - словарь до (начальный) и словарь с дополнением из 200 книг...
Кол-во необракботанных омографов одинаково...
При добавление этих ключевых слов в рэкс - с разбежкой в два - три слова (от омографа, буквально после одной книги 4 сработки...
А когда старый ржавый замок?
Вывод - или смирится или 10-15 минут врукопашную (доточка рэкс - слишком трудо-время ёмкое занятие с минимальным выхлопом на выходе).
Все всё равно не победим...
wasyaka
- tonio_k
- V.I.P.
-
Омографы
месяц назад ещё сделал такой скрипт
4) СБОР КОРПУСОВ СЛОВ ПО СПИСКУ.lua.zip
- (2.54 КБ) 33 скачивания
Предложенный скрипт можно адаптировать по своему вкусу так, что бы корпуса "дописывались" к ранее созданным файлам с корпусами, а внутри удалялись дубликаты. Можно этот скрипт вставить и в скрипт, который обрабатывает книги словарями что бы "в фоне" дописывал в файлы с корпусами слов, но по мне, так лучше пачку книг разных жанров накидать в папку и найти по ним корпуса слов разом до их прослушки, чем копить корпус слов по мере подготовки книги к прослушке.
tonio_k
- Lecron
- Специалист
-
Омографы
Предыдущий ваш текст, не понял от слова совсем. А со старым ржавым все просто. Порядок применения правил. Для сочетания будет создано два правила left:ржавый и k_nearest: старый, где left правила имеют больший вес. Дальше зависит от статистики. Если старый * зАмок будет встречаться гораздо чаще, чем ржавый замОк, может и перевесит.
Плюс я не утверждаю, что правила Яровски со 100% вероятность транслируются в классические правила. Просто очень похоже что это так. Достаточно посмотреть на файл log_auto.txt из архива. Там сортировка по правилам и сгрупированы фразы которое оно "зацепило".
Вначале, для запуска работы алгоритма, так действительно лучше. Но как писал, его качество зависит от размера корпуса. То есть нужно его непрерывно пополнять. И это должно быть прозрачно. Как сбор данных, так и их использование. Настолько же прозрачно, как работа с классическими словарями.
Отметил галочкой словарь, внес в него запись в некотором формате "замок=з^амок,зам^ок" (записей будет десятки или даже сотни) и забыл. Через некоторое время, после достижения определенного размера корпуса для какого-то правила, программа предложила разметить некоторое количество фраз. Сделал и опять забыл. Корпус сам пополняется, алгоритм Яровски сам дообучается, правила сами перестраиваются и применяются к тексту.
Только в таком виде оно даст выхлоп.
Может сложится впечатление, что я кого-то уговариваю. Оно ошибочно. Просто делюсь впечатлениями от алгоритма который мне понравился. Представляю его лицом. Примете его на вооружение, уговорив разработчиков сделать удобно, или продолжите сожалеть что в теме неоднозначностей ничего не происходит, продолжив опираться только на классические словари, выбор ваш.
Lecron
- Lecron
- Специалист
-
Омографы
tonio_k, wasyaka, Еще несколько замечаний по теме в общем.
Каков бы ни бы алгоритм...
а) ...ВСЕ алгоритмы будут не похожи на словари. Поэтому придется осваивать и пилить разработчиков, что бы их удобно встроили в программу, а не прилепили сбоку как что-то вторичное. Без этого не взлетит ни один. Вопрос только, насколько трудоемок метод для пользователя.
б) ...ВСЕ алгоритмы не будут точными, то есть будут ошибаться. Вопрос только насколько.
в) ...из словарей уже выжали все возможное, а ВСЕ алгоритмы освоены на уровне пощупать энтузиастами. Проявите фантазию и представьте, что для них уже тоже накоплена база.
Возьмем Яровского и "замок". 30% омографов будет разрешено с точностью 97.6%, с возможностью повысить до 99.2%. А остальные, просто скажет "не знаю". Все что для алгоритма надо, в форме отметить галочкой предложения со словом "зАмок"
Просто? Элементарно. Однако что делать с остальными? Вопрос на 100000000. Предположу, кто-то скажет "а зачем вообще?", все это решается словарями. Но Яровски как раз и формирует тривиальные правила, из которых состоят эти словари. А то с чем не справился он, скорее всего не справятся и словари. При этом в словари, наверное бояться лезть даже их составители, настолько там невообразимая и неконтролируемая сложность.
Кстати, решил заодно вытянуть все правила. В порядке убывания веса/значимости. 0/1 — метка зАмок/замОк
Есть ли в словарях что-то, что Яровски не увидел? И насколько оно значимо? В моем предыдущем архиве корпус из 2000+ упоминаний омографа.
Каков бы ни бы алгоритм...
а) ...ВСЕ алгоритмы будут не похожи на словари. Поэтому придется осваивать и пилить разработчиков, что бы их удобно встроили в программу, а не прилепили сбоку как что-то вторичное. Без этого не взлетит ни один. Вопрос только, насколько трудоемок метод для пользователя.
б) ...ВСЕ алгоритмы не будут точными, то есть будут ошибаться. Вопрос только насколько.
в) ...из словарей уже выжали все возможное, а ВСЕ алгоритмы освоены на уровне пощупать энтузиастами. Проявите фантазию и представьте, что для них уже тоже накоплена база.
Возьмем Яровского и "замок". 30% омографов будет разрешено с точностью 97.6%, с возможностью повысить до 99.2%. А остальные, просто скажет "не знаю". Все что для алгоритма надо, в форме отметить галочкой предложения со словом "зАмок"
Код: Выделить всё
[ ] автоматический замок
[ ] аккуратно вырезал замок
[ ] амбарный замок
[x] архитектурными вывертами древний замок
[x] атаковать ваш замок
[x] без каких-либо препятствий вошли в замок
Кстати, решил заодно вытянуть все правила. В порядке убывания веса/значимости. 0/1 — метка зАмок/замОк
rules.txt.zip
- (3.16 КБ) 37 скачиваний
Lecron
wasyaka
Lecron
- wasyaka
- V.I.P.
-
Омографы
НЕ так и страшно..
Выбрано из 9000 книг (всё что было на винте).
Использованы и уже имеющие правила...
бЕрег-берёг.rar
- (8.75 КБ) 32 скачивания


В одиночку - пару лет...




Остатком не попавшем в список можно пренебречь...
И в процессе использования найдутся и ошибки...
wasyaka
Перейти
- Общая информация
- ↳ Сведения, обсуждения
- ↳ Отзывы
- Примеры звучания речевых синтезаторов
- ↳ Примеры звучания голосов на Windows
- Online TTS
- ↳ Онлайн-сервисы для синтеза речи
- Программы, использующие синтез речи в Windows
- ↳ Bazikalo
- ↳ BookMania
- ↳ Bormotuha TTS Tool
- ↳ Demagog
- ↳ DSpeech
- ↳ Homograph
- ↳ KooBAudio
- ↳ MP3Book2005
- ↳ Rozmovlyalka
- ↳ TextAloud
- ↳ Балаболка
- Русские голосовые движки для Windows
- ↳ Acapela-Group Alyona
- ↳ Ivona Татьяна и Максим
- ↳ Loquendo Ольга и Дмитрий
- ↳ Nuance Милена, Юрий и Катя
- ↳ Nuance Катерина
- ↳ RHVoice
- ↳ Sakrament TTS
- ↳ Speech Cube Elan Николай
- ↳ Vikno tts Олег
- ↳ Речевой синтезатор Иван
- ↳ Синтезатор речи - Голос
- Украинские голосовые движки для Windows
- ↳ UkrVox Игорь
- Иностранные голоса
- ↳ английские
- ↳ румынские
- Лингвистика
- ↳ Омонимия
- ↳ Обработка текста
- ↳ Тематические словари
- ↳ Программы для обработки текста
- ↳ TTS-Builds
- ↳ Обработка звука
- ↳ Разное
- Полезные материалы
- ↳ Книги, статьи
- ↳ Аудио
- Художественная литература
- ↳ Библиотека
- Творчество
- ↳ Песни речевых синтезаторов
- ↳ Аудиоспектакли с применением синтеза речи
- Модерирование
- ↳ Кабинет модераторов
- ↳ Корзина