О формальных основах OWL
| Павел Клинов | |
| Pavel Klinov | |
| |
| Род деятельности: | |
|---|---|
| Роль участника: | |
| Основной раздел: | |
| Круг интересов: |
логика, OWL, неопределенность и неточность знаний |
| Дата рождения: |
1981 |
| Место рождения: | |
| Гражданство: | |
| Сайт: | |
| Nickname | |
| О себе: |
Аспирант (университет Манчестера, Великобритания) |
Содержание |
Аннотация
Две недели назад я написал небольшую заметку о неопределенности в онтологиях и был весьма польщен, что она вызвала определенный интерес (в связи с чем, выражаю глубокую признательность всем оставившим комментарии). Как и было обещано, я начал работу над продолжением, в котором я планировал более подробно остановиться на семантике вероятностной неопределенности в OWL. Однако в процессе написания я все больше склонялся к мысли, что стоит все же потратить время на классическую семантику OWL. В итоге я решил вынести это обсуждение в отдельную заметку, так как семантика OWL потребует некоторого знакомства с семантикой в логике вообще.
Введение
Итак, начнем с главного: что такое OWL? Многие из вас знают, что OWL – это язык для описания онтологий в Web. Но многие ли смогут ответить на вопрос, почему OWL таков, как он есть? Что стоит за его синтаксисом? И почему для описания онтологий пришлось создавать какой-то новый язык. Почему бы не использовать RDF или старые добрые фреймы и семантические сети, topic maps и т.д. и т.п. Или просто логику предикатов первого порядка?
Главное, что отличает OWL от всех этих формализмов (кроме предикатной логики) – это его семантика. Я не могу себе позволить пуститься в пространные сравнения семантики OWL и семантики вышеперечисленных языков (хотя у меня есть желание написать заметку о семантической совместимости OWL и RDF). Вместо этого мы просто обсудим семантику OWL и ее привлекательность. Для этого придется слегка углубиться в математику и немножко вспомнить формальную логику, так как OWL – это не что иное, как семейство логик (так называемых Description Logics – описательных логик или DL) + некоторый синтаксис (их несколько: RDF/XML, абстрактный синтаксис, манчестерский синтаксис, OWL/XML, etc.). Поэтому мы начнем с семантики в логике вообще, а затем поговорим о семантике простейших DL. Я также попробую объяснить принципы логического вывода в DL, которые используются, в том числе, и в OWL.
Математическая логика и формальная семантика – это скучно?!
Искренне надеюсь, что большинство читателей еще не до конца забыли курс математической логики 1-2 курса университета и помнят, что такое «логика» в формальном смысле этого слова. Логика – это совокупность двух компонентов:
- Синтаксис или формальное описание языка. Напомню, что формальный язык – это множество строк, построенных из символов определенного алфавита. Описание языка обычно задается в виде грамматики, в частности, широко используется форма Бэкуса-Наура. Грамматики для логики высказываний, логики предикатов, а также XML и огромного разнообразия языков программирования несложно найти в Интернете.
- Семантика или механизм придания смысла предложениям, описанным в соответствии с синтаксисом.
Ключевое отличие логик от других формальных языков – это наличие формальной семантики. Например, С++ не имеет формальной семантики, так как смысл конструкций С++ задан в Стандарте С++ на естественном языке (английском). В случае же логики, семантика описывается формально, т.е.по сути является вторым формальным языком (первый используется для описания синтаксиса). Иногда его еще называют метаязыком.
Зачем же нужен этот второй язык, который есть у логики предикатов первого порядка (FOL), DL, а также OWL? По двум основным причинам: во-первых, он лишен неоднозначностей, т.е. смысл логических утверждений всегда строго определен (в отличие от неформального описания семантики). А во-вторых, наличие второго языка позволяет разнести по разным языкам сами логические утверждения и заключения об их истинности. Например, в классических логиках запрещены утверждения типа «утверждение “Зенит обыграл Спартак” – ложно». Как известно, они приводят к знаменитому парадоксу лжеца, поэтому еще в 50-х знаменитый философ и логик Альфред Тарский (Alfred Tarski) предложил формальную (модельно-теоретическую семантику), чтобы его избежать. Теперь, синтаксис логического языка (например, FOL) позволяет нам сказать только «Зенит обыграл Спартак», а истинность его следует (или не следует) исключительно семантически. Существует несколько вариантов задания формальной семантики. Мы затронем модельно-теоретическую семантику (model-theoretic semantics – MTS), т.к. именно она чаще всего используется в FOL и DL (а соответственно и в OWL). Причем MTS мы рассмотрим сразу на примере простого DL-языка, опустив все общие замечания, а заодно и FOL (логика предикатов и ее семантика описывается в любом учебнике по мат. логике).
DL: Шаг навстречу логическому представлению знаний
С давних пор считается естественным представлять знания о предметной области в виде иерархии структурированных объектов, связанных между собой отношениями. На этой идее базируются такие формализмы, как фреймы, семантические сети, UML и т.д. К сожалению, все эти языки лишены формальной семантики, т.к. выражаемая в них информация предназначены для человеческого, а не машинного восприятия. Человеку понятно, что в определенном контексте если прямоугольник «А» нарисован над прямоугольником «Б» и соединен стрелкой, то класс Б является подклассом А. Машине это неясно, ей нужно объяснить формально.
Это можно сделать при помощи FOL и простой формулы:
. Но с FOL существует ряд проблем: нет удобной поддержки иерархий, нет удобных средств описания структурированных классов, а также логический вывод разрешим только наполовину (Здесь я надеюсь, что читатели понимают, что такое теоретическая разрешимость/неразрешимость языков, если нет – поговорим об этом в комментариях. Вкратце, неразрешимость означает, что в принципе невозможно существование алгоритма для определения в общем случае того, принадлежит ли данная строка данному языку).
Итак, с одной стороны 20-25 лет назад были семантические сети и фреймы, где было все, кроме формальной семантики, а с другой – логика предикатов, в которой была семантика, но не было удобных средств преставления знаний о предметной области. Решение было совершенно логичным: Рон Брахман (Ron Brachman) в своей знаменитой системе управления знаниями под названием KL-ONE предложил скрестить семантические сети и FOL, постаравшись взять лучшее из обоих миров. То, что получилось, было названо терминологической логикой (этот термин и сейчас можно встретить в старых статьях), а далее в процессе бурного развития превратилось в семейство DL. Важно помнить несколько ключевых вещей о DL:
- DL – это не логика, а семейство логик, обладающих разными возможностями. Соответственно, разные приложения могут выбирать для своих целей разные логики семейства DL. Например, OWL Lite основан на DL под названием
, а OWL-DL – на
(в самом конце будет приведена краткая расшифровка аббревиатур для популярных DL)
- Любая DL является подмножеством FOL. Это означает, что любое утверждение на DL можно представить в виде формулы FOL (но не наоборот!). При этом они семантически совместимы, т.е. если преобразовать базу знаний DL в базу знаний FOL, то из нее можно будет сделать такие же логические выводы, как и до преобразования.
- В синтаксисе DL явно не используются переменные и кванторы (что очень удобно). Например, утверждение
в DL – это то же самое, что и FOL-формула
, но без переменных.
- Большинство логик DL аккуратно проектируются так, чтобы они были подмножеством не только FOL, но и его специального фрагмента под названием guarded fragment. Это означает, что DL, как правило, обладают свойством разрешимости, которое достигается за счет урезания некоторых возможностей FOL (в частности, тех же переменных). Забегая вперед, замечу, что поэтому OWL DL разрешим и для него есть логические процессоры, а OWL Full, который не базируется на DL, – нет и для него логических процессоров нет.
На этом мы закончим пространные рассуждения о DL вообще и перейдем к конкретному примеру – логике
, которая хотя и проста, но содержит многие ключевые возможности OWL.
– это подмножество DL, на которых базируется OWL, причем для очень многих реальных онтологий вполне достаточно
.
Язык ALC
Язык
(Attributive Language with Complements) был впервые рассмотрен Манфредом Шмидтом-Шауссом и Гертом Смолкой (Manfred Schmidt-Shauss, Gert Smolka) в начале 90-х. Как и любая логика, он состоит из синтаксиса и семантики. Начнем с синтаксиса.
Синтаксис
Язык
содержит алфавит (т.е. набор базовых символов), который состоит из трех компонентов:
- Набор имен базовых классов (
NC) плюс два специальных класса (
или универсальный класс и
– пустой класс)
- Набор имен свойств (
NR) - Набор имен объектов (
NI)
Центральной возможностью
, как и многих DL, является возможность описания сложных классов (понятий). Это делается при помощи следующих операторов, называемых «конструкторами классов»:
- Пересечение классов или конъюнкция
- Объединение классов или дизъюнкция
- Дополнение класса или отрицание
- Универсальное ограничение свойства
- Экзистенциальное ограничение свойства
Пример: Допустим, у нас есть базовые классы Мать и Отец. На их основе мы можем определить сложный класс Родитель как «Мать ». Или предположим, что есть базовые классы
ОтецЧеловек и свойство «имеетРебенка». Тогда класс Родитель можно определить как «Человек». Неформально это означает: «К классу
(
имеетРебенка.Человек)Родитель относится любой объект, который, во-первых, является человеком, а, во-вторых, имеет ребенка, являющегося человеком» (ниже мы покажем, как эту семантику можно задать формально).
Далее рассмотрим логические формулы в
(они называются аксиомами). Аксиомы бывают 3-х типов:
- Отношения типа «дочерний класс». Эти аксиомы имеют вид
, где CиD– это произвольные (возможно сложные) классы. - Отношения типа «экземпляр класса». Они имеют вид
a:C, гдеaобозначает объект, аC– произвольный класс. - Отношения типа «экземпляр свойства». Они имеют вид
(a,b):P, гдеa,bобозначают два объекта, аР– произвольное свойство.
Набор аксиом типа 1 называется TBox (сокращение от terminological box). Набор аксиом типа 2 и 3 называется ABox (assertional box).
База знаний (или онтология) в
– это совокупность TBox и ABox.
Перед тем, как перейти к формальной семантике, скажем пару слов о TBox и ABox. TBox – это фактически описание иерархии классов (понятий предметной области). ABox – это набор фактов о конкретных объектах, т.к. к каким классам они относятся и какими свойствами обладают. Теперь определим эту семантику формально:
Семантика
Семантика
является разновидностью MTS. Это означает, что в ее основе лежат два ключевых компонента: домен Dom и интерпретирующая функция I. Dom – это просто конечное множество элементов (иногда их называют элементами реального мира), а I определяется индуктивно следующим образом:
-
Iотображает каждый базовый класс вNCна некоторое подмножествоDom, при этом
, а
-
Iотображает каждое свойство вNRна некоторое отношение наDom(подмножество декартова произведения
)
-
Iотображает каждый объект вNIна элемент вDom
Попросту говоря, I(C) = X означает примерно следующее: «Символ С обозначает множество элементов Х реального мира». Например «Слово „Автомобиль“ обозначает множество всех самодвижущихся 4-хколесных устройств» – это не что иное, как интерпретация класса Автомобиль. Далее самое интересное – как интерпретируются сложные классы:
- Интерпретация
(или
) эквивалентна
-
-
-
-
Не пугайтесь формул. Например, предпоследняя формула задает следующий простой смысл для конструктора
: «Если класс X определен как
, то X обозначает множество всех объектов x, таких что все объекты, связанные с ними свойством R являются элементами класса С». Например, класс «» интерпретируется как набор всех объектов, таких что все их дети являются мальчиками. Класс «
имеетРебенка.Мальчик» интерпретируется как набор всех объектов, у которых есть хотя бы один ребенок мужского пола.
имеетРебенка.Мальчик
Далее переходим от классов к аксиомам:
- Интерпретация
Iудовлетворяет аксиоме
если
-
Iудовлетворяет аксиомеa:Cесли
-
Iудовлетворяет аксиоме(x,y):Pесли
Если интерпретация I удовлетворяет некоторой аксиоме А, то она называется моделью А (отсюда и название семантики – модельно-теоретическая). Например, если мы говорим об аксиомах типа 1, удовлетворение попросту означает, что смысл классов С и D не противоречит смыслу аксиомы.
Теперь самое главное:
Интерпретация I удовлетворяет TBox (или является моделью TBox) если она является моделью всех аксиом TBox. Аналогично определяется модель ABox. Наконец, интерпретация является моделью онтологии, если она является моделью ее TBox и ABox.
Вот, собственно, и вся семантика. При помощи домена и интерпретирующей функции мы формально определили смысл классов, объектов, свойств, а также логических формул (аксиом). Теперь можно переходить к логическому выводу.
Задачи логического вывода в
Все мучения предыдущего раздела были бы напрасными, если бы не возможности логического вывода. Вывод позволяет автоматически извлекать новые знания из явно заданных аксиом. Для
выделяют следующие основные задачи логического вывода:
- Согласованность (или непротиворечивость) онтологии. Онтология называется непротиворечивой, если у нее существует, хотя бы, одна модель. Другими словами, если существует такой способ интерпретации (т.е. присвоения смысла) классов, объектов и свойств, который не противоречит ни одной заданной аксиоме (TBox или ABox).
- Когерентность класса. Класс
Сназывается когерентным в онтологииО, если хотя бы одна модельОинтерпретирует его в виде непустого множества.
- Ну и, наконец, собственно вывод аксиомы. Из онтологии
Оследует (или выводится) аксиомаАесли каждая модельОтакже является модельюА. Другими словами, как бы мы не интерпретировали классы, объекты и свойства вО, если интерпретация не противоречит аксиомам вО, она не противоречит иА. Т.е. можно смело добавлятьАк онтологии и это никак не изменит смысл онтологии.
Крайне важен тот факт, что две последние задачи сводятся к задаче согласованности тривиальным образом. А именно:
- Класс
Скогерентен в онтологииОтогда и только тогда, когда добавление новой аксиомыa:C(где объектаранее не встречался вО) не приводит к потере согласованности. Т.е. вопрос когерентностиСрешается путем добавления новой аксиомы кОи проверки согласованности.
- Аксиома
Авыводится из онтологииОтогда и только тогда, когда добавления отрицания аксиомыАк онтологииОприводит к потере согласованности. Здесь необходимо определить, что такое отрицание аксиомы. Для аксиомы
отрицанием будет аксиома
, а для a:Cотрицанием будет
.
В общем, нетрудно видеть, что это классический метод доказательства «от противного». Если добавление отрицания утверждения приводит к противоречию, то утверждение истинно (т.е. оно логически вытекает из базы знаний – онтологии). Отсюда следует самый главный вывод:
Все, что требуется для всех задач логического вывода в
– это алгоритм проверки согласованности онтологии.
То же самое справедливо и для других DL, и для OWL. Процессоры логического вывода по своей сути делают только одно: проверяют согласованность онтологии. Все остальное – это тривиальная работа препроцессора, заключающаяся в добавлении отрицаний аксиом (плюс некоторые другие несущественные моменты). Отдельного рассмотрения заслуживают алгоритмы классификации (т.е. вычисления всех возможных отношений типа «подкласс» между всеми парами классов, это позволяет построить законченную иерархию классов), поскольку наивное сведение к задаче согласованности будет крайне неэффективно. Но технологии оптимизации сейчас настолько обширны, что их обсуждение займет несколько статей (даже не считая тех, о которых я не в курсе, так как процессоры постоянно совершенствуются).
Вместо заключения
Пока это все. Сегодня у меня уже нет сил писать про принципы алгоритмов проверки согласованности в
(так называемые tableaux-based proofs). Если будет интерес, то напишу чуть позже. Хочу только сказать, что практически все принципы (синтаксические и семантические)
по-прежнему работают в более мощных DL, в том числе и тех, на которых основаны OWL Lite, OWL DL и новый OWL 2 (его логика называет
).
Последнее, что я бы хотел сделать – это расшифровать некоторые аббревиатуры. Наверное, многие из вас видели эти странные наборы символов –
,
,
,
и т.д. Когда я только начинал заниматься DL, они повергали меня в ужас. Надеюсь, что следующее небольшое объяснение наиболее популярных букв кому-то поможет. Итак:
- Начнем с S. DL S – это
+ транзитивные свойства (ее еще иногда называют
). Транзитивность означает, что из R(a,b)иR(b,c)вытекаетR(a,c)для любыхa,b,c. Буква S скорее всего произошла от известной модальной логики S4, которая в определенном смысле является синтаксической формой
(кстати, это очень интересная тема!).
-
– это
+ иерархии свойств (а не только классов как в
).
-
– это
+ обратные (inverse) свойства. R-является обратным по отношению кR, еслиR-(x,y)эквивалентноR(y,x). -
– это
+ функциональные свойства. Т.е. есть возможность объявлять некоторые свойства как функции (например, «мать» – это явно функциональное свойство, т.к. она у человека только одна). -
– это
+ ограничения на размер области значений свойств (т.н. non-qualified number restrictions)
-
– это
+ ограничения на размер области значений свойств и класс значений свойств (qualified number restrictions). Например, можно сказать: «>2 имеетРебенка.Человек». Это означает, что определяется класс объектов, которые имеют более двух детей (объектов классаЧеловек). Таким образом, в частности, можно определить классМногодетнаяМать. -
– это
+ так называемые номиналы (nominals). Они позволяют описывать классы в виде перечислений объектов. Например, можно определить класс СНГкак{Россия, Украина, Беларусь, …}, где каждый элемент – это просто объект. Внимание: эта возможность – самая проблемная в плане производительности и вычислительной сложности! Совместное использование номиналов, обратных свойств и численных ограничений приводит к скачку сложности алгоритма проверки согласованности с EXPTIME-Complete до NEXPTIME-Complete. -
– это
, в котором иерархии свойств расширены до композиций свойств (одно из главных новшеств OWL 2).
- Наконец
– это
+ так называемые «типы данных» и свойства, связывающие объекты с типами данных. Например, если нам надо сказать, что рост Анны = 180, то «180» логично задавать в виде числа (тем более, чтоxs:integerопределен в XML Schema), а не в виде служебного объекта.
Разумеется, все буквы можно компоновать произвольным образом, создавая тем самым DL, наиболее подходящую для вашего конкретного приложения.
Ну вот и все. Теперь вы понимаете, что такое
, лежащий в основе OWL Lite или
, который лежит в основе OWL DL.
Заранее благодарен за комментарии!
