Сборник 2002

АВТОМАТИЧЕСКАЯ ГЕНЕРАЦИЯ ВОПРОСИТЕЛЬНЫХ ПРЕДЛОЖЕНИЙ И ПОСТРОЕНИЕ ОТВЕТОВ С ИСПОЛЬЗОВАНИЕМ ЛИНГВИСТИЧЕСКОГО ПРОЦЕССОРА ЭТАП

 

 

И. Г. Гельфенбейн

Новосибирский Государственный Университет

ilya@gorodok.net

 

В. П. Лехельт

Новосибирский Государственный Университет

vlt@ngs.ru

 

А. А. Липатов

Новосибирский Государственный Университет

alipatov@gorodok.net

 

В. В. Шило

Новосибирский Государственный Университет

vitay@inet.ssc.nsu.ru

 

 

 

Ключевые слова: ЭТАП, диалог, вопрос, ответ, синтаксическая структура, анализ текста, смысл, текст, поиск, релевантность, генерация.

 

В статье рассматриваются проблемы автоматической генерации вопроса к любому члену заданного предложения и поиск в тексте прямого ответа на любой поставленный вопрос. Решение реализовано  с помощью варианта  модели “Смысл<=>Текст”, представленного в системе ЭТАП. Работа может быть использована при создании диалоговых систем, работе с базами знаний и т. п.

 

 

  1. Введение

 

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

Наши исследования в данной тематике ведутся с помощью аппарата модели “Смысл<=>Текст”, конкретнее того её варианта, на основе которой построена система ЭТАП. В частности используются синтаксические структуры (СинтС) и словарные статьи, входящие в эту  систему. Благодаря СинтС достаточно легко работать с предложением и его частями. Используются такие возможности СинтС, как автоматическое определение грамматической формы слова и типа связи, представление предложений в виде дерева и т.п.

 

 

  1. Алгоритм построения вопросов

 

Алгоритм построения уточняющего вопроса продемонстрируем на примерах. Пусть

имеется правильная СинтС, и требуется задать вопрос к какому-либо члену предложения. Вместо слова, к которому задаётся вопрос, иногда может стоять лишь его грамматическая форма (например, в случае, когда система пополняет базу знаний). Достаточно общая форма вопроса к члену предложения w имеет следующий вид:

Вопрос(w) = PR(w) + Q(s,  f, w) + |(U++)\w| + |(A++)\(Z++)| , где:

Функция PR(w) возвращает (если он существует) предлог, являющийся родителем ближайшего (по связям вверх) существительного (обозначим его за U) к слову w; если w – существительное, то U = w.

Q(s, f, w) генерирует вопросительное слово в нужной форме по типу связи s, форме слова f и самому слову w, к которому задаётся вопрос. Вообще говоря, ЭТАП не обладает всеми нужными возможностями для реализации данной процедуры. В частности это касается комбинаторного словаря системы. В связи с этим есть предложение добавить туда такие индексы как тип обстоятельства (места, времени и т.п.), которым может быть в предложении данное слово. Однако и без этого тоже можно генерировать функцию Q, но с некоторой погрешностью. Например:

Q(«обст.места», …) = «где»

Q(сказуемое, настоящее время, …) = «что делает»

Q(предик, (сущ, од, ед, д.п.), …) = «кому»

Q(опред, (прил, ед, жен, в.п.), …) = «какой» и т.п.

В данной статье рассмотрена частичная реализация функции Q. Она будет пополняться по мере развития алгоритма.

X++  = X со всеми поддеревьями в морфологическом представлении.

|Х| возвращает текст, построенный на основе дерева Х по алгоритмам ЭТАПа.

Формула (U++)\w используется для связи слова, к которому задаётся вопрос и ближайшего существительного. Если мы задаём вопрос к существительному, то она ничего не выдаёт ((U++)\(U++)=Æ).

(A++)\(Z++) возвращает поддерево, находящееся в интервале от вершины до слова (с предлогом), к которому задаётся вопрос. Символом A обозначается вершина дерева СинтС, Z принимает следующие значения:

(1) PR(w), если PR(w)¹ Æ;

(2) U, если PR(w) = Æ и U¹Æ;

(3) w в противном случае.

 

Рассмотрим следующее предложение:

Про этого человека написано очень много книг, но никакой ясности ни у кого до сих пор нет.

СинтС для этого предложения имеет следующий вид:

 

 

 

