catodon: (default)
catodon ([personal profile] catodon) wrote2015-08-28 10:51 pm

Онтологии: от философии к информатике. Часть пятая, концептуальная

Продолжение серии постов об онтологиях.

Когда я писал в предыдущих постах о базах знаний и о контекстных данных, используемых для инерпретации сообщений, я намеренно обходил тему конкретной формы представления этих знаний и данных, чтобы посвятить этой теме отдельный пост. Итак, у нас есть задача скинуть нелёгкий груз наших знаний в некоей области в недра бездушного компьютера, причём в "понятной" для него форме. Для этого нам надо сначала определиться сначала с математической моделью, на основании которой мы хотим строить наши логические структуры. После этого нам надо придумать форму представления (язык), которая позволит нам втиснуть знания в нашу модель, набивая текст/команды на клавиатуре.

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


Какой же бложик без фотографий кошек? Пример будем разбирать на няшном котёнке.

Мы можем сформулировать следующие высказывания:
 объект  предикат  субъект 
 котёнок  лежит на  подстилка 
 котёнок  состояние  сон 
 котёнок  имеет цвет  рыжий 
 котёнок  детеныш  кошка 
 котёнок  находится рядом  котёнок 

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

Первая проблема заключается в неоднозначности определяемых понятий (называемых ещё "концептами" или "ресурсами"). А чёткая идентичность понятий очень важна, если мы хотим без проблем объединять онтологии, созданные разными людьми для разных целей. К примеру, мы описали котёнка с фотографии. Вася Пупкин сделал то же самое, но назвал животное "котиком". А Петя Иванов из компании по производству моющих средств создал формальное описание для шампуня "Котёнок". Если все три описания созданы так, как предложено выше и мы их объединим, то получится бардак. Собственно, как наверное уже заметили внимательные читатели, мы говорим сразу о двух проблемах: об идентичности понятий и о различии между понятиями и литералами (численные или текстовые значения, вроде названия шампуня выше). К счастью, решение этих проблем довольно простое. Литералы мы оставляем как есть: на то они и литералы, чтобы не иметь контекстной нагрузки (цифра 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 упор делается не на классы и объекты, а именно на логику, что делает основанные на ней языки сложнее в изучении, но более гибкими в использовании.
Естественно, на основе формальных языков для онтологий созданы уже конкретные языки, позволяющие представлять онтологии в виде текста и программы, упрощающие работу с ними. Но для них в этой части уже нет места, поэтому о них мы поговорим в следующий раз.