Обработка относительных предложений
В роли грамматических определений существительных могут выступать относительные предложения (relative clause), например, как во фразе "Every man that paints admires Monet" (Каждый мужчина, который рисует, обожает Моне). В этой
Глава 21. Обработка лингвистической информации с помощью грамматических правил 527
фразе синтаксическая конструкция "every man that paints" представляет собой именную конструкцию, в которой "that paints" является относительным предложением. Для охвата такой синтаксической конструкции можно переопределить грамматические правила, относящиеся к именной конструкции, следующим образом:
noun phrase --> determiner, noun, rel clause.
rel_clause --> [ that], verb_phrase. _
rel_clause -->{]. I Пустое относительное предложение
Теперь рассмотрим смысл подобных именных конструкций. С точки зрения логики фраза "Every man that paints admires Monet" означает следующее:
Для всех Х,
если X - мужчина и X рисует, то X обожает Моне.
Эту формулировку можно представить в виде такого терма Prolog: all( X, man( X) and paints! X) => admires! X, monet)]
Здесь предполагается, что оператор "and" связывает сильнее, чем оператор "=>". Таким образом, подходящая форма для представления логического смысла именной конструкции "every man that paints" является следующей: all( X, man( X) and paints [ X} => Assn)
В целом эта форма имеет вид all! X, Propl and Ргор2 => Assnl
Здесь смысл переменной Propl определяется именной конструкцией, Prop2 -глагольной конструкцией относительного предложения, a Assn - глагольной конструкцией фразы. Правила DCG для этой именной конструкции, которые обеспечивают соответствующее определение смысла, приведены ниже.
"tSS-SJA №»Propl and Prop2) ^> [ t Propl2, Assn, S], Xr Prop2).
noun c [ X, ProplWopl, Propl2].
Для охвата того случая, когда относительное предложение является пустым, необходимо добавить такое правило: r e l_ c l au s e ( X, Propl, Propl) -> [j.
В листинге 21.1 приведено полное определение DCG с возможностями, описанными в этом разделе, включая определяющие слова "а" и "every", а также относительные предложения. Эта грамматика способна извлекать логический смысл фраз, подобных приведенным ниже.
John paints.
Every man that paints admires Monet. Annie admires every man that paints. Every woman that admires a man that paints likes Monet.
Листинг 21.1. Правила DCG, которые обеспечивают обработку синтаксиса и смысла небольшого подмножества естественного языка
:- ор [ 100, xfy, and) . :- ор( 150, Kfy, =>) .
sentence! 3) -->
nounj)hrase( X, P, S) , verb_phrase( X, P) ,
nounj)hrase( X, P, S) -->
determiner! X, P12, P, S), noun( X, P1J, rel_clause( X, PI, P12).
nounjhrase [ X, P, pj -> proper_noun( X) .
verbjhrase ( X, P) ->
528 Часть II, Применение языка Prolog в области искусственного интеллекта
trans_verb[ X, Y, PI) , noim_phrase ( Y, PI, P) .
verbjhrase ( X, P) -> intrans_verb( x, P) .
rel_clause[ X, PI, PI and P2) -> [that) , verb_phrase[ X, P2) .
rel_clause[ X, PI, PI) --> [],
determiner) x, PI, P, all[ X, PI => P)) --> [every].
determiner!X, PI,p, existst x, PI and pj} -> [aj .
noun[ X, man(X) ) ~> [man] .
noun[ X, woman(X)) --> [woman).
proper_rtoun[ John) -> tjohnj .
proper_noun[ annie) --> [annie).
proper_noun( monet) -> [monet].
trans_verb( X, Y, likes ( X, Y) ) --> [ likes] .
trans_verb{ X, Y, admires! X, Y) ) -> [admires],
intran5_verb( X, paintS{X>] -> [paints].
% Некоторые проверки
testl( M> :-
sentence! M, [John,paints],[]).
test2 [ M) :-
sentence! M, [a, man, paints!, П) •
test3{ M) :-
sentence! M, [every,man,that,paints,admirea,manet] , [] ) .
test4( M):-
sentence! M, [annie,admires,every,man,that,paints],[]),
test5( Mi :-
..,.sentence( M, [every, woman, that,admires,a,man, that,.paints,likes,monet], []}.
Например, эти фразы могут быть переданы на обработку в рассматриваемой грамматике в виде следующих вопросов:
?- sentence( Meaningl, [ every, man, that, paints, admires, monet], []). Meaningl = alii X, man( X) and paints [ X) => admires( X, monet)]
7- sentence! Meaning2, 1 annie, admires, every, man,that, paints], []). Meaning2 = all! X, man( X) and paints! X] => admires( annie, X))
?- sentence ( Meaning3, [ every, -woman, that, admires, a, man, that, paints,
likes, monet] , [] ) . Meaning3 • all ( X, woman! X) and exists ( Y { man! V) and paints! IT J! and admires( X, Y)) -> likes! X, monet))
Еще одна интересная проблема касается использования смысловых значений, извлеченных из текста на естественном языке, для формулировки ответов на вопросы. Например, рассмотрим, как изменить рассматриваемую программу, чтобы после обработки заданных фраз она могла отвечать на вопросы такого типа: "Does Annie
Глава 21. Обработка лингвистической информации с помощью грамматических правил 529
admire anybody who admires Monet?" (Обожает ли Энни кого-либо, кто обожает Моне). Ответ на этот вопрос логически следует из приведенных выше фраз, и нам достаточно просто заставить данную программу проводить некоторые необходимые рассуждения. В общем нам требуется определенный механизм автоматического доказательства теорем, обеспечивающий дедуктивный вывод ответов из смысловых значений, представленных в форме логических высказываний. Безусловно, с точки зрения практики удобнее всего использовать в качестве такого механизма автоматического доказательства теорем саму систему Prolog. Для этого достаточно преобразовать логические смысловые значения в эквивалентные предложения Prolog. В целом выполнение такого упражнения требует определенных усилий, но в некоторых случаях подобное преобразование является тривиальным. Ниже приведены некоторые легко преобразуемые смысловые значения, записанные в виде предложений Prolog. paints( John).
admires ( X, aionet) :
admires( annie, X) :-man( X), paints[ X) ,
Представленный выше в качестве примера вопрос "Does Annie admire anybody
who admires Monet?" можно преобразовать в следующий запрос Prolog:
?- admires( annie, X), admires( X, menet). X - John
Упражнения
21.6. Сформулируйте в виде логических высказываний смысл следующих фраз:
а) Mary knows all important artists (Мэри знает всех известных худож
ников).
б) Every teacher who teaches French and studies music -understands
Chopin (Каждый учитель, который учит французскому и изучает музыку,
понимает Шопена).
в) A charming lady from Florida runs a beauty shop in Sydney (Оча
ровательная леди из Флориды содержит салон красоты в Сиднее),
21.7. Грамматика, приведенная в листинге 21.1, может быть также вызвана на вы
полнение в противоположном направлении. В таком случае по заданному смыслу
вырабатывается фраза с этим смыслом. Например, можно попытаться ввести за
прос, обратный запросу tes~5, приведенному в листинге 21.1, таким образом:
?- М « all (X, woman (X) and exists (Y, (man (Y) and paints (Y) ) and
admir kes[X,monet)), sentence( M, S, [] I . Первый ответ системы Prolog состоит в следующем:
and admires C( )ac.JMFc; ) -> likes(_022C,monet))
Он соответствует ожидаемому. Но если мы потребуем предоставить еще одно решение, то получим такой непредвиденный результат:
М= aU{monet,woman[monet)and exists[ Q364,(man( 0364) and paints( 0364)) and admires (monet, _0364)) => likes [monet, monetj )
S = [monet,likes, every,woman,that,admiresa,man,that,paints] % Моне любит любую % женщину, которая восхищается некиммужчиной, который рисует
Часть II. Применение языка Prolog в области искусственного интеллекта
Объясните, почему он был получен, и предложите внести определенное изменение в грамматику для предотвращения его возникновения. Подсказка: проблема состоит в том, что эта грамматика допускает возможность согласования переменной, на которую распространяется действие квантора всеобщности (например, X в предикате all {X, ...)), с именем собственным (monet}; такую ситуацию можно легко предотвратить. 21.8.Дополните грамматику, приведенную в листинге 21.1, чтобы она позволяла обрабатывать составные фразы с союзами "if, "then", "and", "or", "neither", "nor" и т.д. В качестве примера таких фраз можно привести следующие:
John paints and Annie sings. * Джон рисует и Энни поет
If Annie sings then every teacher listens. Ъ Если Энни поет, то каждый
% учитель слушает
Проект
Модифицируйте грамматику, приведенную в листинге 21.1, чтобы она представляла смысл фраз в виде непосредственно выполняемых предложений Prolog. Напишите программу, которая читает фразы на естественном языке в обычном текстовом формате (а не в виде списков; см. подходящую программу в главе 6) и вводит их смысловые значения в базу данных системы в виде предложений Prolog. Дополните эту грамматику, чтобы она обрабатывала простые вопросы на естественном языке, что привело бы в конечном итоге к созданию законченной диалоговой системы для небольшого подмножества естественного языка. Можно также предусмотреть использование этой грамматики для выработки фраз с заданным значением, предоставляемых пользователю в качестве ответов на естественном языке.
Резюме
• Стандартные грамматические системы обозначений, такие как BNF, могут быть простейшим образом преобразованы в систему обозначений DCG (Definite Clause Grammar - грамматика определенных предложений). Грамматика, заданная в системе обозначений DCG, может считываться и вызываться на выполнение непосредственно интерпретатором Prolog, осуществляющим функции системы распознавания для языка, определенного с помощью этой грамматики.
• Система обозначений DCG позволяет вводить параметры в нетерминальные символы грамматики. Это дает возможность учитывать в грамматике контекстные зависимости и непосредственно включать в нее определения семантических значений языка.
• Разработаны интересные грамматики DCG, которые охватывают синтаксис и значение нетривиальных подмножеств естественного языка,