- •Введение
- •Глава 1. Ведение в системы искусственного интеллекта
- •1.1. Архитектура систем искусственного интеллекта
- •1.2. База знаний и данных
- •1.1.1 Понятие модели
- •1.1.2. Логические модели
- •1.1.3 Модели знаний на основе продукций
- •1.1.4 Фреймовая модель знаний
- •1.1.5 Семантические сети
- •1.3. Машина вывода
- •1.3.1. Понятие формальной системы
- •Примеры стратегии вывода
- •Как функционирует машина вывода
- •1.4. Извлечение знаний и обучение
- •1.4.1. Извлечение знаний от многих экспертов
- •1.4.2 Проблема непротиворечивости формализованной базы знаний
- •1.5. Обучение системы
- •1.6. Интерфейс с пользователем
- •1.7. Организация работы
- •1.8. Инструментальные средства создания систем искусственного интеллекта
- •Языки программирования
- •1.8.2. Языки продукционного программирования
- •1. 8. 3. Языки инженерии знаний и инструментальные системы
- •1.8.3.1. Система vpExpert
- •1.8.3.2. Система kas
- •1.8.3.3. Система Expert-Ease
- •Глава 2. База знаний
- •2.1. Методы извлечения знаний
- •2.1.1. Классификация методов извлечения знаний
- •2.1.2. Пассивные методы
- •2.1.2.1. Наблюдения
- •2.1.2.2. Анализ протоколов «мыслей вслух»
- •2.1.2.3. Лекции
- •2.1.3. Активные индивидуальные методы
- •2.1.3.1. Анкетирование
- •2.1.3.2. Интервью
- •2.1.3.3. Свободный диалог
- •2.1.4. Активные групповые методы
- •2.1.4.1. «Круглый стол»
- •2.1.4.2. «Мозговой штурм»
- •2.1.4.3. Экспертные игры
- •2.1.4.3.1. Игры с экспертом
- •2.1.4.3.2. Ролевые игры в группе
- •2.1.4.4. Игры с тренажерами
- •2.1.4.4.1. Компьютерные экспертные игры
- •2.1.5. Текстологические методы
- •2.2.Формальное описание понятий предметной области (по)
- •2.2.1. Методы абстрагирования понятий
- •2.2.1.1.Агрегация и декомпозиция понятий
- •2.2.1.2.Обобщение и специализация понятий
- •2.2.1.3.Типизация и конкретизация понятий
- •2.2.1.4.Ассоциация и индивидуализация понятий
- •2.3.Методы классификации
- •2.3.1. Экстенсиональный и интенсиональный аспекты классификации
- •2.3.2. Таксономия и мерономия
- •2.3.3. Типы классификаций
- •2.3.4. Древовидные классификации
- •2.3.5. Булевы классификации
- •2.3.6. Комбинативные классификации
- •2.4.События и процессы
- •2.4.1. Состояния предметной области
- •2.4.2. Событие
- •2.4.3. Последовательные процессы
- •2.4.4. Рекурсивные процессы
- •2.4.5. Ветвящиеся процессы
- •2.5. Системы продукций: структура, технология, применение
- •2.5.1. Неформальное введение в системы продукций
- •2.5.1.1 Алгоритмические модели
- •2.5.2 Логический вывод
- •2.5.3 Прикладные модели
- •2.5.4. Метамодель систем продукций
- •2.5.4.1. Основные подсистемы
- •2.5.5.2. Метаструктура базы данных и операций
- •2.5.5.2.1. Характер организации данных
- •2.5.5.2.2 Операции над базой данных
- •2.5.5.2.3 Контроль несовместимости
- •2.5.5.2.4 Ассоциативная надстройка
- •2.5.6. Метаструктура модуля правил
- •2.5.6.1 Аппарат активации
- •2.5.6.2 Структура правил
- •2.5.7. Метаструктура модуля управления
- •2.5.8. Технология поддержки разработок продукционных систем
- •2.5.9. Формальные модели систем продукций
- •2.5.9.1. Алгебраическая модель
- •2.5.9.1.1. Основные определения
- •2.5.9.1.2. Операции преобразования ситуации
- •2.5.9.1.3. Условия корректности вычислений над конъюнктивной базой данных
- •2.5.9.1.4. Однозначность вычислений над дизъюнктивной базой
- •2.5.9.2. Управление выводом в системах продукций
- •2.5.9.3. Язык управления применением продукций
- •2.5.9.4. Язык управления выбором данных
- •2.5.9.5. Обзор формальных моделей вычислений
- •2.5.10. Экспериментальные системы продукций
- •2.5.10.1. Система скип
- •2.5.10.2. Система анализа топологических чертежей интегральных схем
- •P(слой) x0, y0 : Dx1, Dy2, .., Dxn-1, Dyn;
- •2.6. Выводы к второй главе
- •3. Машина логического вывода
- •3.1. Формальное определение задачи
- •3.2. Специфика решения задач в сии
- •3.3. Управление процессом решения задачи
- •3.4. Модели эвристического поиска решений
- •3.4.1 Стратегия поиска в глубину
- •3.4.2. Стратегии перебора с отсечениями
- •3.4.2.1. Метод ветвей и границ
- •3.4.2.2. Стратегии поиска на основе эвристической функции оценки
- •3.5. Методы вывода и доказательства теорем
- •3.5.1 Механизм резолюции Робинсона
- •3.5.2. Резолюция в логике высказываний
- •3.5.2.1 Линейная резолюция вL
- •Метод линейного вывода в lЛавленда, Ковальского и Кюнера
- •Эффективная реализация
- •3.5.2.3. Метод поиска в глубину
- •3.5.2.4 Эвристики поиска в дереве
- •3.5.2.5. Семантическая резолюция
- •3.5.3 Резолюция в pl
- •3.6. Методы индуктивного вывода
- •3.6.1. Виды индукции
- •3.6.2. Индукция как вывод и индукция как метод
- •3.6.3. Правила, необходимые для систем автоматического формирования знаний
- •3.7. Дедуктивный вывод на семантических сетях
- •3.7.1. Нерезолютивные методы вывода на семантических сетях
1.8.2. Языки продукционного программирования
К настоящему времени создано несколько универсальных языков продукционного программирования. Одним из наиболее известных языков этого класса является OPS5 [95], разработанный в университете Карнеги-Меллона. Рассмотрим особенности этого языка. База данных в языке называется рабочей памятью (working memory) и состоит из нескольких сотен объектов, каждый из которых имеет свой набор атрибутов. Объект вместе с парами < атрибут — значение> называется элементом рабочей памяти. Синтаксически элемент рабочей памяти выглядит следующим образом
(Expression | Name Expr1 | Arg1 2 | Oр * | Arg2 X),
здесь знак | является оператором языка OPS5 и отделяет имя атрибута от его значения. В данном примере сказано, что объект класса Expression имеет четыре атрибута: Name, Arg1, Ор, Arg2, которые имеют следующие значения: Name = Expr1, Arg1 = 2, Ор = *, Arg2 = X.
Программа на OPS5 — это множество продукций, каждая из которых имеет следующие особенности. Левая часть продукции — это последовательность образцов, каждый из которых представляет собой частичное описание элементов рабочей памяти. Некоторые образцы начинаются символом "-". Такие образцы являются средством задания отрицательного контекста.
Условия левой части правила выполнены тогда, когда:
для каждого образца данной продукции существует элемент рабочей памяти, который соответствует этому образцу;
для образцов, помеченных символом "-" нет подходящих элементов в рабочей памяти.
В простейшем случае образцы содержат только константы и числа. Однако наибольший интерес представляют образцы, в которых используются переменные и предикаты, выделяемые в тексте угловыми скобками.
Предикаты OPS5 традиционны и включают: =, ,, >, <,. Например, следующий образец
(Expression Arg1 < Left > Arg 2 < Left >)
будет соответствовать любому элементу рабочей памяти, у которого первый аргумент не равен второму.
Правая часть продукции состоит из последовательности безусловных действий. Все эти действия меняют рабочую память (базу данных). Выделены три типа действий:
MAKE — создает новый элемент рабочей памяти;
MODIFY — изменяет один или несколько значений атрибутов у существующего элемента рабочей памяти;
REMOVE — удаляет элемент рабочей памяти.
Каждая продукция в OPS5 состоит из символа Р, имени продукции, левой части, символа и правой части. Следующий пример иллюстрирует типичную продукциюOPS5:
(Р TimeOx
(Goal | Type Simplify | Object <X>)
(Expression | Name <X> | Arg1 0 | Op *)
(MODIFY 2 | 0p NL |Arg2 NIL))
Основная задача, которую поставили перед собой разработчики языка OPS5, добиться максимально высокой эффективности выполнения продукционной программы. Интерпретатор системы порождает конфликтное множество, каждый элемент которого представляет собой пару <имя продукции, список элементов рабочей памяти, которые являются означиваниями для образцов продукции>.
Авторами языка OPS5 был предложен эффективный алгоритм построения конфликтного множества, получивший название RETEалгоритм [94]. Эффективность интерпретатора зависит от перебора элементов рабочей памяти и перебора продукций. RETE алгоритм позволяет избежать обоих этих переборов.
RETEалгоритм связывает с каждым образцом список тех элементов рабочей памяти, которые означивают этот образец. Когда элемент добавляется в рабочую память, интерпретатор находит все образцы, которым он соответствует и связывает этот элемент со всеми подходящими образцами. Когда элемент удаляется из рабочей памяти, то происходит обратное. Это означает, что интерпретатор никогда не делает поиска по образцу в рабочей памяти.
Второй вид циклов, снижающий эффективность работы системы, — это перебор продукционных правил. RETEалгоритм позволяет избегать этого перебора. Для этого над правилами строится сеть, которая позволяет сортировать продукции. Сеть строится из образцов левых частей продукций. Компилятор образцов строит из них сеть, связывая вместе одинаковые образцы из разных продукций. Было показано, чтоRETEалгоритм реализует самую эффективную процедуру построения конфликтного множества в системах продукций [94].
Данный алгоритм обладает высокой степенью внутреннего параллелизма, и позднее было предложено большое количество его обобщений и расширений для параллельных архитектур [109]. В настоящее время известно большое количество интеллектуальных систем, реализованных на языке OPS5 [108,95,61].
Другой известный язык продукционного программирования — Рефал. Язык Рефал задуман и функционирует как универсальный метаязык для описания преобразований языковых объектов [58]. Рефал позволяет описывать сколь угодно сложные преобразования одного текста в другой без каких-либо ограничений на характер преобразований. Эта ориентация языка получила название преобразование символьной информации. Одной из базовых операций языка является операция конкретизации, которую можно определить как переход от имени к значению. В OPS5 этой операции соответствует операция означивания.
Знаки К и ! являются выделенными и называются конкретизационными скобками, в которые заключается языковой объект, подлежащий конкретизации. Так, например, если X'есть некоторая переменная величина, то КХ! (конкретизация X) будет изображать значение этой величины. Конкретизация — переход от имени к значению — является основной операцией в языке Рефал.
Минимальную семантическую единицу в языке называют символом и обозначают последовательностью любых знаков (букв и цифр), взятых в кавычки. Из простых объектов строятся структурные. Простейший вид задания структурных объектов — это скобки. Выражение определяется как последовательность знаков, правильно построенная относительно скобок. Пример выражения: К 'ЕСЛИ' А<В 'ТО' А 'ИНАЧЕ' В!
Программа на языке Рефал представляет собой набор правил конкретизации. Поскольку правило конкретизации есть указание для замены одного языкового объекта на другой, то предложение состоит из левой части (заменяемый объект) и правой части (объект, заменяющий левую часть). Левая и правая части отделяются друг от друга символом -->. Например, предложение, выражающее тот факт, что значение переменной Х есть 137, запишется в виде
К X! 137
Структура интерпретатора Рефала выглядит следующим образом. Как и во всех системах продукционного стиля в архитектуре выделяются три компонента: рабочая память (база данных), база правил и интерпретатор. Пусть интерпретатор преобразует некоторое выражение, находящееся в рабочей памяти. В Рефале по умолчанию принято, что интерпретатор просматривает правила в том порядке, в котором они перечислены, и применяет первое из них, после чего шаг считается выполненным. Обрабатываемое выражение может содержать как угодно много конкретизационных скобок, причем они могут быть вложены друг в друга. В связи с этим необходимо зафиксировать дисциплину, которая определяет в каком порядке надо производить конкретизацию.
Ведущим называют самый левый знак конкретизации К, в области действия которого нет ни одного знака К. В начале каждого шага интерпретатор просматривает рабочую память слева направо в поисках ведущего знака конкретизации. Найдя его, он сравнивает термы, начинающиеся с этого знака, с левыми частями правил. Найдя подходящее правило, интерпретатор производит замену на соответствующую правую часть правила, и выполнение данного шага заканчивается.
Процесс преобразований останавливается, когда результирующее выражение не содержит конкретизационных скобок, либо когда неприменимо ни одно из правил. В общем случае правила языка Рефал могут содержать переменные, что приводит к необходимости выполнять операцию поиска по образцу. Процедура означивания переменной конкретным значение получила в Рефале название синтаксического отождествления. В правой части правил разрешается использовать только те переменные, которые использовались в левой части, и при означивании переменной в левой части все вхождения одной и той же переменной в пределах одного правила заменяются на одно и то же значение.
Приведенное краткое описание свойств Рефала наглядно демонстрирует насколько близко данный язык совпадает с парадигмой продукционного программирования. К середине 70-х годов были разработаны эффективные программные версии Рефала, на которых был реализован ряд системдля решения задач символьных преобразований [3] и продукционных систем [64].
Большое количество прикладных систем и моделей сделали возможным разработать общую метамодель систем продукций и построить формальные модели.