На главную страницу ЗАО Софткей
 Главная   Новости   Статьи   Пресс-релизы   Рассылки 
 
MS O365 test

Экспертная система - своими руками

25.08.2003 / Программы / Дмитрий Лобач

Общеизвестно, что охотники за "синей птицей" искусственного интеллекта так до сих пор ничего и не нашли - разве что парочку перьев и отпечаток лапы. Тем не менее и эти их достижения, будучи облечены в практически применимую форму, могут быть эффективно использованы. Речь идет, в частности, об экспертных системах. Любимая игрушка кибернетиков семидесятых, сегодня они стали достаточно распространенным и обыденным способом общения электронного болванчика с пользователем. На самом деле, даже всевозможные мастера и помощники, которыми так любит оснащать свои продукты Microsoft, - ни что иное, как примитивные экспертные системы. А сегодня мы увидим, как с минимальными затратами времени построить и не примитивную.

Сущность практически любой экспертной системы состоит в следующем. В базе знаний системы записан перечень возможных проблемных ситуаций, в соответствие с каждой из которых поставлен какой-либо ответ, совет или непосредственное действие. Программная оболочка системы, получив от пользователя информацию относительно реальной проблемной ситуации, должна однозначно определить ее соответствие одному или несколькими "клише" из записанных в базе знаний (или констатировать неизвестную ситуацию, если подходящего шаблона в базе не окажется). Информация "выведывается" у пользователя путем задавания ряда вопросов, причем, как правило, содержание последующих вопросов зависит от ответов на предыдущие. К примеру, если мы выяснили, что человек находится в Москве, бесполезно спрашивать, видит ли он Медного всадника.

То есть здесь понятие информации принимает свое "первозданное" значение - информация понимается как уменьшение неопределенности. Каждый новый кусочек информации, передаваемый в качестве ответа на вопрос, уменьшает неопределенность относительно проблемной ситуации. Разумеется, уменьшение неопределенности происходит только в том случае, если у экспертной системы есть соответствующие знания - но это уже другой вопрос. Правильно построенная система должна точно идентифицировать проблемную ситуацию, обходясь минимальным количеством вопросов.

В целом, экспертные системы могут функционировать на различных принципах. Мы рассмотрим одну из наиболее простых и общих схем, при которой в систему заложен ряд правил (rules), позволяющих на основе известных фактов (facts) делать выводы относительно фактов пока неизвестных. Примерно это выглядит как "если факт1 и факт2, то факт3". Соответственно, для того чтобы делать выводы, экспертной системе нужны факты. Большинство из них берется из ответов пользователя, некоторые известны заранее, некоторые могут быть получены от баз данных и других приложений. И, наконец, все эти валы и шестеренки крутятся благодаря наличию двигателя в виде цели (goal).

Исходная цель требует от системы установить значение какого-либо факта (как правило, установление этого факта и означает полную идентификацию проблемной ситуации). Система, порывшись в списке правил, отыскивает те из них, которые позволяют установить этот факт на основе других фактов. Если эти интересующие систему факты неизвестны, то генерируется соответствующее количество новых целей - и так до тех пор, пока все необходимые факты не будут установлены.

А теперь давайте перейдем от теории к практике на примере системы KnowledgeWright, созданной компанией Amzi! (восклицательный знак - часть названия). KnowledgeWright - это движок для создания собственных экспертных систем. Экспертные системы, созданные в KnowledgeWright, могут использоваться приложениями-клиентами, написанными на C++, Java, Delphi, VB. KnowledgeWright может использоваться непосредственно из веб-интерфейса.

Общий вид IDE

Основные объекты, с которыми оперирует KnowledgeWright, мы уже описали - это цели, факты, правила и вопросы. Благодаря наличию IDE (написанной, кстати, на Java) разработка собственной экспертной системы легка и интуитивна.

Окно объектов

KnowledgeWright по своей сути является объектно-ориентированной системой. Это означает, что вопросы, факты, правила и все прочее наполнение базы данных описываются соответствующими объектами. Получить доступ к свойствам этих объектов так же легко, как с помощью Object Inspector в Delphi. Для этого достаточно сделать двойной клик на любом из объектов в дереве. В результате этого появляется окно, где можно править все значимые параметры объекта.

Помимо окна с деревом объектов и окон редактирования свойств объектов, в IDE присутствуют также окно трассировки целей и фактов, окно лога, окна для ввода и вывода. Напомню, что в реальных условиях общение с пользователем происходит с помощью динамически генерируемых веб-страниц. Чтобы гибко управлять генерацией, соответствующие заголовки, открывающие и закрывающие HTML-теги можно редактировать в специальных полях главного объекта knowledgebase.

