Никакая нейронная сеть, никакой алгоритм не может сам по себе реализовать разбор естественного языка без базы данных либо обучения.
Есть базы по которым алгоритм изначально может сделать разметку. Данные базы собраны с разнообразных открытых источников, дополнены, реализованы в нужном мне формате и вшиты в программу.
Данные базы покрывают 1 500 000 слов, которых хватает для обработки практически любого текста. Предусмотрен механизм добавления редких терминов на лету.
Синтаксическая база была сформирована на основе различных синтаксико-семантических словарей, содержащих подробную информацию о грамматических признаках слов.
Каждый источник предоставлял уникальные аспекты описания: падежи, число, род, вид, переходность, синтаксические роли и другие параметры.
Все данные очищены от дубликатов, приведены к единому формату и объединены в согласованную базу.
В результате получена целостная и значительно более полная база, чем любая из использованных по отдельности.
Она сочетает в себе все ключевые грамматические и синтаксические признаки из разных источников, устраняя их ограничения и дополняя пробелы.
Семантическая база также была собрана из различных источников. В качестве основы использовались векторные модели лексических представлений, доступные в открытом доступе.
Каждая из них была очищена от шума и нерелевантных данных, приведена к единому векторному пространству с учётом семантической совместимости и внутренней логики распределения понятий.
В результате была сформирована согласованная и структурированная векторная база, тесно интегрированная с синтаксической.
Это обеспечило семантическое и грамматическое покрытие 1 500 000 словоформ — с учётом лемм, их грамматических признаков, синтаксических ролей и семантических характеристик.
После завершения формирования грамматико-семантической базы я реализовал семантическую структуру системы, опираясь на вручную собранные данные из различных семантических словарей и специализированных ресурсов.
Эти данные легли в основу автоматической классификации лексики, построенной на взаимодействии синтаксической информации и векторных представлений слов.
Принцип работы алгоритма заключается в том, что он использует ядро категорий, сформированное на основе ручной выборки, и далее распространяет семантическую классификацию на всю лексическую базу, включая слова, которые отсутствовали в исходных словарях.
Каждое слово автоматически сопоставляется с наиболее релевантной категорией, с учётом контекстной близости, грамматических признаков и взаимных связей между словами.
Благодаря такому подходу, каждая категория включает не только вручную размеченные леммы, но и автоматически классифицированные слова, что обеспечило широкое и точное покрытие — как по объёму, так и по глубине семантики.
спрашивавшее:спрашивать,W:1528623
спрашивавшееся:спрашиваться,W:1528645
P:noun,G:neut,C:accs_gent_nomn,N:sing,F:orgn
P:noun,G:femn_neut,C:ablt_accs_datv_gent_loct_nomn,N:plur_sing,F:abbr
P:noun,G:femn,N:sing,C:ablt_accs_gent
P:noun,C:accs_loct_nomn,N:plur,F:geox
P:adj_noun,G:neut,C:accs_nomn,N:sing,F:geox
P:noun,N:plur,C:ablt_accs_datv_gent_loct_nomn,F:abbr_geox
Как работает алгоритм (кратко и упрощенно):
1 Алгоритм на основе существующих баз и грамматических (не жестких, не шаблонных) правил размечают текст. На данном этапе алгоритм руководствуется базой и ближним контентов для корректировки падежей, разрешением омоформ и тд.
2 Выделяются подлежащие, сказуемые и тд.
3 Строятся синтаксические связи. Разбираются сложные дальние связи. Разрешаются анафоры (определяется какое местоимение на что указывает) и строится предварительный граф.
3 Отрабатывает алгоритм грамматической валидации, который выявляет графовые синтаксические несоответтвия и исправляет их (корректирует падежи омоформы и тд.)
4 Заново переразмечается текст.
1 Происходит определение семантической принадлежности каждого слова по отдельности к определенной семантической категории.
Так же определяется семантическая роль связи.
Это надо для того, что бы алгоритм в тексте:
Маша пошла в универсам и купила хлеб, а Петя ел пирог. Вася в магазине купил молоток.
алгоритм мог найти ответы на вопросы:
Кто обзавелся инструментом?
Пример. Сравним два предложения.
1 Люди на перроне ждали поезда
2 Люди на перроне смотрели как поезда проносятся мимо
Как мы видим в обоих этих предложениях есть слово омоформа "поезда".
В первом предложение оно является дополнением, во втором подлежащим.
Рассмотрим как определяет это алгоритм:
Семантические категории в {} выведены алгоритмом для визуализации. В алгоритме они значительно глубже.
1) Люди на перроне ждали поезда
Его визуальный граф созданный этим алгоритмом
Вот текстовая визуализация работы алгоритма
человек (сущ) на (предл) перрон (сущ) ждать (гл) поезд (сущ)
=================== Исправленный вариант:
люди на перроне ждали поезда
======================== Знаки препинания:
Люди на перроне ждали поезда
=========== ПОСЛЕ УТОЧНЕНИЯ ПАДЕЖЕЙ ===========
Люди - ( сущ муж мн имен одуш ) на - ( предл ) перроне - ( сущ муж ед предл неодуш ) ждали - ( гл мн прош перех несов ) поезда - ( сущ муж ед вин неодуш )
======================== Части речи:
(ДОПОЛНЕНИЕ) - перроне, поезда,
0 [ПОДЛ] люди -> [ кто (субъект) - что_делали (действие_прошлое) ] -> [СКАЗ] ждали '95' - 0 -> 3 { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния } { ждать = ожидаемый -> выждать -> поджидать -> пространственное_бытие -> надежда -> эмоции -> бояться }
0 [ПОДЛ] люди -> [ кто (субъект) - где (место) ] -> [ДОП] перроне '90' - 0 -> 2 { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния } { перрон = моторизированный_транспорт -> характеристики_пространства -> дебаркадер -> станция }
0 [ПОДЛ] люди -> [ кто (субъект) - х (???] ] -> [Х] на '100' - 0 -> 1 { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния } { на = предлог }
1 [Х] на -> [ х (???] - кто (субъект) ] -> [ПОДЛ] люди '100' - 1 -> 0 { на = предлог } { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния }
1 [Х] на -> [ х (???] - что_делали (действие_прошлое) ] -> [СКАЗ] ждали '90' - 1 -> 3 { на = предлог } { ждать = ожидаемый -> выждать -> поджидать -> пространственное_бытие -> надежда -> эмоции -> бояться }
1 [Х] на -> [ х (???] - где (место) ] -> [ДОП] перроне '100' - 1 -> 2 { на = предлог } { перрон = моторизированный_транспорт -> характеристики_пространства -> дебаркадер -> станция }
2 [ДОП] перроне -> [ где (место) - кто (субъект) ] -> [ПОДЛ] люди '90' - 2 -> 0 { перрон = моторизированный_транспорт -> характеристики_пространства -> дебаркадер -> станция } { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния }
2 [ДОП] перроне -> [ где (место) - х (???] ] -> [Х] на '100' - 2 -> 1 { перрон = моторизированный_транспорт -> характеристики_пространства -> дебаркадер -> станция } { на = предлог }
3 [СКАЗ] ждали -> [ что_делали (действие_прошлое) - кто (субъект) ] -> [ПОДЛ] люди '95' - 3 -> 0 { ждать = ожидаемый -> выждать -> поджидать -> пространственное_бытие -> надежда -> эмоции -> бояться } { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния }
3 [СКАЗ] ждали -> [ что_делали (действие_прошлое) - что (объект) ] -> [ДОП] поезда '100' - 3 -> 4 { ждать = ожидаемый -> выждать -> поджидать -> пространственное_бытие -> надежда -> эмоции -> бояться } { поезд = моторизированный_транспорт -> характеристики_пространства -> станция -> веревка }
3 [СКАЗ] ждали -> [ что_делали (действие_прошлое) - х (???] ] -> [Х] на '90' - 3 -> 1 { ждать = ожидаемый -> выждать -> поджидать -> пространственное_бытие -> надежда -> эмоции -> бояться } { на = предлог }
4 [ДОП] поезда -> [ что (объект) - что_делали (действие_прошлое) ] -> [СКАЗ] ждали '100' - 4 -> 3 { поезд = моторизированный_транспорт -> характеристики_пространства -> станция -> веревка } { ждать = ожидаемый -> выждать -> поджидать -> пространственное_бытие -> надежда -> эмоции -> бояться }
=============================================
2) Люди на перроне смотрели как рядом проносятся поезда
Его визуальный граф созданный этим алгоритмом
Вот текстовая визуализация работы алгоритма
человек (сущ) на (предл) перрон (сущ) смотреть (гл) как (союз) рядом (нар) проноситься (гл) поезд (сущ)
=================== Исправленный вариант:
люди на перроне смотрели как рядом проносятся поезда
======================== Знаки препинания:
Люди на перроне смотрели /~,~\ как рядом проносятся поезда
=========== ПОСЛЕ УТОЧНЕНИЯ ПАДЕЖЕЙ ===========
Люди - ( сущ муж мн имен одуш ) на - ( предл ) перроне - ( сущ муж ед предл неодуш ) смотрели - ( гл мн прош перех несов ) как - ( союз неразд ) рядом - ( нар ) проносятся - ( гл мн наст неперех несов ) поезда - ( сущ муж ед имен неодуш )
======================== Части речи:
(ПОДЛЕЖАЩЕЕ) - Люди, поезда,
(СКАЗУЕМОЕ) - смотрели, проносятся,
(ОБСТОЯТЕЛЬСТВА) - рядом,
0 [ПОДЛ] люди -> [ кто (субъект) - что_делали (действие_прошлое) ] -> [СКАЗ] смотрели '95' - 0 -> 3 { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния } { смотреть = восприятие -> просмотреть -> наблюдать -> световые_явления -> сватовство_свадьба_похороны -> родственная_связь }
0 [ПОДЛ] люди -> [ кто (субъект) - где (место) ] -> [ДОП] перроне '90' - 0 -> 2 { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния } { перрон = моторизированный_транспорт -> характеристики_пространства -> дебаркадер -> станция }
0 [ПОДЛ] люди -> [ кто (субъект) - х (???] ] -> [Х] на '100' - 0 -> 1 { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния } { на = предлог }
1 [Х] на -> [ х (???] - кто (субъект) ] -> [ПОДЛ] люди '100' - 1 -> 0 { на = предлог } { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния }
1 [Х] на -> [ х (???] - что_делали (действие_прошлое) ] -> [СКАЗ] смотрели '90' - 1 -> 3 { на = предлог } { смотреть = восприятие -> просмотреть -> наблюдать -> световые_явления -> сватовство_свадьба_похороны -> родственная_связь }
1 [Х] на -> [ х (???] - где (место) ] -> [ДОП] перроне '100' - 1 -> 2 { на = предлог } { перрон = моторизированный_транспорт -> характеристики_пространства -> дебаркадер -> станция }
2 [ДОП] перроне -> [ где (место) - кто (субъект) ] -> [ПОДЛ] люди '90' - 2 -> 0 { перрон = моторизированный_транспорт -> характеристики_пространства -> дебаркадер -> станция } { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния }
2 [ДОП] перроне -> [ где (место) - что_делали (действие_прошлое) ] -> [СКАЗ] смотрели '100' - 2 -> 3 { перрон = моторизированный_транспорт -> характеристики_пространства -> дебаркадер -> станция } { смотреть = восприятие -> просмотреть -> наблюдать -> световые_явления -> сватовство_свадьба_похороны -> родственная_связь }
2 [ДОП] перроне -> [ где (место) - х (???] ] -> [Х] на '100' - 2 -> 1 { перрон = моторизированный_транспорт -> характеристики_пространства -> дебаркадер -> станция } { на = предлог }
3 [СКАЗ] смотрели -> [ что_делали (действие_прошлое) - кто (субъект) ] -> [ПОДЛ] люди '95' - 3 -> 0 { смотреть = восприятие -> просмотреть -> наблюдать -> световые_явления -> сватовство_свадьба_похороны -> родственная_связь } { человек = человек -> общество_социум_цивилизация -> духовный_мир -> произведения_жанры_общее -> божественное_начало_деяния }
3 [СКАЗ] смотрели -> [ что_делали (действие_прошлое) - где (место) ] -> [ДОП] перроне '100' - 3 -> 2 { смотреть = восприятие -> просмотреть -> наблюдать -> световые_явления -> сватовство_свадьба_похороны -> родственная_связь } { перрон = моторизированный_транспорт -> характеристики_пространства -> дебаркадер -> станция }
3 [СКАЗ] смотрели -> [ что_делали (действие_прошлое) - х (???] ] -> [Х] на '90' - 3 -> 1 { смотреть = восприятие -> просмотреть -> наблюдать -> световые_явления -> сватовство_свадьба_похороны -> родственная_связь } { на = предлог }
3 [СКАЗ] смотрели -> [ что_делали (действие_прошлое) - х (???] ] -> [Х] как '1' - 3 -> 4 { смотреть = восприятие -> просмотреть -> наблюдать -> световые_явления -> сватовство_свадьба_похороны -> родственная_связь } { как = союз }
4 [Х] как -> [ х (???] - что (субъект) ] -> [ПОДЛ] поезда '90' - 4 -> 7 { как = союз } { поезд = моторизированный_транспорт -> характеристики_пространства -> станция -> веревка }
4 [Х] как -> [ х (???] - что_делают (действие_настоящее) ] -> [СКАЗ] проносятся '90' - 4 -> 6 { как = союз } { проноситься = действие_физическое_движение -> направление_движения -> проявление -> разнонаправленное_движение -> конечное_движение }
4 [Х] как -> [ х (???] - что_делали (действие_прошлое) ] -> [СКАЗ] смотрели '1' - 4 -> 3 { как = союз } { смотреть = восприятие -> просмотреть -> наблюдать -> световые_явления -> сватовство_свадьба_похороны -> родственная_связь }
4 [Х] как -> [ х (???] - где (место) ] -> [ОБСТ] рядом '100' - 4 -> 5 { как = союз } { рядом = направление -> предлог -> стоящий -> обстоятельство_место }
5 [ОБСТ] рядом -> [ где (место) - что (субъект) ] -> [ПОДЛ] поезда '90' - 5 -> 7 { рядом = направление -> предлог -> стоящий -> обстоятельство_место } { поезд = моторизированный_транспорт -> характеристики_пространства -> станция -> веревка }
5 [ОБСТ] рядом -> [ где (место) - что_делают (действие_настоящее) ] -> [СКАЗ] проносятся '100' - 5 -> 6 { рядом = направление -> предлог -> стоящий -> обстоятельство_место } { проноситься = действие_физическое_движение -> направление_движения -> проявление -> разнонаправленное_движение -> конечное_движение }
5 [ОБСТ] рядом -> [ где (место) - х (???] ] -> [Х] как '100' - 5 -> 4 { рядом = направление -> предлог -> стоящий -> обстоятельство_место } { как = союз }
6 [СКАЗ] проносятся -> [ что_делают (действие_настоящее) - что (субъект) ] -> [ПОДЛ] поезда '75' - 6 -> 7 { проноситься = действие_физическое_движение -> направление_движения -> проявление -> разнонаправленное_движение -> конечное_движение } { поезд = моторизированный_транспорт -> характеристики_пространства -> станция -> веревка }
6 [СКАЗ] проносятся -> [ что_делают (действие_настоящее) - где (место) ] -> [ОБСТ] рядом '100' - 6 -> 5 { проноситься = действие_физическое_движение -> направление_движения -> проявление -> разнонаправленное_движение -> конечное_движение } { рядом = направление -> предлог -> стоящий -> обстоятельство_место }
6 [СКАЗ] проносятся -> [ что_делают (действие_настоящее) - х (???] ] -> [Х] как '90' - 6 -> 4 { проноситься = действие_физическое_движение -> направление_движения -> проявление -> разнонаправленное_движение -> конечное_движение } { как = союз }
7 [ПОДЛ] поезда -> [ что (субъект) - что_делают (действие_настоящее) ] -> [СКАЗ] проносятся '75' - 7 -> 6 { поезд = моторизированный_транспорт -> характеристики_пространства -> станция -> веревка } { проноситься = действие_физическое_движение -> направление_движения -> проявление -> разнонаправленное_движение -> конечное_движение }
7 [ПОДЛ] поезда -> [ что (субъект) - где (место) ] -> [ОБСТ] рядом '90' - 7 -> 5 { поезд = моторизированный_транспорт -> характеристики_пространства -> станция -> веревка } { рядом = направление -> предлог -> стоящий -> обстоятельство_место }
7 [ПОДЛ] поезда -> [ что (субъект) - х (???] ] -> [Х] как '90' - 7 -> 4 { поезд = моторизированный_транспорт -> характеристики_пространства -> станция -> веревка } { как = союз }
Пояснение к тестовому обновлению Logos
Logos - система грамматико-семантического анализа естественного языка
rutube rutube.ru/video/private/91825c6a6d6b2e88260e26e8a033f...