
- •Тема 1. Основные понятия искусственного интеллекта.
- •Основные понятия искусственного интеллекта.
- •Базы данных и знаний.
- •Основные области применения и задачи интеллектуальных систем
- •Тема 2. Проблема представления знаний
- •Тема 3. Продукционные системы. Фреймы. Исчисление предикатов. Нейронные сети. Генетические алгоритмы
- •3.1. Продукционные системы
- •3.2. Фреймы
- •3.3. Исчисление предикатов
- •3.4. Нейронные сети
- •3.5. Генетические алгоритмы
- •Тема 4. Языки искусственного интеллекта
- •Тема 5. Искусственный интеллект и естественный язык
- •5.1. Сущность проблемы обработки естественного языка
- •5.2. Основная проблема обработки естественного языка
- •5.3. Распознавание языка
- •Морфологический анализ.
- •Синтаксический анализ.
- •Семантический анализ.
- •Результат
- •Проблемный анализ.
- •Синтез текста.
- •Основные модели лингвистических систем.
- •Стратегия разбора и синтеза текстов в зависимости от типа языка.
- •2. Морфологический (лексико-грамматический) анализ.
- •3.Синтаксический анализ.
- •Модели синтаксического анализа, применяемые в зарубежных промышленных решениях.
- •1. Модели, основанные на Link Grammar.
- •2. Модели, использующие структуры уровня именных и глагольных групп.
- •Лингвистический процессор ю.Д. Апресяна, и.М. Богуславского и л.Л. Иомдина.
- •Другой вариант модели синтаксического анализатора рассмотрим на примере проекта «диалинг».
- •4. Семантический анализ. Реализация семантического анализа в системе диалинг
- •Реализация семантического анализа в лингвистическом процессоре ю.Д. Апресяна, и.М. Богуславского и л.Л. Иомдина.
- •Реализация семантического анализатора в системе MyLingvo.
- •5. Структуры хранения данных и знаний.
- •Исчисление предикатов. Общие понятия.
- •Приведение произвольной формулы к множеству дизъюнктов.
- •Унификация и ее алгоритм.
- •Правило резолюций и его применение.
Тема 4. Языки искусственного интеллекта
Идея функционального программирования опирается на интуитивное понятие офункциях как о достаточно общем механизме представления и анализа решений сложных задач. Механизм функций основательно изучен математиками, и это позволяет программистам наследовать выверенные построения, обладающие предельно высокой моделирующей силой [1]. Систематическое применение функционального программирования впервые достаточно ярко было продемонстрировано Джоном Маккарти и его учениками в методах реализации языка Лисп и программирования на этом языке. Наиболее очевидные из этих методов были успешно ассимилированы другимиязыками и системами программирования. Обычно про функциональное программирование вспоминают при смене технологий, когда возрастает роль аналитики и исследовательских задач. В настоящее время часто употребляют термин"функциональность" при сравнительной характеристике информационных систем, что, видимо, свидетельствует о проявлении новой метрики, заслуживающей отдельного рассмотрения [2].
Функциональный стиль объединяет разные подходы к определению процессов вычисления на основе достаточно строгих абстрактных понятий и методов символьной обработки данных. Связь функционального программирования с математическими основами позволяет в тексте программы наследовать доказательность построения результата, если она достигнута, причем с использованием разных методов абстрагирования решаемой задачи [2] [3].
Сложность решения задач с помощью функциональных определений преодолевается чисто алгебраически: нацеленностью на формализацию основного множества объектов и определения полной семантической системы операций над ними. Это позволяет представлять классы задач и их решений строгими формулами, для наглядности упрощаемыми введением дополнительных функциональных символов. При необходимости такие символы вносятся в опpеделение алгебраической системы, что приводит к ее расширению. Вводятся новые функции, подобные леммам и другим вспомогательным построениям в математике. Активно используется рекурсия и символьные обозначения как данных, так и действий и любых формул, удобных при определении функций.
Формально такое расширение является консервативным (новый символ определен с помощью старых), оно гарантирует сохранение всех функциональных свойств исходной системы. Минимальный набор обозначений, к которым можно свести все правильные, т.е. вычислимые формулы системы, играет роль базиса системы, реализация которого является минимальной версией всей системы.
Следует отметить, что при формальной эквивалентности разные расширения одного и того же базиса могут поддерживать различные применения и восприниматься как совершенно разные системы. Программисты вынуждены строить расширения, которые выглядят неконсервативными, так как целью их работы является именно изменение ряда характеристик функционирования исходной системы (компьютера, системы программирования и т.п.) с частичным сохранением заданных функциональных свойств.
Большинство систем программирования разработано с ориентацией на расширение, уточнение и настройку пользователем реализованных программных средств, свойства которых определены и обеспечены в процессе разработки. Такое разделение труда естественно при ориентации на решение задач с исчерпанным или четко ограниченным исследовательским компонентом. Но исходная разработка любой системы включает фазу формирования базиса и наполнения ядра системы в терминах, которые не сводятся к ее языку. Это позволяет независимо рассматривать один еще более общий уровень — аппликативные системы, в которые можно включать любые символы с определенным смыслом. Поведение такой системы будет обусловлено набором включенных в нее символов.
Основная трудность перехода к функциональному программированию — соблазн легкого пути, т.е. стремление быстро смоделировать привычные средства и методы программирования. Более надежный путь — исследовать функциональное программирование как незнакомый мир. Идеи функционального программирования легче воспринять как самостоятельную теорию или интеллектуальную игру, которая новыми путями непременно приведет к знакомым и интересным задачам, но обеспечит преимущество — изящные решения и глубину понимания.
Джон Маккарти предложил проект языка Лисп (LISP - LISt Processing) в качестве средства исследования границ применимости компьютеров, в частности, методом решения задач искусственного интеллекта. Идеи этого языка вызвали не утихающие по сей день дискуссии о приоритетах в программировании и сущности программирования. Лисп послужил эффективным инструментом экспериментальной поддержки теории программирования и развития сферы его применения. Рост интереса к Лиспу коррелирует с улучшением элементной базы, повышением эксплуатационных характеристик оборудования и появлением новых сфер применения ИТ.
Существует и активно применяется более трехсот диалектов Лиспа и родственных ему языков: Interlisp, muLisp, Clisp, Scheme, ML, Cmucl, Logo, Hope, Sisal, Haskell, Miranda и др.
Лисп и принципы технической поддержки
История Лиспа насыщена жаркими спорами, противоречивыми суждениями, яркими достижениями и смелыми изобретениями. От первых сообщений Джона Маккарти о замысле языка символьной обработки (1958) и авторских проектов первых Лисп-систем (1960–1962) — через демонстрацию принципиальной решаемости проблем искусственного интеллекта (1964), разрешение теоретических парадоксов (1972–1974) [5], разработку признанных стандартов (1972–1980), построение специализированных диалектов и создание практичных реализаций для широкого спектра различных применений — до появления Лисп-компьютеров (1978), систем математической обработки информации (1965–1990), визуальных и сверхэффективных Лисп-систем (1992–2002) идеи Лиспа выдержали многогранную шлифовку, достойную самой высокой оценки специалистов. Написанная Дж.Вейценбаумом на Лиспе программа-собеседник "Элиза", имитирующая речевое поведение психоаналитика, дала положительный ответ на вопрос о возможности искусственного разума.
Этого более чем достаточно для того чтобы утверждать, что Лисп — гениальное творение, но тем не менее, потенциал данного языка еще предстоит раскрыть. Выразительная сила Лиспа обретает новое дыхание на каждом эволюционном витке развития информационных технологий. При сравнительном анализе информационных систем моделирование их семантики на Лиспе позволяет классифицировать функционирование по уровню сложности, зрелости, полноты, точности и организованности. Универсальность Лиспа достаточна для изучения на его основе любой парадигмы информатики ипрограммотехники. Можно сказать, что Лисп содержит в себе эталонную семантическую систему, пригодную для измерения функциональности других систем.
Информационный мир становится все более динамичным — Лисп приспособлен к программированию развивающихся построений и реорганизуемых конфигураций из разносортных компонентов. Многие реализационные находки Лиспа, такие как ссылочная организация памяти, "сборка мусора" для повторного использования памяти, частичная компиляция программ с интерпретацией промежуточного кода, полиморфизм, длительное хранение атрибутов объектов в период их использования и т.д. перекочевали из области исследований и экспериментов на базе Лиспа в практику реализации операционных систем и систем программирования.
Общеизвестно, что Лисп — язык искусственного интеллекта и исследования наукоемких и новых направлений информационной обработки. Но этим влияние Лиспане ограничено. Диалекты Лиспа (Logo, ML, MuLisp, Scheme, Hope, AutoLisp, CommonLisp, Reduce и др.) заняли обширную нишу в области учебно-экспериментального программирования , связанного с развитием теории программирования, системного программирования, разработки и прототипирования новых компьютерных комплексов и архитектур, конструирования и исследования систем построения оптимизирующих компиляторов и организации особо точных и высокопроизводительных вычислений.
Многообразие откликов на Лисп не случайно. На первый взгляд, идеи Лиспа противоречат традиционным подходам к программированию. Но это противоречие отступает перед строгой логикой языка, гармонично уравновешенной полнотой и ясностью реализационных решений. Определение Лиспа дает гибкую основу для развития, варьирования и расширения Лисп-систем средствами как самого Лиспа, так и его окружения. Объем такого определения не превышает одной страницы.
Понятийная картина Лиспа — удобный инструмент, помогающий представлять решения задач в оптимально универсальной форме, свободной от пресса как преждевременной конкретизации типов данных, так и избыточного обобщения алгоритмов при компиляции программ. На Лиспе решение задачи может быть выражено в терминах постановки задачи без привлечения реализационных сущностей и внешних интерфейсных эффектов.
Базис Лиспа предельно лаконичен — атомы и структуры из простейших бинарных узлов плюс несколько базовых функций и функционалов . Базис содержит встроенные (примитивные) функции, которые анализируют, строят и разбирают любые структурные значения ( atom, eq, cons, car, cdr ), и встроенные специальные функции и функционалы, которые управляют обработкой структур, представляющих вычисляемые выражения ( quote, cond, lambda, label, eval ). Над базисом строятся предельно простые формулы в виде круглоскобочных списков, где первый элемент — функция, остальные — ее аргументы, в том числе переменные, реализуемые с помощью разных вариантов стека или ассоциативного списка. Все остальные механизмы вычисления и преобразования формул могут сводиться к этому базису, рассматриваться как его вариант или расширение. Такой лаконизм сродни алгебре, способствующей проявлению общих закономерностей в работе с формулами над объектами разной природы. Подробнее с идеями Лиспа и его математическими основами можно ознакомиться на страницах журнала "Компьютерные инструменты в образовании", № 2–5 за 2002 год.
Синтаксис Лиспа не требует особых ресурсов для запоминания разделителей и/или ограничителей и напряженного внимания на распознавание синтаксических позиций в разных рамочных конструкциях. Универсальный разделитель — пробел, ограничители — круглые скобки. В скобки заключается представление функции с ее аргументами. Все остальное — вариации в зависимости от категории функций, определенности атомов и вычислимости выражений, типов значений и структур данных. Функционалы — это одна из категорий функций, используемая при организации управления вычислениями.
Программирование на Лисп нацелено на выделение универсальных функций и отображений, композиции которых строятся как формулы над значениями. При таком стиле малые программы над небольшими объемами данных не нуждаются в заботе о распределении памяти и преобразовании информации по конкретным адресам. Новая информация размещается в свободной памяти без неявного разрушения исходных построений. Высокий уровень представления программ на Лиспе обеспечивает их реальное абстрагирование от оборудования и практическую независимость от версии реализации и даже от диалекта языка. По современным меркам реализации Лиспа компактны и не слишком требовательны к оборудованию. Существуют свободно распространяемые версии, занимающие менее мегабайта, пригодные к применению на любом процессоре.
В нашей стране программирование мало соприкоснулось с Лиспом, хотя знакомство с языком состоялось из первых рук. Джон Маккарти в конце 1968 года познакомил Москву и Новосибирск с Лиспом, что побудило к реализации отечественных версий языка. Две реализации на БЭСМ-6 (ВЦ АН под рук. С. С. Лаврова[24] и ВЦ СО АН под руководством А. П. Ершова [25]) и одна на ЕС ЭВМ (ВЦ АН под рук. С. С. Лаврова) нашли применение в отечественных проектах по системному и теоретическому программированию, в исследованиях по математической лингвистике, искусственному интеллекту и обработке химических формул. Существовал также проект реализации на Эльбрусе (И.Н. Скопин).
В настоящее время наблюдается устойчивый рост рейтинга интерпретируемых языков программирования и включения в компилируемые языки механизмовсимвольной обработки и средств динамического анализа, что повышает интерес к Лиспу. Моделирующая сила Лиспа может послужить основой для очередного круга исследований в области компонентного программирования, формализации поведения информационных систем, разработки методов преобразования и защиты информации, высокопроизводительного программирования для суперкомпьютеров, создания прототипов систем для новых применений.
Лисп успешно работает на любом уровне абстрагирования информации от ассемблера и операционной оболочки до Internet-приложений и лингвистических интерфейсов, что подтверждает его звание подлинно универсального языка программирования, показавшего стойкую жизнеспособность и интеллектуальную практичность в широком спектре применений.
История создания и развития языка программирования ЛИСП интересна как социальный феномен осуществления замысла, вызвавшего серьезные возражения и математиков, и программистов, но показавшего удивительную живучесть. Критика теоретиков была связана с так называемой "парадоксальностью" бестиповоголямбда-исчисления. Практиков пугали накладные расходы на сборку мусора и интерпретацию в сравнении с компиляцией и статическим распределением памяти. (О наличии компилятора в традиционных Лисп-системах вспоминали редко.)
Первоначально предназначенный для символьной обработки, этот язык утвердился в качестве аналога эсперанто для задач искусственного интеллекта. К середине семидесятых годов именно на Лиспе решались наиболее сложные в практике программирования задачи из области дискретной и вычислительной математики, системного, экспериментального и теоретического программирования, лингвистики, химии, биологии, медицины и инженерного проектирования.Пример AutoCAD — система автоматизации инженерных расчетов, дизайна и комплектации изделий из доступного конструктива.
Многие созревшие на базе Лиспа решения постепенно обрели самостоятельность и развиваются как функциональный стиль программирования и фреймовый подход к представлению знаний в экспертных системах. Семейство диалектов Лиспа включает в себя уже сотни языков, популярность наиболее удачных из них резко возрастает при смене парадигм программирования. Приверженцы Лиспа ценят его за элегантность, гибкость, а, главное, за способность к точному представлению программистских идей, удобной отладке и быстрому прототипированию. Основные из этих качеств присущи функциональному программированию на любом языке. Его идеи, механизмы и принципы могут служить методической и технологической базой информационной обработки при решении любых новых или сложных задач.
Возможности языка Лисп наиболее ярко проявились при pешении задач искусственного интеллекта, пионерские решения которых удались благодаря отказу от необоснованных ограничений на спектр экспериментально-исследовательской работы. Программная поддержка таких работ потребовала большого числанетрадиционных решений и соглашений, основа которых предложена и опробована Дж. Маккарти с его коллегами и учениками в определении языка Лисп и в первых реализациях Lisp 1.0 и Lisp 1.5 [1]. Наиболее общие из них:
Унификация понятий "функция" и "значение".
При символьном представлении информации нет принципиальной разницы в природе изображения значений и функций. Следовательно, нет и препятствий для обработки представлений функций теми же средствами, какими обрабатываются значения, т.е. представления функций можно строить из их частей и даже вычислять по мере поступления и обработки информации. Именно так конструируют программы компиляторы. В замкнутых системах не принято к такой технике информационных воздействий допускать обычных пользователей. Но исследователь вынужден вникать во все уровни своего экспериментального полигона.
Кроме функций-констант, вполне допустимы функции-переменные.
Отсутствие навыков работы с функциональными переменными говорит лишь о том, что надо осваивать такую возможность, потенциал которой может превзойти наши ожидания теперь, когда программирование становится все более аспектно и компонентно ориентированным. Объектно-ориентированная парадигма в этом плане не обладает достаточной функциональной полнотой.
Самоприменимость.
Первые реализации Лиспа были выполнены методом раскрутки, причем в составе системы сразу были предусмотрены и интерпретатор, и компилятор. Оба инструмента были весьма точно описаны на самом Лиспе, причем основной объем описаний не превосходил пару страниц, что позволяло активно использовать эти описания при изучении языка и программ, написанных на нем. Этот эксперимент послужил базой для определения систем программирования с помощью так называемой "операционной семантики", получившей развитие в работах по Венской методике определения языков и систем программирования [8].
Интегральность ограничений.
Если не хватает памяти, то принципиально на всю задачу, а не на отдельные блоки данных, возможно, не слишком существенных для ее решения. При недостатке памяти специальная программа-"мусорщик" пытается найти свободную память. Новые реализации этого механизма рационально учитывают преимущества восходящих процессов на больших объемах памяти.
Уточняемость решений.
Современное применение информационных систем достаточно широко соприкасается с вариантами доступных решений, необходимостью уточнять отдельные особенности применения готовых решений и трудоемкостью анализа и поиска рационального выбора комплекта используемых средств. Реализация Лиспаобычно содержит списки свойств объектов, приспособленные к внешнему доопределению отдельных элементов поведения программируемой системы.
Множественность определений.
Наиболее концептуально полный Lisp 1.5 допускает множественные определения имен, что в рамках настраиваемой интерпретации обеспечивает кроме общеизвестного полиморфизма более общие схемы обработки ряда версий или вариантов функциональных построений.
Расхожее мнение о неэффективности Лиспа столь же убедительно, сколь актуальное когда-то рассуждение о бесполезности интеллигентов, некачественно собирающих колхозную картошку. Как авиация не соревнуется с автотранспортом в объеме грузоперевозок, так и функциональное программирование несравнимо со стандартными парадигмами в массовости применения, но это не умаляет его достоинств.
Столь же расхожее утверждение, что функциональный стиль программирования на Лиспе обеспечивает ясность программ, требует поправки, что больше для тех кто пишет, чем для тех, кто читает. (При стихийно-алгоритмическом стиле программист часто не ведает, что же делает его программа — утрата единства замысла).
Многие современные языки и технологии программирования унаследовали опыт реализации и применения Лиспа и других языков символьной обработки. Так, например, Java берет на вооружение идеи неполной компиляции и освобождения памяти, объектно-ориентированное программирование реализует объекты, весьма похожие на списки свойств атомов Лиспа, хэш-таблицы языка Perl напоминают применение ассоциативных списков Лиспа. Python обрабатывает программы с нетипизированными переменными. Лисповское наследие в информатике достойно отдельного рассмотрения. Здесь мы сконцентрируемся на ключевой идее Лиспа — сведении понятия "программа" к взаимодействию разных категорий функций. Базирующееся на таком сведении функциональное программирование можно описать в терминах любого языка, но Лисп дает этой идее достаточно полное звучание и формирует некую шкалу сравнения и определения стандартных конструкций и методов программирования, а также упорядочение явлений, характерных для экспериментальной разработки программ и поиска новых областей их применения.
Понятие о логическом программировании
В основе логического программирования лежит представление алгоритма в виде логического выражения. При этом алгоритм решения задачи описывает не способ решения задачи, а наше представление о том, что мы понимаем под правильным решением задачи. Пусть Factorial f , n представляет решение задачи о нахождении факториала целого положительного числа n . В этом случае предикат Factorial принимает значение «истина» если f является факториалом n и «ложь» в противном случае. Например:
Factorial(120, 5) -> true
Factorial(17, 4) -> false
На языке программирования PROLOG определение факториала выглядит следующим образом:
Factorial(1, 0) :- .
Factorial(F, N) :- Factorial(F1, N1), N is N1+1, F is N*F1.17.11.09 В данном случае мы определяем, что предикат Factorial должен иметь значение «истина» при значениях аргументов f =1 и n=0 . При других значениях f и n функция Factorial примет значение «истина» лишь в том случае, если Factorial будет «истина» и одновременно будут справедливы соотношения n=n11 и f =n∗f1 .
Таким образом наше понимание того, что будет правильным значением факториала мы определили через комбинацию некоторых утверждений других предикатов.
Ещё один пример:
Sum(0, 0) :- .
Sum(S, N) :- Sum(S1, N1), N is N1+1, S is N*S1.
В дальнейшем мы покажем, что приведённое определение факториала и другие программы на языке программирования PROLOG могут быть представлены в виде выражений математической логики.
Написание и использование программ на языке PROLOG состоит из следующих этапов:
1. Объявление некоторых фактов об объектах и отношениях между ними.
Factorial(1, 0) :- .
Sum(0, 0) :- .
2. Определение некоторых правил об объектах и отношениях между ними. Правила
определяются через факты и другие правила.
Factorial(F, N) :- Factorial(F1, N1), N is N1+1, F is N*F1.
Sum(S, N) :- Sum(S1, N1), N is N1+1, S is N*S1.
3. Формулировки вопросов об объектах и отношениях между ними.
?- Factorial(120, 5).
?- Sum(17, 5).
Факты — утверждения которые всегда истины.
Правила — утверждения, истинность которых зависит от истинности других
утверждений.
Вопросы — формирование запросов системе PROLOG относительно истинности
утверждений.
Работу в системе PROLOG можно понимать следующим образом: факты и правила
формируют некоторую базу, а вопрос приводит к поиску в этой базе информации
относительно истинности утверждений. Так запрос об истинности утверждения
?- Factorial(120, 5).
true
не противоречит введённым ранее фактам и правилам и приводит к соответствующему
ответу системы. Напротив, запрос
?- Factorial(10, 5).
false
не соответствует имеющимся сведениям о функции факториал.
Если в вопросе вместо конкретного значения аргумента мы укажем имя переменной, то система попытается подобрать такое значение переменной, чтобы утверждение в запросе
было истинным:
?- Factorial(X, 5).
X = 120
Так как в утверждениях и правилах нет явной разницы между входными и выходными
данными задачи, то мы можем также сформулировать вопрос — какое число имеет
значение факториала равное 120:
?- Factorial(120, X).
X = 5
и получить соответствующий результат, или не получить:
?- Factorial(100, X).
false
Таким образом, мы имеем возможность находить решение как прямой (по входным
данным получать выходные) так и обратной задачи (по известным выходным данным
находить соответствующие значения входных данных). Более того, в ответ на вопрос
?- Factorial(X, Y).
X = 1, Y = 0
X = 1, Y = 1
X = 2, Y = 2
X = 6, Y = 3
X = 24, Y = 4
. . .
система попытается найти все возможные пары значений переменных X и Y
обращающих в «истину» предикат Factorial X , Y .
3. Пример: символьное дифференцирование.
В соответствии с правилами дифференцирования:
dif(X, X, 1) :- !.
dif(C, X, 0) :- atomic(C).
dif(U+V, X, A+B) :- dif(U, X, A), dif(V, X, B).
dif(U-V, X, A-B) :- dif(U, X, A), dif(V, X, B).
dif(C*U, X, C*A) :- atomic(C), C\=X, dif(U, X, A)!.
dif(U*V, X, U*B+A*V) :- dif(U, X, A), dif(V, X, B).
Экспертные системы
Искусственный интеллект, как научная дисциплина, состоит из нескольких крупных течений. Одно из них – экспертные системы.
Экспертные системы
это направление исследований в области искусственного интеллекта по созданию вычислительных систем, умеющих принимать решения, схожие с решениями экспертов в заданной предметной области.
Как правило, экспертные системы создаются для решения практических задач в некоторых узкоспециализированных областях, где большую роль играют знания «бывалых» специалистов. Экспертные системы были первыми разработками, которые смогли привлечь большое внимание к результатам исследований в области искусственного интеллекта.
Экспертные системы имеют одно большое отличие от других систем искусственного интеллекта: они не предназначены для решения каких-то универсальных задач, как например нейронные сети или генетические алгоритмы. Экспертные системы предназначены для качественного решения задач в определенной разработчиками области, в редких случаях – областях.
Экспертное знание – это сочетание теоретического понимания проблемы и практических навыков ее решения, эффективность которых доказана в результате практической деятельности экспертов в данной области. Фундаментом экспертной системы любого типа является база знаний, которая составляется на основе экспертных знаний специалистов. Правильно выбранный эксперт и удачная формализация его знаний позволяет наделить экспертную систему уникальными и ценными знаниями. Врач, к примеру, хорошо диагностирует болезни и эффективно назначает лечение, не потому, что он обладает некими врожденными способностями, а потому что имеет качественное медицинское образование и большой опыт в лечении своих пациентов. Поэтому ценность всей экспертной системы как законченного продукта на 90% определяется качеством созданной базы знаний.
Экспертная система – это не простая программа, которая пишется одним или несколькими программистами.
Экспертная система
является плодом совместной работы экспертов в данной предметной области, инженеров по знаниям и программистов.
Но стоит отметить, что встречаются случаи, когда программы пишутся самими экспертами в данной области.
Эксперт предоставляет необходимые знания о тщательно отобранных примерах проблем и путей их решения. Например, при создании экспертной системы диагностики заболеваний врач рассказывает инженеру по знаниям об известных ему заболеваниях. Далее эксперт раскрывает список симптомов, которые сопровождают каждое заболевание и в заключение рассказывает об известных ему методах лечения. Инженер по знаниям, формализует всю полученную информацию в виде базы знаний и помогает программисту в написании экспертной системы.
Первую экспертную систему, которую назвали Dendral, разработали в Стэнфорде в конце 1960-х г.г. Эта была экспертная система, определяющая строение органических молекул по химическим формулам и спектрографическим данным о химических связях в молекулах. Ценность Dendral заключалась в следующем. Органические молекулы, как правило, очень велики и поэтому число возможных структур этих молекул также велико. Благодаря эвристическим знаниям экспертов-химиков, заложенных в экспертную систему, правильное решение из миллиона возможных находилось всего за несколько попыток. Принципы и идеи, заложенные в Dendral оказались настолько эффективными, что они до сих пор применяются в химических и фармацевтических лабораториях по всему миру.
Экспертная система Dendral одной из первых использовала эвристические знания специалистов для достижения уровня эксперта в решении задач, однако методика современных экспертных систем связана с другой разработкой – Myсin. В ней использовались знания экспертов медицины для диагностики и лечения специального менингита и бактериальных инфекций крови.
Экспертная система Mycin, разработанная в том же Стэнфорде в середине 1970-х г.г., одной из первых обратилась к проблеме принятия решений на основе ненадежной или недостаточной информации. Все рассуждения экспертной системы Mycin были основаны на принципах управляющей логики, соответствующих специфике предметной области. Многие методики разработки экспертных систем, использующиеся сегодня, были впервые разработаны в рамках проекта Mycin.
На сегодняшний день создано уже большое количество экспертных систем. С помощью них решается широкий круг задач, но исключительно в узкоспециализированных предметных областях. Как правило, эти области хорошо изучены и располагают более менее четкими стратегиями принятия решений. Сейчас развитие экспертных систем несколько приостановилось, и этому есть ряд причин:
Передача экспертным системам «глубоких» знаний о предметной области является большой проблемой. Как правило, это является следствием сложности формализации эвристических знаний экспертов.
Экспертные системы неспособны предоставить осмысленные объяснения своих рассуждений, как это делает человек. Как правило, экспертные системы всего лишь описывают последовательность шагов, предпринятых в процессе поиска решения.
Отладка и тестирование любой компьютерной программы является достаточно трудоемким делом, но проверять экспертные системы особенно тяжело. Это является серьезной проблемой, поскольку экспертные системы применяются в таких критичных областях, как управление воздушным и железнодорожным движением, системами оружия и в ядерной промышленности.
Экспертные системы обладают еще одним большим недостатком: они неспособны к самообучению. Для того, чтобы поддерживать экспертные системы в актуальном состоянии необходимо постоянное вмешательство в базу знаний инженеров по знаниям. Экспертные системы, лишенные поддержки со стороны разработчиков, быстро теряют свою востребованность.
В заключение стоит отметить, что несмотря на все эти ограничения и недостатки, экспертные системы уже доказали всю свою ценность и значимость во многих важных приложениях.