Научно-производственный центр Интелтек Плюс

Андреев А.М., к.т.н., доц. МГТУ им. Н.Э.Баумана

Березкин Д.В., к.т.н., директор НПЦ Интелтек Плюс

Брик А.В., аспирант МГТУ им. Н.Э.Баумана

Тел. 177-35-11

Лингвистический процессор
для информационно-поисковой системы

 

Введение

Задача интеллектуальной обработки текстов на естественном языке1) впервые появилась на рубеже 60х—70х гг. С тех пор было предпринято множество различных попыток ее решения [2-6], созданы десятки экспериментальных программ, способных вести диалог с пользователем на естественном языке. Однако широкого распространения такие системы пока не получили — как правило, из-за невысокого качества распознавания фраз, жестких требований к синтаксису “естественного языка”, а также больших затрат машинного времени и ресурсов, необходимых для их работы. Практически во всех системах машинного понимания текста используется ограниченный естественный язык, поскольку полной и строгой формальной модели ни для одного естественного языка пока не создано.

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

В работе [1] описан способ построения многовариантного синтаксического анализатора текстов на естественном языке, использующего метод с недетерминированной стратегией. При этом объектно-ориентированный подход [9] для описания синтагматики позволяет максимально упростить механизм синтаксического анализа при сохранении высокой степени адекватности, присущей процедурным синтагматическим описаниям.

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

Одним из ключевых элементов ИПС с естественно-языковой ориентацией является лингвистический процессор (ЛП), выполняющий роль посредника между пользователем и базой данных, в которой хранится интересующая его информация. Задачей ЛП является преобразование естественно-языкового предложения (или даже целого текста) в некоторый набор семантических структур, являющихся формальным представлением “смысла” исходного предложения или текста. Цель такого преобразования — обеспечить исходные данные для работы поисковых механизмов СУБД.

 

Структура программного продукта

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

Рис. 1. Структура программного продукта

Однако выбранный способ построения синтаксического анализатора [1] требует, чтобы этот блок был выполнен в виде отдельной библиотеки . Таким образом, реальная структура разработанного продукта имеет вид:

Рис.2. Реальная структура разработанного программного продукта

Заметим, что связь между модулями DEMO.EXE и LP.DLL реализуется статическим импортом, а между LP.DLL и SYNT.DLL — динамическим, что позволяет

модифицировать SYNT.DLL без выхода из программы DEMO.EXE.

 

Взаимодействие блоков ЛП при анализе предложения

Ниже представлена общая схема работы лингвистического процессора:

Рис.3. Схема функционирования лингвистического процессора

На схеме показаны основные программные блоки ЛП (прямоугольники), их словарная поддержка (пунктирные прямоугольники), взаимодействие с пользователем (стилизованные диалоговые окна), а также структуры данных, передаваемые между программными блоками. Сплошными линиями показан нормальный ход анализа, пунктирными — действия при ошибках.

Еще раз отметим, что сам лингвистический процессор (библиотека LP.DLL) не имеет средств взаимодействия с пользователем; такие средства должно предоставлять программное окружение ЛП. Также в задачу ЛП не входит прямое взаимодействие с базами данных (БД исходных документов и БД результатов анализа) — эту функцию будет выполнять прикладная программа, использующая ЛП. Поэтому в настоящей разработке хранение исходных и выходных данных упрощено: исходные тексты берутся из обычных текстовых файлов, а результат анализа (фрагмент семантической сети) записываются в двоичный файл во внутреннем формате семантического анализатора.

Рассмотрим подробно каждый блок лингвистического процессора.

 

Блок лексического анализа

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

Блок лексического анализа принимает исходный текст непосредственно от элементов пользовательского интерфейса — а именно, от текстового редактора. Анализируемое предложение попадает на вход лексического анализатора в виде массива ASCII-символов, содержащего прописные и строчные буквы русского алфавита, цифры, знаки пунктуации:

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

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

