УДК 004.89
И. А. Бессмертный МЕТОДЫ ПОИСКА ИНФОРМАЦИИ В ПРОДУКЦИОННЫХ СИСТЕМАХ
Представлен обзор основных направлений исследований и достигнутых результатов в области построения машин логического вывода в продукционных системах: в частности, индексации и предварительного отбора фактов, применения методов реляционной алгебры для логического вывода, в том числе систем управления базами данных и операций над множествами в среде Prolog.
Ключевые слова: продукционные системы, реляционная алгебра, язык Prolog.
Введение. Представление знаний в виде фактов и правил совместно с их извлечением посредством машины логического вывода образуют продукционную систему. Идея продукционной модели данных получила материальное воплощение в экспертных системах, которые активно разрабатывались в 80-е гг. ХХ века [1]. Увеличение объемов баз знаний сделало актуальной проблему комбинаторной сложности задачи логического вывода. Одним из методов, успешно ускоряющим логический вывод, стал алгоритм RETE [2], используемый, в частности, в популярной оболочке экспертных систем JESS (www.jessrules.com).
Объявленная W3C консорциумом (World Wide Web Consortium) концепция глобальной семантической сети (Semantic Web) [3] также предполагает использование продукционной модели для представления знаний. Поскольку объемы баз знаний, образуемых ресурсами сети Интернет, могут значительно превышать масштабы экспертных систем, исследование методов логического вывода является целесообразным и актуальным. В настоящей статье приводится краткий обзор исследований в данной области, проводимых на кафедре вычислительной техники Санкт-Петербургского государственного университета информационных технологий, механики и оптики.
Индексация и предварительный отбор фактов. Пусть множество фактов базы знаний F = {f} образуют атомы (триплеты) f = (5, p, o), где s — субъект, p — предикат, o — объект. Проиндексируем факты следующим образом. Присвоим каждому факту в базе знаний порядковый номер i, тогда нумерованный факт может быть описан следующим образом:
fi) = (i, s, p, o).
Для множества термов T = {t}, содержащихся в фактах, сформируем индекс в виде
X = {х} = {(t, w,{iw })},
где w — место данного терма в атоме (в качестве субъекта, предиката или объекта), {itw} — множество номеров фактов, имеющих терм t в качестве w=(s; p; o).
Факты используются правилами, тело каждого из которых состоит из множества условий С = {с1, c2, ..., ck}, где c = (sj, pj, oj), sj — субъект, pj — предикат, oj — объект, при этом s; o = (t; v), v — переменная, pj = t. Для каждого из условий cj правила извлечение релевантных фактов для перечисленных сочетаний термов заключается в нахождении пересечений множеств индексов:
I j = {its}n {itp}n {ito}, sj = const, pj = const, oj = const;
Ij = {itp} n {ito К pj =cons^ oj =const;
Ij = {its}n {itp}, sj = const, pj = const;
Ij = {itp К pj = const.
Методы поиска информации в продукционных системах
57
Каждой переменной V, используемой в у-м условии, из списков I можно поставить в соответствие множество кортежей {/, щ}, где г е Iу, щ — значение переменной V, извлекаемое из
г-го факта. Если переменная V используется более чем в одном условии правила, пересечение
и = щ} = П {щ}у
'еС
множеств значений переменной позволит сократить число фактов, требуемых для унификации этих условий. Для получения списка фактов Iу содержащих переменную V для у-го условия правила, где эта переменная встречается, достаточно выполнить операцию реляционного деления
IV' = {г, иг} + [т}.
Наконец, если в условии Су правила содержится более одной переменной, то пересечение списков
1у = П ^
"ес1
для каждой из двух переменных даст окончательный список фактов, которые отвечают у-му условию правила.
Индексация и предварительный отбор позволяют подставлять в каждое правило только факты, которые обеспечивают успешное выполнение его условий. Экономия времени пропорциональна доле таких фактов. При использовании в правиле 100 % фактов экономия, естественно, нулевая.
Применение реляционных операций для логического вывода. В работе [4] показаны результаты исследования метода индексации и предварительного отбора фактов, где демонстрируется, что если в заголовке правила присутствует только одна переменная, то обработка индекса сразу дает множество решений, т.е. обработка правила становится излишней. В этой связи возникает вопрос, нельзя ли обойтись без подстановки фактов в условия правила в более сложных случаях. Пусть в результате отбора фактов для условий с(51, р1, о1), с(^2, р2, о2), ..., ..., с(^£ , р; , Ок), где si, ог — либо константа, либо переменная, получены множества кортежей Т = {{^ }}, где ¿г=(хг1, хг2), если в условии правила содержатся две переменные, и ^=(хг1), если присутствует одна переменная. Таким образом, получаем к таблиц приблизительно следующего вида:
Х11 Х12
Х21 Х22
Ха
Xk1 Хк2
Каждая таблица должна иметь, по меньшей мере, одну общую переменную хотя бы еще с одной таблицей. В противном случае результат будет представлять собой декартово произведение с данной таблицей, что обычно лишено смысла. Таблицы могут иметь связи следующих типов:
— соединение двух таблиц по совпадению значений их одной или более переменных; в этом случае две таблицы объединяются реляционным оператором INNER JOIN;
— фильтрация таблицы по условию сравнения значений переменных между собой или сравнения переменной и константы; данная функция выполняется с помощью условия WHERE и операторов сравнения.
Использование более сложных конструкций требуется в случае присутствия отрицания и кванторов в условиях правил. Однако в базах знаний, построенных на допущении открытого мира (Open World Assumption), отрицания не допускаются, а кванторы устраняются с помощью алгоритмов сколемизации [5]. Таким образом, условия правил могут
быть преобразованы в запросы на языках СУБД. Ниже приведен пример правила для отношения дядя—племянник(ца):
hasParent (?x1,?x2) л hasBrother (?x2,?x3) ^ hasUncle(?x1,?x3) и соответствующего ему запроса SQL:
SELECT F_1.Object AS Uncle, F.Object AS Nephew
FROM F INNER JOIN F AS F_1 ON F.Subject=F_1.Subject
WHERE (((F.Predicate)="hasParent") AND ((F_1.Predicate)="hasBrother"));
В настоящее время проводятся исследования по разработке средств автоматической загрузки баз знаний в СУБД и трансляции правил на языки запросов.
Быстрый логический вывод в среде Prolog. Язык программирования Prolog имеет встроенный механизм обратного логического вывода, соответствующий методу поиска „сначала вглубь". Известно, что этот метод является самым экономичным в части использования памяти, но требует значительных временных затрат и, кроме того, не гарантирует достижения цели ввиду опасности бесконечного углубления в рекурсии [5]. В этой связи заслуживает внимания опыт применения для логического вывода реляционных операций, описанных выше.
В составе библиотек Visual Prolog имеются предикаты, реализующие операции над множествами. Однако скорость выполнения этих операций слишком велика, поэтому использование таких предикатов, в частности intersection, difference, join, union, вместо „наивного" логического вывода лишено смысла.
Основная причина медленного выполнения таких предикатов состоит в том, что при обработке двух списков их элементы сопоставляются каждый с каждым. Реализация операций пересечения, разности и объединения двух списков X={x} и Y={y} предполагает в среднем развертывание nxny/2 вершин дерева поиска (список Y сканируется до появления искомого значения), где nx, ny — количество фактов в множествах X и Y соответственно. Для операции соединения развертывается nxny вершин, поскольку соединение представляет собой декартово произведение с фильтрацией.
Отсортируем списки X={x} и Y={y} по возрастанию значений. В этом случае оба списка можно обрабатывать совместно, и дерево поиска будет состоять из nx+ny вершин. Таким образом, ожидаемое ускорение обусловлено переходом от квадратичной к линейной зависимости сложности поиска от числа фактов. Ниже приведен пример предиката пересечения отсортированных списков, разработанных автором для среды программирования Visual Prolog 7.2:
predicates
intersectSorted : (Elem* ListX, Elem* ListY) -> Elem* IntersectionXY. clauses
intersectSorted([], ) = [] :-!.
intersectSorted( ,[]) = [] :-!. intersect-
Sorted([Y|Xs],[Y|Ys]) = [Y|intersectSorted(Xs,[Y|Ys])] :-!.
intersectSorted([X|Xs],[Y|Ys]) = intersectSorted([X|Xs],Ys) :- X>Y,!.
intersectSorted([_|Xs],[Y|Ys]) = intersectSorted(Xs,[Y|Ys]).
Выигрыш во времени при использовании логического вывода по сравнению с „наивным" выводом в среде Prolog составляет приблизительно три порядка.
Заключение. Ускорение логического вывода в продукционных системах может быть достигнуто различными способами, в том числе посредством применения апробированных средств СУБД. Среда программирования Prolog также является привлекательной, поскольку позволяет в компактной форме реализовать многие алгоритмы искусственного интеллекта. На кафедре вычислительной техники СПбГУ ИТМО проводятся исследования и в других направлениях решения данной задачи, в частности по применению в задаче поиска методов случайного блуждания.
Анализ треугольных динамических структур 59
список литературы
1. Уотермен Д. Руководство по экспертным системам / Пер. с англ.; Под ред. В. Л. Стефанюка. М.: Мир, 1989. 388 с.
2. F orgy C. L. RETE: A fast algorithm for the many pattern / many object pattern match problem // Artificial Intelligence. 1982. Vol. 19. P. 17—37.
3. Berners-Lee T., Hendler J., Lassila Ora. The semantic web // Sci. Amer. Magazine. 2001. May. P. 29—37.
4. Бессмертный И. А. Теоретико-множественный подход к логическому выводу в базах знаний // Науч.-техн. вестн. СПбГУ ИТМО. 2010. Вып. 02 (66). С. 43—48.
5. Рассел С., Норвиг П. Искусственный интеллект: Современный подход: Пер. с англ. М.: Изд. дом „Вильямс", 2006. 1408 с.
Сведения об авторе
Игорь Александрович Бессмертный — канд. техн. наук, доцент; Санкт-Петербургский государственный
университет информационных технологий, механики и оптики, кафедра вычислительной техники; E-mail: [email protected]
Рекомендована кафедрой Поступила в редакцию
вычислительной техники 18.01.11 г.
УДК 5:51(076)+62:51(076)
А. Б. Бушуев, С. В. Быстров, В. В. Григорьев АНАЛИЗ ТРЕУГОЛЬНЫХ ДИНАМИЧЕСКИХ СТРУКТУР
Рассматривается проблема системного эффекта структуры из трех элементов,
связанных динамическими отношениями.
Ключевые слова: триадная структура, веполь, гомеостат.
Введение. Треугольную структуру образует граф из трех элементов, характеризуемых связями или отношениями. В различных областях естествознания и техники структура из трех элементов, или триадная структура, является основой понятийного аппарата, простейшей моделью.
В динамической структуре связь между элементами зависит от времени, поэтому треугольная динамическая структура (динамический треугольник) может быть задана системой трех дифференциальных уравнений в нормальной форме Коши. Например, математическая модель сообщества „производители—продукт—управленцы" на качественном уровне описывается системой уравнений [1]
х = Мх,у,г), у = /2(х,у,г), ¿ = /3(х,у,г),
где х — число производителей, у — число управленцев, г — количество продукта,/, 7=1, 2, 3, — в общем случае нелинейные функции.
Граф-схема такой структуры приведена на рис. 1; каждая стрелка на схеме соответствует воздействию переменной, от которой она направлена, на изменение той переменной, к которой она ведет.
В теории решения изобретательских задач (ТРИЗ) [2] широко используется метод структурного анализа и синтеза по статическим треугольным структурам. По первым буквам
Рис. 1