3. Система понимания естественного языка

УДК 681.3: 681.51 Система понимания естественного языка

Казаков А.И., Обухов Л.И. 2005

Киевская лаборатория искусственного интеллекта (КЛИИ), г. Киев

kazakov.alex@gmail.com

В данной статье описана система понимания текстов на естественном языке, реализованная на Прологе и Лиспе в среде программирования Велиар-2.

Введение

 У людей, говорящих на родном для них языке, различия в его внешнем проявлении и внутреннем представлении столь велики, что впору говорить об «индивидуальных диалектах». Эти различия проявляются на всех уровнях речевой деятельности: в стиле речи, в просодике и фонетике, лексическом составе и аграмматичности, в составе и упорядоченности альтернативных значений слов, включая их различные сети ассоциаций и прочие различия. Именно такая высокая степень различия в устройстве и употреблении языка потребовала дополнительного развития способности системы языка у человека к пониманию. Система понимания стала выполнять дополнительную роль смыслового стабилизатора значений слов в предложении и тем самым обеспечивать продуктивный диалог между людьми. 

 Поэтому,  программный комплекс для обеспечения полноценного процесса речевого общения человека и компьютера, с необходимостью должен включать в себя  систему понимания  текстов на естественном языке (ЕЯ), а также охватывать все уровни проявления естественного языка от просодики речи  до прагматики. Компоненты такого комплекса нами также разработаны, но в данной статье мы описываем работу системы понимания с уже распознанными представлениями в виде текста.

 Под пониманием мы подразумеваем знание «сделанности» или как «это» устроено [1]. Предполагается наличие трех уровней понимания, каждый из которых отвечает на свой вопрос. 

1-й уровень отвечает на вопрос «что это?». 

2-й уровень на вопрос «из чего состоит» «это»описываемый предмет, процесс или сцена и «как все «это» работает» в своей целостности?. 

3-й уровень отвечает на вопрос «почему или зачем, т. е. с какой целью «это» работает?»

Понимание 1-го уровня относится к задаче узнавания

понимание 2-го уровня относится к задаче понимания «сделанности», 

понимание 3-го уровня относится к задачам целеузнавания, причинного анализа и классу задач процесса познавания.

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

           Представления о естественном языке

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

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

 Практика показывает, что синтаксические анализаторы в объеме 80.000 русских слов или 500.000 словоформ работают на существующих вычислителях еще слишком медленно. Это одна из причин задержки развития систем с семантическим анализом.

 Подчеркнем, что синтаксический и семантический анализ по времени и по важности составляют лишь 1/10 общего времени, остальное время занимает смысловой анализ – собственно понимание. Отметим, что существует другое направление в проблеме общения с машиной на ЕЯ, которое, согласно тесту Тьюринга, требует, чтобы была соблюдена лишь внешняя похожесть на общение двух собеседников. Утверждение о том, что если число делится на 12 и на 4, то оно делится и на 48, внешне правдоподобно. Но мы потребуем, чтобы в программе понимания были механизмы, позволяющие найти ошибку в этом рассуждении. Иными словами, интерфейс на ЕЯ не должен быть самоцелью, а лишь оболочкой, интерфейсом к более важному – обработке смысловой информации. А она включает в себя задачи на планирование, поиск решений, выполнение “алгоритмической работы”, качественные рассуждения, привлечение структурных моделей и многое другое, что уже могут делать Пролог-программы. Поэтому нельзя отменять существующие достижения и проделанную работу на языках программирования прологовского типа. Другое дело, что универсальные языки программирования не прологовского типа не могли достаточно адекватно обрабатывать такой тип данных как “концепт” (“смысл”), поскольку они, как правило, ориентированы на числа и массивы. Для этих языков операциональные “концепты” были просто недоступны.

Малая модель русского языка

На другом конце шкалы, который и представляет для нас интерес, находится малый замкнутый ЕЯ или малая модель ЕЯ с ограниченным словарем и ограниченным числом синтаксических правил. Наблюдение за тем, что когда предложения, сформулированные на обычном языке программирования понимаются машиной правильно (но не обязательно однозначно) и они составляют основу наиболее выразительного интерфейса с машиной. Это наводит на мысль о том, что малый ЕЯ должен  был бы быть похож на языки программирования в том смысле, что предложения на ЕЯ также будут правильно пониматься машиной. Пониматься в соответствии с допустимыми значениями слов и учетом здравого смысла выражений построенных из них. Иными словами, в контексте малого ЕЯ следовало бы модифицировать парадигму программирования, с процесса написания библиотек алгоритмов и заполнения баз данных, на процесс заполнения одной базы знаний текстами в формате малого ЕЯ и возможно, заполнения сервисными процедурами на Прологе, новыми правилами синтаксиса и статьями на Прологе для новых смысловых явлений.

 Для достаточно полного покрытия грамматических явлений в русском языке достаточно около 100 правил.  Здесь важно подчеркнуть, что нами применяется принцип вложенности языков, который позволяет постепенно наращивать возможности системы понимания и таким образом пройти под границей зоны комбинаторного взрыва числа вариантов анализируемых альтернатив.

 Следующий пример демонстрирует сложность предложений, разбираемых грамматическим анализатором, состоящем из 64 правил.

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

