Назад | Содержание| Вперёд 14. 4. Разработка оболочки Если мы пос...

Назад | Содержание| Вперёд

14. 4.    Разработка оболочки

Если мы посмотрим на правила наших двухмаленьких баз знаний рис. 14.5 и 14.7, мы сразу увидим,что они по своему смыслу эквивалентны правиламПролога. Однако, с точки зрения синтаксисаПролога, эти правила в том виде, как они написаны,соответствуют всего лишь фактам. Для того, чтобызаставить их работать, самое простое, что можетприйти в голову, это переписать их в виденастоящих прологовских правил. Например:

        Животное этомлекопитающее :-

               Животное имеет шерсть;

               Животное 'кормит детенышей' молоком.

        Животное это хищник:-

               Животное это млекопитающее,

               Животное ест мясо.

        . . .

Теперь эта программа сможет подтвердить, чтотигр по имени Питер - это действительно тигр, еслимы добавим в нее некоторые из свойств Питера (ввиде прологовских фактов):

        питер имеет шерсть.

        питер ленив.

        питер большой.

        питер имеет'рыжевато-коричневый цвет'.

        питер имеет 'черныеполосы'.

        питер ест мясо.

Тогда мы можем спросить:

        ?-  питер это тигр.

        yes

        ?-  питер этогепард.

        no

Хотя пролог-система и отвечает на вопросы,используя для этого нашу базу знаний, нельзясказать, что ее поведение вполне соответствуетповедению эксперта. Это происходит по крайнеймере по двум причинам:

(1)        Мы не можем попроситьсистему объяснить свой ответ; например, какона установила, что Питер это тигр, и почемуПитер это не гепард.

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

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

        Пожалуйста,спрашивайте:

        питер это тигр.

        Это правда: питеримеет шерсть?

        да.

        Это правда: питер естмясо?

        нет.

        Это правда: питеримеет острые зубы?

        да.

        Это правда: питеримеет когти?

        почему.

        Чтобы проверить поправ3, что питер это хищник,

        Чтобы проверить по прав5,что питер это тигр

        Это был ваш вопрос

        Это правда: питеримеет когти?

        да.

        Это правда: питеримеет глаза, направленные вперед?

        да.

        Это правда: питеримеет рыжевато-коричневый цвет?

        да.

        Это правда: питеримеет черные полосы?

        да.

        (питер это тигр) этоправда

        Хотите узнать, как?

        да.

        питер это тигр

          было выведено поправ5 из

            питер этохищник,

              быловыведено по прав3 из

               питер это млекопитающее

                 было выведено по прав1 из

                   питер имеет шерсть

                     было сказано

               и

               питер имеет острые зубы

                 было сказано

               и

               питер имеет когти

                 было сказано

               и

               питер имеет глаза, направленные вперед

                 было сказано

            и

            питер имеетрыжевато-коричневый цвет

              былосказано

            и

            питер имеетчерные полосы

              былосказано

Как видно из диалога, система задаетпользователю вопросы, касающиеся"примитивной" информации, например:

        Это  правда:  питер  ест  мясо?

Эту информацию нельзя отыскать в базе знанийили вывести из другой информации. На подобныевопросы пользователь может отвечать двумяспособами:

(1)        сообщив системе вкачестве ответа на вопрос необходимуюинформацию или

(2)        спросив систему, почемуэта информация необходима.

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

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

14. 4. 1.    Процесс рассуждений

Наш интерпретатор будет принимать вопрос иискать на него ответ. Язык правил допускает,чтобы в условной части правила была И /ИЛИ-комбинация условий. Вопрос на входеинтерпретатора может быть такой же комбинациейподвопросов. Поэтому процесс поиска ответов наэти вопросы будет аналогичен процессу поиска в И/ ИЛИ-графах, который мы обсуждали в гл. 13.

Ответ на заданный вопрос можно найтинесколькими способами в соответствии соследующими принципами:

Для того, чтобы найти ответ  Отв  навопрос  В,  используйте одну изследующих возможностей:

если  В  найден в базе знаний в виде факта, то  Отв  -  это "В  это правда"

если в базе знаний существует правило вида

        "если  Условие   то  В",

то для получения ответа  Отв   рассмотрите  Условие

если вопрос В  можно задавать пользователю, спросите пользователя об истинности В

если в имеет вид  В1  и  В2,  то рассмотрите  В1,  а затем,

        если  В1  ложно, то положите  Отв  равным  "В   это ложь",  в противном случае рассмотрите  В2  и получите  Отв   как соответствующую комбинацию ответов на вопросы  В1  и  В2

если  В  имеет вид  В1  или  В2,   то рассмотрите  В1,  а затем,

        если  В1   истинно, то положите  Отв  равным   "В1 это правда",  в противном случае рассмотрите  В2  и получите  Oтв   как соответствующую комбинацию ответов на вопросы  В1  и  В2.

Вопросы вида

        не  В

обрабатываются не так просто, и мы обсудим ихпозже.

14. 4. 2.    Формирование ответа навопрос "почему"

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

        а - это правда?

В ответ пользователь может спросить:

        почему?

Объяснение в этом случае выглядит примерно так:

        Потому, что

        Я могу использовать   а,

               чтобы проверить по правилу  Па, что  b,   и

        Я могу использовать  b,

               чтобы проверить по правилу  Пb, что  с,   и

        Я могу использовать  с,

               чтобы проверить по правилу  Пc, что  d,   и

        . . .

        Я могу использовать  y,

               чтобы проверить по правилу  Пy, что  z,   и

        z - это ваш исходныйвопрос.

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

Рис. 14. 8.  Объяснениетипа "почему". На вопрос "Почему васинтересует

текущая цель?" дается объяснение в видецепочки правил и целей,

соединяющей текущую цель с исходным вопросомпользователя,

находящимся в верхушке дерева. Эта цепочканазывается трассой.

Будем называть такую цепочку трассой.Трассу можно себе представлять как цепочкуправил, соединяющую в И / ИЛИ-дереве вопросовтекущую цель с целью самого верхнего уровня так,как это показано на рис. 14.8. Таким образом, дляформирования ответа на вопрос "почему"нужно двигаться в пространстве поиска от текущейцели вверх вплоть до самой верхней цели. Для того,чтобы суметь это сделать, нам придется в процессерассуждений сохранять трассу в явном виде.

14. 4. 3.    Формирование ответа навопрос "как"

Получив ответ на свой вопрос, пользовательвозможно захочет увидеть, как системапришла к такому заключению. Один из подходящихспособов ответить на вопрос "как" - этопредставить доказательство, т. е. те правила иподцели, которые использовались для достиженияполученного заключения. Это доказательство вслучае нашего языка записи правил имеет видрешающего И / ИЛИ-дерева. Поэтому наша машиналогического вывода будет не просто отвечать навопрос, соответствующий цели самого верхнегоуровня - этого нам недостаточно, а будет выдаватьв качестве ответа решающее И / ИЛИ-дерево,составленное из имен правил и подцелей. Затем этодерево можно будет отобразить на выходе системыв качестве объяснения типа "как". Объяснениюможно придать удобную для восприятия форму, есликаждое поддерево печатать с надлежащим отступом,например:

        питер это хищник

            быловыведено по прав3 из

               питер это млекопитающее

                   было выведено по прав1 из

                       питер имеет шерсть

                           было сказано

               и

               питер ест мясо

                   было сказано

Назад | Содержание| Вперёд









Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх