Скачиваний:
40
Добавлен:
01.05.2014
Размер:
550 Кб
Скачать
☆

14.4. Классические интеллектуальные программы: analogy, eliza и McSam

Современные учителя часто прибегают к штампу: «Лучший способ изучить предмет - учить его». По аналогии современные программисты могут сказать, что лучший способ понять программу-написать ее заново. Признавая этот тезис, представим логические реконструкции трех программ, созданных в процессе исследований по искусственному интеллекту. В этих программах легко разобраться и произвести в них желаемые изменения. В упражнениях к разделу читателю предлагается добавить к этим программам новые факты и правила.

Итак, рассмотрим следующие три программы: программу ANALOGY, разработанную Эвансом для решения задач на геометрические аналогии из тестов для оценки умственных способностей; программу ELIZA, созданную Вейценбаумом, которая имитирует или, скорее, пародирует беседу; программу McSAM (версия программы SAM; Me-сокращение от micro), разработанную группой исследования систем обработки концептуальной информации в Йельском университете и предназначенную для «понимания» сюжетов. Каждая из этих логических реконструкций записывается на Прологе весьма просто. Благодаря недетерминизму программ Пролога программисту не приходится заниматься организацией поиска решений.

Рассмотрим, в чем заключаются задачи на геометрические аналогии, которые обычно используют для испытания умственных способностей. В каждой задаче такого рода предлагается несколько фигур. На рис. 14.6 представлен вариант простой задачи на отыскание геометрических аналогий. Часть фигур (на рисунке-нижний ряд)-возможные ответы. Используя фигуры А, В и С и фигуры. представляющие собой варианты решений, следует дать ответ на вопрос: «Фигура А относится к фигуре B, как фигура С относится к ... «К какой фигуре? Ответ надо выбрать из трех вариантов решений в нижнем ряду».

Интуитивные представления позволяют записать следующий алгоритм для решения этой задачи (такие понятия, как «найти», «применить» и «правило», здесь не описаны):

найти правило, определяющее связь фигур A и B,

применить это правило к фигуре С, чтобы перейти к фигуре X,

найти среди ответов фигуру Х или ее ближайший эквивалент.

В рассматриваемой задаче (см, рис. 14.6) связь фигуры А с фигурой В определяется обменом местами (с соответствующим изменением масштабов) изображений квадрата и треугольника. «Очевидный» ответ для фигуры С - обмен местами изображе-

Рис. 14.6. Задача на геометрические аналогии.

ний квадрата и круга. Соответствующая фигура имеет в нижнем ряду номер 2.

Программа 14.18 предназначена для решения простых задач на геометрические аналогии. Ее основным отношением является отношение analogy (Pair l,Pair2, Answers). в котором каждая пара Pair представляется формой X is_to Y. В программе, конечно, должно быть дано определение инфиксному оператору is_to. Элементы пары Pair1 находятся в таком же отношении, как и элементы пары Pair2, а второй элемент пары Pair2 принадлежит множеству ответов Answers. Следующее определение отношения analogy соответствует приведенному выше интуитивному алгоритму:

analogy(A is. to В, С is .to X, Answers)

match (А, В, Operation), match(C.X,Operation),member(X, Answers).

Большое значение имеет выбор способа представления фигур в рассматриваемой задаче. Этот выбор оказывает существенное влияние на «интеллектуальность» программы. В программе 14.18 фигуры представлены термами Пролога. Напри­мер, фигура А на рис. 14.16-квадрат в треугольнике-представляется термом inside (square,triangle).

Связь между фигурами отыскивается с помощью предиката match (А. В,Operation). Это отношение истинно, если операция Operation сопоставляет А и В. Для решения рассматриваемой задачи применяется операция invert, которая ооеспечи-вает обмен местами ее аргументов.

analogy( Pair I, Pair2. Answers)

Существует аналогия между двумя парами геометрических фигур Pair1 и Pair2. Второй элемент в паре Pair2-один из элементов списка возможных ответов Answers.

analogy (A is_to В, С is_to X, Answers) 

match(A,B,Rule),

match(C,X,Rule),

member (X, Answers).

match (inside (Figure I, Figure 2),

inside(Figure2,Figurel),invert).

match(above(Figurel,Figure2),

above(Figure2,Figurel),invert),

Программа 14. 18. Программа для нахождения геометрических аналогий.