Приведем в системе обозначений DCG (DCG – Definite clause grammars [2], грамматика, определяемая клозами) запись грамматики модели малого ЕЯ, состоящей из 45 правил.

Список терминалов:

[мо] – модификаторы прилагательных и наречий

[пи] – прилагательные

[кф] – краткие формы прилагательных или причастий

[ср] – степени сравнения прилагательных

[нр] – наречия обстоятельственные

[сщ] – существительные

[гл] – глаголы в личной форме

[нф] – инфинитивы глаголов

[дч] – деепричастия

[пч] – причастия

[пе] – предлоги

[юо] – союзы обстоятельственные, так_как, поскольку, поэтому …

[юл] – союзы типа либо

[юи] – союзы типа и, а, но, однако…

[ча] – частицы не, даже, даже_не …

[ко] – формы который, которого, …

[как] – союзы как, как будто, …

[тч] – тозптчто,

[быть] – быть, был, была, будет …

Грамматика малой модели русского языка

дк<-**-дк1, [если], пплог, [зптто], пплог.

дк<-**-дк2, пплог.

пп_лог<-**-пп_лог_1, пп_и.

пп_лог<-**-пп_лог_2, пп_или.

  пп_или<-**-пп_или_1, [либо],пп, пп2.

  пп_и  <-**-пп_и_1,          пп, пп3.

    пп2<-**-пп2_1, [юл], пп, пп2.

    пп2<-**-пп2_2, [].

    пп3<-**-пп3_1, [юи], пп, пп3.

    пп3<-**-пп3_2, [].

пп<-**-пп_1, го, гс, гг, ва,          го.        % Простое предложение

  го<-**-го_1, ча0,[пе], гс,           го.        % Предложная конструкция

  го<-**-го_2, гм, ча0,[нр],          го.        % Группа наречий обст.

  го<-**-го_3, [как], гс, [зп],        го.        % Выражения подобия с “как”

  го<-**-го_4, [юо],  пп, [зп],       го.        % Союзные обст.оборот

  го<-**-го_5, гн,ча0,[дч],ва,го,[зп], го.  % Деепричастный оборот

  го<-**-го_6, гм,ча0,[ср],ва,     [зп], го.  % Сравнительная степень

  го<-**-го_7, [].                                        % Необязательностть

  гс<-**-гс_1, гп, ча0,[сщ], ва, по.           % Группа существительного

  гс<-**-гс_2, [тч], пп, [зп].                      % гипер-существительное

  гг<-**-гг_1, гн, ча0,[гл],бы0.                 % Группа глагола

  гг<-**-гг_2, ча0,быть0, гн, ча0,[кф].     % Группа глагола, кр. форма

  гг<-**-гг_3, ча0,[быть], гп, [зп].            % Констр. с тире и “быть”

  гг<-**-гг_4, гм,ча0,[ср].                         % Сравнительный оборот

  ва<-**-ва_1, гс,                      ва.             % Группа валентностей

  ва<-**-ва_2, гн, ча0,[нф],      ва.    % Инфинитив как валентность

  ва<-**-ва_3, [].

    по<-**-по_1, [зп],[ко],     гг,  ва,го,[зп]. % Правое определение-1

    по<-**-по_2, [зп],[ко],гс, гг,  ва,го,[зп]. % Правое определение-2

    по<-**-по_3, [зп],гн,ча0,[пч],ва,го,[зп]. % Причастный оборот

    по<-**-по_4, [].

      гп<-**-гп_1, гм, ча0,[пи], гп.          % Группа прилагательных

      гп<-**-гп_2, [].

      гн<-**-гн_1, гм, ча0,[нр], гн.          % Группа наречий

      гн<-**-гн_2, [].

        гм<-**-гм_1, ча0,[мо],гм.              % Группа модификаторов

        гм<-**-гм_2, [].

Обработка необязательности

пе0 <-– пе0_1,[пе]. пе0 <-– пе0_2,[].

ча0 <-– ча0_1,[ча]. ча0 <-– ча0_2,[].

бы0 <-– бы0_1,[бы]. бы0 <-– бы0_2,[].

быть0<-– быть0_1,[быть]. быть0 <-– быть0_2,[].

Следующие примеры дают различные варианты структур,

разбираемые данной малой грамматикой.

Если бы Петя бросил мяч, то Вася пошел бы в школу.