Указатели на все сформированные таким образом строки анализатор заносит в выходной динамический массив, который является результатом его работы.

Блок морфологического анализа

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

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

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

Основным недостатком декларативных методов является чрезмерно большой объем словаря, порождающий ряд технических проблем:

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

Достоинствами метода является простота (и, как следствие, высокая скорость) анализа, а также универсальность по отношению ко множеству всех возможных словоформ русского языка.

Для процедурных методов время анализа одного слова может быть существенно выше, но объем используемых словарей в небольших системах позволяет загружать словари целиком в оперативную память. Кроме того, такие словари значительно легче создавать, поскольку постоянные параметры каждого слова вводятся однократно, вместе с его основой. Существенным недостатком процедурных методов является отсутствие универсальности. Другими словами, существует большое количество слов, которые нельзя представить в виде суммы неизменной основы и аффикса. (Например, существительное “год”, которое имеет во множественном числе родительного падежа форму “лет”; местоимение “я” и т. д.). В рассматриваемом ЛП применен процедурный метод морфологического анализа, дополненный механизмом обработки таких исключений.

Описание алгоритма

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

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

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

 

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

Если после поиска среди исключений все равно не найдено ни одного варианта, то проверяется наличие у анализируемого слова возвратного суффикса "-СЯ", "-СЬ", или приставок "НЕ-", "НИ-". Если они есть, то они отсекаются от анализируемого слова, и процедура поиска повторяется сначала. При этом морфологические параметры находимых основ модифицируются специальной процедурой.

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

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

Форматы данных

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

Несколько записей составляется для тех слов, для которых поиск в словаре дал неоднозначный результат, т. е. было найдено несколько омонимов.

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

Для каждой лексической единицы (вне зависимости от того, одна или несколько записей было для нее сформировано) создается так называемый “массив омонимов”, в который включаются все сформированные записи:

Рис.4. Массив омонимов

Указатели на все созданные массивы омонимов анализатор заносит в выходной массив результатов морфологического анализа:

Рис.5. Массив результатов морфологического анализа

Лингвистическая информация, необходимая для выполнения морфологического анализа, представлена в словарных файлах. Морфологический анализатор использует следующие словарные файлы:

    • файл словаря основ;
    • файл аффиксов для различных частей речи;
    • файл исключений.

Наиболее важным словарным файлом для выполнения морфологического анализа является файл основ BASES.TBL. Он представляет собой двоичный файл, содержащий последовательные записи фиксированной длины (60 байт). Каждая запись содержит морфологическую и, возможно, семантическую информацию для одной основы. Структура полей такой записи (будем называть ее записью основы) приведена в Табл. 1. Заметим, что для омонимов в файле основ может присутствовать несколько записей с одинаковым текстом основы.

Смеще-ние

Длина

Название поля

Содержание

Примечание

0

25 байт

TheWord

Текст основы

Для слов-исключений нулевой байт содержит символ *,
а два следующих — порядковый номер исключения

25

1 байт

Part

Части речи

См. Табл. 3

26

6 байт

Signs

Постоянные
морфологические
признаки

См. Табл. 3

32

28 байт

SemLinks

Семантические ссылки

При морфологическом анализе не используются

Табл.1. Структура полей в записи основы

Если часть речи, определяемая полем Part, является изменяемой, то нулевой байт поля Signs (смещение 26) содержит номер типа аффиксов, соответствующий данной основе. Все типы аффиксов хранятся в другом словарном файле — ENDINGS.TBL. Это текстовый файл в кодировке Windows (кодовая страница ANSI 1251), содержащий разделы следующего вида:

[часть речи]

1. -аффикс_1, -аффикс_2, ... , -аффикс_К ;

2. -аффикс_1, ... , ... , -аффикс_К ;

...

35. -аффикс_1, ... , ... , -аффикс_К ;

