4.5.
Языки представления знаний
И представление
знаний, и объектно-ориентированный подход к программированию основываются на
одной и той же идее, что конкретная предметная область приложения имеет такое
же значение для модели, как и для проблем, которые нужно разрешить. Если вы
работаете в определенной предметной области — технической, издательском деле
или сфере управления, — то вид проблемы, которую потребуется решить, будет изменяться
не только от проекта к проекту, но и на разных стадиях работы над проектом,
по мере того как будут уточняться концепции проекта и его цели. Относительно
постоянными остаются только "обитатели" предметной области — машины,
процессы, неживые объекты или люди. Представление этих сущностей, которое
может быть воспринято машиной и обработано программой, формируется таким образом,
чтобы его можно было использовать в самых разнообразных проектах.
В самом общем
виде разница между представлением знаний и объектно-ориентированным подходом
состоит в том, что в первом случае стремятся представить не только сущности
в определенной предметной области, но и знания об этих сущностях, которыми обладают
эксперты в данной области. Например, экспертам известны различные способы классификации,
упорядочивания, обозрения и манипулирования такими сущностями, которые позволяют
эффективно решать разнообразные задачи.
Если рассматривать
в этом свете проблематику представления знаний, то ее можно сформулировать следующим
образом: "Существует ли способ, пользуясь которым можно закодировать знания
о предметной области таким образом, чтобы поддерживать приложение этих знаний
к решению различных проблем в разных проектах?" Ответом на этот вопрос
является проектирование независящих от приложения "банков знаний",
о котором речь пойдет в главе 10. Вы в дальнейшем встретитесь и с такими примерами,
когда доступные программе знания по-разному используются в пределах одного и
того же приложения (главы 13 и 16).
В последующих
трех главах вы познакомитесь как с подходом, базирующимся на правилах, так и
с объектно-ориентированным подходом к программированию, причем на примере языка
CLIPS будет показано, как можно комбинировать оба этих подхода. Причина, по
которой в индустрии производства программных продуктов продолжают оставаться
популярными такие инструментальные средства, состоит в том, что как бы ни тяжело
было кодировать человеческие знания, такие эпистемологические трудности ничто
в сравнении с тем, что может наделать с указателями C++ неопытный программист.
Построение системы, базирующейся на правилах на таком языке, — это нетривиальная
задача, которую лучше всего поручить специалистам.
Другая причина
состоит в том, что при создании с нуля системы, базирующейся на знаниях, аналитики
и программисты попадают в такое обширное пространство альтернативных решений,
что запутаться в нем гораздо легче, чем отыскать правильный путь. Языки представления
знаний предлагают разработчику как программные средства высокого уровня, так
и множество конструкций низкого уровня, которые можно использовать для организации
и применения знаний, синтаксические и семантические примитивы, уже не раз доказавшие
свою полезность на практике.
В главе 5
в качестве основного инструмента для иллюстрации идей построения систем, основанных
на знаниях, используется язык CLIPS. Сделано это по следующим причинам:
В главе 6 будет проанализировано использование структурированных объектов, таких как семантические сети и фреймы, а в главе 7 мы перейдем к более тщательному анализу объектно-ориентированного подхода. Описание методики логического программирования, в частности с использованием языка PROLOG, завершит в главе 8 тему изучения языков представления знаний. В главе 17 вы найдете обзор множества доступных на сегодняшний день программных пакетов, предназначенных для построения экспертных систем, а в главах 18 и 19 анализируются более специализированные инструментальные средства.