Текст доклада Е.М. Бениаминова на российско-французком семинаре "Когнитивные науки", 21.09.2010

Название моего доклада: «Онтологии и концептуальные модели в компьютерных системах».

Предыдущий доклад – замечательный доклад, иллюстрирующий, как концептуальные модели могут использоваться в компьютерных системах. Это перекликается с цель моего доклада: рассказать, как развивалось и развивается использование концептуальных моделей в компьютерных системах.

В начале доклада я хочу представить книгу моего ученика Владимира Анатольевича Лапшина «Онтологии в компьютерных системах». Книга носит обзорный характер. Мы планируем серию книг в этом направлении. Следующая книга – «Алгебраические модели и языки спецификаций онтологий. Принципы построения открытого языка спецификаций формальных онтологий». Последняя книга в этой серии, которую мы предполагаем создать, – это «Разработка и принципы работы веб-сервера онтологии, в стиле Википедия с открытым коллективно формируемым языком спецификаций онтологий».

Собственно последнее название – это тема нашей работы. Этой темой мы уже занимаемся несколько лет, и эта работа проводится на кафедре математики, логики и интеллектуальных систем в РГГУ. Документация системы частично разработана, и есть даже примеры этой системы.

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

Заметим, что искусственные системы, разработанные людьми, имитирующие работу какой-либо естественной системы, часто работают совсем не так, как соответствующие им естественные, но превосходят их. Скажем, автомобиль ездит не так, как живые существа: он не ходит, но двигается быстрее живых существ. Самолеты летают не так как птицы: они не машут крыльями, но самолеты превосходят по скорости птиц. Программы играют в шахматы не так, как люди, как гроссмейстеры, но обыгрывают их. Сделать систему, которая работала бы точно так же, как живые существа, это очень трудное дело. Так, «шагающие роботы» или «танцующие роботы» были сделаны совсем недавно, а летающие аппараты, машущие крыльями, делаются, но они обладают слабой эффективностью. Что касается создания программы, которая играла бы в шахматы так же, как шахматист, то это задача трудная и до сих пор непонятная.

Хорошо бы понять, в чем принципиальное различие в работе искусственных и естественных систем. Почему искусственные системы иногда превосходят естественные? Вот вопрос, который нас волнует при разработке наших проектов. И вообще, нужно ли имитировать природу в задаче представления и обработки знаний? Может быть, тут нужно идти другим путем, таким, каким идут в технике?

Второй вопрос, который нас волнует, связан с лингвистикой, с особым аспектом лингвистики. Почему формальные языки возникают и развиваются в математике, физике, химии, биологии, программировании и там гораздо важнее естественного? Они там выполняют важную роль, которую естественный язык выполнить не может. Почему свои языки возникают и развиваются в каждой области деятельности людей? Есть естественный язык, но когда люди собираются вместе, и у них есть общая проблема, то они изобретают свой язык, адекватный их проблемной области. Это сложная деятельность, и было бы интересно создать средства ее компьютерной поддержки. Что нужно сделать для компьютерной поддержки создания языков и работы с ними в новых системах? Именно эти вопросы лежат в основе наших исследований на кафедре.

Теперь вернемся к концептуальному моделированию в компьютерных системах. Оно имеет давнюю историю. Эта деятельность начинается с конца 60-х – начала 70-х годов. Здесь нужно указать на семантические сети и концептуальные графы. Лидером в области теории концептуальных графов и их применений является Джона Сова. Это направление зародилось очень давно, но это все еще живая область исследований со своими проблемами, задачами и новыми областями приложений. В прошлом году была конференция в Москве, посвященая этой теме, и возглавлял эту конференцию Джон Сова.

Другое направление в компьютерной технике, посвященное этой проблеме – это концептуальное и логическое моделирование предметных областей при построении баз данных. Базы данных сейчас очень распространены. Проектировщики, прежде чем спроектировать базу данных, строят концептуальную модель предметной области, которая должна отражаться в базе данных. Сейчас разработаны специальные средства моделирования, специальные языки моделирования для того, чтобы строить схемы баз данных. В основе этих средств лежит реляционный подход к базам данных, который был предложен Эдвардом Коддом тоже приблизительно в 1970 году. Но это тоже живая область, поэтому по этой теме масса конференций.