Здесь [часть речи] — название части речи, к которой относятся перечисляемые в этом разделе типы аффиксов. Например, [СУЩЕСТВИТЕЛЬНЫЕ], [ПРИЛАГАТЕЛЬНЫЕ] и т. д. Некоторые части речи могут использовать один и тот же раздел. Например, прилагательные, причастия и порядковые числительные используют общий раздел [ПРИЛАГАТЕЛЬНЫЕ], поскольку эти части речи имеют сходные типы аффиксов. После имени раздела следуют пронумерованные строки, каждая из которых определяет один тип аффиксов. Номер строки и есть номер типа аффикса, содержащийся в нулевом байте поля Signs в записи основы. После номера строки следуют цепочки символов “-аффикс_1”, “-аффикс_2” и т. д., являющиеся аффиксами словоформы во всех возможных вариантах ее изменения. Число аффиксов в строке свое для каждой части речи; оно равняется числу возможных словоформ для нее. Например, для существительных таких цепочек-аффиксов будет 12, поскольку существительные могут изменяться по шести падежам и двум числам.

Особым образом морфологическая подсистема ЛП обрабатывает слова-исключения, то есть слова, у которых неизменной основы нет. Такие слова хранятся в отдельном файле исключений EXEPTION.TBL. Этот файл имеет точно такой же формат, что и файл аффиксов ENDINGS.TBL, но вместо аффиксов в нем содержатся полные словоформы. Формальные основы для таких слов-исключений хранятся в общем файле основ BASES.TBL, однако поле TheWord в этих записях начинается с символа *, который является признаком исключения. За ним следуют два байта, содержащие номер строки в файле исключений, соответствующей данному слову.

При инициализации морфологического анализатора выполняется загрузка файла BASES.TBL в соответствующий динамический массив, а при закрытии — сохранение массива в этом файле. Таким образом, все операции со словарем основ во время работы анализатора выполняются без обращения к диску. Используемый динамический массив может хранить не более 16383 элементов; именно эта цифра и определяет то наибольшее количество основ, с которым может работать лингвистический процессор. Суммарный объем памяти, необходимой для хранения словаря основ, при этом не превышает 60 * 16383 = 982980 байт, что вполне допустимо при работе в среде Windows. Заметим, что число 16383 ограничивает только количество основ, а не словоформ; каждая основа может порождать одну или несколько словоформ в зависимости от части речи (для существительного — 12, для прилагательного — 24, для глагола — 10 и т. д.). Таким образом, общее число словоформ в морфологической подсистеме реализованного ЛП может достигать примерно 100 000.

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

 

Интерфейс пользователя

Доступ к морфологическому словарю

Для просмотра, редактирования, добавления и удаления записей в морфологическом словаре модуль доступа (ДО) содержит специальное диалоговое окно, реализованное в файле MORPHDLG.PAS. В левой части этого окна отображается список всех основ, в правой — постоянные морфологические признаки для выбранной в левом списке основы. Кроме морфологических признаков, окно показывает также все возможные словоформы для выбранной основы.

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

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

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

Аналогично обстоит дело и при вводе слов-исключений.

Просмотр результатов анализа

Для вывода на экран результатов морфологического анализа модуль ДО содержит окно просмотра, реализованное в файле MORRES.PAS. Окно содержит два списка. В левом списке перечислены все текстовые единицы (слова, числа, знаки препинания), найденные в анализируемом фрагменте. Правый список показывает, какие интерпретации возможны для выделенной в левом списке лексической единицы.

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

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

 

Блок синтаксического анализа

