Представление смысла простых фраз с помощью логических высказываний

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

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

Глава 21. Обработка лингвистической информации с помощью грамматических правил 521


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

Общепризнано, что для представления смысла фраз на естественном языке хоро­шо подходят логические высказывания. В целом язык логики является более мощ­ным по сравнению с формальными языками доступа к базе данных; он фактически не только охватывает любые формальные языки доступа к базе данных, но и позво­ляет учитывать более тонкие семантические закономерности. В данном разделе будет показано, каким образом могут быть сформированы варианты интерпретации про­стых фраз естественного языка на языке логики с помощью системы обозначений DCG. Эти логические интерпретации будут представлены в виде термов Prolog. Здесь рассматриваются только некоторые интересные идеи, поэтому многие дополнитель­ные сведения, необходимые для более общего описания, будут опущены. Более пол­ное описание данной темы выходит за рамки настоящей книги.

Для начала удобнее всего рассмотреть некоторые фразы и конструкции естествен­ного языка и попытаться выразить их смысл в форме логических высказываний. Вначале рассмотрим фразу "John paints" (Джон рисует). Наиболее приемлемый способ представления смысла этой фразы в форме логического высказывания (в виде терма Prolog) состоит в следующем: paints( john)

Обратите внимание на то, что в данном случае глагол "рисует" является непере­ходным, поэтому соответствующий предикат paints имеет только один параметр.

Следующим примером фразы является "John likes Annie" {Джон любит Энни). Формализованное выражение смысла этой фразы может состоять в следующем: likes ( john, annie)

Глагол "любит" является переходным, и в соответствии с этим предикат likes имеет два параметра. Теперь попытаемся определить смысл подобных простых фраз с помощью правил DCG. Прежде всего начнем исключительно с синтаксиса, а затем будем постепенно вводить в эти правила смысловые интерпретации. Ниже приведена грамматика, которая позволяет легко охватить синтаксис этих фраз, рассматривае­мых в качестве примера.

sentence --> noun_phrase, verb_phrase. % Фраза состоит из именной

* и глагольной конструкции
noun phra3e -> proper noun. % Имя собственное

verb _ phrase -> intrans verb. % Непереходный глагол:

verb_phxase --> trans_verb, noun_phrase, % Переходный глагол

intransverb --> [ paints]. trans verb --> [ likes]. propernoun -- > [ john]. propernoun --> [ annie).

Теперь введем в эти правила смысл. Начнем с более простых категорий (с сущест­вительного и глагола), а затем перейдем к более сложным грамматическим категори­ям. Приведенные выше примеры показывают, что требуется ввести следующие опре­деления. Во-первых, необходимо определить смысл имени собственного. В данном случае смысл имени собственного john - это просто john: proper_noun ( john) --> [ john].

Во-вторых, необходимо определить смысл непереходного глагола, такого как гла­гол "рисует". Эта задача немного сложнее. Предикат с обозначением смысла этого глагола молено представить следующим образом: paints( X)

522 Часть II, Применение языка Prolog в области искусственного интеллекта


где X — переменная, значение которой становится известным только из контекста, иными словами, из именной конструкции. В соответствии с этим правило DCG для предиката paints состоит в следующем: intrans_verb{ paints( X)) --> [ paints].

Теперь рассмотрим такой вопрос: как сформировать из этих двух смысловых зна­чений, john и paints { X), требуемый смысл всей фразы paints ( john) ? Для этого необходимо обеспечить, чтобы параметр X предиката paints стал равным john.

На данном этапе целесообразно проанализировать применяемые операции с по­мощью графической схемы, как показано на рис. 21.5. На этом рисунке показано, как смысл отдельных конструкций фразы преобразуется в смысл всей фразы. Для достижения эффекта распространения семантических (смысловых) значений конст­рукций фразы можно определить, что предикаты noun_phrase и verb_phrase полу­чают свои семантические значения из предикатов propernoun и intransverb, как показано ниже,

palnts(jolin>



paints! X)

paliils( X)