Пронаблюдаем работу алгоритма на примере порождения вопроса к слову человек.

PR(человек) = “про”.

В данном случае Q определяется однозначно:    

Q( “предл”, (S,ВИН,ЕД,МУЖ,ОД), человек ) = “кого”.

U++- это:

 

 

|U++| = ”этот человек”.

|(А++)\(Z++)| = “очень много книг, но никакой ясности ни у кого до сих пор нет”.

В итоге мы получили Вопрос(человек)= “Про кого написано очень много книг, но никакой ясности ни у кого до сих пор нет?”.

Рассмотренный алгоритм может быть использован не только для русского, но и, например, для английского и других языков. Причем в английском языке, из-за его большей формализуемости, получается меньше исключений,. К тому же для него можно использовать существующие системы, содержащие большой лингвистический материал, такие как WordNet и др.

Рассмотрим предложение на английском языке:

The default virtual disk type allows you to configure virtual disks up to 2 GB.

Зададим вопрос к слову “type”.

Q( “predic”, (S,SG), type) = “what”.

|(А++)\(Z++)| = “allow you to configure virtual disks up to 2 GB ”.

В английском языке также нужно использовать правила задания вопросительных предложений, т.е. порядок слов, формы некоторых слов(например some/any) и т.п.

Получили: Вопрос(type)= “What does allow you to configure virtual disks up to 2 GB?”.

 

 

Конечно, алгоритм, приведенный у нас, неполон, существуют исключения, касающихся общей формы вопроса для некоторых частей предложения, задания вопросов к сложным предложениям и некоторые другие. Например, если связь w (обозначим ее s(w)) –  ‘квазиагент’, то формула принимает вид:

Вопрос(w) = PR(w) +|(V++)\w| + Q(s,F,w) +|(A++)\(Z++)|, где V – ближайшее по связям вверх существительное.

Рассмотрим пример:

 Он рассмотрел детали их реализации.

 

Вопрос(реализации)= “Детали чего он рассмотрел?”.

 

Также известны исключения в случаях:

  • Если w – сказуемое, то формула принимает вид:

Вопрос(w) = Q(s,F) + (G++),

где s(G) = ‘предик’.

  • Если связь w (обозначим ее s(w)) – ‘предл’ и s(PR(w)) = ‘атриб’, то формула принимает вид:

Вопрос(w) = PR(w) + Q(s,F) + (A++)\(Z++).

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

 

 

  1. Алгоритм задания вопросов

 

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

Алгоритм использует некоторые лексические функции системы ЭТАП и СинтС. Необходимо отметить, что для решения данной задачи использование СинтС не является оптимальным, и алгоритм получается довольно громоздким из-за особенностей естественного языка. Поэтому лучше было бы использовать язык представления семантики (Sense Language). В настоящее время в качестве такого языка можно использовать UNL (Universal Networking Language, www.unl.org).

 

Предположим, что искомая информация явно содержится в тексте, т.е. для ее извлечения не требуется делать логические выводы.

 

Последовательность действий:

 

Общие приготовления

Строим синтаксические структуры (СинтС) вопросительного предложения и текста.

     (реализовано в системе ЭТАП)

 

Преобразуем причастные обороты в отдельные предложения.

Пример: Лист, упавший на землю, пожелтел. à  Лист упал на землю. Этот лист пожелтел.

 

Преобразуем деепричастные обороты в отдельные предложения.

Пример: Она оглянулась, проходя мимо. à Когда она проходила мимо, она оглянулась.

 

Частицы «не» объединяем со словами, к которым они относятся в одну вершину.

 

Подготовка СинтС вопроса

Отсечение из СинтС вопроса ветвей со связью «вводн», т.е. вводных слов.

Пример: Наконец, как его зовут? à Как его зовут?

 

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

Пример: Is anybody at home?

à

 

Часто для повышения релевантности ответа можно удалить из СинтС вопроса вершины, содержащие указательные местоимения.

Пример: Сколько стоит этот проект? à Сколько стоит проект?

 

Подготовка СинтС текста

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

Пример: Маша увидела смятый листок. Она сразу подняла его.

 

 

Предложения с однородными членами, связанные союзом «и» или запятой разбиваем на несколько. Аналогичную операцию проделываем со сложными предложениями.

Пример: Маша и Вася пойдут гулять. à Маша пойдет гулять. Вася пойдет гулять.

 