Обзор различных методов построения синтаксического анализатора для текстов на естественном языке, а также подробное описание концепции анализатора, реализованного в данном проекте, приводятся в [1]. Здесь же коротко перечислим основные особенности реализованного блока синтаксического анализа :

  • многовариантный анализ с последовательной выдачей вариантов;
  • возможность изменения последовательности выдачи вариантов;
  • возможность введения ограничений на время выполнения анализа;
  • выдача частичных вариантов разбора при невозможности сформировать ни одного полного варианта;
  • отсутствие ограничений на тип условий, проверяемых правилами синтагматики, а также на действия, выполняемые правилами;
  • использование в качестве синтагматического словаря файла с исходными текстами правил анализа, записанными на языке Object Pascal;
  • возможность автоматически генерировать исходные тексты для вновь создаваемых правил анализа;
  • реализация в виде отдельной DLL-библиотеки, допускающей перекомпиляцию без выхода из основной программы.

 

Описание алгоритма

Блок синтаксического анализа реализован в файлах SYNTAX.PAS и RULES.PAS. Первый из них реализует поддержку общих механизмов синтаксического анализатора, а второй — описания конкретных правил, используемых при анализе. Таким образом, файл RULES.PAS можно рассматривать как своего рода “словарь” правил синтагматики.

Анализатор позволяет использовать две основных стратегии, отличающиеся последовательностью применения правил — а значит, и последовательностью обхода дерева вариантов разбора.

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

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

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

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

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

Когда все правила во всех рабочих позициях испробованы, процедура анализа завершается. Если при этом оказывается, что ЧислоСлов = 1, то это означает, что анализ выполнен полностью. Эта единственная ТЕ содержит в себе вариант синтаксической структуры исходного предложения. Если же ЧислоСлов > 1, значит, полную синтаксическую структуру предложения сформировать не удалось, и присутствующие в массиве ТЕ являются структурами фрагментов исходного предложения. В обоих случаях сформированный массив ТЕ передается в вызывающую подпрограмму в качестве результата анализа (на блок-схеме это отображено блоком “Сохранить результат”).

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

 

Форматы данных

Исходными данными для работы синтаксического анализатора является массив результатов морфологического анализа. В ходе анализа основным элементом данных является текстовая единица (ТЕ).

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

Сразу после инициализации синтаксический массив имеет структуру, полностью изоморфную структуре массива результатов морфологического анализа:

Рис.6. Синтаксический массив перед началом анализа

В ходе выполнения анализа каждое правило при соблюдении некоторых условий производит группировку двух или нескольких контейнеров (обычно соседних) в контейнер высшего уровня. Однако все условия правил оперируют непосредственно с признаками ТЕ, а не с контейнерами, в которых эти ТЕ содержатся. Поэтому возможна ситуация, когда для одних ТЕ из данного контейнера условие выполняется, а для других нет. В таких случаях условие считается верным и группировка осуществляется, однако из группируемых контейнеров удаляются все ТЕ, для которых условие не выполняется. Пусть, к примеру, некоторое правило применяется в первой позиции приведенного выше синтаксического массива. Правило содержит условие группировки, которому в синтаксическом массиве удовлетворяют пары [ТЕ 1.1, ТЕ 2.1], [ТЕ 1.3, ТЕ 2.2] и [ТЕ 1.4, ТЕ 2.2]; при этом первая группируемая ТЕ является главной. В результате применения этого правила синтаксический массив примет вид:

Рис.7. Синтаксический массив после операции группировки

После такой группировки текстовая единица ТЕ 1.3 оказалась исключенной из общей синтаксической структуры.

Что касается форматов словарной поддержки синтаксического анализа, то понимаемый в обычном смысле синтагматический словарь здесь отсутствует. Все правила хранятся оттранслированными непосредственно в машинный код в составе библиотеки синтаксического анализатора SYNT.DLL. Однако файл с исходным текстом всех правил анализа RULES.PAS входит в комплект поставки лингвистического процессора и может быть модифицирован пользователем, а сама библиотека организована таким образом, что может быть перекомпилирована без выхода из основной программы (см. раздел “Интерфейс пользователя”). В итоге файл RULES.PAS может рассматриваться как своего рода “словарь” правил; от традиционного словаря синтагматики его отличает только то, что он написан на языке Object Pascal и что после модификации его необходимо перекомпилировать.

