О формальных основах OWL

Материал из Semantic Future
Перейти к: навигация, поиск
Павел Клинов
Pavel Klinov
PavelK.jpg
Род деятельности:

научно-исследовательская

Роль участника:

Участник, Модератор, Администратор

Основной раздел:

Semantic Web

Круг интересов:

логика, OWL, неопределенность и неточность знаний

Дата рождения:

1981

Место рождения:

Москва

Гражданство:

РФ

Сайт:

http://www.cs.man.ac.uk/~klinovp

Nickname

PavelK

О себе:

Аспирант (университет Манчестера, Великобритания)


Содержание

Аннотация

Две недели назад я написал небольшую заметку о неопределенности в онтологиях и был весьма польщен, что она вызвала определенный интерес (в связи с чем, выражаю глубокую признательность всем оставившим комментарии). Как и было обещано, я начал работу над продолжением, в котором я планировал более подробно остановиться на семантике вероятностной неопределенности в 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 курса университета и помнят, что такое «логика» в формальном смысле этого слова. Логика – это совокупность двух компонентов:

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

Зачем же нужен этот второй язык, который есть у логики предикатов первого порядка (FOL), DL, а также OWL? По двум основным причинам: во-первых, он лишен неоднозначностей, т.е. смысл логических утверждений всегда строго определен (в отличие от неформального описания семантики). А во-вторых, наличие второго языка позволяет разнести по разным языкам сами логические утверждения и заключения об их истинности. Например, в классических логиках запрещены утверждения типа «утверждение “Зенит обыграл Спартак” – ложно». Как известно, они приводят к знаменитому парадоксу лжеца, поэтому еще в 50-х знаменитый философ и логик Альфред Тарский (Alfred Tarski) предложил формальную (модельно-теоретическую семантику), чтобы его избежать. Теперь, синтаксис логического языка (например, FOL) позволяет нам сказать только «Зенит обыграл Спартак», а истинность его следует (или не следует) исключительно семантически. Существует несколько вариантов задания формальной семантики. Мы затронем модельно-теоретическую семантику (model-theoretic semantics – MTS), т.к. именно она чаще всего используется в FOL и DL (а соответственно и в OWL). Причем MTS мы рассмотрим сразу на примере простого DL-языка, опустив все общие замечания, а заодно и FOL (логика предикатов и ее семантика описывается в любом учебнике по мат. логике).

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

С давних пор считается естественным представлять знания о предметной области в виде иерархии структурированных объектов, связанных между собой отношениями. На этой идее базируются такие формализмы, как фреймы, семантические сети, UML и т.д. К сожалению, все эти языки лишены формальной семантики, т.к. выражаемая в них информация предназначены для человеческого, а не машинного восприятия. Человеку понятно, что в определенном контексте если прямоугольник «А» нарисован над прямоугольником «Б» и соединен стрелкой, то класс Б является подклассом А. Машине это неясно, ей нужно объяснить формально.

Это можно сделать при помощи FOL и простой формулы: \forall x: B(x) \rightarrow A(x). Но с FOL существует ряд проблем: нет удобной поддержки иерархий, нет удобных средств описания структурированных классов, а также логический вывод разрешим только наполовину (Здесь я надеюсь, что читатели понимают, что такое теоретическая разрешимость/неразрешимость языков, если нет – поговорим об этом в комментариях. Вкратце, неразрешимость означает, что в принципе невозможно существование алгоритма для определения в общем случае того, принадлежит ли данная строка данному языку).

Итак, с одной стороны 20-25 лет назад были семантические сети и фреймы, где было все, кроме формальной семантики, а с другой – логика предикатов, в которой была семантика, но не было удобных средств преставления знаний о предметной области. Решение было совершенно логичным: Рон Брахман (Ron Brachman) в своей знаменитой системе управления знаниями под названием KL-ONE предложил скрестить семантические сети и FOL, постаравшись взять лучшее из обоих миров. То, что получилось, было названо терминологической логикой (этот термин и сейчас можно встретить в старых статьях), а далее в процессе бурного развития превратилось в семейство DL. Важно помнить несколько ключевых вещей о DL:

На этом мы закончим пространные рассуждения о DL вообще и перейдем к конкретному примеру – логике \mathcal{ALC}, которая хотя и проста, но содержит многие ключевые возможности OWL. \mathcal{ALC} – это подмножество DL, на которых базируется OWL, причем для очень многих реальных онтологий вполне достаточно \mathcal{ALC}.

Язык ALC

Язык \mathcal{ALC} (Attributive Language with Complements) был впервые рассмотрен Манфредом Шмидтом-Шауссом и Гертом Смолкой (Manfred Schmidt-Shauss, Gert Smolka) в начале 90-х. Как и любая логика, он состоит из синтаксиса и семантики. Начнем с синтаксиса.

Синтаксис \mathcal{ALC}

Язык \mathcal{ALC} содержит алфавит (т.е. набор базовых символов), который состоит из трех компонентов:

Центральной возможностью \mathcal{ALC}, как и многих DL, является возможность описания сложных классов (понятий). Это делается при помощи следующих операторов, называемых «конструкторами классов»:

Пример: Допустим, у нас есть базовые классы Мать и Отец. На их основе мы можем определить сложный класс Родитель как «Мать \sqcup Отец». Или предположим, что есть базовые классы Человек и свойство «имеетРебенка». Тогда класс Родитель можно определить как «Человек\sqcap (\exists имеетРебенка.Человек)». Неформально это означает: «К классу Родитель относится любой объект, который, во-первых, является человеком, а, во-вторых, имеет ребенка, являющегося человеком» (ниже мы покажем, как эту семантику можно задать формально).

Далее рассмотрим логические формулы в \mathcal{ALC} (они называются аксиомами). Аксиомы бывают 3-х типов:

Набор аксиом типа 1 называется TBox (сокращение от terminological box). Набор аксиом типа 2 и 3 называется ABox (assertional box).

База знаний (или онтология) в \mathcal{ALC} – это совокупность TBox и ABox. Перед тем, как перейти к формальной семантике, скажем пару слов о TBox и ABox. TBox – это фактически описание иерархии классов (понятий предметной области). ABox – это набор фактов о конкретных объектах, т.к. к каким классам они относятся и какими свойствами обладают. Теперь определим эту семантику формально:

Семантика \mathcal{ALC}

Семантика \mathcal{ALC} является разновидностью MTS. Это означает, что в ее основе лежат два ключевых компонента: домен Dom и интерпретирующая функция I. Dom – это просто конечное множество элементов (иногда их называют элементами реального мира), а I определяется индуктивно следующим образом:

Попросту говоря, I(C) = X означает примерно следующее: «Символ С обозначает множество элементов Х реального мира». Например «Слово „Автомобиль“ обозначает множество всех самодвижущихся 4-хколесных устройств» – это не что иное, как интерпретация класса Автомобиль. Далее самое интересное – как интерпретируются сложные классы:

Не пугайтесь формул. Например, предпоследняя формула задает следующий простой смысл для конструктора \forall R.C: «Если класс X определен как \forall R.C, то X обозначает множество всех объектов x, таких что все объекты, связанные с ними свойством R являются элементами класса С». Например, класс «\forall имеетРебенка.Мальчик» интерпретируется как набор всех объектов, таких что все их дети являются мальчиками. Класс «\exists имеетРебенка.Мальчик» интерпретируется как набор всех объектов, у которых есть хотя бы один ребенок мужского пола.

Далее переходим от классов к аксиомам:

Если интерпретация I удовлетворяет некоторой аксиоме А, то она называется моделью А (отсюда и название семантики – модельно-теоретическая). Например, если мы говорим об аксиомах типа 1, удовлетворение попросту означает, что смысл классов С и D не противоречит смыслу аксиомы.

Теперь самое главное:

Интерпретация I удовлетворяет TBox (или является моделью TBox) если она является моделью всех аксиом TBox. Аналогично определяется модель ABox. Наконец, интерпретация является моделью онтологии, если она является моделью ее TBox и ABox. Вот, собственно, и вся семантика. При помощи домена и интерпретирующей функции мы формально определили смысл классов, объектов, свойств, а также логических формул (аксиом). Теперь можно переходить к логическому выводу.

Задачи логического вывода в \mathcal{ALC}

Все мучения предыдущего раздела были бы напрасными, если бы не возможности логического вывода. Вывод позволяет автоматически извлекать новые знания из явно заданных аксиом. Для \mathcal{ALC} выделяют следующие основные задачи логического вывода:

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

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

Все, что требуется для всех задач логического вывода в \mathcal{ALC} – это алгоритм проверки согласованности онтологии.

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

Вместо заключения

Пока это все. Сегодня у меня уже нет сил писать про принципы алгоритмов проверки согласованности в \mathcal{ALC} (так называемые tableaux-based proofs). Если будет интерес, то напишу чуть позже. Хочу только сказать, что практически все принципы (синтаксические и семантические) \mathcal{ALC} по-прежнему работают в более мощных DL, в том числе и тех, на которых основаны OWL Lite, OWL DL и новый OWL 2 (его логика называет \mathcal{SROIQ}(D)).

Последнее, что я бы хотел сделать – это расшифровать некоторые аббревиатуры. Наверное, многие из вас видели эти странные наборы символов – \mathcal{SHIQ}, \mathcal{SHIF}, \mathcal{SHOIN}, \mathcal{SROIQ} и т.д. Когда я только начинал заниматься DL, они повергали меня в ужас. Надеюсь, что следующее небольшое объяснение наиболее популярных букв кому-то поможет. Итак:

Разумеется, все буквы можно компоновать произвольным образом, создавая тем самым DL, наиболее подходящую для вашего конкретного приложения. Ну вот и все. Теперь вы понимаете, что такое \mathcal{SHIF}(D), лежащий в основе OWL Lite или \mathcal{SHOIN}(D), который лежит в основе OWL DL.

Заранее благодарен за комментарии!

Личные инструменты
Пространства имён
Варианты
Действия
Проект SF:
Деятельность:
Сообщество:
Хранилище знаний:
Гиды:
Руководства:
Инструменты