Существуют две категории вопросов: те, которые требуют ответа в форме «да/нет»  (бинарные) и задаваемые к конкретным членам предложения (открытые).

Построение ответа на открытый вопрос сводится к построению ответа на бинарный следующим образом:

  1. По типу связи и вопросительному слову находим слова – кандидаты на ответ.
  2. Для каждого из них задаем бинарный вопрос.
  3. Если получаем положительный ответ, значит данный кандидат – ответ.

 

Бинарные вопросы реализуются следующим образом:

Производим последовательное наложение СинтС вопроса на СинтС текста, начиная с вершины дерева следующим способом:

Пусть tp – текущая вершина в тексте; qp - соответствующая вершина вопроса.

Если tp¹not(tp1) (т.е. в tp не содержится отрицание), то проверяем равенства

Класс(syn, qp)=Класс(syn, tp);

Класс(syn, qp)=Класс(syn, Gener(i, tp)) для некоторого iÎ[1,¥).

Иначе, если tp=not(tp1):

Класс(syn, qp)=Класс(syn, not(tp));

Класс(syn, Gener(i, qp)) =Класс(syn, not(tp)) для некоторого iÎ[1,¥).

Если какое-нибудь равенство выполнено, то ответ «да».

 

Если Класс(syn, qp)=Класс(syn, not(tp));

Класс(syn, Gener(i, qp)) =Класс(syn, not(tp)) для некоторого i,

то ответ «нет».

 

Иначе информации для ответа недостаточно.

 

Здесь:

Класс(тип, слово) – класс эквивалентных слов по отношению типа. Например, если тип=syn, то рассматриваем класс синонимов данного слова.

Gener(n, слово)=Gener(…(Gener(слово))…) n раз, где Gener(слово) – ближайшее обобщение данного слова (реализовано в ЭТАПе).

Примеры:

Класс(syn, «соединение»)={соединение, слияние, …};

Gener(n, «лингвистика»)={наука} для некоторого n;

Gener(¥, <глагол>)={do};

Для повышения точности алгоритма можно использовать классы взаимоисключающих свойств, например: {{man, fellow,…}, {girl, woman,…}}.Один и тот же объект не может одновременно принадлежать двум подклассам синонимов общего класса взаимоисключающих понятий.

Если со словом, к которому задается вопрос использовалось вводное слово, можно добавить его к ответу. Например: “Конечно, да”.

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

 

Рассмотрим пример: Маша увидела смятый листок. Она сразу подняла его.                

После преобразования СинтС текста получаем:

 

Зададим вопрос: Кто поднял листок?

СинтС вопроса выглядит так:

Ищем слова, являющиеся кандидатами на ответ. Это: Она(=Маша), он(=листок).

Для каждого претендента задаем general question: Маша подняла листок?

Листок поднял листок?

Производим наложение деревьев (с использованием синонимов и эквивалентных понятий). Получается наложение на первый вопрос, следовательно, положительный ответ получаем  на первый вопрос. Теперь по СинтС этого вопроса ЭТАП генерирует ответ.

 

 

  1. Заключение.

 

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

 

 

Литература

 

  1. Апресян Ю.Д., Богуславский И.М., Иомдин Л.Л., Лазурский А.В., Перцов Н.В., Санников В.З., Цинман Л.Л. Лингвистическое обеспечение системы ЭТАП-2. М., Наука, 1989, 295 с.
  2. Мельчук И.А. Опыт теории лингвистических моделей "Смысл <-> Текст". Семантика, синтаксис. М.,Шк.: Яз. рус. культуры ,1999, 345 с.

 

 

Automatic questioning and answering (or, answer searching) using ETAP

linguistic system

  1. G. Helfenbein, V. P. Lehelt, A. A. Lipatov, V. V. Shilo

 

 

Ключевые слова: ETAP, dialog, question, answer, syntax structure, text analysis, sense, text, search, generation, creation.

 

In this work we try to look at  the problem of forming dialogues between humans and computers by creating algorithms of asking questions and searching answers,  which are actually included in a text. We solve this problem using “meaning<->text” model, namely ETAP system. Our algorithms are based on syntax trees and entries of ETAP combinatorial dictionary. Algorithm of questioning generates questioning word and then creates a text, based on a part of the syntax tree, which does not include the word, to which the question was asked. Answers searching program uses inverted formulas. These programs can be used not only for Russian language, we've also made algorithms for English language. This can be useful for educational programs, to enrich knowledge and reflective systems.