Файл содержит четыре основных части.

Первая из них представляет собой обычную интерфейсную часть модуля на языке Object Pascal. Она содержит декларацию базового объекта TRule и служебных функций InitRuleList и DoneRuleList.

Вторая часть содержит декларацию объектов для всех конкретных правил анализа. Поскольку использование этих объектов за пределами модуля RULES не допускается, эта часть помещена в раздел Implementation. Чтобы утилита автоматического создания правил RuleExpert могла легко найти эту часть в тексте файла, часть завершается специальным комментарием {RXP_DECLARE}.

Третья часть содержит реализацию служебных функций InitRuleList и DoneRuleList. Первая из них создает рабочий список правил, вторая уничтожает его. Доступ к тексту функции InitRuleList также необходим утилите RuleExpert, поэтому этот текст отмечен специальным комментарием {RXP_INIT}.

Основная, четвертая часть включает в себя реализацию методов для всех объектов-правил, в том числе и для базового объекта TRule. Эта часть и представляет собой в чистом виде словарь синтагматических правил, записанных на языке Object Pascal. Для доступа утилиты RuleExpert к этой части она содержит специальный комментарий {RXP_IMPLEMENT}.

 

Интерфейс пользователя

Настройка правил

Для настройки синтаксического анализатора в программе предусмотрено соответствующее диалоговое окно (файл RCFG.PAS). Оно позволяет задавать приоритет каждого правила (целое число от 0 до 255; при значении 0 правило не используется), выбирать одну из двух стратегий анализа, а также устанавливать лимит времени на выполнение синтаксического анализа. Установленные значения могут быть сохранены в файле конфигурации LP.CFG.

Кроме того, пользователю предоставляется возможность написания собственных правил синтаксического анализа. Для этого предназначена кнопка “Новое...” . При нажатии на нее появляется окно утилиты RuleExpert, в котором пользователь вводит название нового правила, его краткое описание (по описанию его можно будет найти в списке правил), а также выбирает тип правила: общего вида, шаблонное или парное. Затем для шаблонного правила потребуется ввести шаблон, т.е. представить группируемый фрагмент в виде некоторой формулы, содержащей идентификаторы и знаки препинания. Например, шаблон

А : “ В “

может использоваться в правиле, группирующем фрагмент с прямой речью.

Необходимо также указать, какие условия будут проверяться в данном правиле. Они могут быть внешними (зависят от всех ТЕ в предложении) или внутренними (зависят только от группируемых ТЕ). Внутренние условия делятся на частные (зависят от параметров одной ТЕ) и взаимные (определяются взаимным соответствием группируемых ТЕ).

Выбрав тип условий, пользователь нажимает кнопку “Генерация”. Затем при наличии шаблона или частных условий появляется диалоговое окно с приглашением ввести условия по каждой ТЕ. Эти условия включают в себя ограничения на часть речи, морфологические признаки, синтаксическую роль.

После ввода всех условий программа создает три фрагмента исходного текста: декларацию объекта, его реализацию и включение в общий список правил. Каждый фрагмент может быть просмотрен и отредактирован пользователем в отдельном окне текстового редактора. Закончив редактирование, пользователь нажимает кнопку “Выход” и возвращается в окно настройки. При этом новые фрагменты текста добавляются в файл RULES.PAS.

Если теперь нажать кнопку “Выход” в окне настройки, программа вызовет компилятор DCC.EXE, который выполнит перекомпиляцию библиотеки SYNT.DLL с обновленным файлом RULES.PAS. Если компиляция прошла успешно, при повторном открытии окна настройки новое правило будет присутствовать в списке. В противном случае пользователю выдается сообщение об ошибке, и файл RULES.PAS восстанавливается из архивной копии.

 

Просмотр результатов анализа

