Желательно, чтобы пользователь имел возможность узнать у системы, каким образом она приходит к найденному заключению или как она объясняет тот или иной шаг в цепочке вывода, приводящий к этому заключению. Почему важно иметь такую возможность? Во-первых, если такая возможность есть, пользователь будет получать дополнительную информацию, которую он сможет использовать для принятия собственного решения, возможно, и не согласовывая его с выводами, сделанными экспертной системой. Во-вторых, это позволит точно указать причины, приводящие к принятию системой неправильных решений. И, наконец, в-третьих, это поможет пользователям использовать протоколы работы системы для углубления своих знаний. Внесение изменений в отношение result, а также введение новых отношений в предыдущую программу (6.8) дают возможность пользователям в случае необходимости получить краткое описание процесса вывода (см. программу 6.9), реализуемого системой.
Программа 6.9
X result Y if
game and
Z points x and
у score z and
SUM (Z у X) and
SUM (x z Y) and
((PP home X Y away)) ? and
choose choose if
(either explain or X result Y) explain if
(explain result) is-told and
X points Y and
Z score x and
SUM(XZy)and
SUM(Yxz)and
((P The home side has X bonus points, the away side has Y points and I
add these points to the scoring probabilities to obtain у z)) ? X points Y if
Z isall (Z: h plus Z) and
x isall (x: a plus x) and
Z tot X and
x tot Y
Естественно, можно предусмотреть выдачу более детальной информации о процессе логического вывода. Так, в нашем примере можно в принципе проследить, как с помощью отношения plus производится начисление очков. Но автору кажется, что тратить время на объяснение слишком большого числа мелких деталей нецелесообразно. Перейдем к описанию новых отношений. Отношение points, используемое для подсчета общего числа очков, получаемого с помощью правил отношения plus, вводится, во-первых, для того, чтобы упростить отношение result, и, во-вторых, для того, чтобы обеспечить данными другое новое отношение - explain. Отношение choose осуществляет ту же функцию, что и оператор ветвления языка ассемблер или конструкция" "if ...then ... else" языка высокого уровня. По мнению автора, ветвление в этой версии Пролога реализовано достаточно просто и элегантно, по крайней мере не так, как в Бейсике, где для этой цели используются следующие операторы:
IF ... THEN GOTO ...
IF ... THEN GOSUB ...
Отношение choose позволяет пользователю выбрать один из трех вариантов: либо получить объяснение поведения системы и продолжить работу, либо, не получив объяснения, перейти к анализу очередных данных, либо, наконец, ответив на оба вопроса системы по, выйти из системы. Если продолжить проведение аналогий с языками высокого уровня, то можно сказать, что подобные действия реализуются там с помощью операторов вызова процедур. Так, в данном случае result как бы вызывает chose, которое в свою очередь либо вызывает explain и затем result, либо вызывает только result, либо просто завершает работу. Достоинство Пролога заключается в том, что приведенная выше конструкция очень близка к предложению обычного естественного языка: "выберите либо объяснение поведения, либо переход к анализу новых данных, либо выход из системы". Следующий протокол демонстрирует работу усовершенствованной системы:
all (: result x)
[определить все (: результат-прогноза х)]
home form (X) and away form (Y) ? ans (8 ∅∅ 21 4) (1 1 6 5 17)
[команда хозяев (X) и команда гостей (Y) ? ответ (8 ∅∅ 21 4)
(1 1 6 5 17)]
home 58 11 away
[хозяева 58 11 гости]
explain result ? yes
[надо ли объяснять, как получен результат ? да]
The home side has 11 bonus points, the away side has ∅ points
[команда хозяев имеет 11 премиальных очков, команда гостей - ∅]
and I add these points to the scoring probabilities 47 and 11 to
obtain (58 11)
[к ним прибавляются очки, полученные в результате учета среднего голевого баланса, умноженного на 10, в результате получаем (58 11)]
home form (X) and away form (Y) ? ans (4 1 2 14 9) (∅ 1 6 8 21)
[команда хозяев (X) и команда гостей (Y) ? ответ (4 1 2 14 9)
(∅ 1 6 8 21)]
home 54 24 away
[хозяева 54 24 гости]
explain result ? no
[надо ли объяснять, как получен результат ? нет]
home form (X) and away form (Y) ? ans (1 2 4 4 9) (1 3 3 6 11)
[команда хозяев (X) и команда гостей (Y) ? ответ (1 2 4 4 9)
(13 3 6 11)]
home 22 22 away
[хозяева 22 22 гости]
explain result ? no
[надо ли объяснять, как получен результат ? нет]
home form (X) and away form (Y) ? no
[команда хозяев (X) и команда гостей (Y) ? нет]
No (more) answers
[Ответов (больше) нет]
Отметим, что следует использовать запрос
all (: result x)
а не запрос
all (x: result x)
Упражнение 6.9
Попробуйте модифицировать отношение result таким образом, чтобы система считала победителем того, кто набирает не менее чем на десять очков больше, чем его соперник. В противном случае результатом прогноза должна являться ничья. Прогноз должен быть дан на естественном языке, и, кроме того, в программе должна быть сохранена возможность объяснить свое поведение.