Что такое семантическая сеть?
Термин
Семантическая Сетьотносится к набору стандартов для формального представления знаний на компьютере. Формализмы представления знаний существовали с самого начала разработки программного обеспечения, но целью инициатив семантической паутины является хранение и обмен машиночитаемой информацией, распространяемой по Интернету. Основным отличием является учет распределенного, разнородного и открытого характера сети. Например, ключевым аспектом в этих стандартах является повсеместное использование URI для идентификации чего-либо, что стоит идентифицировать. Кроме того, хотя традиционно представление знаний было связано с узкими проектами ИИ, здесь цели более скромны с точки зрения глубины, но более амбициозны с точки зрения широты. По сути, основная мотивация семантической паутины может быть обобщена как совместимость данных в масштабе Интернета.Онлайн-ресурсы предоставляют информацию не только в удобочитаемой для человека форме в виде HTML, но и в обрабатываемой машиной форме в виде RDF / OWL.
Эта статья является первой статьей в серии, где я собираюсь показать вам, как семантическая паутина и, в частности, онтологический веб-язык (OWL), могут использоваться в качестве мощного инструмента моделирования для разработки программного обеспечения. Здесь я заложу основы, представив соответствующие формализмы и технологии, а затем утверждаю, что они идеально подходят в качестве инструмента моделирования для программного обеспечения. В последующих статьях я углублюсь в математику, лежащую в основе OWL, которая является одной из основных технологий семантической паутины, и проиллюстрирую ее возможности и ограничения на моделировании на некоторых практических примерах. Предварительное знакомство с Semantic Web не требуется.
Очень краткая история
Meta Content Framework , зачислен в качестве предшественника RDF, был создан в середине 90 — вводя большинство понятий в основе все будущего Semantic Web формализма: аспекте меты (данные о данных), понятие объектов, категория и связанные через свойства. Затем в 1999 году вышла первая версия
Resource Description Framework (RDF), целью которой было предложить стандартный метод аннотирования веб-контента (т. Е. « Ресурсов ») метаданными. Наряду с RDF W3C работал над RDFS (схемой RDF), которая добавляла в RDF такие вещи, как классы, наследование и типизированные свойства. Приблизительно в 2000-2001 годах DARPA разработала что-то под названием DAML + OIL, которое использовало RDF в качестве основы, но также с более богатой семантикой, такой как RDFS, и включало понятие вывода. Срок
Сама семантическая паутина была придумана в
этой статье Scientific American в 2001 году парнем, который изобрел паутину. Вероятно, это было решающее событие, которое привлекло внимание. По мере роста интереса к представлению знаний об этих усилиях
веб-язык онтологий(OWL) появился в 2004 году как стандарт для представления высокоструктурированных моделей, в отношении которых могут применяться автоматические рассуждения и умозаключения. С тех пор семантическая паутина захватывает мир с правительствами и крупными компаниями, ведущими путь к предоставлению структурированных данных для всех, кто их использует и использует. RDF больше не является единственным средством аннотирования других неструктурированных веб-ресурсов. Он используется в качестве полноценной информационной модели с обширной поддержкой баз данных для естественного хранения высокоструктурированных данных, в то время как OWL постепенно набирает обороты в качестве стандартной структуры для распределенного представления знаний и обоснования. ,
Структура описания ресурса
Мы не будем много использовать RDF в наших экскурсиях по моделированию семантической паутины, но, поскольку они настолько распространены и основополагающи, я не должен оставлять вас без краткого введения в тему. RDF определяет очень простую формальную модель для выражения знаний о вещах. Как я уже сказал, он изначально задумывался для аннотирования веб-ресурсов метаданными, но с тех пор он превратился в общий логический формализм для выражения знаний о реальном мире. Формализм позволяет утверждать простые факты о сущностях. Каждый факт имеет форму
тройки: <subject> <предикат> <объект>. Предмет — это предмет, о котором говорят, и ему присваивается URI в качестве имени. Он может представлять что-либо действительно (например, человека, веб-сайт, событие, абстрактное понятие, такое как «цвет»). Предикат также именуется URI и обычно считается глаголом, хотя на практике часто он содержит целую глагольную фразу. Некоторые примеры предикатов —
собственные, isOlderThan, hasPrice. Наконец, объект также может быть сущностью, идентифицируемой через URI или литеральное значение (например, строка, целое число, логическое значение и т. Д.). Когда объект является сущностью, предикат можно рассматривать как отношение между субъектом и объектом, а когда объект является литералом, предикат можно рассматривать как выражение атрибута. В любом случае набор таких троек можно представить в виде графа, в котором узлами являются сущности и литералы, а ребрами являются предикаты — ориентированный помеченный граф. Вот и все для RDF. Не может быть намного проще, чем это. Остается согласовать общие идентификаторы (URI), чтобы при кодировании знаний мы буквально говорили об одном и том же. Опубликованный набор четко определенных идентификаторов RDF называется
словарным запасом, Различные группы придумали такие словари. Сам по себе стандарт RDF насчитывает около дюжины, в то время как то, что называется
Upper Mapping и Binding Exchange Layer,
имеет 25000. Один из них, о котором вы, возможно, слышали, это
FOAF (друг друга). Эти словари фактически используются и достигают определенного уровня взаимодействия. Но в словаре каждый термин стоит в изоляции. Чтобы описать, как группа терминов связана внутри концептуальной структуры, нужна онтология.
Что такое онтология?
В метафизике онтология (буквально «изучение бытия») — это изучение природы существования. В нем рассматриваются такие вопросы, как то, как сущности группируются вместе, как они связаны друг с другом, что составляет их идентичность. В информатике этот термин относится к формальной концептуализации области знаний через некоторый набор понятий / классов, экземпляров, отношений, свойств / атрибутов и, возможно, правил вывода. Легко понять, почему этот термин был взят из философии. Оказалось, что при построении практических систем исследования ИИ включали в себя анализ, очень похожий на то, что древние философы делали, анализируя саму сущность сущностей реального мира и их взаимоотношения. То же самое сделали и объектно-ориентированные программисты чуть позже — большинство из того, что касается отношений типа is-a, has-a, классов,подклассы и свойства пришли от Аристотеля
Метафизика . Когда философы распространяют теории о мире, они предполагают, что определенные вещи существуют и что эти вещи связаны определенным образом — так они устанавливают общую почву для дискуссии. Эти предположения называются
онтологическими обязательствами. Точно так же компьютерная программа (то есть «автоматизированный агент») делает определенные предположения о мире и работает на основе этих предположений. Другими словами, программное обеспечение также выполняет онтологические обязательства. Все это очень хорошо объяснено в
прекрасной статье 1993 года Томаса Р. Грубера (который недавно создал Siri). В этой статье г-н Грубер говорит:
Онтология — это явная спецификация концептуализации.
….
Мы используем общие онтологии для описания онтологических обязательств для набора агентов,
чтобы они могли общаться в области дискурса, не обязательно оперируя
общедоступной теорией. Мы говорим, что агент совершает обязательство по онтологии, если его
наблюдаемые действия согласуются с определениями в онтологии.
Тогда возникает вопрос, как осуществляется «спецификация концептуализации»? Вот тут-то и появляется язык онтологий. По сути, это метамодель, определяющая, какие конструкции вы можете использовать для создания моделей предметной области («концептуализации»), чтобы вы могли писать программы, в которых термины, описанные в этих моделях предметной области, согласованным образом. Сам язык онтологии может включать или не включать в себя некоторые средства логического вывода, но в целом он достаточно богат по существу, так что интересные вещи могут быть выведены из модели без явного указания. Основное различие между чем-то, что можно квалифицировать как язык онтологий и RDF, состоит в том, что первое предложит средства для выражения семантически более богатых понятий, таких как различие между понятиями и сущностями, классификация, являющаяся собственностью,быть примером и т. д.
Хотя разговоры о представлении знаний и онтологиях обычно ограничиваются системами ИИ, я бы сказал, что это не должно быть так. Когда вы пишете ОО-программу на Java, C # или где-то еще, вы создаете модель части мира и делаете некоторые из этих так называемых онтологических обязательств. Вы на самом деле создаете онтологию. За исключением программирования, мы не называем это разработкой знаний, мы называем это объектно-ориентированным дизайном. И обычный язык выбора онтологий (т.е. метамодель) называется UML. Теперь UML — странный язык онтологий, поскольку он действительно абстрагирован от общих программных конструкций и практик и поэтому создан для моделирования программного обеспечения, но фактически используется для моделирования мира, чтобы можно было писать программное обеспечение.
Итак, что я хотел бы сделать, так это сосредоточить внимание на разработке знаний в центре разработки программных приложений, чтобы эти онтологические обязательства были явными и формально кодировались на языке, подкрепленном десятилетиями серьезных исследований, языке, который становится стандартом. для развития онтологии наравне с RDF, который уже прошел переломный момент принятия на мой взгляд. Как следствие, можно было бы надеяться, что модели легче поддаются изменению, их можно будет больше использовать в качестве артефактов, и что на самом деле их будет интереснее создавать.
СОВА
Веб-язык онтологий (OWL) был разработан с учетом нескольких противоречивых целей: (1) быть супер-набором RDF, чтобы любой действительный граф RDF имел осмысленную интерпретацию в OWL (2) быть близким к основанной на кадрах традиции в знаниях Представление,
впервые предложенное Марвином Мински , которое, по сути, является тем, что мы знаем как ОО-дизайн, и знакомо большинству людей, и (3) имеет понятную логическую интерпретацию. Поскольку это было невозможно согласовать, комитет W3C получил две основные версии: OWL Full и OWL DL, где DL обозначает
Description Logic . Позвольте мне сказать несколько слов о том, как они сравниваются.
OWL Full — это версия, совместимая с семантикой RDF, и она будет интуитивно понятна большинству разработчиков, поскольку, когда мы говорим о классах и свойствах в OWL Full, под понятием понимаются более или менее знакомые понятия из ОО-программирования. Например, при моделировании класса в OWL Full мы можем указать любые факты об этом классе, какие пожелаем. А класс можно рассматривать как план со свойствами (фрейм со слотами), из которых создаются экземпляры. Это не так с OWL DL, который строго отделяет концептуальную модель (классы и свойства) от модели данных (экземпляры и их отношения). OWL DL соответствует версии Description Logic, математического формализма с долгой историей исследований, который был выбран за его полезные вычислительные свойства.Логика описания — это подмножество логики первого порядка, которая не только разрешима, но и имеет эффективные алгоритмы для большинства проблем, возникающих на практике. У меня будет гораздо больше, чтобы сказать об этом позже. Здесь важно (и запутанно!) Отметить, что оба имеют одинаковый синтаксис, но совершенно разную семантику! То есть понятия, используемые в обоих вариантах: Full и DL, интуитивно одинаковы, но интерпретация конструкций отличается, и некоторые утверждения запрещены в OWL DL. Это звучит так, как будто OWL DL будет менее важным, но на самом деле все наоборот. Последняя версия OWL 2.0 была почти исключительно ориентирована на доработку OWL DL. Единственный самый популярный инструмент для работы с OWL,У меня будет гораздо больше, чтобы сказать об этом позже. Здесь важно (и запутанно!) Отметить, что оба имеют одинаковый синтаксис, но совершенно разную семантику! То есть понятия, используемые в обоих вариантах: Full и DL, интуитивно одинаковы, но интерпретация конструкций отличается, и некоторые утверждения запрещены в OWL DL. Это звучит так, как будто OWL DL будет менее важным, но на самом деле все наоборот. Последняя версия OWL 2.0 была почти исключительно ориентирована на доработку OWL DL. Единственный самый популярный инструмент для работы с OWL,У меня будет гораздо больше, чтобы сказать об этом позже. Здесь важно (и запутанно!) Отметить, что оба имеют одинаковый синтаксис, но совершенно разную семантику! То есть понятия, используемые в обоих вариантах: Full и DL, интуитивно одинаковы, но интерпретация конструкций отличается, и некоторые утверждения запрещены в OWL DL. Это звучит так, как будто OWL DL будет менее важным, но на самом деле все наоборот. Последняя версия OWL 2.0 была почти исключительно ориентирована на доработку OWL DL. Единственный самый популярный инструмент для работы с OWL,но интерпретация конструкций отличается, и некоторые утверждения запрещены в OWL DL. Это звучит так, как будто OWL DL будет менее важным, но на самом деле все наоборот. Последняя версия OWL 2.0 была почти исключительно ориентирована на доработку OWL DL. Единственный самый популярный инструмент для работы с OWL,но интерпретация конструкций отличается, и некоторые утверждения запрещены в OWL DL. Это звучит так, как будто OWL DL будет менее важным, но на самом деле все наоборот. Последняя версия OWL 2.0 была почти исключительно ориентирована на доработку OWL DL. Единственный самый популярный инструмент для работы с OWL,
Protege практически отказался от OWL Full, в то время как официальный API для работы с OWL,
OWLAPI основан исключительно на DL. Итак, позвольте мне дать вам обзор того, что вы можете сказать в OWL 2.0 с точки зрения чисто моделирования, чтобы вы могли немного поиграть с ним. И я рекомендую
установить Protege 4+, который пригодится, если вы будете следовать этой серии. Синтаксис по умолчанию для RDF и OWL — это XML, где на вещи ссылаются с помощью URI, возможно, с префиксами пространства имен. Тем не менее, я буду использовать альтернативный синтаксис, который также использует URI с префиксом пространства имен, но он более краткий и более читаемый — функциональный синтаксис OWL.
В OWL вы можете объявить сущности, которые являются частью вашей модели, а затем сделать заявления о них. Сущности — это либо классы, свойства, либо индивидуумы. И есть два вида свойств — свойства объекта, где значения являются индивидуумами, или свойства данных, где значения являются литералами данных, типизированными некоторым типом данных XML-схемы.
Класс может быть объявлен как подкласс другого класса, и существует класс верхнего уровня
owl: Thing, который является суперклассом для всех. Можно также объявить людей и указать, к какому классу они принадлежат. Обратите внимание, что термин
индивид используется в OWL 2.0 вместо
экземпляра,и это опять-таки является следствием акцента на Description Logic. На самом деле мы не говорим об «создании» индивида на основе шаблона класса. Скорее, о существовании индивидов говорят, говоря о них, например, утверждая, что они принадлежат к классу или обладают определенными свойствами. Итак, вот небольшая иерархия классов автомобилей вместе с некоторыми реальными автомобилями:
Declaration(Class(cars:Car)) Declaration(Class(cars:Ford)) SubClassOf(cars:Ford cars:Car) Declaration(Class(cars:Honda)) SubClassOf(cars:Honda cars:Car) Declaration(Class(cars:Hybrid)) Declaration(Class(cars:Lada)) SubClassOf(cars:Lada cars:Car) Declaration(NamedIndividual(cars:F100)) ClassAssertion(cars:Ford cars:F100) Declaration(NamedIndividual(cars:H100)) ClassAssertion(cars:Honda cars:H100)
Каждая из этих строк представляет аксиому — индивидуальное логическое утверждение. Онтология OWL — это не что иное, как набор аксиом. Здесь мы используем
автомобили: пространство имен для нашего примера онтологии. Существует несколько аксиом декларации, которые просто указывают
на существование и тип сущности, поэтому мы объявляем несколько классов и несколько
индивидуумов (NamedIndividual отличается от анонимных индивидов, которые похожи на пустые узлы RDF).
Вы также можете увидеть несколько
аксиом SubClassOf, которые утверждают, что первый аргумент является подклассом второго. И несколько
ClassAssertion Аксиомы, которые заявляют, что человек (например, автомобили: F100) принадлежит к данному классу (автомобили: Ford). Можно сказать, автомобили: F100 — это образец автомобилей: Ford. Неформальный смысл тот же. Но формально было бы точнее сказать, что автомобили: F100 классифицируется как автомобили: Ford. Это потому, что, как я уже сказал, в действительности нет процесса создания экземпляров. Точно так же свойства не считаются принадлежащими классу. Скорее они рассматриваются как предикаты RDF, отношения, которые связывают индивидов с другими индивидами (в случае свойств объекта) или литералами (в случае свойств данных). Что связывает свойства с классами, так это ограничения, накладываемые на их область и диапазон. Например, вместо того, чтобы говорить, что класс
Car имеет цену недвижимости
типа поплавка, один говорит , что свойство данных
цена имеет домен
автомобиль и диапазон
XSD: поплавок . Вот как это выглядит:
Declaration(DataProperty(cars:price)) DataPropertyDomain(cars:price cars:Car) DataPropertyRange(cars:price xsd:float)
Не беспокойтесь о многословности синтаксиса. Вы бы фактически использовали инструмент (например, Protege) или библиотеку программирования для манипулирования онтологиями OWL. Свойства данных отличаются от свойств объекта тем, что их второй аргумент (их диапазон) должен быть литералом, а не другим индивидом. Вот как свойства назначаются отдельным лицам:
DataPropertyAssertion(cars:price cars:H100 "2500") ObjectPropertyAssertion(cars:owns cars:Eve cars:H100)
Первая строка выше устанавливает свойство данных, а вторая строка — свойство объекта. Обратите внимание, что свойство data по-прежнему записывается как строковый литерал, даже если ожидаемый тип является float. Корректность типа фактического значения — это то, что
должны обеспечивать рассуждения . Другим аспектом, с которым могут помочь рассудители, являются обязательные свойства. Хотя вы не можете явно указать, что свойство принадлежит классу, вы можете сказать, что все люди класса должны иметь данное свойство. Вы делаете это через то, что называется выражением класса. Выражение класса
описываетнабор индивидуумов и вот откуда взялся термин «логика описания». Но мы поговорим подробнее о мыслителях и их роли позже. Заметьте также, что я не объявлял ни автомобили: владеет собственностью, ни автомобили: Ева индивидуальная. Я опускаю их частично для краткости, но частично для иллюстрации того, что эти декларации на самом деле не нужны. Упоминание сущности в месте, где ожидается что-то определенного вида, автоматически приводит к тому, что что-то возникает в онтологии. Декларация сама по себе не имеет логических последствий в OWL. Таким образом, в
ObjectPropertyAssertionожидается, что первый аргумент аксиомы будет свойством объекта, а второй — индивидуальным, поэтому нам не нужно объявлять их заранее. Когда вы создаете онтологию с помощью Protege, вы, вероятно, в любом случае сначала будете объявлять что-либо, чтобы вы могли просматривать их в пользовательском интерфейсе, но когда вы пишете программу, пропуск этих объявлений спасет вас от пары строк кода.
Недостаток этого краткого взгляда на OWL состоит в том, что формализм обеспечивает основные элементы объектно-ориентированного моделирования, но с логическим поворотом. Этот поворот влечет за собой преимущества прочной математической основы, а также некоторые недостатки для программиста ОО, поскольку его основные концепции только поверхностно знакомы. Отступление от традиционного представления о классах как о проектах, как о фабриках, которые атомно производят объекты со множеством свойств, может показаться отрешенным. Тем не менее, упражнение в моделировании предметной области в OWL создаст реальную базу знаний, из которой вы можете делать нетривиальные выводы и которую вы можете использовать в качестве работоспособной модели, доступной во время выполнения, модель, которой можно манипулировать как (мета) База данных программно. Теперь,управляемое моделями все — утопия, потому что модели слишком статичны как артефакты, чтобы описывать поведение, но я верю, и я попытаюсь убедить вас, что OWL обеспечивает очень хороший баланс, приближаясь к выталкиванию дополнительной информации из кода в модель. как метаданные, управляющие большей частью вашего программного обеспечения.
Подойдя
В следующем столбце я представлю математический формализм Description Logics и объясню, как он реализован в стандарте OWL 2.0. Я представлю важные предположения об открытом мире и неуникальных именах и увижу несколько примеров их последствий.