Редактор онтологий на естественном языке

    На выставке CeBIT я познакомился с представителями польской компании Cognitum, которая разрабатывает семантический фреймворк Ontorion. Важнейшей частью этого фреймворка является редактор онтологий Fluent Editor, который показался мне замечательным и достойным обзора. Главное достоинство Fluent Editor'а состоит в том, что он позволяет создавать OWL-онтологии людям, не имеющим представления о синтаксисе OWL (хотя иметь представление о его концепциях, и о моделировании информационных структур, конечно, все равно нужно). Онтологии создаются на естественном языке, Controlled English — то есть на обычном английском, к которому применены определенные правила и ограничения. Приведу обзор основных возможностей синтаксиса этого языка, не забывая смотреть на то, в каком виде его основные выражения будут сохраняться в OWL.

    Для примера начнем составлять онтологию, содержащую сведения о бизнесе некой компании. У этой компании, как у любой коммерческой организации, есть поставщики и покупатели. Те и другие являются организациями, причем одна и та же организация может быть одновременно и поставщиком, и покупателем. Запишем соответствующие выражения на Controlled English:

    Every customer is a organization.
    Every supplier is a organization.

    Ключевые слова редактор Fluent Editor подсвечивает синим, а я выделяю жирностью. В процессе ввода редактор дает подсказки, и предупреждает о грамматически некорректных выражениях.
    Обратите внимание, что нам не требуется явно объявлять тот факт, что организация, поставщик и покупатель являются классами: редактор сам догадается об этом из контекста. Классы готовы, теперь можно объявить индивидуальные сущности:

    Alpha is a customer.
    Alpha is a supplier.
    Beta is a customer.

    Редактор разберется в том, что Альфа и Бета — индивидуальные сущности, относящиеся к классам «поставщики» и «покупатели».
    Если теперь сохранить онтологию в файл OWL, получится следующее:

      <SubClassOf>
        <Class IRI="Customer" />
        <Class IRI="Organization" />
      </SubClassOf>
      <SubClassOf>
        <Class IRI="Supplier" />
        <Class IRI="Organization" />
      </SubClassOf>
    
      <ClassAssertion>
        <Class IRI="Customer" />
        <NamedIndividual IRI="Alpha" />
      </ClassAssertion>
      <ClassAssertion>
        <Class IRI="Supplier" />
        <NamedIndividual IRI="Alpha" />
      </ClassAssertion>
      <ClassAssertion>
        <Class IRI="Customer" />
        <NamedIndividual IRI="Beta" />
      </ClassAssertion>
    


    Поставщики поставляют нашей компании материалы и запчасти, а покупатели приобретают нашу продукцию. Определим соответствующие классы:

    Every replaceable-part is a product.
    Every supplier supplies at-least one product.
    Every customer buys at-least one product.

    Как мы видим, нам удалось определить роли «поставщик» и «покупатель» в зависимости от того, что они делают с товарами и запчастями. В OWL вторая строка из приведенного кода отразится таким образом:

      <SubClassOf>
        <Class IRI="Supplier" />
        <ObjectMinCardinality cardinality="1">
          <ObjectProperty IRI="supplies" />
          <Class IRI="Product" />
        </ObjectMinCardinality>
      </SubClassOf>
    


    Определим теперь конкретный продукт и запчасть, и расскажем о том, как строятся наши материальные отношения с контрагентами:

    Oil is a product.
    Beta buys oil.
    Pump is a replaceable-part.
    Alpha supplies pump.

    Чтобы мы не запутались в написанном, Fluent Editor показывает нам дерево таксономии:

    Дерево таксономии

    Обратите внимание, что редактор сам переводит глаголы в разные формы. В тексте мы писали supplies, а в дереве таксономии соответствующий термин называется supply. С неправильными глаголами он тоже дружит.
    Синтаксис Controlled English позволяет нам определять различные ограничения и взаимосвязи между классами:

    Every-single-thing that is a replaceable-part is supplied by at-least one supplier.
    Something is a supplier if-and-only-if-it supplies nothing-but replaceable-parts and is a organization.
    Something is a customer if-and-only-if-it buys nothing-but products and is a organization.

    Пришло время добавить атрибуты. У организаций есть названия, ИНН и тому подобные свойства. Определим два атрибута, и укажем их значения для организации «Альфа». Значения, конечно, будут литералами.

    Every organization has-name nothing-but (some-string-value).
    Every organization has-tax-number nothing-but (some-integer-value).
    Alpha has-name equal-to 'Alpha, LLC'.
    Alpha has-tax-number equal-to 6671123456.

    В OWL эти фразы преобразуются примерно так:

      <SubClassOf>
        <Class IRI="Organization" />
        <DataAllValuesFrom>
          <DataProperty IRI="hasName" />
          <Datatype abbreviatedIRI="xsd:string" />
        </DataAllValuesFrom>
      </SubClassOf>
      <ClassAssertion>
        <DataSomeValuesFrom>
          <DataProperty IRI="hasName" />
          <DataOneOf>
            <Literal datatypeIRI="http://www.w3.org/2001/XMLSchema#string">Alpha, LLC</Literal>
          </DataOneOf>
        </DataSomeValuesFrom>
        <NamedIndividual IRI="Alpha" />
      </ClassAssertion>
    


    Конечно, этим возможности синтаксиса Controlled English не ограничиваются, но нашей задачей был только короткий обзор достоинств редактора; полное описание синтаксиса можно найти в документации на редактор.

    В редактор встроен Hermit, которому мы можем «задавать вопросы» на тему информации, содержащейся в нашей онтологии. Например, в данном примере мы можем узнать, чем является объект Alpha:

    is Alpha ?

    Hermit ответит: Alpha is a customer, supplier, organization.

    Не менее интересны возможности остальных компонентов фреймворка Ontorion, но они выходят за рамки нашего обзора.
    Главное состоит в том, что мы получили замечательный и общедоступный инструмент создания онтологий, намного более подходящий для людей, не являющихся профессионалами в ИТ, чем TopBraid Composer или Protege. А ведь на практике сведениями о терминах, которые должны входить в онтологию, обладают именно такие люди — профессионалы в области управления, производства, но никак не информационных технологий.
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 14
    • +4
      Все равно это не естественный язык, а язык программирования, синтаксис которого имитирует естественный. Особенно криво это выглядит в этой куче дефисных выражений is-a, Every-single-thing и т.д. Сомневаюсь что он поймет даже примитивные фразы типа Apple isn't a vegetable, хотя в онтологии есть соответствующий формализм.

      Поэтому о естественном языке ИМХО говорить рановато.
      • +1
        Выражение is not он понимает.
        Насчет дефисов согласен; причем, в одних случаях выражения пишутся без дефисов (is a), в других — с дефисами.
        Понятно, что это не вполне естественный язык; главная «фишка», которую я хотел отразить, состоит в том, что с таким редактором гораздо проще работать, скажем, инженеру, который много знает о предметной области, но ничего не знает об онтологиях. Научить такого инженера работать в Protege или TopBraid Composer'е было бы сложнее.
    • +4
      Только у меня возник вопрос о паре фраз в самом начале?
      Every customer is a organization.
      Every supplier is a organization.
      Я думаю, что, согласно грамматике английского, правильно всё-таки «Every customer is an organization. Every supplier is an organization».

      Тысячи подобных грамматических мелочей усложняют создание чего-либо, о чём можно было бы сказать «на естественном языке».
      • 0
        Да, можно написать и an — редактор позволяет. Согласен с вами, так правильно.
      • 0
        Если бы вставить распознавание речи, скажем от Google, то он сам скорее всего подставит правильный артикль. Проблемы со многими грамматическими мелочами уже решены в приложениях других разработчиков и нет необходимости делать все с нуля.
    • +1
      А можно пояснить, что дальше делать с полученным файлами онтологии? Для чего они создаются?
      • 0
        Простейший пример использования — это возможность машине вывода
        «задавать вопросы» на тему информации, содержащейся в нашей онтологии.
        • 0
          Ага, типа Watson-а, который американцев в Свою игру обыграл, а теперь где-то в больнице трудится, интересно кстати, в каком формате там хранятся знания.
          А вообще вопрос хоть и с виду очень простой, но помоему до сих пор придумано (а тем более реализовано) не так много практических примеров использования онтологий. Из запомнившегося — сайт BBC со статистикой ЧМ по футболу 2010 года — www.ontotext.com/news/bigowlim-3.3-released-used-by-the-bbc-for-the-football-world-cup news.bbc.co.uk/sport2/hi/football/world_cup_2010/default.stm
    • 0
      Очень хотел посмотреть, что же из себя представляет фреймворк в целом (Ontorion), но к сожалению здесь 404.
      Не знаете случаем, они просто переехали или решили закрыть исходный код?
      • 0
        Насчет исходного кода — задам им вопрос.
        Общую информацию об Ontorion можно посмотреть здесь: http://www.cognitum.eu/semantics/Ontorion/
        Мне они также давали доступ в консоль. У фреймворка есть веб-интерфейс, в котором можно делать все то же самое, что в редакторе.
      • 0
        Получил ответ от разработчиков. Говорят, что сервер онтологий Ontorion будет предоставляться в основном облаке (хотя, видимо, будет возможна и локальная установка при необходимости), и является проприетарным, так что исходный код открывать не будут. Однако, планируют опубликовать его API.
    • 0
      Эх, года полтора назад оставил эту тематику и спустился с НИР на землю, а как погляжу, воз и ныне там — все пытаются редактор для онтологий допилить (Protege кстати ничего так был, из него всего-то надо было баги поизгонять, да над интуитивностью и юзабилити интерфейса поработать), не говря уже о хоть каком-то интересном практическом применении. Неужели все так тускло? У нас кстати были попытки с естественного русского языка что-то вытащить, а тут всего-лишь English, да еще и Controlled. Как по мне пользователю если и нужен редактор, то не такого уровня — замучаешься все сущности перчислять через is-a, идеальным было бы натравить робота на билиотеку какую нибудь, а потом вручную верифицировать вытащенные триплеты — над этим и пытались работать, но все время не хватало то времеи, то денег, то умения.
      • 0
        А в рамках какого проекта вы этим занимались, если не секрет? (в смысле, вытаскиванием с естественного русского языка)
        У нас сейчас идет проект, в котором, на самом деле, хотелось бы прийти к чему-то подобному. В качестве библиотеки-основы рассматривается JORD RDL, вопрос сейчас стоит в выборе инструмента для работы.
        • 0
          Мы пытались работать с библиотекой RCO (Russian Context Optimizer) — пытались вытаскивать триплеты с помощью её фреймовых моделей. Лично к сожалению с данной библиотекой не работал, но на выходе результаты не очень впечатляющие — то ли версия у нас была слишком старая, то ли руки не оттуда, но триплетов из текста она вытаскивала меньше чем хотелось бы.

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.