И наконец, я хотел указать третье направление в компьютерной деятельности, связанное с концептуальным моделированием, – это, так называемый, объектно-ориентированный подход в программировании. Я думаю, что этот термин на слуху почти у всех. Зарождение этого подхода относится к 67-му году, и связывается с языком Simula 67. Это язык для имитационного моделирования на компьютере физических и социальных явлений. В таком языке можно отразить структуру имитируемого мира, указав из каких частей он состоит, описать поведение отдельных элементов и их взаимодействий. Далее вы запускаете программу и смотрите, как будет себя вести вся система в целом. Для описания сложных миров со сложным поведением нужен был развитый подход. Сейчас объектно-ориентированный подход в программирования – это общее место. Этот подход используется почти во всех языках программирования, например в C++. Я даже затрудняюсь указать современные новые языки, которые не использовали бы элементы объектно-ориентированного подхода. Этому подходу мы учим своих студентов.

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

Основной принцип это модульность. Когда вы строите концептуальную модель, то важно строить ее не сразу, а использовать, так называемые, модули. Вы строите концептуальную модель одного фрагмента, и это строит специалист, который понимает в этом фрагменте. Другие строят концептуальную модель других фрагментов, и это специалисты, которые знают свои области. Компонуя эти модули, вы строите концептуальную модель предметной области – системы.

Средствами концептуального моделирования являются: иерархия классов, свойства, методы классов, отношения и ограничения. Вот те средства, которые вы используете тогда, когда описываете концептуальную модель некого объекта, структуру которого вы хотите отобразить в программах.

При этом, для удобства человека, который строит концептуальные модели, используются принципы описания: наследование, инкапсуляция и полиморфизм. Я не буду останавливаться на этих терминах и объяснять, что это такое. Это три фундаментальных принципа объектно-ориентированного подхода.

Теперь о принципах представления, что тоже очень важно. В представлении концептуальных моделей используется некое сочетание графических методов и формальных. Когда вы хотите представить концептуальную модель человеку, то лучше использовать графическое представление, но графическое представление плохо воспринимается компьютером для использования в программах. В компьютере используется формальные, логические модели, но человек формальные описания воспринимает очень плохо. Для него используются графические методы.

Что касается стандартов языков описания концептуальных моделей, то здесь хочется указать на два устоявшихся стандарта в этой области. С одной стороны, это язык UML (унифицированный язык моделирования). Он был создан для определения, визуализации, проектирования и документирования программных систем. То есть, когда разрабатывается сложная программная система, то вы сначала должны сделать проект этой системы. Сейчас никто не начинает программировать систему, пока нет проекта, обдуманного и утвержденного. Только после этого начинают программировать. Язык, на котором описывается проект – это язык UML. Он стал стандартом. Во всех крупных фирмах задания программисту даются на языке UML. В его основе лежат 8 типов диаграмм: диаграмма классов, диаграмма видов деятельности, диаграмма состояний, диаграмма компонентов и т.д. Диаграммы имеют графический вид и понятны как программисту, так и специалисту, который делает заказ на программную систему. Она может обсуждаться и доводиться. С другой стороны, по диаграммам может автоматически строится часть текстов программ на различных языках программирования, реализующих систему.

Второй стандарт представления знаний, о котором я хочу сказать – это язык OWL (Web Ontology Language). Он недавний. Это язык описания онтологий для, так называемой, семантической паутины (Semantic Web). Разработан этот стандарт консорциумом всемирной паутины, организацией, которая разрабатывает и внедряет технологические стандарты для всемирной паутины. Возглавляет этот консорциум Тимоти Бернс-Ли, автор этой паутины. Он является разработчиком языка HTML, стандарта в этой области. На основе расширения этого языка сделан современный OWL.

Теперь о термине «онтология». Программисты заимствовали его у философов, но придали ему другое значение. У философов онтология – это представление реальности в виде системы понятий, а у программистов - спецификация на формальном языке, в которой фиксируется договоренность группы специалистов о том, что и как у них называется, и каким свойствам удовлетворяет.

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

На логическом уровне каждой онтологии соответствует некоторая теория. Это значит, есть некоторая сигнатура (обозначения) и аксиомы, а иногда, это вполне фиксированная модель, в которой задаются некоторые фиксированные множества и операции на них.

Онтология строится по модульному принципу. При определении онтологии могут использоваться уже ранее построенные онтологии, и онтологии должны быть удобными для понимания специалистами и интерпретироваться системами использования.

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

Типы онтологий. Простейшая онтология – это просто система классификации – таксономия. В общем случае в программировании онтология бывает гораздо сложнее. Это микротеория, то есть это не просто система классификации, а плюс к этому еще вводятся система отношений, система операций и система аксиом, связывающая все это в единое целое. В определениях сложных онтологий могут использоваться другие онтологии, не только в качестве фрагментов описаний, но и как среда для разработки.

Рассмотрим теперь образцы проектов и систем, основанных на онтологиях.

