Извлечение знаний из текстовой информации с помощью метода шаблонов

УДК 004.853 А. Л. Смоляков

Вестник СПбГУ. Сер. 10, 2008, вып. 2

ИЗВЛЕЧЕНИЕ ЗНАНИЙ ИЗ ТЕКСТОВОЙ ИНФОРМАЦИИ С ПОМОЩЬЮ МЕТОДА ШАБЛОНОВ

1. Введение. С каждым днем в сети Интернет появляется огромное количество новой текстовой информации. Однако почти вся она плохо организована, потому в этом огромном объеме знаний очень сложно что-либо найти, особенно когда требуется более сложный поиск, чем поиск по ключевым словам (на основе которого работают многие популярные поисковые системы, например www.google.com). Данную проблему призваны решить системы инженерии знаний.

Так, все большую популярность приобретает концепция семантической сети (semantic web) [1], которая предлагает вместе с текстовой информацией хранить структурированные знания, описанные с помощью языков описания знаний. Однако такой подход применим только для вновь создаваемых документов. Это одна из причин, по которой возникают системы, позволяющие строить базы знаний из уже существующих текстовых документов.

В настоящей статье описана система извлечения знаний из текстовой информации на основе метода шаблонов (KnowledgeProspector.Net). Данная система является частью проекта Knowledge.Net [2-4], главная цель которого - разработка методов интеграции инженерии знаний и инженерии программ на основе расширения языка C# конструкциями представления знаний.

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

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

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

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

• Морфологический словарь Диалинг [5]. В русском словаре содержится около 170 тыс. лемм русского языка, в английском - более 100 тыс. Такой словарь позволяет производить морфологический анализ слов, узнавать их грамматические характеристики.

• Xml-словарь описывает дополнительные конструкции для перевода слов естественного языка в сущности. Например, для слова «подмножество» можно задать

© А. Л. Смоляков, 2008

свойство, которое позволит при последующем анализе сущностей рассуждать о отношении между сущностями, связанными этим словом. То есть появится возможность из предложения «завод - это подмножество зданий» сделать вывод, что «завод» - подмножество «зданий».

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

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

Настоящие сущности - те, из которых состоит граф знаний. Эти сущности и связи между ними являются результатом работы программы. Класс, свойство, тип данных и индивид принадлежат к этому виду.

Поясним значение некоторых видов сущностей (значение других совпадает с аналогичными понятиями в OWL [6]). Сущность разделитель представляет различные символы языка, которые сами по себе не имеют значения без контекста, в котором употреблены (знаки точки, запятой, скобки...). Есть два подвида сущности тип данных: время и целое число. Сущность связь образуется из слова, которое было описано в Xml-словаре как связь между другими словами. Содержит такие параметры как свойства (транзитивная, симметричная, функциональная) и тип связи (отношение, которое будет построено при семантическом анализе сущностей). Сущность меняющаяся появляется, если слову естественного языка подходит более чем одна сущность предыдущих видов. При семантическом анализе такая сущность будет выступать в роли каждой из сущностей, которой она может соответствовать. Если шаблон, в который входила одна из форм меняющейся сущности, выполнится успешно, меняющаяся сущность будет заменена новой. Типом новой сущности будет тот, проверка которого произошла успешно в шаблоне. Если слову не подошел ни один, ни другой вид сущности, то ему ставят в соответствие неизвестную сущность.

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

4-Л. Отношения. Они применяются для связей между сущностями в графе знаний и могут быть построены только между настоящими сущностями.

В системе есть следующие виды отношений:

• отношение между свойством и классом, фактически при этом классу приписывается данное свойство;

• отношение подкласс применяется для связи двух классов, обозначает, что один класс является подклассом другого;

• отношение подсвойство применяется для связи двух свойств, обозначает, что одно свойство является подсвойством другого;

• отношение эквивалентность обозначает эквивалентность между двумя сущностями, применяется к сущностям типа класс;

• отношение между двумя классами позволяет представить многие отношения между классами, например «больше», «полезнее», «расположен». Оно строится как на основе сущности связь, так и при помощи шаблонов;

• отношение условное правило позволяет указать связь между двумя классами и свойство. При этом, если для первого класса свойство верно, то оно верно и для второго класса.

4-.2. Описание шаблона. Шаблоны являются эффективным и удобным средством построения графа знаний. С их помощью может быть реализовано распознавание дат, чисел прописью, ФИО людей. Также шаблоны позволяют создавать новые сущности, которые могут участвовать в дальнейшем анализе текста. Используя их, можно организовать особую обработку частицы «не» и вопросительных предложений. Многие из шаблонов не зависят от языка, на котором написан исходный текст. Также в файле настроек можно указывать, для каких языков надо применять шаблон.