Диалоговое окно для просмотра результатов синтаксического анализа (файл SRES.PAS) сделано немодальным. Оно выводит на экран древовидный список, изображающий синтаксическую структуру, которая сформирована анализатором на данной итерации. Любую нетерминальную ТЕ в списке можно “свернуть” или “развернуть” (спрятать или показать дочерние ТЕ), чтобы проверить правильность структуры на всех уровнях. Размеры списка автоматически изменяются при изменении размеров окна.

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

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

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

 

Блок семантического анализа

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

По роду хранимой информации выделяют два типа семантических сетей: А-сети (концептуальные, интенсиональные) и К-сети (фактуальные, экстенсиональные). Первые содержат множество объектов и отношений, допустимых в данной предметной области; вторые — множество объектов и отношений, присутствующих в описании конкретной ситуации.

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

S = <V,U> ,

где V — множество вершин, U — множество ребер, то семантическое пространство можно обозначить как

P = <W,U`> ,

где W = {V`,{Pi}}, U`НU, V`НV, {Pi} — множество всех семантических пространств, вложенных в пространство P.

Задачей семантического анализатора ЛП является преобразование синтаксического дерева зависимостей в соответствующий фрагмент К-сети. При этом может выполняться проверка допустимости каждого семантического отношения по опорной А-сети. (Сразу отметим, что для работы с реальными документами объем такой А-сети будет весьма велик, и она потребует больших затрат времени на создание и поддержку. В данном проекте механизм сверки с опорной сетью не реализован; поскольку анализируемые документы предполагаются заведомо корректными, такая сверка не является необходимой.)

Кроме того, семантический анализатор должен уметь находить связи между семантическими сетями отдельных предложений в документе — другими словами, анализировать референциальные отношения (см.[8], гл.3).

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

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

 

Описание алгоритма

Согласно [6], из множества слов русского языка по семантическим признакам можно выделить следующие категории:

Рис. 8. Классификация слов русского языка по семантическим категориям

Для лингвистического процессора, предназначенного для работы в составе ИПС, наиболее важной является обработка предикатов действия и их возможных актантов — понятий, характеристик и их значений, а также числительных. Обработка функциональных и пустых предикатов может быть сведена к модификации фрагментов семантической сети, построенных для зависящих от них предикатов действия.

Предикаты действия

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

Анализ моделей управления позволяет естественным образом перейти от синтаксического дерева зависимостей к фрагменту семантической сети. Для этого в простейшем случае достаточно: 1) для каждого предиката отыскать в дереве зависимостей все присутствующие актанты; 2) создать по одной вершине на каждый актант и еще одну — для самого предиката; 3) провести от вершины-предиката дугу к каждой вершине-актанту; при этом имя дуги (ее семантическая роль) выбирается из модели управления в зависимости от актанта. Если модель управления не допускает такого актанта ни в одной семантической роли, остается две возможности: либо данная ТЕ в действительности является по отношению к предикату не актантом, а обстоятельством (тогда эту связь можно отобразить дугой соответствующего типа), либо имеет место ошибка синтаксической структуры.

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

В итоге обработка предикатов действия может быть представлена в виде следующей схемы:

Рис.9. Блок-схема обработки предикатов действия

Понятия, характеристики

При обработке понятий рассматриваются только несколько наиболее распространенных синтаксических конструкций.

В частности, интерес представляет конструкция из нескольких последовательных существительных в родительном падеже. Каждое из них может быть понятием, характеристикой или значением характеристики. Если два понятия стоят рядом, и второе из них — в родительном падеже (например, УКАЗ ПРЕЗИДЕНТА), то чаще всего подразумевается отношение “принадлежности” первого понятия второму. Если зависимая ТЕ является понятием, а главная — характеристикой (например, ПРОДОЛЖИТЕЛЬНОСТЬ ДОКЛАДА), то, во-первых, между ними можно провести отношение “характеристика”, а во-вторых, обычно присутствует еще одна или несколько ТЕ типа значение характеристики, которые относятся к данной характеристике; такие отношения в семантической сети можно отобразить ребрами с именем “значение” (например, ПРОДОЛЖИТЕЛЬНОСТЬ ... — 15 МИНУТ).