Самый крупный проект этого типа – это Semantic Web или Web 3.0 Тимоти Бернерса-Ли. На наших глазах происходит существенное изменение в интернете. Для пояснения позволю воспользоваться следующей картинкой. Если совсем недавно всемирную паутину можно было представить в виде супа с одноклеточными (страницами), то сейчас можно представить, что эти одноклеточные соединяются в организмы. Или вот еще такой образ: всемирную паутину можно представить как раствор молекул, а сейчас происходит кристаллизация этой среды. Т.е. молекулы соединяются между собой и образуют сложные структуры для решения сложных задач. Чтобы соединить элементы между собой в Веб, нужно описать их взаимодействия, и это делается на основе онтологий.

Другая задача, которая решается при этом в семантической паутине – это поиск не по документам, а поиск текстов по смыслу текстов. Чтобы это сделать нужно иметь особые словари, отражающие взаимосвязи между смыслами и, с другой стороны, нужно, чтобы сами тексты были размечены в соответствии со смыслом. Эта задача была объявлена как важная, но трудная. Потому что нужно заставить пользователей разметить свою страницу не только для ее красивого представления, но и разметить текст по смыслу.

Это сложная задача, но подходы к ее решению предлагаются в другом интересном проекте Semantic Wiki. Система Википедия сейчас очень популярна. Она разработана в стиле Web 2.0 – это среда в Веб, в которой пользователи сами коллективно наполняют систему содержанием в соответствии со своими групповыми целями. В Semantic Wiki, в отличие от просто Wiki, эти тексты должны быть семантически размечены. В чем здесь возникает облегчение? Дело в том, что в Википедии вы можете строить свои страницы, используя любые готовые страницы системы как шаблоны. То есть, если есть чья-то семантически размеченная страница, близкая к той, которую вы хотите создать, то вы можете использовать ее как шаблон и подставить туда свой текст.

Следующий пример – система Cyc, разработанная под руководством Дугласа Лената. Проект разрабатывается с конца 80-х – начала 90-х годов. Идея состояла в том, что компьютер нужно наделить простейшими знаниями, которые есть у человека. Если наделить ими компьютер, то он сможет обрабатывать сложную информацию. Это военный заказ, и он выполнялся довольно большим коллективом в течение многих лет. Сейчас в эту систему введено большое количество аксиом и концептов. Есть и открытая часть системы. Называется она OpenCyc, и ее содержание вы можете посмотреть в интернете.

Следующий пример – система Ontolingua, разработанная в Стенфордском университете. Она построена как открытая система. Вы можете зарегистрироваться в ней и найти там онтологии по информатике, по физике, по биологии по любым предметам. Используя эти онтологии как модули, вы можете строить онтологии своих задач и можете сохранять их, а при желании создать свой фрагмент в библиотеке.

Наконец, несколько слов о последней разработке, системе WolframAlpha. Я думаю, многие слышали о ней. Руководитель проекта Стефан Вольфрам. Он известен также тем, что под его руководством разработана система символьных вычислений Mathematica. Эта система может делать вычисления, решать дифференциальные уравнения, символьно интегрировать и дифференцировать, делать произвольные математические преобразования, решать логические задачи. В ее основе лежат процедуры вычисления по правилам переписывания. Ну, вы, наверное, сами занимались алгебраическими преобразованиями и еще со школы знаете, что математические вычисления строятся на переписывании одних выражений в другие по определенным правилам. Так вот, эта система наполнена разными правилами вычисления, и она умеет делать очень многое в математике. Она делает гораздо больше, чем наши студенты 3 курса. Теперь система WolframAlpha умеет, кроме того, отвечать на всякие вопросы. Вы можете обратиться в интернете по адресу WolframAlpha.com и задать ей произвольные вопросы (пока на английском языке): кто президент России? каков возраст такой-то персоны? как изменялась численность населения России с такого-то года по такой-то? На все эти вопросы она умеет отвечать. Утверждается, что к этой системе можно будет обращаться на естественном языке, и что она будет отвечать вам текстами и диаграммами, вычисляя ответы на ваши вопросы. Эта программа основана не на принципах Веба, но Веб использует. Информация собрана со всего Веба, и в системе WolframAlpha хранится отдельно в собственных базах данных. Вы не можете сами наполнять ее информацией. Она не заменяет поисковые системы и не дает ссылок на источники.

Мы тоже разрабатываем некую подобную систему, но хотим, чтобы содержание системы наполняли онтологиями сами пользователи (подобно Википедии), специалисты в разных областях знаний. Для этого нужно, чтобы пользователи могли давать формальные описания своих онтологий на языке, принятом в этой области знаний. Такую возможность можно обеспечить, если язык системы будет открытым, настраиваемым пользователями. Пользователи смогут вместе с онтологиями вводить конструкции языка, которые можно использовать далее в среде этих онтологий, строя новые онтологии или задавая вопросы к миру построенной онтологии.

Спасибо за внимание.