Entry tags:
Онтологии: от философии к информатике. Часть пятая, концептуальная
Продолжение серии постов об онтологиях.
Когда я писал в предыдущих постах о базах знаний и о контекстных данных, используемых для инерпретации сообщений, я намеренно обходил тему конкретной формы представления этих знаний и данных, чтобы посвятить этой теме отдельный пост. Итак, у нас есть задача скинуть нелёгкий груз наших знаний в некоей области в недра бездушного компьютера, причём в "понятной" для него форме. Для этого нам надо сначала определиться сначала с математической моделью, на основании которой мы хотим строить наши логические структуры. После этого нам надо придумать форму представления (язык), которая позволит нам втиснуть знания в нашу модель, набивая текст/команды на клавиатуре.
Когда я писал в предыдущих постах о базах знаний и о контекстных данных, используемых для инерпретации сообщений, я намеренно обходил тему конкретной формы представления этих знаний и данных, чтобы посвятить этой теме отдельный пост. Итак, у нас есть задача скинуть нелёгкий груз наших знаний в некоей области в недра бездушного компьютера, причём в "понятной" для него форме. Для этого нам надо сначала определиться сначала с математической моделью, на основании которой мы хотим строить наши логические структуры. После этого нам надо придумать форму представления (язык), которая позволит нам втиснуть знания в нашу модель, набивая текст/команды на клавиатуре.
Начнем с математической модели (те, кто совем не знаком с математической логикой и теоретической информатикой, могут сразу перейти к следующему абзацу). Среди логик наш выбор довольно широк: от простейшей логики высказываний до модальных и темпоральных логик с разными подклассами оных. Чтобы найти среди них то, что нам подойдёт, надо ограничить диапазон поиска. А что нам требуется? Безусловно, полезна способность выразить максимально сложные концепции (мы же хотим создать универсальную модель). При этом надо учитывать, что не все модели разрешимы. Кроме того, даже если что-то разрешимо, нет гарантии, что оно будет разрешимо в мало-мальски приемлемое время: разрешимость многих моделей вылазит в класс неполиномиальных проблем (NP). Компромисс для большинства логических систем выглядит так:

