Обобщение на основе объяснения
Идея обобщения на основе объяснения впервые была реализована в области машинного обучения, целью которого является обобщение заданных примеров в виде общих описаний рассматриваемых понятий. Одним из способов формирования таких описаний является обобщение на основе объяснения (Explanation-Based Generalization - EBG), при котором обычно используется только один пример. Малое количество примеров компенсируется за счет применения в системе фоновых знаний, которые, как правило, именуются теорией проблемной области.
Способ EBG основан на использовании при формировании обобщенных описаний следующей идеи: если дан некоторый экземпляр целевого понятия, то можно воспользоваться теорией проблемной области для объяснения того, как этот экземпляр фактически удовлетворяет данному понятию. Затем анализируется это объяснение и предпринимается попытка обобщить его таким образом, чтобы оно подходило не только для заданного экземпляра, но и для множества "аналогичных" экземпляров. Затем такое обобщенное объяснение становится частью описания рассматриваемого понятия и может в дальнейшем использоваться при распознавании экземпляров этого понятия. Кроме того, требуется, чтобы формируемое описание понятия было операционным; это означает, что оно должно быть сформулировано в терминах понятий, объявленных пользователем как операционные. Интуитивно можно себе представить, что описание понятия является операционным (определяющим некоторую операцию), если его можно (относительно) легко использовать на практике. Задача определения того, что подразумевается под словом "операционный", полностью возлагается на пользователя.
В реализации метода EBG эти абстрактные идеи должны были стать более конкретными. Один из способов их реализации в логике языка Prolog состоит в следующем.
• Понятие реализуется в качестве предиката,
• Описание понятия представляет собой определение предиката.
Часть II. Применение языка Prolog в области искусственного интеллекта
• Объяснением является дерево доказательства, которое демонстрирует, как заданный экземпляр удовлетворяет целевому понятию.
• Теория проблемной области представлена в виде множества доступных предикатов, определенных как программа Prolog.
Б таком случае задача обобщения на основе объяснения может быть сформулирована, как описано ниже.
Дано
• Теория проблемной области. Множество предикатов, доступное для механизма обобщения на основе объяснения, включая целевой предикат, для которого должно быть сформировано операционное определение.
• Критерии оиерационкости. Эти критерии определяют предикаты, которые могут использоваться в определении целевого предиката.
• Учебный пример. Множество фактов, описывающих конкретную ситуацию и экземпляр целевого понятия таким образом, чтобы этот экземпляр мог быть получен путем логического вывода из заданного множества фактов и теории проблемной области.
Найти
Я Обобщение учебного экземпляра и операционное определение целевого понятия; это определение состоит из достаточного условия (в терминах операционных предикатов) для данного обобщенного экземпляра, при котором удовлетворяется целевое понятие.
Метод обобщения на основе объяснения в такой постановке может рассматриваться как своего рода компиляция программы с преобразованием из одной формы в другую. Первоначальная программа определяет целевое понятие в терминах предикатов теории проблемной области. Откомпилированная программа определяет то же целевое понятие (или подпонятие) в терминах "целевого языка", т.е. только с помощью операционных предикатов. Механизм компиляции, предусмотренный в методе EEG, является довольно необычным. Он предусматривает выполнение первоначальной программы на заданном примере, что приводит к получению дерева доказательства. Затем это дерево доказательства обобщается таким образом, что сохраняется его структура, но постоянные заменяются переменными при любой возможности. В полученном таким образом обобщенном дереве доказательства некоторые узлы указывают на операционные предикаты. Затем дерево сокращается так, что остаются только эти "операционные узлы" и корень. Полученный результат представляет собой операционное определение целевого понятия.
Это описание проще всего проиллюстрировать на примере практического применения метода EBG. В листинге 23.3 приведены два определения теорий проблемной области для EBG. Первая теория проблемной области касается вручения подарка, а вторая описывает движения лифта. Рассмотрим первую проблемную область. Допустим, что учебный экземпляр состоит в следующем: % Дж он аручает сам себе шоколад (разрешает себе егс съесть) gives( John, John, chocolate)
Листинг 23.3. Два определения задач для обобщения на основе объяснения
% Для совместимости с некоторыми реализациями Prolog следующие предикаты % определены как динамические:
:- dynamic gives/3, would_please/2, would_comfort/2, feels_sorry_for/2, go/3, move/2, move_list/2.
$ теория проблемной области, которая относится к теме вручения подарков
Глава 23. Металрограммирование
gives( Personl, ?erson2, Gift) :-likes( Personl,Person2), would_please( Gift, Person21.
gives( Personl, Persan2, Gift,- :-feels_sorry_for( Personl, Person2), would_coinfort [ Gift, Person2) .
wauld_please( Gift, Person) : -
neecis ( Person, Gift) .
1 would_comfort( Gift, Person) :-
likes[ Person, Gift) .
feels_sorry_for{ Personl, Person2) : -likes ( Personl, Perso:i2) , sad{ Person2).
feels_sorry_for( Person, Person) :-sad( Person;.
i Операционные предикаты
operational{ likes( _, _)) . operational! needs( _, _)) . operati.cr.al ( sad [ _) ) .
Щ Пример проблемной ситуация
likes( John, annie) . likes( annie, John). likes! John, chocolate;, needs( annie, tennis_racket).
sad{ John) .
% Еще одна теория проблемной области, применяемая для описания движений .тифта
i go( Level, GoalLevel, Moves) если
список движений Moves перезолит лифт с этажа Level на этаж GoalLevel
go! Level, GoalLevel, Moves) :-
ncve_list( Moves, Distance!, % Список движений и пройденное расстояние
Distance -:- GoalLevel - Level.
move_list( [] , 0) .
move_list( [Mbvel IMoves], Distance + Distance 1) : -move_list( Moves, Distance), move( Movel, Distancel).
move[ up, 1) . move( down, -1) .
operational! A =:= B) .
В результате выработки доказательства рассматриваемый метаинтерпретатор находит следующее доказательство обоснованности выполненного действия: gives ( John., John, chocolate) <= ( feels_sorry_for{ John, John) <= = sad( John), % Джону стало жалко самого себя,
% поскольку ему грустно, would_comfort{ chocolate, John) <== likes( John, chocolate) % и Джону будет
$ приятно, поскольку он любит шоколад 3
Часть II. Применение языка Prolog в области искусственного интеллекта
Это доказательство может быть обобщено путем замены постоянных John и chocolate переменными следующим образом:
gives( Person, Person, Thing! <== % Человек вручает себе какую-то вещь, если ( feels soi:ry for( Person, Person) <-- sad( Person), I человеку жалко сеОя,
% потому что ему грустно, would^comfort( Thing, Person! <== likes[ Person, Thing) % и человеку Судет
% приятно, поскольку ему нравится эта вешь ) В листинге 23.3 предикаты sad (грустит) и likes (любит) определены как операционные. Теперь может быть получено операционное определение предиката gives путем удаления из дерева доказательства всех узлов, кроме узлов, указанных как "операционные", и корневого узла. Это приводит к получению такого результата:
gives( Person, Person, Thing) <-- % Человек вручает себе какую-то вещь,
( sad[ Person), % если ему грустно
likes [ Person, Thing ) $ и ему нравится эта вещь
)
Таким образом, достаточное условие Condition для предиката gives ( Person, Person, Thing) состоит в следующем: Condition « ( sad( Person), likes( Person, Thing))
Теперь это новое определение можно ввести в первоначальную программу, как показано ниже. asserta ( ( gives( Person, Person, Thing) :- Condition))
В результате получено следующее новое предложение, касающееся предиката gives, для которого требуется оценка только операционных предикатов:
gives( Person, Person, Thing) :-sad( Person) , likes( Person, Thing).
Благодаря обобщению заданного экземпляра gives { John, John, chocolate) было сформировано определение (в операционных терминах) как один из общих случаев применения предиката gives для описания одного из способов самоутешения! Еще одним случаем применения такого понятия может служить результат, полученный на основании следующего примера: gives; John, armie, tennis_racket). % Джон вручает Энки теннисную ракетку
В данном случае метод обобщения на основе объяснения приводит к получению такого предложения:
gives[ Personl, Person2, Thing) :- 4 Один человек вручает другому вещь,
likest Personl, Person2), % если он любит э?ого человека,
needs( Person2, Thing]. i а последнему требуется эта вещь
Проблемная область с описанием движений лифта, приведенная в листинге 23.3, является немного более сложной, поэтому проведем с ней эксперименты после реализации метода EBG на языке Prolog.
Метод EBG можно запрограммировать как двухэтапный процесс: на первом этапе вырабатывается дерево доказательства для данного примера, а на втором это дерево доказательства обобщается и из него извлекаются "операционные узлы". Для этой цели можно применить описанный выше метаинтерпретатор, который формирует деревья доказательства. Но фактически эти два этапа не требуются. Более удобный способ состоит в том, чтобы откорректировать простой метаинтерпретатор, приведенный в листинге 23.1, таким образом, чтобы операции обобщения чередовались с операциями доказательства заданного экземпляра. Модифицированный подобным образом метаинтерпретатор, который реализует рассматриваемый метод EBG, будет именоваться ebg и теперь будет иметь три параметра: ebg( Goal, GenGoal, Condition)
где Goal - заданный пример, который должен быть доказан, GenGoal - обобщенная цель. Condition — полученное путем логического вывода достаточное условие
Глава 23. Метапрограммирование
для GenGoal, сформулированное в терминах операционных предикатов. Такой обобщающий метаинтерпретатор приведен в листинге 23.4. Для проблемной области с описанием процесса получения подарков {см. листинг 23.3) метаинтерпретатор ebg может быть вызван следующим образом:
?- ebg( gives! John, John, chocolate), gives! X, Y, Z) , Condition]. x = Y Condition - ( sacl( X), likes ( X, Z) )