Предложения и данные для тестирования

test_analogy(Name,X) 

figures(Name. А, В, С),

answers(Name, Answers),

ana1ogy(A is_to B,C is_to X.Answers).

figures(test1 ,inside(square,triangle),

inside(triangle, square),

inside(circle,square)).

answers(test1,[inside(circle,triangle),

inside(square,circle),

inside(triangle, square)]).

Программа 14.19. Тестовые данные для программы решения задач на геометрические аналогии.

Предикат match в программе 14.18 используется двояко. В первом случае с его помощью производится сопоставление двух данных фигур. Во втором случае для заданных операции и фигуры подбирается вторая фигура. Однако эти детали несущественны для недетерминированного поведения программы. Наконец, с помощью предиката member проверяется, принадлежит ли данная фигура множеству ответов.

Теперь рассмотрим следующий классический пример программы из области искусственного интеллекта - упрощенную версию программы ELIZA. Эта программа предназначена для имитации беседы. Пользователь печатает предложение, а программа ELIZA отвечает либо соответствующим вопросом, либо комментарием. На самом деле ELIZA не понимает смысла вводимых предложений, а лишь распознает словесные шаблоны и реагирует на них подходящими шаблонными ответами. Чтобы сделать шаблоны ответов более достоверными, при их формировании учитываются психологические аспекты ведения беседы. Пример ведения беседы с программой ELIZA дан в виде протокола интерактивного взаимодействия, представленного на рис. 14,7. Ответам компьютера предшествует знак ».

I am unhappy.

Я опечален.

» How long have you been unhappy.

Сколько времени длится Ваша печаль.

Six months. Can you help me.

Шесть месяцев. Не могли бы Вы мне помочь.

» What makes you think I help you.

Как Вы думаете, чем я могу помочь Вам.

You remind me of my father and brother.

Вы напоминаете мне отца и брата.

» Can you tell me more about father.

Могли бы Вы рассказать мне подробнее об отце.

I like teasing father.

Я люблю дразнить отца.

» Does anyone else in your family like teasing father.

Любит ли кто-нибудь еще в Вашей семье дразнить отца.

No, only me.

Нет, только я.

» Please, go on.

Продолжайте, пожалуйста.

Рис. 14.7. Пример беседы с программой ELISA.

Центральной частью программы ELIZA является процедура для сопоставления входного предложения с шаблоном. Полученная в результате сопоставления пара применяется к другому шаблону для определения ответа программы. Пара шаблонов может рассматриваться как пара стимул/отклик; входное предложение сопо­ставляется со стимулом, а ответ генерируется с использованием отклика. Типичной парой стимул/отклик является пара:

I am <утверждение>

How long have you been <утверждение>?

При использовании этой пары ответом программы на входное заявление "I am unhappy" будет вопрос "How long have you been unhappy?" Элемент предложения <утверждение> может рассматриваться как поле в формате ответа, подлежащее заполнению.

Программа 14.20-простая версия программы ELIZA. В ней реализуется сле­дующий алгоритм:

считать входное предложение.

пока поступают входные данные,

выбрать пару стимул/отклик,

сопоставить входное предложение со стимулом,

генерировать ответ с использованием отклика и

результата сопоставления на предыдущем шаге,

выдать ответ,

считать следующее входное предложение.

Пары стимул/отклик представляются фактами вида pattern (Stimulus, Response), где и стимул Stimulus, и отклик Response являются списками слов и полей. Поля в шаблонах представляются целыми числами. Предикат match(Pattern, Table, Words) используется на втором и третьем шагах приведенного выше алгоритма. Он выражает связь между шаблоном Pattern, списком слов Words и таблицей Table, в которую производится запись при заполнении полей шаблона. Центральную роль в процедуре match играет недетерминированное использование предиката append для разбиения списка слов. Таблица представляется неполной структурой данных; такие структуры данных будут более подробно изучаться в следующей главе. Текст процедуры lookup/3 будет дан в разд. 15.3. Ответ генерируется процедурой reply (Words) - вариантом процедуры written, который обеспечивает печать пробелов между словами.