John

 


Рис. 21.5. Дерево синтаксическою анализа фразы "John paints", в кото-роя показано, какое смысловое значение соответствует каждому из уз­лов. Логический смысл каждой конструкции фразы закреплен за соот­ветствующим, нетерминальным узлом в дереве. Стрелки показывают, каким образом накапливаются смысловые значения конструкций

Остается определить смысл всей фразы. Ниже показаны результаты первой по­пытки решения этой задачн. sentence; S) -> noun_phrase{ HP), verb_phrase( V?) , {compose( NP, VP, S)}.

В соответствии с первоначальным замыслом цель compose! NP, VP, 3) должна была аккумулировать смысловые значения именной конструкции john и глагольной конструкции paints [ X), Введем такое понятие, что X — является деятелем в пре­дикате paints { X), и определим следующее отношение: actor( VP, Actor)

Глава 21. Обработка лингвистической информации с помощью грамматических правил 523


В этом отношении Actor — это деятель в смысловом значении глагольной конст­рукции VP. В таком случае одно из предложений процедуры actor принимает сле­дующий вид:

actor! paints( X), X).

После определения отношения actor появляется возможность создать компози­цию смысловых значений именной и глагольной конструкций следующим образом:

compose( NP, VP, VP) :- % Смысловым значением фразы является VP, где
actor( VP, NP). % деятелем ас^ог в конструкции VP служит NP

Очевидно, что первая попытка определения смысла всей фразы оказалась удач­ной, но можно найти более удобный метод. Мы сможем избежать необходимости вве­дения дополнительных предикатов compose и actor, если сделаем параметр Хв тер­ме paints [ X) "видимым" вне терма, чтобы он стал доступным для конкретизации. Этой цели можно достичь, переопределив смысловые значения предикатов verb_phrase и intrans_verb таким образом, чтобы X стал дополнительным пара­метром, как показано ниже.

intrans verb( Actor, paints{ Actor)) --> [ paints] . verb_phrase[ Actor, VP) -> intrans^verb( Actor, VP) .

Благодаря этому параметр Actor становится легко доступным и обеспечивает возможность сформулировать более простое определение смысла фразы следующим образом: sentence! VP) -> noun_phrase( Actor), verb_phrase( Actor, VP).

Эта конструкция вынуждает параметр "деятель" (Actor) смыслового значения глагола стать равным смыслу именной конструкции.

Такой метод обеспечения доступа к частям грамматических конструкций, выра­жающим смысловые значения, представляет собой один из приемов, часто исполь­зуемых при включении смысловых значений в правила DCG. По сути, этот метод действует следующим образом. Смысл одной из конструкций фразы определяется в "эскизной" форме, например paints ( SorrieActor). Такой предикат определяет об­щую форму смыслового значения, но оставляет часть этого значения неконкретизи-рованной (в данном случае это — переменная SomeActor). Такая неконкретизиро-ванная переменная служит в качестве слота (своего рода "гнезда"), который может быть заполнен позже с учетом смысловых значений других синтаксических конст­рукций в данном контексте. Подобное заполнение слотов может осуществляться с помощью операции согласования интерпретатора Prolog. Но для упрощения реализа­ции этой операции слоты необходимо сделать видимыми, добавив их в качестве до­полнительных параметров к нетерминальным символам. Введем следующее соглаше­ние, касающееся порядка расположения этих параметров, — в начале должны нахо­диться "видимые слоты" смыслового значения синтаксической конструкции, а за ними должно следовать само смысловое значение; в качестве примера применения такого соглашения можно указать предикат verb_phrase ( Actor, VPMeaning).

Этот метод можно также применить к переходным глаголам следующим образом. Смыслом глагола "любит" является likes ( Somebody, Something) (кто-то любит что-то), где Sorr.ebody и Something - слоты, которые должны быть видимыми из­вне. Таким образом, может быть составлено следующее правило: trans_verb( Somebody, Something, likes( Somebody, Something)) -> [ likes].