Числительные

При семантическом анализе составных числительных создается одна вершина, которая содержит общее численное представление для всех числительных, входящих в данную ТЕ (например, для фрагмента ПЯТЬ ТЫСЯЧ ДВЕСТИ ПЯТНАДЦАТЬ создается вершина, содержащая число 5215).

Если главная ТЕ является числительным, а зависимая — понятием или значением характеристики, то между ними проводится отношение “количество” (для количественных числительных) или “атрибут” (для порядковых). Часто такие фрагменты встречаются при описании дат, однако смысл передается совершенно иной, поэтому имеет смысл обрабатывать даты отдельно (фрагмент ПЕРВОГО МАЯ не означает “май с номером один” ! ).

Имена собственные

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

Решением этого противоречия является использование семантических пространств. Будем считать, что весь документ анализируется в пространстве Р1, данное предложение — в пространстве Р2, а имя собственное — в отдельном пространстве Р3, причем Р1 О Р2 О Р3. Тогда в пространстве Р2 будет создана одна вершина, содержащая полное имя собственное (например, “ЗАКОН ОБ АВТОРСКОМ ПРАВЕ”), а в пространстве Р3 — вершины “ЗАКОН”, “АВТОРСКОЕ ПРАВО”, и т. д. Кроме того, проведем отношение “имя” от вершины с полным именем собственным к любой вершине из пространства Р3.

Если имя собственное содержит внутри себя другие имена собственные (например, “ПОСТАНОВЛЕНИЕ О ПОРЯДКЕ ВВЕДЕНИЯ В ДЕЙСТВИЕ “ЗАКОНА ОБ АВТОРСКОМ ПРАВЕ””), то их аналогичным образом можно рассматривать в пространствах Р4 , Р5 и т. д.

 

Форматы данных

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

Словарная поддержка семантического анализа включает в себя: словарь моделей управления (файл CMODEL.TBL), словарь метапонятий (файл METAWORD.TBL) и словарь семантических ролей (файл SEMROLE.TBL).

Модели управления

Модель управления представляется динамическим массивом, каждый элемент которого (так называемая элементарная МУ) является записью.

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

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

Метапонятия

Метапонятия предназначены для выражения обобщенных понятий, которые используются моделями управления в качестве ограничений. Никакой иерархической структуры метапонятий в данный момент не поддерживается. Однако каждое слово-понятие может иметь до десяти ссылок на различные метапонятия (поля SemLink[0] ... SemLink[9]). Таким образом, можно в явном виде указывать их иерархию, причем индивидуально для каждого слова ! Например, для понятия ЗАКОН сделать последовательно ссылки на метапонятия ДОКУМЕНТ, ТЕКСТ, ИНФОРМАЦИЯ, ОБЪЕКТ, а при реализации механизма поиска считать, что каждая следующая ссылка является обобщением предыдущей.

Все метапонятия хранятся в динамическом массиве, который считывается из файла METAWORD.TBL при инициализации семантического анализатора. Метапонятия могут свободно удаляться и добавляться в массив, поскольку имеют уникальные идентификаторы; все ссылки на метапонятия указывают не порядковый номер в массиве, а идентификатор.

Семантические роли

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

Семантические роли представляются записями со структурой, аналогичной структуре метапонятия:

Все семантические роли хранятся в динамическом массиве, который считывается из файла SEMROLE.TBL при инициализации семантического анализатора. Как и для метапонятий, в этом массиве допускается свободное добавление и удаление записей.

Интерфейс пользователя

Доступ к словарям

Для доступа к словарю моделей управления служит диалоговое окно, реализованное в файле CMDLG.PAS. Это окно может одновременно показывать только одну модель управления. Для перехода к другой МУ служит поле в правом верхнем углу; в этом поле указывается номер требуемой модели управления.

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