Какой же бложик без фотографий кошек? Пример будем разбирать на няшном котёнке.
Мы можем сформулировать следующие высказывания:
Этим способом можно описать многие вещи, включая достаточно сложные структуры. Множество троек образует граф, в котором алгоритмически просто искать то, что нам нужно. Например, в вышеприведенном примере, следуя предикату "находится рядом", можно обследовать пространство вокруг котёнка. Тем не менее, такой простой подход оставляет нерешёнными две серьезные проблемы, которые стоит рассмотреть подробнее.
Первая проблема заключается в неоднозначности определяемых понятий (называемых ещё "концептами" или "ресурсами"). А чёткая идентичность понятий очень важна, если мы хотим без проблем объединять онтологии, созданные разными людьми для разных целей. К примеру, мы описали котёнка с фотографии. Вася Пупкин сделал то же самое, но назвал животное "котиком". А Петя Иванов из компании по производству моющих средств создал формальное описание для шампуня "Котёнок". Если все три описания созданы так, как предложено выше и мы их объединим, то получится бардак. Собственно, как наверное уже заметили внимательные читатели, мы говорим сразу о двух проблемах: об идентичности понятий и о различии между понятиями и литералами (численные или текстовые значения, вроде названия шампуня выше). К счастью, решение этих проблем довольно простое. Литералы мы оставляем как есть: на то они и литералы, чтобы не иметь контекстной нагрузки (цифра 2 определена всегда одинаково). Что касается понятий или ресурсов, то тут можно использовать уже готовое решение для описания структуры WWW. Мы просто добавляем к каждому ресурсу однозначный URL. В итоге шампунь Пети Иванова будет определен как http://companyX.com/products/descr/shampoo, к которому при помощи предиката http://companyX.com/products/descr/name будет привязан литерал "Котёнок". Нашего котёнка мы определим, как http://www.myontology.net/kitten, а Вася Пупкин определит его как http://www.pupkin.net/kotik. Если мы объединим все три описания, то понятия изначально будут независимыми. А когда мы заметим, что определение Васи Пупкина идентично нашему, мы просто соединим оба концепта предикатом http://www.myontology.net/is_identical. При этом, хотя мы используем формат URL, от ресурсов не требуется, чтобы они действительно были выложены в сети под этими адресами. Привязка к URL обеспечивает в первую очередь идентичность, а уже потом опциональную возможность скачать описание ресурса по указанному адресу.
С первой проблемой мы разобрались, остается вторая, намного более серьёзная. Заключается она в том, что, если мы используем только тройки, то с ростом размера любая онтология будет напоминать моток ниток, с которым хорошенько поиграл тот самый котёнок с фотографии. И дополнять или править ее без создания логических противоречий нам будет все сложнее. А уж разобраться в ней самому, без долгого фильтрования с помощью специальных программ будет вообще невозможно. Никто же не мешает нам использовать ресурс в первой тройке как предикат, а во второй как субъект? Нет разграничения между абстрактным понятием (классом) и конкретным предметом. Мы, конечно, можем теми же тройками определить, что такое "класс", "подкласс", "инстанция" и т. д., но где гарантия, что кто-то не сделает это совсем по-другому, что усложнит объединение баз знаний? В общем и целом, для создания упорядоченных баз знаний необходима система стандартов, определяющих некоторые базовые объекты:
- Берём логику предикатов и безжалостно отпиливаем от неё всё, что мешает разрешимости. После такого обрезания получаем так называемую
кошернуюлогику первого порядка, она же "first order logic", сокращенно "FOL". - Обрезанный "пациент" ещё способен выразить всё, что нужно в большинстве случаев, поэтому иногда на этом и останавливаются. Однако, взглянув на нашу жертву поближе, мы увидим, что разрешимость FOL все ещё неполиномиальна. Посему зачастую в руки снова берется скальпель (или бензопила) и у FOL отрезают ещё пару кусков
потому что руки ему для бега не нужны, пока не получают логику с меньшей выразительностью, удовлетворяющую нашим требованиям и уже с полиномиальной разрешимостью. - Полиномиальное время - это хорошо, но полиномы бывают и весьма высокой степени. Поэтому те, кому важна именно скорость обработки запросов, скальпель не откладывают, а продолжают свое чёрное дело у удаляют
уши, левый глаз и селезёнкувообще всё, что потенциально тормозит работу. Полученный кадавр по выразительности становится похож на зомби из фильма ужасов, но простые концепциимоя хотеть мозгииипозволяет обрабатывать весьма резво. Именно на этих принципах и построены повсеместно используемые релациональные базы данных. При выборе модели для представления онтологий так далеко не заходят, а останавливаются на первом или втором шаге.