Глагольная конструкция с переходным глаголом содержит именную конструк­цию, которая предоставляет значение для Something, поэтому имеет место такое правило: verb_phrase( Somebody, VP) -->

trar.s_verb( Somebody, Something, VP) , noun_phrase ( Something). Выше в данном разделе были представлены некоторые основные идеи в области обработки смысловых значений, но приведенные правила DCG позволяют обрабаты­вать лишь самые простые языковые фразы. А если именные конструкции содержат

524 Часть II. Применение языка Prolog в области искусственного интеллекта


такие определяющие слова, как "а" {неопределенный артикль) и "every" (место­имение "каждый"), то способы выражения смысла становятся гораздо более слож­ными. Эта тема рассматривается в следующем разделе.

21.3.2. Смысл определяющих слов "а" и "every"

Обработка фраз, содержащих такие определяющие слова, как "а", становится намного более сложной по сравнению с фразами, которые описаны в предыдущем разделе. В качестае примера рассмотрим такую фразу: "A man paints" (Некий мужчина рисует). Было бы большой ошибкой считать, что эта фраза имеет смысл paints ( man), поскольку в ней фактически сказано: "Существует некий мужчина, который рисует", а не "Мужчинам свойственно рисовать". В форме логического вы­сказывания эта фраза может быть представлена следующим образом: Существует X, такой, что X - мужчина и X рисует.

Переменную X, представленную в составе такого логического высказывания, при­нято называть переменной, к которой применяется квантор существования (в виде глагола "существует"). Примем за основу способ представления переменных, опреде­ляемых таким образом, с помощью следующего терма Prolog: exists! x, man( X) and paints! X)}

Первым параметром этого терма является переменная X, которая подлежит опре­делению с помощью квантора существования, а оператор and. считается объявленным как инфиксный оператор следующим образом: :- ор( 100, xfyr and>.

Хотя на первый взгляд это может показаться неожиданным, но синтаксическим объектом, который диктует необходимость применения такой сложной логической интерпретации, является определяющее слово "а". Поэтому слово "а" в определенном смысле доминирует над всей этой фразой. Чтобы лучше понять, каким образом фор­мируется это смысловое значение, рассмотрим именную конструкцию "a man". Она имеет следующий смысл: Существует неки'л X, такой, что X - мужчина.

Но во фразах, где появляется именная конструкция "a man", таких как "a man paints", мы всегда стремимся сообщить об этом мужчине что-то еще (в данном слу­чае • — не только то, что ом существует, но и что он рисует). Поэтому наиболее под­ходящая форма для выражения смысла именной конструкции "a man" состоит в следующем: exists! X, man! X) and Assertion!

где Assertion — некоторое утверждение об X. Такое утверждение, касающееся X, зависит от контекста, т.е. от глагольной конструкции, которая следует за именной конструкцией "a man". Переменная Assertion конкретизируется только после того, как становится известен контекст, в котором она появляется.

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

Существует некий X, такой, что

X обладает некоторьзл свойством (например, man ( X)) и является истинным еще какое-то утверждение, касающееся X (например, paints( X)) .

Эта формулировка может быть представлена в виде терма Prolog таким образом: exists! X, Property and Assertion)

Обе переменные, Property и Assertion, представляют собой слоты для смысло­вых значений, извлекаемых из контекста и помещаемых в эти слоты. Для упроще­ния переноса смысловых значений из других синтаксических конструкций в контек­сте можно сделать видимыми некоторые части смысловых значений определяющего

Глава 21. Обработка лингвистической информации с помощью грамматических правил 525