Последней в этом разделе рассматривается программа MicroSAM, или McSAM. Она представляет собой упрощенную версию программы SAM (Script Аррlieг Mechanism), разработанную в группе, проводящей исследования в области «пони­мания» естественных языков с помощью ЭВМ в Йельском университете. Цель программы McSAM-«понимать» сюжеты. По данному сюжету с помощью про­граммы McSAM находится подходящий сценарий и осуществляется сопоставление отдельных событий сюжета с шаблонами сценария. В этом процессе сценарий пополняется событиями, явно не упоминаемыми в сюжете.

Для представления сюжета и сценария используется теория концептуальной зависимости, развитая Р. Шенком. Рассмотрим, например, сюжет на рис. 14.8, он используется для примера в нашей версии программы McSAM. Сюжет, записанный на английском языке,

"John went to Leones, ate a hamburger and left"

представляется в программе в виде списка списков:

[[ptrans,john,john,X1,leonesJ,

[ingest, Х2, hamburger, X3], [ptrans,Aclor,Actor,X4,X5]].

eliza

Имитирует беседу с использованием побочных эффектов.

eliza  read_word_1ist(Input), eliza(Input),!.

eliza([bye])  writeln(['Goodbye-1 hope 1 have helped you']). eliza(Input) 

pattern(Stimulus, Response),

match(Stimulus, Dictionary, Input),

match(Response, Dictionary, Output),

reply(Output),

read_word_list(Input1),

!,eliza(Inputl).

match(Pattern. Dictionary, Words)

Шаблон Pattern сопоставляется со списком слов Words, результат сопоставления записывается в словарь Dictionary.

match([N | Pattern],Dictionary, Target) 

integer(N), lookup(N, Dictionary, LeftTarget),

append (LeftTarget, RightTarget, Target),

match (Pattern, Dictionary, RightTarget).

match ([Word | Pattern], Dictionary, [Word | Target]) 

atom (Word),match(Pattern,Dictionary,Target).

match([ ], Dictionary, [ ]).

lookup(Key, Dictionary, Value) См. программу 15.8.

pattern (Stimulus, Response) 

Response - шаблон ответа, соответствующий шаблону Stimulus.

pattern([i,am,1], [how, long, have, you, been, 1,?]),

pattern([l, you, 2, me], [what, makes, you, think, i,2,you,?]).

pattern([i, like, l],[does, anyone, else, in, your, family, like, l,?]).

pattern ([i, feel,!], [do, you, often, feel, that, way,?]).

pattern([l,X,2],[can, you, tell, me, more, about, X])  important(X).

pattern([l],[please, go, on]).

important (father). important (mother).

important (son). important (sister).

important (brother). important (daughter).

reply([Head | Tail]) write(Head),write(' '), reply(Tail).

reply([ ])nl

read_word_list(Xs)  См. программу 12.2.

Программа 14.20. Программа ELIZA.

Первый элемент каждого списка, например ptrans или ingest- термин из теории концептуальной зависимости. Выбор представления сюжета в виде списка списков - дань первоначальной версии этой программы, написанной на Лиспе.

Программа McSAM легко записывается на Прологе (см. программу 14.21). Отношение верхнего уровня в этой программе mcsam (Story, Script) обеспечивает развитие некоторого сюжета Story в ее «понятный» эквивалент относительно подходящего сценария Script. Сценарий ищется посредством предиката find (Story, Script, Defaults). Текст сюжета просматривается для отыскания устойчивого аргумента. который инициирует имя соответствующего сценария. В нашем примере Джон

mcsam (Story,Script)

Сценарий Script описывает сюжет Story.

mcsam (Story, Script) 

find(Slory,Script, Defaults),

match,(Script, Story),

name._defaults(Defaults).

find (Story, Script, Defaults) 

filler(Slot, Story).

frigger(Slot,Naine),

script (Name, Script, Defaults).

match (Script,Story)

Сюжет Story является подпоследовательностью сценария Script.

match(Script,[ ]).

match([Line | Script], [Line | Story])  match (Script, Story).

match([Line | Script], Story)  match (Script, Story).

filler (Slot, Story)

Slot- некоторое слово в сюжете Story.

filler(Slot, Story) 

member([Action | Args], Story),

member(Slot, Args).

name_defaults (Defaults)

Унифицирует пары по умолчанию в Defaults.

name_defautts([ ]).

name_defaults([[N,N] | L])  name_defaults(L).

name_defaults([[Nl,N2] | L])  Nl  N2,name_defaults(L).

Программа 14.21. Программа McSAM,

Соседние файлы в папке prolog14_end