17.1.
Общая характеристика инструментальных средств для построения экспертных систем
При разработке
практически всех инструментальных средств за основу принимается методология
автоматизации проектирования на базе использования прототипов. По отношению
к программному обеспечению термин прототип означает "работающую модель
программы, которая функционально эквивалентна подмножеству конечного продукта"
[Schach, 1993]. Идея состоит в том, чтобы на ранней стадии работы над
проектом разработать упрощенную версию конечной программы, которая могла бы
послужить доказательством продуктивности основных идей, положенных в основание
проекта. Прототип должен быть способен решать какую-либо из нетривиальных задач,
характерных для заданной области применения. На основе анализа опыта работы
с прототипом разработчики могут уточнить требования к системе в целом и ее Основным
функциональным характеристикам. Работоспособность прототипа может послужить
очевидным доказательством возможности решения проблем с помощью создаваемой
системы еще до того, как на ее разработку будут потрачены значительные средства.
После всестороннего
анализа прототип откладывается в сторону и начинается разработка рабочей версии
программы, которая должна решать весь комплекс задач, определенных в спецификации
проекта. Процесс разработки экспертной системы, как правило, состоит из последовательности
отдельных этапов, на которых наращиваются возможности системы, причем каждый
из этапов подразделяется на фазы проектирования, реализации, компоновки и
тестирования. В результате после каждого этапа наращивания возможностей
в распоряжении пользователя имеется система, которая способна справляться со
все более сложными вариантами проблемы.
Такая методика
проектирования несколько отличается от методики разработки программ других видов.
При создании большинства программных продуктов чаще используется другая модель
процесса— сначала разрабатывается спецификация продукта, затем выполняется планирование,
проектирование компонентов, их реализация, компоновка комплекса и тестирование
конечного варианта. Тот факт, что при разработке экспертных систем есть возможность
сначала построить и всесторонне испытать прототип, позволяет избежать множества
переделок в процессе создания рабочей версии системы. Но технология последовательного
наращивания функциональных возможностей таит в себе и проблему интеграции новых
функций с реализованными в предыдущих вариантах. Инструментальные средства разработки
экспертных систем и создавались, в первую очередь, с целью преодоления возникающих
при этом сложностей на основе модульного представления знаний, которое мы уже
обсуждали в главах 5-8.
По своему
назначению и функциональным возможностям инструментальные программы, применяемые
при проектировании экспертных систем, можно разделить на четыре достаточно больших
категории.
(1) Оболочки
экспертных систем (expert system shells). Системы этого типа создаются,
как правило, на основе какой-нибудь экспертной системы, достаточно хорошо зарекомендовавшей
себя на практике. При создании оболочки из системы-прототипа удаляются компоненты,
слишком специфичные для области ее непосредственного применения, и оставляются
те, которые не имеют узкой специализации. Примером может служить система EMYCIN,
созданная на основе прошедшей длительную "обкатку" системы MYCIN.
В EMYCIN сохранен интерпретатор и все базовые структуры данных — таблицы знаний
и связанный с ними механизм индексации. Оболочка дополнена специальным языком,
улучшающим читабельность программ, и средствами поддержки библиотеки типовых
случаев и заключений, выполненных по ним экспертной системой. Дальнейшим развитием
оболочки EMYCIN явились системы S.1 и М.4, в которых механизм построения цепочки
обратных рассуждений, заимствованный в EMYCIN, объединен с фреймоподобной структурой
данных и дополнительными средствами управления ходом рассуждений.
(2) Языки
программирования высокого уровня. Инструментальные средства этой категории
избавляют разработчика от необходимости углубляться в детали реализации системы
— способы эффективного распределения памяти, низкоуровневые процедуры доступа
и манипулирования данными. Одним из наиболее известных представителей таких
языков является OPS5, о котором уже шла речь в главах 5, 14. Этот язык прост
в изучении и предоставляет программисту гораздо более широкие возможности, чем
типичные специализированные оболочки. Следует отметить, что большинство подобных
языков так и не было доведено до уровня коммерческого продукта и представляет
собой скорее инструмент для исследователей.
(3) Среда
программирования, поддерживающая несколько парадигм (multiple-paradigm programming
environment). Средства этой категории включают несколько программных модулей,
что позволяет пользователю комбинировать в процессе разработки экспертной системы
разные стили программирования. Среди первых проектов такого рода была исследовательская
программа LOOP, которая допускала использование двух типов представления знаний:
базирующегося на системе правил и объектно-ориентированного (см. об этой программе
в главе 5). На основе этой архитектуры во второй половине 1980-х годов было
разработано несколько коммерческих программных продуктов, из которых наибольшую
известность получили KEE, KnowledgeCraft и ART. Эти программы предоставляют
в распоряжение квалифицированного пользователя множество опций и для последующих
разработок, таких как КАРРА и CLIPS, и стали своего рода стандартом. Однако
освоить эти языки программистам далеко не так просто, как языки, отнесенные
нами к предыдущей категории.
(4) Дополнительные
модули. Средства этой категории представляют собой автономные программные
модули, предназначенные для выполнения специфических задач в рамках выбранной
архитектуры системы решения проблем. Хорошим примером здесь может служить упоминавшийся
в главе 15 модуль работы с семантической сетью, использованный в системе VT.
Этот модуль позволяет отслеживать связи между значениями ранее установленных
и новых параметров проектирования в процессе работы над проектом. Подобные модули
управления семантической сетью можно использовать для распространения внесенных
изменений на все компоненты системы.
В последующих разделах этой главы мы более подробно рассмотрим перечисленные выше категории.