

Эксперт

Покинул форум
Сообщений всего: 8359
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 359

|
на данный момент новая версия еще не выложена. На сервере старая.
Общее описание работы алгоритма.
Есть базы по которым алгоритм изначально может сделать разметку. Данные базы собраны с разнообразных открытых источников, дополнены, реализованы в нужном мне формате и вшиты в программу.
Данные базы покрывают 1 500 000 слов, которых хватает для обработки практически любого текста. Предусмотрен механизм добавления редких терминов на лету.
Синтаксическая база была сформирована на основе различных синтаксико-семантических словарей, содержащих подробную информацию о грамматических признаках слов.
Каждый источник предоставлял уникальные аспекты описания: падежи, число, род, вид, переходность, синтаксические роли и другие параметры.
Все данные очищены от дубликатов, приведены к единому формату и объединены в согласованную базу.
В результате получена целостная и значительно более полная база, чем любая из использованных по отдельности.
Она сочетает в себе все ключевые грамматические и синтаксические признаки из разных источников, устраняя их ограничения и дополняя пробелы.
Семантическая база также была собрана из различных источников. В качестве основы использовались векторные модели лексических представлений, доступные в открытом доступе.
Каждая из них была очищена от шума и нерелевантных данных, приведена к единому векторному пространству с учётом семантической совместимости и внутренней логики распределения понятий.
В результате была сформирована согласованная и структурированная векторная база, тесно интегрированная с синтаксической.
Это обеспечило семантическое и грамматическое покрытие 1 500 000 словоформ — с учётом лемм, их грамматических признаков, синтаксических ролей и семантических характеристик.
После завершения формирования грамматико-семантической базы я реализовал семантическую структуру системы, опираясь на вручную собранные данные из различных семантических словарей и специализированных ресурсов.
Эти данные легли в основу автоматической классификации лексики, построенной на взаимодействии синтаксической информации и векторных представлений слов.
Принцип работы алгоритма заключается в том, что он использует ядро категорий, сформированное на основе ручной выборки, и далее распространяет семантическую классификацию на всю лексическую базу, включая слова, которые отсутствовали в исходных словарях.
Каждое слово автоматически сопоставляется с наиболее релевантной категорией, с учётом контекстной близости, грамматических признаков и взаимных связей между словами.
Благодаря такому подходу, каждая категория включает не только вручную размеченные леммы, но и автоматически классифицированные слова, что обеспечило широкое и точное покрытие — как по объёму, так и по глубине семантики.
Пример Синтаксической:
Цитата: мяч:мяч,W:1528236
мяча:мяч,W:1528237
...
спрашивавшее:спрашивать,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 { поезд = моторизированный_транспорт -> характеристики_пространства -> станция -> веревка } { как = союз }
============================================= |