В KnowledgeWright факты, о которых мы вели речь ранее, представлены двумя разными видами объектов. Объектами типа fact описываются только те факты, которые известны заранее - своего рода константы (при этом их тип не указывается). Те же факты, значения которых вычисляются во время работы системы, описываются объектами типа rule_set.

Поля со свойствами главного объекта

То есть динамически вычисляемые факты в трактовке KnowledgeWright идентичны наборам правил, на основе которых вычисляются значения этих фактов. И константы, и динамические факты могут иметь как одно, так и несколько (произвольное количество) значений. Это полезно в том случае, когда количество "симптомов" проблемы заранее неизвестно. Изначально известные данные могут храниться не только в константах, но и в виде таблиц, аналогичных таблицам реляционных СУБД. Для этого используется объекты типа data_table. Можно получить данные и из внешних СУБД. Для этого существуют объекты типа sql, содержащие соответствующий запрос.

В ответ на этот вопрос пользователю необходимо будет ввести дату

И, наконец, получить данные от пользователя можно с помощью объектов типа question. Вопросы - это объекты, занимающие второе место по количеству настроек. Во-первых, необходимо указать тип ответа - выбор из вариантов или ввод произвольного значения (о самом тексте вопроса говорить не будем - тут ничего особенного нет). Если это выбор, то нужно определить, сколько ответов может указать пользователь - один или несколько, а также выбрать визуальное представление вопроса: список или набор чекбоксов.

В этом вопросе мы заранее указываем варианты ответа

Во-вторых, нужно определить, каков будет тип ответа. В KnowledgeWright четыре типа данных: логические (boolean), числа (number), даты (date), текст (каким бы странным это не показалось, text).

Чтобы посмотреть, как все это может работать, начнем с того, с чего обычно начинают. А именно - с примера "Hello, World!".

Для того чтобы получить на выходе этот нехитрый результат, необходимо создать базу знаний, где будет только один факт - hello (название факта некритично - можно было назвать и fact1). Его значение будет известно заранее, и оно будет "Hello, World!". Чтобы этот факт "заработал", его нужно указать в списке целей базы знаний. Тогда, поскольку значение факта известно, система не будет заниматься рекурсивными измышлениями, а просто выведет это значение.

Усложненный вариант Hello. Взят из примеров к туториалам и, как следствие - обильно аннотирован

С точки зрения гибкости и удобства пользователя, выводить напрямую значения фактов зачастую нецелесообразно. Гораздо лучше выводить некий текст со включенными в него вычисленными значениями. Для этого предназначен объект text. Усложним наш пример. Вместо приветствия всему свету, поприветствуем конкретного человека. Для этого нам нужно создать два объекта: text и answer. Объект answer будет запрашивать у пользователя его имя, а объект text будет выводить приветствие. Для этого в текст необходимо вставить ссылку на узнанное системой имя: "Hello, %name%".

Финальный фариант Hello. Объект res_text ссылается на объект identification

И, наконец, с помощью объекта rule_set по пристрастиям определим, наш ли это человек.

Объект identification ссылается на favorites
Усовершенствованный многовариантный вопрос: слева внутреннее представление ответов, права - показываемое пользователю
Вывод и лог системы

Разумеется, этими простыми примерами мы показали лишь очень малую (и, разумеется, далеко не главную) часть возможностей KnowledgeWright. Тем же, кто хотел бы более близко познакомиться с системой, можно порекомендовать эту страницу. KnowledgeWright вместе с хорошей документацией и туториалами можно бесплатно загрузить для персонального применения.

KnowledgeWright - это отличный выбор для тех, кто хочет с минимальными затратами оснастить свой сайт или приложение мастерами, помощниками или относительно несложной экспертной системой. KnowledgeWright легка и удобна в использовании. Она позволяет, не тратя слишком много времени на программную реализацию, сконцентрироваться на "содержимом" системы. В то же время, возможности, которые она предоставляет, помогают создавать вполне эффективные продукты.

Ссылки по теме:

Автор статьи: Дмитрий Лобач


Рубрики статей
Все статьи
Аналитика
Программы
Игры
Интернет
Авторские права
Интервью
События в мире ПО
Рассылки
Новости мира ПО
Статьи: Мир ПО
Статьи: Программы
Статьи: Игры
Архив выпусков
  «   Октябрь 2018   »  
Пн Вт Ср Чт Пт Сб Вс
1234567
891011121314
15161718192021
22232425262728
293031    
Поиск в архиве

Логин / пароль:
запомнить




Наши партнеры:

 САПР и графика



Написать редактору  | RSSЭкспорт новостей и обзоров


Rambler's
Top100 Rambler's Top100

Разработка компании «Битрикс»
Разработано
«Битрикс»


Copyright © 2001-2018 ЗАО «Софткей»