Разработка экспертных систем - это такая область искусственного интеллекта, которая в настоящее время привлекает всеобщее внимание. Более того многие исследователи считают понятия "искусственный интеллект" и "экспертные системы" синонимами. Автору кажется, что следует рассматривать все, что связано с созданием экспертных систем, как этап на пути к построению искусственного разума. По крайней мере, это разумный компромисс - ведь невозможно сконструировать устройство, которое смогло бы выполнить весь комплекс свойственных человеку интеллектуальных действий, но, с другой стороны, в различных достаточно узких прикладных областях могут быть созданы системы, которые обладают знаниями и умеют оперировать ими практически так же, как и человек, являющийся экспертом в этой прикладной области. Аналогично многим исследователям, экспертные системы практически бесполезны за пределами конкретной прикладной области. Так, например, экспертные системы, обладающие значительными знаниями в области разведки нефтерождений, окажутся бесполезными, если речь пойдет о футболе.
Можно ожидать, что экспертные системы будут выполнять следующие функции:
хранить специализированные знания и выдавать их по запросам;
осуществлять логический дедуктивный вывод с использованием "нечеткой" логики;
обладать способностями к обучению;
уметь принимать решения или предоставлять информацию для принятия решений в области финансовой деятельности, геологической разведки, построения и тестирования разного рода систем и во многих других областях;
объяснять свое поведение.
Пятое поколение - это термин, используемый в Японии для обозначения перспективных ЭВМ и новых принципов построения экспертных систем, которые впоследствии планируется использовать как базовые для разработки программного обеспечения, Правда, часто забывают, что реализация проекта пятого поколения раввчичгБгоаечмзя, по крайней мере, на десять лет. Аналогичные попытки делаются и в европейских странах. Так, финансовая поддержка была оказана исследователям по разработке основанных на знаниях интеллектуальных систем.
Примером сотрудничества в этой области является объединение усилий двух фирм Racal и Norsk Data. Они разрабатывают мощные 32-разрядные системы, ориентированные на обработку знаний. Эти системы базируются на процессорах ND-500 и ND-100, имеют разделяемую оперативную память, предназначенную для параллельной работы нескольких пользователей, снабжены графическими терминалами с исключительно высокой разрешающей способностью (1200 х1200) и с независимыми окнами, доступными с помощью клавиатуры или "мыши". Базовым языком для этих ЭВМ служит Zeta Лисп, созданный в МТИ, кроме того, в некоторых приложениях предусматривается использование Пролога. Эти системы планируется использовать главным образом в университетах, но часть из них должна найти применение в химических компаниях, в частности для проведения разведки нефтерождений.
На первый взгляд, создать экспертную систему очень просто. Для этого надо найти эксперта, заставить сообщить все его знания в данной предметной области, ввести эти знания в ЭВМ, добавить в ЭВМ несколько правил по использованию знаний - и можно смело использовать вместо эксперта ЭВМ. В действительности процесс оказывается более сложным. Ведь, отнюдь, не очевидно, что эксперт согласится участвовать в предприятии, которое в конце концов может привести к тому, что он, отдав свое главное достояние - знания,- окажется ненужным. Даже если считать, что этот барьер будет преодолен, останется еще много факторов, которые сложно выразить словами, но которые оказывают существенное влияние на исход экспертизы. Многие из этих факторов определяются почти интуитивно, и эксперт зачастую не может передать их системе, поскольку и сам точно не знает, как ими пользоваться.
Другие трудности связаны с тем, что эксперт обычно не является специалистом по программированию, а программист может ничего не знать о довольно тонких моментах, характерных для данной предметной области. Эти трудности можно преодолеть с помощью нового типа специалиста - инженера по знаниям. Инженерия знаний как научная дисциплина определяет, каким образом получать знания от эксперта, как разрабатывать системы по обработке знаний и проектировать программы, ориентированные на применение этих знаний. Важным аспектом инженерии знаний является разработка самих систем инженерами знаний. Почти наверняка для экспертных систем потребуется быстродействующая память большого объема и не универсальная, а специализированная ЭВМ. Вероятно, экспертные системы будут поставлятся в виде оболочек, которые дадут возможность пользователям создавать на их основе собственные системы, а не в форме законченных пакетов, ориентированных на конкретные приложения. Можно предположить, что экспертные системы легко адаптировать к решению самых разнообразных задач диагностики. Например, в области медицины экспертные системы могут быть использованы пациентами в случае неопасных заболеваний для самодиагностики и врачами для определения диагноза более серьезных болезней. Экспертные системы могут оказать помощь инженерам по электронике и механике в обнаружении и устранении неисправностей в работе сложной аппаратуры.
В самых разнообразных областях в проектировании электронных и механических устройств, в разработке компьютеров и языков программирования, в планировании экономических процессов экспертные системы можно использовать либо для создания заученных систем, либо как инструмент для проектирования и разработки отдельных подсистем. С помощью экспертных систем можно достаточно быстро создавать прототипы компьютерных Еетем и языков программирования. Дело в том, что экспертные системы предоставляют средства для создания тех основных элементов, которые являются общими для всех систем такого рода, а эксперты производят окончательный отбор и оснащение стемы необходимыми для работы в конкретной области деталями. В этой и других областях знания эксперта используются здьми, которые либо не являются специалистами в этой области, либо разбираются в существе дела, но значительно хуже, чем Сведущие эксперты.
Ниже представлена простая экспертная система, которая позволяет пользователю осуществлять контроль за работой магнитафона. Программа 6.1, реализующая экспертную систему, не содержит специальных знаний, и будет понятна практически всем. Проанализировав работу этой программы, пользователи смогут создавать значительно более сложные системы.
Программа 6.1
(XY) match ((X|Z)(Y|x))
(X Y) match ((Z|x) (y|z)) if
(X Y) match (x z)
check X if
Y fault and
Y checks Z and
x ON Z and
not (x) is-told and
Y action у and
(x X) match (Z y) and
/
X fault if
(fault X) is-told and
faults Y and
X ON Y
faults (no-sound no-play amplifier supply motor)
no-sound checks (plugged in switched-on volume-up mains-fuse
motor action ((try supply fault) new-motor new-belt new-idler
new-pinchwheel new-pads (try amplifier fault))
Укажем для неспециалистов, что в программе 6.1 используются следующие обозначения:
xformer - трансформатор;
С - конденсатор;
Т - транзистор;
leads - провода или соединения на печатных, платах.
Отношение faults включает все возможные типы неисправностей, в то время как отношение checks описывает различные процедуры контроля (тестирования), применяющиеся для установления причин возникновения этих неисправностей. Пользователю после того, как он информирует систему о неисправности, будет рекомендовано применить одну из этих процедур. Кроме того, процедуре тестирования соответствует специальное действие, которое пользователь должен выполнить для устранения неисправности.
Соответствующие друг другу неисправности, процедуры тестирования и действия по устранению неисправности связываются с помощью отношения match, которое было использовано ранее для выбора упорядоченных пар из двух списков. В некоторых случаях действия по устранению неисправности заменяются указанием ввести новый тип неисправности для того, чтобы получить больше информации о причине неисправности. Это свидетельствует о том, что система исчерпала свои знания о перво-ночально введенной неисправности.
В списках процедур контроля сначала идут элементарные процедуры, такие, как проверка, вставлена ли вилка в штепсель и включено ли устройство, но в дальнейшем процедуры становятся более технически сложными. Для того чтобы начать работать с программой, пользователю необходимо использовать в запросе отношение check. После этого система попросит его ввести тип неисправности. Затем необходимо будет провести ряд предлагаемых системой процедур тестирования и сообщить системе их результат в виде ответа yes/no. В случае положительного ответа система считает, что все в порядке и не рекомендует осуществлять никаких действий; в случае отрицательного ответа пользователю сообщается, что следует предпринять. Если ни одна из связанных с неисправностью процедур тестирования не позволяет выявить причину неисправности, пользователю обычно предлагается выполнить еще один ряд процедур тестирования. Покажем, как может быть обнаружена причина простейшей неисправности:
all (x: check x)
[определить все (х: проверка х)]
fault X ? ans no-sound
[неисправность х ? ответ нет-звука]
plugged-in ? у
[вставлена-ли-вилка-в-штепсель ? да]
switched-on ? у
[включено-ли-устройство ? да]
volume-up ? no
[включен-ли-звук ? нет]
turn-vol-up
[включить-звук ]
No (more) answers
[Ответов (больше) нет]
Следующий протокол работы программы иллюстрирует тот случай, когда основные процедуры тестирования не позволяют обнаружить причину неисправности и пользователям рекомендуется использовать ряд процедур, относящихся к другому типу неисправности:
all (x: check x)
[определить все (х: проверка х)]
fault X ? ans no-sound
[неисправность X ? ответ нет-звука]
plugged-in ? у
[вставлена-ли-вилка-в-штепсель ? да]
switched-on ? у
[включено-ли-устройство ? да]
volume-up ? у
[включен-ли-звук ? да]
mains-fuse ? у
[оболочка-фидера-в-порядке ? да]
mains-lead ? у
[провода-фидера-в-порядке ? да]
sound-ok ? no
[звук-в-порядке ? нет]
(try supply fault)
[(проверьте работу источника питания)]
No (more) answers
[Ответов (больше) нет]
После этого пользователь может продолжать работу с системой таким образом:
all (x: check x)
[определить все (х: проверка х)]
fault X ? ans supply
[неисправность X ? ответ источник-питания]
DC-fuse ? у
[предохранитель-постоянного-тока-в-порядке? да ]
xformer-leads ? у
[провода-трансформатора-в-порядке ? да]
xformer ? у
[трансформатор-в-порядке ? да]
rectifier-leads ? у
[соединения-выпрямителя-в-порядке ? да]
rectifier ? no
[выпрямитель-в-порядке ? нет]
new-rectifier
[заменить-выпрямитель ]
No (more) answers
[Ответов (больше) нет]
Элементарные процедуры тестирования рассчитаны на достаточно поверхностно знакомых с предметной областью пользователей, а не на умудренных опытом специалистов. Естественно, что специалисты хотели бы начинать работать с системой только после того, как простейшие процедуры тестирования не дали результата. Им хотелось бы вводить в систему знакомые понятия, такие, как источник питания, усилитель и т. п., и получать в ответ данные о причине неисправности, относящиеся к конкретным элементам устройства. Приведенный ниже пример дает возможность установить, что неисправна емкость С1 источника питания:
all (x: check x)
[определить все (х: проверка х) ]
fault X ? ans supply
[неисправность X ? ответ источник питания ]
DC-fuse ? у
[предохранитель в порядке ? да]
xformer-leads ? у
[провода трансформатора в порядке? да]
xformer ? у
[трансформатор в порядке ? да ]
rectifier-leads ? у
[соединения выпрямителя в порядке ? да]
rectifier ? у
[выпрямитель в порядке ? да]
[емкость С1 в порядке ? нет]
replace C1
[заменить С1]
No (more) answers
[Ответов (больше) нет]
Напомним, что положительный ответ означает, что тестирование данного элемента проведено и никаких отклонений в его поведении не обнаружено. Вопрос системы Cl-ok ? предполагает, что специалисты либо сразу на основании данных уже проведенных процедур тестирования готовы дать ответ о работе емкости О, либо им потребуется какой-нибудь специальный тест для С1. В принципе нет достаточных оснований для того, чтобы не давать более полной информации пользователям-неспециалистам. Например, для каждого элемента может быть предусмотрено специальное отношение action, описывающее процедуры тестирования, позволяющие установить, является ли данный элемент причиной неудовлетворительной работы устройства.
Упражнение 6.1
Покажите, как можно использовать экспертную систему для обнаружения неисправности маховика механизма воспроизведения. Причем учтите, что неспециалисты (а) и специалисты (б) будут взаимодействовать с системой по-разному. Ниже показано, как можно расширить систему, обеспечив пользователей более детальной информацией для поиска неисправностей
Программе 6.2
faults (no-sound no-play amplifier supply motor transistor gain)
transistor fault) (try head fault)) transistor checks (tested-junctions gain-ok) gain checks (tested-gain amplifier-ok) transistor action ((If NPF type connect ohmmeter pos tob : resistance
to с and to e should be low. Reserve leads: resistance should be high.
Reverse polarities for PNP type.) (Try gain fault))
gain action ((if NPN type connect ohmmeter between с and e:
resistance should be high. Connect 4K7 between с and b: resistance
should fall. Reverse polarities for PNP type) (Try amp-circuit fault))
Выше вопрос
T1 ok ?
предусматривал, что пользователь обладает знаниями о транзисторах и может контролировать их работу. Если же таких знаний пользователь не имеет, то система должна быть готова предоставить их ему. Слова transistor (транзистор) и gain (коэффициент усиления) должны быть добавлены к списку неисправностей, а слова try transistor fault (проверьте работу транзистора) должны появиться в предложении о действиях в случае неисправности усилителя вместо слов replace Т1 (заменить Т1).
После элементарных типов неисправностей в списке стоят более технически сложные дефекты. Им соответствуют специальные процедуры тестирования, ориентированные на проверку конкретных элементов устройства. Поэтому для того чтобы понимать смысл выполняемых операций, необходимы, знания в области электроники.
Экспертные системы, подобные только что описанной, могут использоваться в качестве обучающих пакетов, а также для поиска неисправностей в различных устройствах. Информация о том, как проводить тестирование транзисторов, специалистам не нужна, им необходимо только знать, какой именно транзистор или группа транзисторов являются причиной неисправности. Начинающим электронщикам информация о том, как тестировать транзистор, понадобится только первые несколько раз; в дальнейшем никаких подсказок им не потребуется.
Еще раз отметим, что систему можно использовать либо как пакет для обучения основам обслуживания электронных устройств, либо как советчик для опытных специалистов, которые эксплуатируют незнакомое оборудование. В каждом из этих двух случаев, после того как люди приобретут необходимые навыки, система уже не понадобится.
Возможности системы могут быть расширены с помощью введения в нее знаний о новых неисправностях и необходимых для их устранения действиях. Эти знания передаются системе экспертами. В результате знания экспертов становятся доступными менее квалифицированным специалистам. Ниже приведено несколько отношений, использование которых позволяет системе получить информацию о новых неисправностях, процедурах тестирования и действиях по устранению этих неисправностей.
Программа 6.3
new-fault X if
(X new-fault) is-told and
faults Y and
not X ON Y and
(faults Y) delete and
APPEND (Y(X)Z) and
(faults Z) add and
new-checks X and
new-checks X if
(Y what tests are needed) is-told and
(X checks Y) add and
new-action X and
/
new-action X if
(Y what action is taken) is-told and
(X action Y) add and
/
Информация о процедурах тестирования и необходимых действиях по устранению неисправностей вводится в форме списков. Каждый элемент списка представляет собой либо два связанных дефисом слова, либо последовательность слов, заключенную в Кркобки. Использовать и дефис, и скобки для определения одного элемента списка запрещается. Покажем теперь, как можно ввести в систему информацию о новой неисправности-искажении (distortion):
all (x: new-fault x)
[определить все (х: новая-неисправность х)]
X new fault ? ans distortion
[X новая неисправность ? ответ искажение]
X what tests are needed ? ans (motor-speed (Vcc = 12v) motor
(replay head tight) ( replay head aligned) (replay head ok)
[X какие действия по устранению неисправностей необходимо предпринять ? ответ (отрегулировать-VR 1 (проверить источник питания) заменить-электродвигатель прижать-головку выровнять-головку заменить-головку отрегулировать-VRS заменить-громкоговоритель)]
Если теперь вывести на экран дисплея текст программы, то, можно будет убедиться в том, что, во-первых, в списке неисправностей появилось слово distortion (искажение) и, во-вторых, в программу добавлено два новых предложения для определения причин искажений и их устранения. Если возникнет необходимость, о с помощью описанной выше процедуры можно построить законченную систему.
Но все-таки первоначально в программу должны быть включены отношения match, check, fault, new-fault, new-checks, new-action и, по крайней мере, один элемент должен присутствовать в списке отношения faults. Если все это есть, то пользователи могут приступать к введению в систему новых типов неисправностей, относящихся к ним процедур тестирования и действий по их устранению. 1Гаким образом, программа представляет собой оболочку, использование которой дает возможность пользователям создавать экспертные системы, ориентированные на конкретную предметную область.
Имена отношений faults и cheeks удобны для систем, предназначенных для поиска неисправностей, но, естественно, эти имена могут быть изменены по желанию пользователей. Независимо от выбранных имен отношений основной принцип построения экспертных систем остается неизменным.
Упражнение 6.2
Используйте приведенные выше отношения для проектирования экспертной системы, предназначенной для поиска неисправностей, либо в любой известной Вам технической системе - например, такой, как центральное отопление, освещение, либо в устройстве типа радиоприемника, телевизора, автомобиля и т. п.
Упражнение 6.3
Измените оболочку таким образом, чтобы она оказалась пригодной для генерации экспертных систем, не связанных с поиском неисправностей. Попробуйте построить экспертную систему для идентификации объектов, относящихся к различным типам, например, для произведений живописи (учитывая данные о стиле, используемых материалах и т. п.), растений (здесь можно принять во внимание высоту, цвет, характер произрастания и т. п.) или для предметов любой другой хорошо знакомой Вам области.