Для создания новой модели управления служит кнопка “Новая МУ”, расположенная посередине в нижней части окна. Новая модель управления получает номер, на единицу больший общего количества МУ в словаре, и изначально не содержит ни одной элементарной МУ.

Просмотр и редактирование словаря метапонятий осуществляется с помощью диалогового окна, реализованного в файле MWDLG.PAS. Окно содержит список имеющихся метапонятий, а также кнопку “Новое...”, которая используется для ввода новых метапонятий. При нажатии на нее в список метапонятий добавляется еще одна строка, изначально пустая. В ней пользователь может ввести имя нового метапонятия; до тех пор пока не будет нажата кнопка “Выход”, это имя остается доступным для редактирования.

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

Просмотр и редактирование результатов анализа

Как и для предыдущих этапов анализа, окно просмотра/редактирования семантической сети выполнено немодальным. Оно может представлять семантическую сеть двумя способами: либо в виде списка вершин, для каждой из которых показываются все инцидентные ребра и соответствующие смежные вершины, либо в виде списка ребер, с указанием начальной и конечной вершины для каждого ребра. Для переключения между этими режимами служат две “странички” диалогового окна. В режиме просмотра вершин есть возможность добавлять и удалять вершины (с помощью двух кнопок в нижней части окна), а в режиме просмотра ребер — добавлять и удалять ребра. Для каждого добавляемого ребра из списка вершин выбираются начальная и конечная вершины, а из словаря семантических ролей — имя ребра. Можно также вводить ребра с новыми именами, которых нет в словаре семантических ролей. Однако для того чтобы такие ребра впоследствии (на этапе поиска) могли быть обработаны, их необходимо будет занести в словарь семантических ролей.

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

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

Заключение

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

 

Литература

  1. Ю. М. Смирнов, А. М. Андреев, Д. В. Березкин, А. В. Брик. Об одном способе построения синтаксического анализатора текстов на естественном языке // Изв. вузов. Приборостроение, 1997. Т. 40, № 5 — стр. 34—42.

  2. Компьютерный синтаксический анализ: описание моделей и направлений разработок.— Г. Д. Карпова, Ю. К. Пирогова, Т. Ю. Кобзарева, Е. В. Микаэлян. // Итоги науки и техники (серия “Вычислительные науки”). Т.6. —М.: ВИНИТИ, 1991.

  3. Перспективы развития вычислительной техники: В 11 кн.: Справ. пособие / под ред. Ю. М. Смирнова. Кн. 2. Интеллектуализация ЭВМ / Е. С. Кузин, А.И. Ройтман, И. Б. Фоминых, Г. К. Хахалин. — М.: Высш. шк., 1989.

  4. Искусственный интеллект. — В 3-х кн. Кн.1. Системы общения и экспертные системы: Справочник. /Под ред. Э.В.Попова. —М.: Наука, 1990.

  5. Искусственный интеллект. — В 3-х кн. Кн.2. Модели и методы: Справочник. /Под ред. Д.А.Поспелова. —М.: Наука, 1990.

  6. Попов Э.В. Общение с ЭВМ на естественном языке. —М.: Наука, 1982.

  7. Интеллектуальные системы автоматизированного проектирования БИС и СБИС / В.А. Мищенко, Л.М. Городецкий, Л.И. Гурский и др.; Под ред. В.А. Ми щенко. - М.: Радио и связь, 1988.- 272 с. - стр.109 - 125.

  8. Рубашкин В.Ш. Представление и анализ смысла в интеллектуальных информационных системах. —М.: Наука, 1989.

  9. Буч Г. Объектно-ориентированное проектирование с примерами применения. —К.: Диалектика, 1993.

ИНТЕЛТЕК ИЗДАТЕЛЬСТВО Искусственный интеллект


© НПЦ "ИНТЕЛТЕК ПЛЮС", 1997-2006, E-mail: publish@inteltec.ru