слова "а", как описано в предыдущем разделе. Подходящее правило DCG для опре­деляющего слова "а" приведено ниже. determiner[ X, Prop, Assn, exists ( X, Prop and Assn)1 --> [ a] .

Логический смысл крошечного определяющего слова "а" оказался на удивление сложным. Еще одно определяющее слово, "every", можно проанализировать анало­гичным образом. Рассмотрим фразу "Every woman dances" (Каждая женщина тан­цует). Логическая интерпретация этой фразы приведена ниже. Для всех X, если X — же.чщинаг то X танцует.

Эта формулировка может быть представлена с помощью следующего терма Prolog: all I Xr woman( X) -> dances{ XI)

где "=>" - инфиксный оператор, обозначающий логическую импликацию. Таким образом, определяющее слово "every" указывает на наличие смыслового значения, которое имеет такую эскизную структуру: all ( X, Property ~> Assertion)

Правило DCG, которое описывает смысл определяющего слова "every" и делает слоты в этой эскизной структуре видимыми, приведено ниже, determiner! X, Prop, Assn, all{ X, Prop -> Assn)) --> [ every].

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

exists! X, man[ X) and p a i n t s [ X))

Смысл определяющего слова "а" уже был выявлен следующим образом: exists[ X, Prop and Assn)

После сравнения этих двух смысловых значений сразу же становится очевидно, что основная структура смыслового значения этой фразы продиктована определяю­щим словом. Смысл всей этой фразы можно скомпоновать, как показано на рис. 21.6; начнем с эскизного смыслового значения, предписанного определяющим словом "а" таким образом: exists ( X, Prop and Assn)

Затем переменная Prop становится конкретизированной значением именной кон­струкции, a Assn — значением глагольной конструкции. Основная структура смы­слового значения этой фразы получена из именной конструкции. Обратите внимание на то, что в этом состоит отличие от более простой грамматики, описанной в преды­дущем разделе, в которой смысловая структура фразы была продиктована глаголь­ной конструкцией. Снова применяя метод, позволяющий сделать видимыми некото­рые части смыслового значения, можно сформулировать отношения между смысло­выми значениями, показанными на рис. 21.6, с помощью следующих правил DCG:

sentence! S) -> noun_phrase( X, Assn, S), verb_phrase( X, Assn).

no-un phrase [ X, Assn, S) --> determiner; X, Prop, Assn, S) , noun ( X, Prop) .

verb_phrase( X, Assn) --> intrans_verb( X, Assn).

intrans_verb( X, paints[ X)) --> [ paints].

determiner< X, Prop, Assn, exists! X, Prop and Assn)) -> [ a!.

noun( X, man( X]) --> [ man].

После ввода этой грамматики в интерпретатор Prolog может быть задан вопрос для формирования смысла фразы "А лап paints", как показано ниже.

?- sentence! S, [ a, man, paints), []). Е •= exists! X, man { X) and paints! X))

Здесь ответ системы Prolog немного отредактирован таким образом, что имя пе­ременной наподобие 123, сформированное системой Prolog, заменено на X

526 Часть II. Применение языка Prolog в области искусственного интеллекта


exists) X, man[X) and paints X])



r exists! X. man[ X! and Аээп)

sxistsj X, Prop and Assn) delarmliier noun \ manfX] inirons vi-irh

paints(X)

 


 


 


Рис. 21,6. Накопление смысловых значений для определения смысла фразы "A man paints". Общая форма смыслового значения этой фразы продиктована определяющим словом "а". Стрелки показывают направление переноса смысловых значений из одной синтаксической конструкции, е другую

Грамматика, приведенная в предыдущем разделе, позволяет обрабатывать такие фразы, как "John paints". После внесения изменений в эту грамматику необходимо обеспечить, чтобы новый вариант грамматики, позволяющий обрабатывать фразы типа "A man paints", был способен также обрабатывать более простые фразы напо­добие "John paints". Для этого требуется включить в новую именную конструкцию средства определения смысла имен собственных. Ниже приведены правила, которые позволяют решить такую задачу. pcoper_noun( John) --> [ John]. noun_phrase ( X, Assn., Assnl --> proper_noun j X).

Последнее из этих правил просто указывает, что весь смысл именной конструк­ции такого рода совпадает со значением второго "видимого слота", т.е. Assn. Значе­ние этого слота может быть получено из контекста (из глагольной конструкции), как при обработке следующего вопроса:

?- sentence( S, [ John, paints], []). S = paints i John)