Какой же бложик без фотографий кошек? Пример будем разбирать на няшном котёнке.
Мы можем сформулировать следующие высказывания:
объект | предикат | субъект |
---|---|---|
котёнок | лежит на | подстилка |
котёнок | состояние | сон |
котёнок | имеет цвет | рыжий |
котёнок | детеныш | кошка |
котёнок | находится рядом | котёнок |
Этим способом можно описать многие вещи, включая достаточно сложные структуры. Множество троек образует граф, в котором алгоритмически просто искать то, что нам нужно. Например, в вышеприведенном примере, следуя предикату "находится рядом", можно обследовать пространство вокруг котёнка. Тем не менее, такой простой подход оставляет нерешёнными две серьезные проблемы, которые стоит рассмотреть подробнее.
Первая проблема заключается в неоднозначности определяемых понятий (называемых ещё "концептами" или "ресурсами"). А чёткая идентичность понятий очень важна, если мы хотим без проблем объединять онтологии, созданные разными людьми для разных целей. К примеру, мы описали котёнка с фотографии. Вася Пупкин сделал то же самое, но назвал животное "котиком". А Петя Иванов из компании по производству моющих средств создал формальное описание для шампуня "Котёнок". Если все три описания созданы так, как предложено выше и мы их объединим, то получится бардак. Собственно, как наверное уже заметили внимательные читатели, мы говорим сразу о двух проблемах: об идентичности понятий и о различии между понятиями и литералами (численные или текстовые значения, вроде названия шампуня выше). К счастью, решение этих проблем довольно простое. Литералы мы оставляем как есть: на то они и литералы, чтобы не иметь контекстной нагрузки (цифра 2 определена всегда одинаково). Что касается понятий или ресурсов, то тут можно использовать уже готовое решение для описания структуры WWW. Мы просто добавляем к каждому ресурсу однозначный URL. В итоге шампунь Пети Иванова будет определен как http://companyX.com/products/descr/shampoo, к которому при помощи предиката http://companyX.com/products/descr/name будет привязан литерал "Котёнок". Нашего котёнка мы определим, как http://www.myontology.net/kitten, а Вася Пупкин определит его как http://www.pupkin.net/kotik. Если мы объединим все три описания, то понятия изначально будут независимыми. А когда мы заметим, что определение Васи Пупкина идентично нашему, мы просто соединим оба концепта предикатом http://www.myontology.net/is_identical. При этом, хотя мы используем формат URL, от ресурсов не требуется, чтобы они действительно были выложены в сети под этими адресами. Привязка к URL обеспечивает в первую очередь идентичность, а уже потом опциональную возможность скачать описание ресурса по указанному адресу.
С первой проблемой мы разобрались, остается вторая, намного более серьёзная. Заключается она в том, что, если мы используем только тройки, то с ростом размера любая онтология будет напоминать моток ниток, с которым хорошенько поиграл тот самый котёнок с фотографии. И дополнять или править ее без создания логических противоречий нам будет все сложнее. А уж разобраться в ней самому, без долгого фильтрования с помощью специальных программ будет вообще невозможно. Никто же не мешает нам использовать ресурс в первой тройке как предикат, а во второй как субъект? Нет разграничения между абстрактным понятием (классом) и конкретным предметом. Мы, конечно, можем теми же тройками определить, что такое "класс", "подкласс", "инстанция" и т. д., но где гарантия, что кто-то не сделает это совсем по-другому, что усложнит объединение баз знаний? В общем и целом, для создания упорядоченных баз знаний необходима система стандартов, определяющих некоторые базовые объекты:
- Концепты (они же "понятия" или "классы"), определяющие общие свойства.
- Индивидуумы (они же "инстанции"), представляющие конкретную реализацию свойств, определенных их классом.
- Соотношения (они же "реляции", "свойства" или "слоты"), исползующиеся исключительно как предикаты.
- Базовые соотношения (идентичность, принадлежность к подклассу, логические операторы и так далее), позволяющие избегать "изобретения колеса" и делающие структуру онтологии читабельной для каждого.
- Аксиомы, которые можно формулировать для всей базы знаний сразу. Хотя некоторые "лёгкие" (lightweight) виды онтологий обходятся и без них.
- Frame Logic (F-logic) была разработана достаточно давно и изначально задумывалась, как язык для дедуктивных баз данных. Она не основана на использовании triples но поддерживает комплексные объекты, мета-моделирование, классы, наследование, типизацию, простые запросы и многое другое. F-логика очень похожа на объектно-ориентированное моделирование, поэтому большинство программистов могут сходу в ней разобраться. F-логика использует концепцию замкнутого мира, т. е. все, что не определено в нашей онтологии будет приниматься, как ложное (метод, вполне обоснованный в некоторых областях). Этот язык широко применялся в области ИИ и в некоторых индустриальных приложениях, был стандартизирован через консорциум WWW, но в последнее время потерял популярность по сравнению с его главным конкурентом.
- Description Logic (DL) - один из фрагментов FOL, ставший основным формализмом для Semantic Web. Именно это, в комбинации с мощными инструментами формулировки и обработки запросов, определяет большую популярность DL. В отличие от F-логики в DL используется предпосылка открытости мира (все, что не определено в онтологии может быть верным). В DL упор делается не на классы и объекты, а именно на логику, что делает основанные на ней языки сложнее в изучении, но более гибкими в использовании.