изменено 22.03.2004
Здесь отражено развитие програмной реализации Системы осмысленного поиска.
Термины.
ЕЯ текст – текст на естественном языке.
Суть слова – простая форма слова, имеющая некоторый набор свойств, описывающих это слово.
Семантическая сеть – набор связей между сутями.
Связывание слова – подчинение данного слова связью к семантической сети.
Качество связывания слов – отношение числа связанных слов к общему числу слов предложения или текста.
Понимание текста - связывание слов.
Анализатор текста – программа, которая из ЕЯ текста создает семантические сети.
Смыслосеть – семантическая сеть.
База знаний – хранилище семантических сетей.
1997г:
Начато написание программы. Язык программирования выбран Visual Prolog.
2000г:
Создана первая версия анализатора русского текста. Скорость работы: порядка нескольких секунд на предложение. Алгоритм – простой перебор всех возможных вариантов связывания слов. Качество связывания около 60%. Процент ошибок ниже 10% от числа созданных связей. Связывала в том числе и местоимения внутри и между предложениями. Недостатки:
скорость разбора текста зависела от количества слов в одном предложении как 2..3 в
k-степени, k – количество слов в предложении. То есть предложение из 3-х слов разбиралось за миллисекунды, а из 10слов уже за десятки секунд.
если невозможно связать все слова в предложении (например одно слово не описано), то перебор вариантов начинал длиться минуты прежде чем выдавал отрицательный ответ.
Если нет успешного (полного) варианта связывания для предложения, то предлагался целый список вариантов связывания, возможный для дальнейшей обработки с использованием смыслов, уже известных Системе. Но эта возможность не была реализована.
создан поисковый движок, который может искать среди семантических сетей заданную семантическую сеть.
создан внутренний упрощенный язык для работы с базой знаний. Этот язык является независимым от конкретного человеческого языка.
создано ядро обработки упрощенного языка, выполняющее команду поиска в базе знаний запросов на упрощенном языке минуя анализатор ЕЯ. Так что можно заниматься разработкой поискового движка вне зависимости от качества анализатора ЕЯ текстов. В принципе это ядро вмонтировано в поисковый движок.
2001г:
Создан более быстрый анализатор. Скорость связывания 10слов в секунду даже для длинных предложений из 10-12слов. Качество связывания 50%. Недостатки: при невозможности полного связывания всех слов в предложении перебор вариантов начинал длиться секунды и более.
Создан поисковый движок, который может выполнять в том числе и команды, управляющие базой знаний: удалить, добавить смыслосеть или часть её.
2002г:
Создан анализатор более быстрый (20-30сл/с). Недостатки те же. Качество связывания 55%. Процент ошибок ниже 5% от числа созданных связей (сказывается накопление опыта по русскому языку).
Поисковый движок теперь может обрабатывать команды с участием переменных. Пример: делаем запрос с найти “_Х продаёт масло”, после выполнения запроса переменная _Х имеет значения со ссылками на разные смыслосети, которые были найдены. Теперь запрос “участник автомобильной выставки _Х” – будут найдены смыслосети, где участвуют значения из переменной _Х.
Поисковый движок может обрабатывать логику НЕ, ИЛИ, И.
Поисковый движок может обрабатывать функции.
Создан механизм, позволяющий использовать правила-знания при поиске смыслосети. Ввод правил-знаний реализован пока только на внутреннем упрощенном языке. Введенные правила-знания позволяют эмулировать процесс мышления. Недостатки – не реализована возможность самостоятельного обучения Системы, каждое правило-знание нужно вводить вручную. Так же пока представляет сложность обучить Систему путем ввода ЕЯ текстов из толковых словарей или энциклопедий. Пример правила-знания: “тигр это хищник”, “хищник охотится на животных”. Если теперь дать Системе запрос “тигр охотится на животных” Система ответит “ДА” и выдаст найденные смыслосети.
2003г:
создан анализатор текста, который освободился от главного недостатка предыдущих анализаторов: теперь не обязательно все слова в предложении должны быть связаны и описаны. То есть скорость разбора слабо зависит от числа возможных связей в предложении. Резко увеличилась скорость связывания – от 1000слов в секунду до 3000слов/сек. Недостатки: качество связывания упало до 45%. Формула расчета: (ЧислоСвязанных + ЧилоНеизвестных)/СловВсего. Процент ошибок вырос примерно до 15% от числа созданных связей. Этот движок был написан под задачу поисковой машины в интернете, где основным условием было увеличение скорости разбора. Но по моим оценкам качество связывания этого анализатора можно поднять и до 60% без особых затрат. Чем я руководствуюсь говоря так:
в текущей версии быстрого анализатора нет обработки связей деепричастий (они могут обрабатываются по типу как и причастия, которые у меня в основном реализованы, так что это не составит труда реализовать), нет обработки местоимений внутри предложения (так как местоимения были у меня реализованы в предыдущих версиях, то они легко реализуемы по
прототипу и я их пока не делал, а это еще 100% от их числа), нет подчинения 80% предлогов (сейчас частично предлоги связываются с причастиями и глаголами).
Я беру любой текст и пропускаю через анализатор, получаю статистику по предлогам, деепричастиям (местоимения пока опускаю). Делаю пересчет для будущей версии анализатора, в котором это все будет реализовано по формуле: ЧислоСвязанныхБудет = ЧислоСвязанных_Сейсас + 0.8*Число_Предлогов + 0,2*Число_Деепричастий + ЧислоСловНеизвестных. Тут нужно заметить, что неизвестное слово на самом деле иногда рвет две связи, а значит на каждое неизвестное слово теряется примерно 1.5 связей. Полученное число делю на ВсегоСловТекста и получаю процент связывания до 70%. Это очень даже не плохо для интернет-поисковой машины
.
Нужно еще учесть что числа в ЕЯ тексте считаются как СловВсего, но не обрабатываются анализатором.
2004г:
март
Блин, мой морфологический модуль, вернее не модуль а база данных, так мала и крива…, что она не знает почти все причастия, а те что знает на самом деле причисляет к прилагательным :)
. Я не говорю уже про инфо по словообразованию, которой вообще нет. Понятно что синтактический анализатор ЕЯ текста не может разобрать входной текст корректно. Я думаю из 20% ошибок анализатора 10% происходят из-за морфологии и к тому же как минимум 5% от общего числа слов недосвязывается тоже из-за морфологии.
Сейчас синтактический анализатор имеет такую статистику:
Файл УК РФ (размер .ТХТ 341кБ),
связей создано
прелож.всего
всего слов
Слов неизвестных
несвязанных
из них предлогов
из них дееприч
из них наречия
из них предикат
несвязы-ваемых
списков
% по связ
% по несв
слов в сек
22649
3692
44960
5102
21535
4610
6
208
114
1574
1009
81%
77.5%
1194
Пояснения. “Связей создано” – количество слов, которые удалось во внутренний смысл связать.
“Предложений всего” – сколько предложений в тексте. “Слов всего” – число слов без знаков препинания. “Слов неизвестных” – слова, которые неизвестны морфологическому модулю, соответственно они не могут участвовать в семантических связях и вдобавок вносят ошибки при разборе. “Слов несвязанных” – слова, которые анализатор не смог связать в семантическую сеть. “Из них …” - сколько из несвязанных слов по данной части речи. “Из них несвязываемых” – слова, которые не имеют смысла (например: “однако”, “конечно”, …). “Списков” – сколько обнаружено и создано списков И/ИЛИ. “По связано” – процент связываемости, вычисленный по формуле на основе Слов_Связано:
% = (Слов_связано + Предлогов + Предикативов + Предложений)/(Слов_Всего – Несвязываемых – Неизвестных)
Тут нужно заметить, что Предлоги и Предикативы я учитываю как будто они связаны, так как на поисковый смысл они особо не влияют. Количество предложений учтено для соответствия 100%-м связывания при связывании всех слов.
“% по несвязанным” – процент связываемости, вычисленный на основе числа несвязанных слов по формуле:
% = 1 – (Слов_Несвязано – СловНеизвестно – Предлоги – Предикативы – Несвязываемые)/Слов_всего
Дело в том, что часть связей устанавливается ошибочно, поэтому, как видно, существует разница между процентами ПоСвязано и ПоНесвязано, которая отражает ошибочность. На самом деле процент ошибок связывания я оцениваю как 25% от числа установленных связей. И как ранее я писал, 10% из них из-за кривой морфологии.
Я считаю, что процент связываемости получается достаточный (при условии использования нормального модуля морфологии, который есть у любой поисковой машины) для того чтобы можно было делать коммерческий вариант поиска текстовой информации.
В связи с этим Я думаю так: что если найти на дальнейшую разработку команду в 5толковых программистов и бюджет тысяч 100уе, то за год можно коммерческий поисковик сделать.