В шаблоне указывается приоритет (Priority) - положительное целое число. Шаблон с большим приоритетом будет выполнен раньше, чем с более низким. Если приоритеты совпадают, то шаблоны выполняются параллельно. Не рекомендуется, чтобы два шаблона, которые выполняют схожие действия, имели одинаковый приоритет, так как это нарушит их работу: например, шаблон, который может удалить некоторую сущность из набора, и шаблон, который будет использовать эту сущность при построении связи. Задаются ограничения на набор сущностей (Pattern) (будем называть эту часть регулярным выражением над сущностями), для которых будут применены обработчики (handler). Для описания шаблонов используется XML:

CTemplate Priority="10001" Pattern="\#EЛNT \#W.Month \#ЕЛЭТ">

CHandler Name="Replace" From="0" Count="3" >

<CreateEntityHandler Name="CreateDateTime"

Argument s="day=0, month=l, year=2" />

</Handler>

</Template>

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

Ограничения на сущность заключаются в квадратные скобки, в случае, когда ограничение состоит из одного элемента, скобки можно опустить. Ограничения на сущность описываются с помощью следующих логических операндов: бинарное «&» - логическое И, бинарное «—» - логическое ИЛИ, унарное «*» - логическое НЕ. Если никакой бинарный операнд не указан, то по умолчанию будет считаться операнд ИЛИ. Порядок выполнения операндов показывается с помощью круглых скобок. Если скобки не даны, то порядок определяется приоритетом операндов (самый высокий у НЕ, потом И, затем ИЛИ). Порядок в случае одинаковых приоритетов - слева направо.

Существует два вида элементов ограничения. Это мета-элемент, проверка которого будет осуществляться с помощью одного из правил (описывается далее). Указывается с помощью символа # и последующего описания правила. Другой вид элементов ограничения - это слово на естественном языке (любая последовательность символов,

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

Существуют следующие виды правил:

• #Е - проверки принадлежности сущности к некоторому классу. Класс указывается через точку после #Е. В частности, выражение #Е.Р (сокращение от property) означает проверку на то, является ли вид сущности свойством;

• #М - проверка, к какой части речи относится слово, из которого была построена сущность. Часть речи указывается через точку после #М. Например, #М.Numeral -это проверка на часть речи числительное;

а _ проверка соответствия одному из заранее заданных подшаблонов. Имя подшаб-лона указывается через точку после #Н. Применяется для облегчения создания шаблонов: наиболее сложные, часто используемые части выражения можно задавать отдельно от регулярного выражения, для того чтобы далее давать только ссылки на них.

Так, держатель <ClauseHolder Name="Class">

dtem Pattern="[#E.P #M.Adjective]* #E.C" Index="l" /> dtem Pattern=" [#E.P #M. Adjective] ,

[#E.P #M.Adjective] #E.C" Index="2" />

</ClauseHolder>

показывает, что #H.Class в регулярном выражении обозначает как сущность класс, предваренную сущностями свойство (или прилагательным), так и сущность класс, предваренную двумя свойствами (или прилагательными), разделенными запятой;

а _ проверка принадлежности к одному из заданных специальных классов слов. Класс указывается через точку после #W. Используются для указания специальных слов и их значений (могут быть опущены).

Вот пример держателя месяцев:

<WordHolder Name="Month">

dtem Word="HHBapb" Value="l" /> dtem Word="<}>eBpanb" Value="2" /> dtem Word="MapT" Value="3" />

</WordHolder>

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

Ограничение на встречаемость записывается сразу после ограничений на сущность. Если ничего не указано, значит, данному элементу должна удовлетворять ровно одна сущность, символ «+» - элементу должна удовлетворять как минимум одна сущность, символ «*» обозначает, что элементу могут удовлетворять сколько угодно сущностей (в том числе и ни одной), а символ «?» - элементу может соответствовать не более чем одна сущность.

Например, выражение [#Р #M.Adjective]+ #С означает все наборы сущностей, которые можно разбить на два непустых подмножества, в первом из которых все сущности будут свойствам,и или иметь часть речи имя прилагательное, а во втором будет только одна сущность типа класс. А выражение #С есть подмножество #С - все наборы из четырех сущностей, первая и четвертая из которых являются классами, а значения второй и третьей равны соответственно «есть» и «подмножество». Благодаря модулю

морфологической обработки слов, в большинстве случаев достаточно указать слова в нормальной форме (т. е. вместо слов «красивый», «красивая», «красивые» достаточно дать только слово «красивый»),

4-4• Язык описания обработчиков набора сущностей. Язык предназначен для описания действий, которые надо совершить над набором сущностей, удовлетворяющих регулярному выражению шаблона. Существует три основных типа обработчиков: создающие новые сущности, создающие новые связи и производящие некоторые действия над обрабатываемым набором. Обработчики, создающие новые сущности и связи, добавляют их в граф знаний. Если же надо добавить созданную сущность в набор, то можно воспользоваться обработчиком заменить. Он позволяет заменить несколько исходных сущностей на новую сущность. Например, это может быть полезно при создании сущности время, так как она состоит из нескольких слов/сущностей («январь 1876 года»).

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

1) заменить - предназначен для замещения нескольких сущностей из набора на новую сущность;

2) создать сущность время - создает новую сущность типа время;