Если бы Петя бросил мяч а Маргарет выпила соку, то

Вася пошел бы в школу.

Если яблоко – это фрукт, то Сократ – смертен.

Почему Петя бросил мяч?

Для чего Петя бросил мяч?

С какой целью Петя бросил мяч?

Кто бросил мяч?

Куда Петя бросил мяч?

Верно ли, что Петя бросил мяч?

Верно ли, что если яблоко – это фрукт, то Сократ – смертен?

Высота равна 12 метров. Высота равна 12.

Петя прочитал книгу своего отца, о котором мы говорили.

Петя прочитал книгу своего отца, о которой мы говорили.

И т.д.

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

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

:- анализ(R), псп2(”,R).

Вчера в лесу Маргарет выпила немного вишневого соку.

end_of_file.

Результат синтаксического разбора.

Синтаксический разбор, выданный форматизатором дерева терма:

дк_2( пп_1( гс_1( сщ( маргарет)),

          гг_1( гл( выпила)),

          ва_1( гс_1( гп_1( гм_1( мо( немного)),

                            пи( вишневого)),

                      сщ( соку)))))

Результат семантического разбора:

[ $4,

вчера($2,го($1)),

в_лесу($1),

маргарет($3),

выпила($4,гс($3),ва($6),го($2)),

немного($5),

вишневого($6,зн($5)),

соку($6) ]

Результатом грамматического анализа является прологовский список из предикатов, с динамически созданными константами. Первый элемент $4 указывает на центральный референт, вершину дерева зависимостей. Он часто связан с глаголом, в данном случае ему отвечает глагол “выпила”. Каждое слово предложения трактуется как атрибут-предикат некоторого референта. Эти референты являются первыми аргументами предикатов. Динамически сгенерированные прологовские константы $1,$2,$3,…, обозначают семантических референтов, о которых идет речь в этом предложении. Первый аргумент каждого атрибута (слова) – его референт. Остальные аргументы являются указателями зависимостей с указанием типа зависимости.

вчера($2,го($1)) – $1 является ссылкой на референт типа “го”,

то есть глагольное обстоятельство.

выпила($4,гс($3),ва($6),го($2)) – $3 это ссылка на референт с

именным атрибутом “маргарет” типа “гс”, то есть агентная валентность

глагола. $6 – ссылка на референт группы существительного

“вишневого соку”. Тип этой ссылки – “ва”, то есть объектная валентность глагола. $2 – ссылка на первый в цепочке референтов типа глагольных обстоятельств с атрибутом “вчера”.

вишневого($6,зн($5)) – $5 – это ссылка типа “значение” на

референт модификатора “немного”.

Грамматический анализатор имеет особый режим с использованием

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

В этом режиме успешно разбирается фраза:

Глокая куздра штеко будланула бокра и кудрячит бокренка.

Но для сокращения и упрощения изложения мы рассмотрим фразу:

        Глокая куздра удачно будланула бокренка.

Результат анализа:

internir2: глубокая — глокая(кл(пи))

internir2: мездра   — куздра(кл(сщ))

internir2: хОСНОВА([удачный]) — удачно(кл(нр))

internir2: резанула — будланула(кл(гл))

internir2: тигренка — бокренка(кл(сщ))

Результат морфологической интерполяции:

       Глубокая мездра удачно резанула тигренка.

На основе морфологической интерполяции система восстанавливает семантические связи:

[ $3,

  глокая($1),

  куздра($1),

  удачно($2),

  будланула($3,зн($2),гс($1),ва($4)),

  бокренка($4)]

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

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

“Суть” актуализируется, когда эти процедуры начинают выполняться, но она может быть законсервирована и передана в качестве сообщения другому процессу или передана на запоминание. Кроме того, с момента образования выражения Пролога, начинается царство “смысловой” или “концептуальной” обработки средствами языка Пролог.

Модель процесса понимания

