ПРОГРАММА ИНТЕРПРЕТАЦИИ ОПИСАНИЙ ПРОСТРАНСТВЕННЫХ ОТНОШЕНИЙ
Я обрисовал в общих чертах теорию использования процедурной семантики для получения ментальных моделей. Применимость этой теории была проверена с помощью построения малой „действующей модели" этой теории в виде машинной программы.
Программа не претендует на имитацию всех сложностей человеческого поведения, не следует видеть в ней и опыт по созданию искусственного интеллекта. Цель ее — представить принципы нашей теории в наглядном виде.На вход программы поступают пропозициональные репрезентации следующего вида:
Посылка (Справа, А, В),
которые принимаются в качестве соответствующих поверхностным репрезентациям таких утверждений, как:
А находится справа от В.
Выбор именно такой формы пропозициональных репрезентаций никак эмпирически не обоснован: они с тем же успехом могли соответствовать поверхностной форме предложений. Имея пропозициональные репрезентации, соответствующие описанию:
А находится справа от В С находится перед В D находится слева от С,
программа строит пространственную структуру:
В А D С
которая удовлетворяет данному описанию.
Проблема рекурсивного пересмотра модели тесно связана с практической задачей разработки программы, обеспечивающей ведение и пополнение базы данных. (Хорошая программа для базы данных должна включать также определенные процедуры, которые не строго обязательны для семантической интерпретации, например процедуру замены большого количества отдельных конкретных утверждений одним всеобъемлющим обобщением.) Как правило, эти программы предназначены для ответа на вопросы к базе данных, и обычно они имеют весьма ограниченные возможности для обработки утверждений с целью обновления хранящейся в базе информации. Утверждений опасаются именно потому, что не знают, как поступать с неопределенными или противоречивыми описаниями. Вопросно- ответная программа предоставляет решение этого вопроса разработчику базы данных, но программа, обрабатывающая утверждения, обойти этот вопрос не может.
Один из подходов к проблеме, пропагандируемый некоторыми специалистами по искусственному интеллекту,— это формализация немонотонной логики. В ортодоксальной логике, когда определенное заключение выводится из набора посылок, оно будет выводиться и при добавлении к этим посылкам дополнительного утверждения. Но когда мы основываем наши рассуждения на умолчании, мы можем прийти к имплицитному умозаключению, от которого следующее затем утверждение заставляет нас отказаться. Например, нам что-то сказали о собаке, и мы по умолчанию заключаем, что у нее четыре лапы, а затем узнаем, что в действительности у нее их только три. Несмотря на отдельные попытки формализовать немонотонную логику (см., например, McDermott and Doyle, 1980), она по-прежнему ставит перед исследователями ряд, по всей видимости, неразрешимых проблем.Альтернативный подход состоит в использовании рекурсивных процедур пересмотра моделей, и наша программа воплощает обе рекурсивные процедуры, которые были описаны в предыдущем разделе. Она отвечает на утверждения, несовместимые с построенной к данному моменту структурой, либо изменением своей модели предшествующих посылок, с тем чтобы привести их в соответствие с воспринимаемым утверждением, либо, если такая модификация невозможна, указанием на несовместимость воспринимаемого утверждения с тем, что ему предшествовало. Она отвечает на утверждение, соответствующее тому, которое уже имеется в построенной к данному моменту структуре, проверкой того, существует ли альтернативная модель предшествующих предложений, несовместимая с воспринимаемым утверждением. Если имеется такая интерпретация, программа указывает, что пока истинность воспринимаемого утверждения лишь возможна; если такой интерпретации нет, то программа указывает, что истинность воспринимаемого утверждения с необходимостью вытекает из того, что ему предшествовало. Короче говоря, программа делает выводы из простых утверждений о пространственных отношениях между объектами, и, таким образом, она, по сути дела, способна отвечать на вопросы.
Если пользователь хочет знать, находится ли X перед Y-ом в определенном расположении объектов, тогда соответствующее утверждение вызовет один из следующих ответов (при условии, что и X и Y ранее упоминались):Истинность посылки была ранее возможной, но не необходимой.
Посылка уже с необходимостью истинна.
Ложность посылки была ранее возможной, но не необходимой.
Посылка уже с необходимостью ложна.
Если X или Y не входят в построенную к данному моменту структуру, то программа принимает утверждение за истинное и выполняет соответствующее построение.
Программа содержит ряд процедур общего характера, соответствующих тем, которые постулировались в общей теории. (Одна процедура опущена—та, которая вызывается, когда процедура верификации не справляется с установлением истинностного значения,—в связи с тем, что в мире данной программы такой ситуации возникнуть не может.) В программу соответственно входят:
1. Процедура, начинающая построение новой пространственной структуры всякий раз, когда она встречается с утверждением, в котором не упоминается ни один из объектов имеющейся структуры. Она вставляет объекты, упомянутые в утверждении, в структуру в тех позициях, какие удовлетворяют требуемому пространственному отношению.
2. Процедура, которая в случае, если один объект, упомянутый в утверждении, обнаруживается в имеющейся структуре, вставляет другой объект в структуру в позиции, которая удовлетворяет значению утверждения.
3. Процедура, которая в случае, если один объект из утверждения обнаруживается в одной структуре, а другой объект из утверждения обнаруживается в другой, отдельной от первой структуре, объединяет обе структуры в единую структуру, удовлетворяющую значению утверждения.
4. Если оба объекта из утверждения обнаруживаются в одной и той же структуре, то существует процедура, которая проверяет, связаны ли они в этой структуре требуемым пространственным отношением.
5. Если утверждение истинно относительно построенной к данному моменту структуры, тогда процедура рекурсивно проверяет, может ли структура быть перестроена так, чтобы это не противоречило предшествующим утверждениям, но делало воспринимаемое утверждение ложным.
6. Если утверждение ложно относительно построенной к данному моменту структуры, то процедура рекурсивно проверяет, может ли данная структура быть перестроена так, чтобы это соответствовало предшествующим утверждениям, но делало воспринимаемое утверждение истинным.
Детали большинства из этих процедур достаточно просты для того, чтобы читатель сам мог их себе представить, но более сложные процедуры (5) и (6) для пересмотра структур заслуживают более внимательного рассмотрения. Когда одна из этих процедур пытается поменять место одного объекта в структуре, могут оказаться и другие объекты, позиции которых были описаны со ссылкой на этот объект, и, следовательно, прежде чем его передвинуть, необходимо проверить, можно ли передвинуть эти другие объекты. Однако они в свою очередь могут быть связаны с какими-то другими объектами, и поэтому прежде, чем их передвигать, необходимо проверить, могут ли быть передвинуты эти объекты.., и т. д. Например, если программе дано крайне неопределенное описание:
А находится справа от В С находится слева от А,
то она строит следующую модель:
Если вслед за этим ей говорят:
С находится справа от В,
то процедура верификации (3) сначала дает истинностное значение ложно. Это значение автоматически вызывает процедуру общего характера (6), которая проверяет, существует ли какой-либо способ перестроить модель так, чтобы сделать данное утверждение истинным. Очевидно, процедура должна проверить, что будет, если В и С поменять местами: будет ли результат по-прежнему совместим с описанием. (Следовательно, необходимо хранить записи пропозициональных репрезентаций, чтобы проверить, исключается ли сразу предлагаемое изменение в модели определенной посылкой.) В данном конкретном случае ничто не препятствует перемене места. Предположим теперь, что предшествующее описание содержало также утверждение о том, что D находится перед В:
С В А D
В этом случае, прежде чем поменять В и С местами, необходимо проверить, может ли быть соответственно изменена позиция D.
В самом деле, посылки, которая исключала бы такое передвижение, нет, и программа построит реорганизованную модель:В С А
D
Рассмотрим, однако, еще один случай. Пусть другие, ранее введенные утверждения констатировали, что Е находится перед С и слева от D, что дает модель:
С В А
Е D
В этот момент программе сообщается, как и раньше, что С находится справа от В. Теперь она должна сначала попытаться поменять В и С местами, но она обнаруживает, что перед В поставлено D, а перед С — Е. Следовательно, программа должна проверить все множество посылок, чтобы определить, можно ли поменять местами D и Е; оказывается, такая мена невозможна из-за предшествующей посылки, констатирующей, что Е расположено слева от D. Только теперь выясняется, что В и С нельзя поменять местами, и потому программа объявляет, что новое утверждение несовместимо с предшествующим описанием.
Число зависимых единиц структуры, проверка которых может потребоваться для определения возможностей реорганизации модели, в принципе не ограничено. Вот почему этот процесс обслуживается процедурой, которая может вызывать сама себя рекурсивно. Читатель, интересующийся техническими подробностями, может обратиться к табл. 1, где кратко описана рекурсивная функция, которая используется при попытках перестроить структуру так, чтобы воспринимаемое утверждение согласовывалось с ней. Эта функция — центральный компонент процедуры (6).
Программа для каждого предложения в описании обеспечивает вызов соответствующей общей процедуры, учитывая при этом как значение данного предложения, так и контекст, в котором оно встречается. Если программе дается утверждение:
А расположено перед В,
то в зависимости от настоящего состояния структуры вызывается та или иная общая процедура. Если как А, так и В уже присутствуют в структуре, программа вызывает процедуру верификации (4), чтобы определить, истинно ли данное утверждение, а ее результат затем вызывает процедуру (5 или 6), которая проверит, можно ли эту структуру реорганизовать.
Таблица 1. Краткое описание рекурсивной функции REMAKE, которая используется в программе умозаключения о пространственных структурах в ходе рекурсивных попыток перестроить структуру с тем, чтобы она согласовывалась с предшествующим дискурсом и текущим утверждением.
Функция REMAKE принимает три аргумента: две единицы X и Y существующей структуры и направление, в котором X должно переместиться, чтобы создать требуемое отношение между X и Y. Она содержит пять основных шагов, три из которых могут рекурсивно вызывать данную функцию:
1. Если существует посылка, связывающая X и Y, которая противоречит требуемому перемещению X, то выдай значение ложно и выйди из программы.
2. Если существует посылка, связывающая X с какой-либо единицей в том направлении, в котором X должен переместиться, то
Если эта единица занимает то место, на которое X предполагается передвинуть, то
Если REMAKE не может переместить эту единицу, то выдай значение ложно и выйди из программы.
3. Если существует посылка, связывающая X с какой-либо единицей, ортогональной к направлению, в котором должен переместиться X, то
Если REMAKE не может переместить эту единицу с сохранением ее положения относительно X, то выдай значение ложно и выйди из программы.
4. Если в данной структуре имеется единица, занимающая ту позицию, в которую X должен быть помещен, то
Если REMAKE не может убрать эту единицу с дороги, то выдай значение ложно и выйди из программы.
5. Перемести X в требуемую позицию, выдай значение истинно и выйди из программы.
Если ни А, ни В не входят в структуру, то данное высказывание, так сказать, открывает новую тему и вызывает процедуру (1), создающую новую структуру, которая, впрочем, может в конечном счете соединиться со старой структурой, если появится утверждение, которое связывает их единицы между собой. Если только одна из единиц—А или В — входит в структуру, то процедура (2) вставит в структуру вторую единицу в соответствующей позиции. Конкретные детали осуществляемой процедуры определяются соответственно референтами выражений, содержащихся в утверждении. В этом отношении программа отражает общий интерпретативный принцип, хотя очевидно, что существуют другие факторы, определяющие действительную реакцию слушающего на высказывание.
Выбрав общую процедуру, мы должны при ее применении пользоваться значением утверждения. Внедрение значения утверждения в общую процедуру—это решающий шаг. Он может быть осуществлен несколькими способами, но наша программа использует метод «замораживания» значений переменной в функции. В ходе этого процесса создается новая функция с меньшим числом аргументов, чем у исходной функции. Например, такая простая арифметическая функция, как сложение, принимает две переменных—х и у—и при вызове ее с помощью инструкции типа
ADD (х, у)
имеющие место значения х и у складываются. Новая функция может быть получена из ADD с помощью замораживания, то есть фиксации значения одной переменной, превращения ее в константу. Так, можно в качестве значения второй переменной зафиксировать 5 и затем полученной новой функции присвоить имя, например ADD5. Язык программирования РОР-Ю позволяет выполнить эту операцию, используя следующее выражение:
ADD (% 5%)—»ADD5,
которое частично применяет функцию ADD с тем, чтобы получить новую функцию ADD5. Новая функция принимает только одну переменную и прибавляет 5 к ее значению, например: результат ADD5(2) есть 7. Этот простой вычислительный прием имеет естественные расширения и может найти многообразные применения: вместо фиксации числовых значений переменных можно фиксировать функции в качестве значений переменных. В частности, можно фиксировать значение выражения в любой общей процедуре.
Допустим, к примеру, что при обработке предложения ,,А находится перед В" была выбрана та общая процедура, которая вставляет в структуру А, поскольку В уже присутствует в имеющейся структуре. Эта общая процедура используется при создании более конкретной процедуры, которая вставляет новую единицу перед старой; и эта конкретная процедура создается фиксацией значений переменных в общей процедуре. Каждая общая процедура имеет механизм сканирования, действующий в любом произвольно выбранном направлении. Его работа состоит в том, что он многократно повторяет одно и то же действие: увеличивает значение обеих координат позиции, сканируемой в данный момент. Конкретные размеры увеличения зависят от значений, приписанных двум параметрам общей процедуры DI и DJ, которые соответственно определяют направление сканирования. Рис. 1 иллюстрирует направление сканирования позиций перед единицей В в некоторой структуре. Поскольку все общие процедуры используют один и тот же механизм сканирования, условия истинности перед можно определить очень простым способом:
Function Infront f; f (% 1,0%);
End
J 1 2 3 4 5 6 7 8 | |
1 | |
2 | |
3 | В |
I 4 | |
5 | |
6 | |
7 | |
8 |
При условии, что В находится в позиции 1=3, J=4, установка параметров DI=1 и DJ=0 обеспечивает сканирование последовательности позиций, многократно повторяя увеличение координаты I на 1 и оставляя при этом значение координаты J без изменений (увеличивая его на 0). Последовательность позиций—это, как показано, (4,4), (5,4), (6,4)...
Рис. 1. Последовательность сканируемых позиций, находящихся перед единицей В в
некоторой структуре.
Это реальная запись на языке POP-10 из нашей программы. Первая строка указывает, что функция имеет имя infront ‘перед’ и что она принимает один аргумент, f, который на деле всегда является одной из общих процедур, описанных выше. Вторая строка приводит к фиксации значений 1 и 0 у двух крайних справа параметров общей процедуры, которые соответствуют DI и DJ. В результате получается сканирующая функция, последовательно увеличивающая координату I на 1, а координату J на 0 (то есть оставляя J без изменений). Следовательно, когда функция infront применяется к процедуре для добавления новой единицы к данной структуре, она создает конкретную процедуру, добавляющую новую единицу перед старой в первой же доступной позиции. При этом можно не бояться «упасть с края света»: структура по мере необходимости разрастается, чтобы принять в себя новую единицу.
Процедурна или декларативна вышеприведенная словарная статья для перед? Ответ состоит в том, что на деле она имеет совершенно особый характер, находясь примерно на полпути между обычной процедурой и фрагментом декларативной информации. Это процедура, которая не может быть выполнена сама по себе: она принимает другие процедуры в качестве аргументов и создает из них новые, более конкретные. Ее результат—определение вклада перед в условия истинности предложений, в которых эта лексема встречается, потому что новые конкретные процедуры служат именно для того, чтобы строить модели, удовлетворяющие этим условиям истинности, проверять существующие модели с целью установить, соответствуют ли они этим условиям или нет, и т. д. Я полагаю, что ментальный лексикон содержит сходные спецификации, которые используются в разных процедурах для манипулирования ментальными моделями.
Программа умозаключения о пространственной структуре является, я повторяю, упрощенным приложением процедурной теории понимания. Одно из самых грубых упрощений состоит в том, что говорящие обычно не считают, что для удовлетворения условий истинности пространственного отношения один объект должен располагаться точно на одной линии с другим. Они допускают определенную степень неточности, которая, вероятно, меняется в зависимости от действительных форм и размеров объектов. Другое упрощение касается обработки референтных выражений: программа имеет дело только с именами собственными. Однако, как предполагается, основные аспекты программы отражают психологическую реальность.