3) создать отношение свойство-класс - предназначен для связывания свойства с классом;

4) создать отношение подкласс - связывает класс с подклассом;

5) создать условное правило - создает условное правило «если..., то... »;

6) создать отношение между двумя классами - связывает два класса заданным отношением.

Например, если применить шаблон

<Тетр]^е Ргз.огз^у=" 10000"

Ра-Иегп="что #Е.Р #Е.С , ? тем? [он она они]? #Е.Р">

<Напс11ег Ыате="РЕ" Аг§шпе1гЬз="1, 2" />

СНапсНег Ыате="РЕ" Аг§ите1гЬ8="6, 2" />

<Напс11ег Ыате="Ые¥Со1кИ'Ыопа1Еи1е" Аг§ите1гЬз="2, 1, 6" />

</Тетр]^е>

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

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

Пусть в графе знаний есть классы А, В и С. Пусть они связаны следующим образом: •класс А - подкласс В,

•класс В - подкласс С,

•класс А - подкласс С.

Тогда третье отношение является избыточным и будет удалено из графа знаний. Пусть в графе знаний есть классы А, В и свойство X. Пусть они связаны так:

•класс А - подкласс В,

•класс В обладает свойством X,

•класс А обладает свойством X.

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

6. Сохранение полученных знаний и загрузка их для расширения. Результаты работы можно сохранять в нескольких форматах, например Knowledge.Net [7] - основном формате представления знаний в системе. Рекомендуется сохранять полученные знания именно в него, так как он позволяет наиболее полно их описывать.

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

Если требуется сохранить результаты в другие форматы, то можно воспользоваться конвертором [8] из формата Knowledge.Net в KIF [9], а далее конвертировать знания во многие другие форматы.

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

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

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

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

Summary

Smolyakov A. L. Template-driven knowledge extraction from text information.

The paper describes the template method - the approach to build knowledge databases from unstructured text information. The system that implements this method is designed and developed.

1. John Davies, Dieter Fensel, Frank van Harmelen. Toward the semantic web. Ontology-driven Knowledge Management. Chichester: John Wiley & Sons Ltd., 2003. 288 p.

2. Сафонов В. О., Новиков А. И., Сталин М. Л., Смоляков А. Л., Черепанов Д. Г. Научно-технический отчет о выполненной работе по конкурсу грантов в сфере научной и научно-технической деятельности Санкт-Петербурга по договору № 67/05 от 23 мая 2005 г. «Knowledge.NET - расширение языка Сф для представления гибридных знаний, основанных на концепции онтологии, и набор инструментальных средств для извлечения знаний, их представления, управления знаниями, их визуализации и распространения для платформы Microsoft.NET».'em., 2005. 98 с.

3. Сафонов В. О., Новиков А. И., Сталин М. Л. и др. Интеграция методов программной инженерии и инженерии знаний: система управления знаниями Knowledge.NET (ч. I) // Компьютерные инструменты в образовании. 2005. № 5. С. 52-68.

4. Сафонов В. О., Новиков А. И., Сталин М. Л. и др. Интеграция методов программной инженерии и инженерии знаний: система управления знаниями Knowledge.NET (ч. II) // Компьютерные инструменты в образовании. 2005. № 6. С. 42-56.

5. Автоматическая обработка текста // http://www.aot.ru.

6. Web Ontology Language // http://www.w3.org/TR/owl-guide.

7. Новиков А. В. Язык представления знаний Knowledge.NET // http://www. knowledge-net ,ru.

8. Сталин М. В. Конвертация знаний из формата Knowledge.NET в стандартный формат представления знаний - KIF // http://www.knowledge-net.ru.

9. Knowledge Interchange Format // http://logic.stanford.edu/kif/dpans.html.

Статья рекомендована к печати проф. Л. А. Петросяном.

Статья принята к печати 4 декабря 2007 г.