Опишем модель процессов, происходящих в программной системе при поступлении на входе речевого сообщения в виде группы предложений от пользователя в обычной ситуации, заканчивающейся вопросительным или повелительным предложением. В результате синтаксического и семантического анализа предложений сообщения возникает внутреннее представление в формате сети референтов. Внутреннее представление необходимо для согласования с работой процедур процедурного слоя базы знаний. В этот момент наступает третий этап, который можно было бы назвать «прагматическим анализом». Его суть в том, что входное сообщение обобщается и используется для формирования системы ключей выводящих на «список задач». В реализации база знаний должна обладать таблицей соответствия таких ключей со списками имен процедур. Такой список, полученный по «ассоциации» из обобщенного внутреннего представления, есть список задач, поступающий на стек очередных задач «центрального процессора модели». Предыдущие задачи, возможно составляющие текущий выполняемый план, не пропадают и будут вновь активизированы после обработки поступившего сообщения. Конвейер из таких задач получает в качестве своих аргументов “глобальные параметры текущей установки”, в которые могут входить предпочтения, ценности и приоритеты, или даже «настроение» системы. Полученный конвейер запускается на выполнение. Последней задачей конвейера задач может быть процедура выдачи ответа или выполнения команды, обнаруженной в речевых действиях, распознанных в сообщении пользователя. Естественно, каждая процедура конвейера может являться сложным интерпретатором и разворачивать свои потребности в получении ресурсов из базы, может выполняться, так называемое, первичное ассоциативное расширение внутреннего представления сообщения. Затем может выполняться вторичное расширение структурными или ближайшими следствиями и причинами, а также выполняться расширение информацией, полученной от загруженных «сценариев». Поэтому последняя процедура ответа на вопрос получает в свое распоряжение ассоциативный контекст сообщения или причинно-следственный и сценарный, что дает возможность более полно отвечать на вопрос. В целом выполнением всех задач из списка заканчивается процесс обработки входного сообщения, который и можно было бы назвать словом «понимание». Однако необходимо сделать следующее добавление к схеме. В Прологе нормальным является наличие отказов для всех выполняемых в нем процедур. Как трактовать такие отказы с пользой для дела? Создается обратная связь семантического уровня, то есть выполняется бэктрекинг на семантический этап, в нем могли оставаться резервные альтернативы многозначного понимания слов и понятий. Поэтому бэктрекинг захватывает следующую альтернативу и процесс циклически продолжается с этого места. Возможно, появится новый список задач, который снова может давать отказы. При исчерпании отказов на семантическом уровне, наступает очередь синтаксического уровня. Здесь возможны самые различные варианты. Например, резервной альтернативой может быть другая синтаксическая структура. В этом случае она становится активной и процесс циклически продолжается с нее. В связи с указанной схемой возможно распознавание метафор как второго прохода при неудаче буквальной трактовки сообщения. Не столь важно иметь процедуру трактовки метафор, как важно уметь вовремя ее запустить.

Таким образом, задачу создания  ЕЯ-интерфейса по вводу сообщений в определенной мере можно считать решенной и передать дела в компетенцию процедур Пролога со всеми его достижениями и проблемами.

                       Неизбежность Пролога

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

В русле этой метафоры укажем на следующие основные особенности языка Пролог в среде Велиар:

— близость к естественному языку;

— инкрементальный рост процедур;

— логическая интерпретация;

— систематическое освоение многозначности;

— совершенная система обработки отказов;

— однократность присваивания;

— ориентация на параллельные компьютеры;

— простота грамматических анализаторов;

— термы и списки в качестве структур данных;

— метаинтерпретаторы;

— машинно-независимость;

— эффективная реализация;

— ансамбли;

— конструктивное отрицание;

— обобщение в дереве реализации

   (алгоритмы DeJong-Mooney-Cedar-Cabelli [5]).

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

Описание разработанной нами среды программирования Велиар-2  представлено на сайте Neurotechnica.info в статье «Программно-инструментальный комплекс автоматизации программирования».  Рабочую версию комплекса АП начального уровня можно загрузить с наших сайтов: PICAP.org  и  Neurotechnica.info,

начиная с 17 мая 2005 г. Поставка комплекса осуществляется бесплатно, с исходными текстами, на основании GNU-лицензии.

                                          Выводы

 Реализация способности к пониманию ЕЯ-сообщений позволяет создать язык программирования нового типа, который изменит современную парадигму программирования с написания самих программ на написание требований к ним, т.е. технических заданий (ТЗ), что резко повысит производительность труда, повторную используемость как текстов ТЗ, так и результатов их понимания, изменит характер отладки программ. А также, позволит преодолеть современный порог сложности при создании крупных программных комплексов. 

 Но самое главное система понимания позволяет приступить на новой основе к очень трудоемкому этапу расширения возможностей системы диалогового общения (системы искусственного интеллекта в речевой деятельности). В этом же направлении возникает возможность решения проблемы качественного перевода на основе понимания.

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

Литература

  1. Ланге Н.Н. Психологические исследования. – Одесский военный округ. Одесса. -1893. 277 с.
  2. Pereira F.C.N., Warren D.H.D. Definite clause grammars for “language analysis – a survey of the formalism and a comparison with augmented “transition networks” // Artificial Intelligence. – 1980. Vol. 13, pp. 231-278.
  3. Pereira F.C.N., Shieber S.M. Пролог and Natural-Language Analysis // CSLI Lecture Notes./ Stanford,CA. – 1987. N10, pp. 286.
  4. Covington M.A. Natural Language Processing for Пролог Programmers // Prentice-Hall, Englewood Cliffs, NJ.- 1994.
  5. DeJong G., Mooney R. Explanation-based learning: An alternative view. Machine learning,1(2): 145-176, 1986.