Здравый смысл: Семантические сети


Введение

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

Семантическую сеть мы рассматриваем как промежуточный этап между естественным языком и моделью мира. Фактически - это текст, записанный однозначным образом. Одним из критериев выразительности отношений между узлами семантической сети служит возможность её трансляции на естественный язык, с максимальным сохранением заложенного в неё "смысла". Перевод в обратную сторону (из текста в сеть) существенно более сложная задача, часто требующая параллельного построения модели текста (его понимания).

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


Узлы и отношения

Однозначные сущности в узлах сети могут быть абстрактными концептами ( = понятиями = смыслами): животное, страна, рождение, цветной, взять или конкретными объектами, действиями или свойствами: Этот_документ, Наташа_Ростова, Я. Абстрактные концепты являются именами множеств схожих сущностей. Конкретные сущности - это элементы таких множеств (концептов):

Мия, шестнадцатилетняя симпатичная девушка, взяла со стола красное яблоко.

Mia  { isa woman; att {isa nice}; att {isa name;val "Мия"}; att {isa age;val 16;uom year}}.
take1{ isa take;  sub Mia;  obj apple1;  loc { isa from; pof table1 }; nxt read1 }.

История "про Мию и яблоко", прочитанная (read1) интеллектуальной системой (I), фокусируется на двух ключевых узлах: объекте Mia и действии take1. При этом take1 - это конкретное действие, экземпляр множества take ("взятие субъектом sub объекта obj с поверхности всеми возможными способами"). Узел take1 в дальнейшем может соединяться с другими узлами конкретных действий отношениями nxt для создания графа временных зависимостей.

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


Виды отношений

Ниже перечисляются базовые отношения (типы рёбер графа), которые подробнее будут описаны в дальнейшем:

Иерархия:

Свойства:

Действия:

Связь действий:


Информация о конкретных или абстрактных сущностях задаётся списком бинарных отношений: (X r Y).
Для сокращения записи семантической сети будут использоваться следующие грамматические конструкции:

X, Y  r  Z.             =>   X r Z.  Y r Z.          # X,Y входят  по r в  узел Z
Z  r  X, Y.             =>   Z r X.  Z r Y.          # X,Y выходят по r из узла Z
Z { a A; b B }.         =>   Z a A.  Z b B.          # A,B выходят по a,b из узла Z
Эти конструкции можно объединять:
X a A { b B { c C } }.  =>   X a A.  A b B.  B c C.  # цепочка узлов
Z a A { r X, Y { b B; c C }; d D }.  =>   Z a A.  A r X.  A r Y.  A d D.  Y b B.  Y c C.

Если для узла не указывается имя (на рисунках это изображается точкой), то он автоматически получает свой идентификатор типа a_1. Такие узлы используются для описания атрибутов или частей конкретных объектов:

Mia att { isa age; val 16; uom year}.   =>   Mia att a_1. a_1 isa age. a_1 val 16. a_1 uom year.

Наша философия состоит в том, что бинарные отношения являются "процедурными знаниями", семантику которых используют алгоритмы анализа сети при проведении логических выводов. Количество отношений должно быть минимальным (в отличии от открытой совокупности концептов и их элементов). Если существует набор похожих отношений, их необходимо объединять в одно, различая нюансы семантики при помощи дополнительных сущностей. Особенно это важно для "отношений" образующих иерархию (предлоги положения, разновидности части и целого, свойства и т.п.). Рассмотрим следующий пример:

Слева приведен граф в котором два, имеющих схожую природу отношения on и in, используются независимым образом (наравне с отношениями типа isa или att). При этом никак не учитывается их близость (что плохо).
В подобной ситуации мы будем использовать сеть, приведенную справа, в которой места положения объектов (loc) являются самостоятельными сущностями (точки) и являются частями конкретных объектов (pof).


Иерархия ako

Конкретные сущности (объекты, их свойства и действия) являются элементами множеств (концептов), которые могут быть подмножествами более общих множеств.

Отношение (X isa Y) связывает элемент X с множеством Y (означает is_a, т.е. принадлежит или X ∈ Y)
Отношение (X ako Y) задаёт иерархию множеств (сокращение от a_kind_of и означает подмножество: X ⊂ Y).

Иерархия ako выстраивается (и в процессе обучения перестраивается) так, чтобы наследники получали правильную информацию от своих предков (более крупных множеств). Собственно в этом и состоит главная цель этой иерархии. Механизм наследования минимизирует описание обыденных знаний, уменьшая повторы. Например, самки (female) всех млекопитающих (mammal) кормят своих детенышей (baby) молоком (milk).
Люди, которые (human ako mammal), делают тоже самое и второй раз об этом помнить нет необходимости.

Механизм наследования подразумевает транзитивность отношения: X ako Y. Y ako Z. -> X ako Z.
Например нос → ... → вещь, но не нос → ... → существо, так как нос не является существом.

Иерархия множеств ako, обычно, древесная (из узла выходит одно ребро ako и по этим рёбрам нельзя вернуться назад). Впрочем, множественное наследование также допустимо, если оно решает задачу минимального и непротиворечивого описания знаний. Справа на рисунке, множество "c" (заштрихованная область) наследует свойства от двух множеств "a,b" (и от их предка "e"). Его экземпляр X (точка) является также элементом множеств "a,b,e", поэтому обладает их свойствами (если не указано иного).

Конкретными сущностями (элементами множеств) могут быть вымышленные объекты, например Наташа_Ростова isa woman { ako human }. Таким образом, woman, human - это совокупности объектов, одним из которых является, как вымышленная Наташа_Ростова, так и конкретная Mia. Аналогично: Black_Sea, Red_Sea isa sea { ako large_water }. Paris isa capital { ako city }.

Для двух множеств существует три варианта относительно обладания общими элементами (конкретными сущностями) - подмножество, не пересекающиеся и пересекающиеся множества:

Обычно ako-иерархия строится таким образом,что все конкретные сущности разбиваются на не пересекающиеся множества (мужчины, женщины); (кошки, собаки) и т.д. Однако это возможно не всегда. Множества всех женщин, пилотов и детей могут пересекаться. Чтобы это подчеркнуть, используется отношение com (common).
В отличии от других отношений, оно симметрично: woman com pilot. pilot com woman.


Существует четыре основных дерева, упорядочивающих множества смыслов, со следующими корнями:

Концепцию, в отличии от сущности, обычно нельзя "потрогать"; это совокупность объектов и событий с ними. В языке они выражаются существительными. Атрибуты - это прилагательные и наречия, а действия - глаголы.


При построении иерархии важно выбирать правильные критерии разбиения множества на подмножества. Например, bird (птицы) это не те, кто умеет летать, т.к. летают и bat (летучие мыши), и bee (пчёлы). Птицы - это теплокровные, яйцекладущие. Однако, так как летающие существа имеют общие свойства, их можно выделить в отдельное множество, используя множественное наследование:

bat      ako  mammal, fly_being.       # летучие мыши - млекопитающие, умеющие летать
bee      ako  insect, fly_being.       # пчёлы - насекомые, умеющие летать
penguin  ako  bird,   not_fly_being.   # пингвины - птицы, которые летать не умеют


Разбиение одного и того-же множества на подмножества может происходить по различным критериям (множества всех женщин, врачей и т.д.). Такие понятия как woman, boy являются, как обычно, множеством людей, обладающих соответствующими атрибутами пола (женского) и возраста (детского):

woman  { ako human;    att female }.
girl   { ako human;    att female, young }.   или      girl   { ako woman; att young }.
boy    { ako human;    att male,   young }.   или      boy    { ako man;   att young }.
child  { ako human;    att young  }.          атрибуты female, male не определены
sister { ako relative; att female  }.
young  { ako age;      val [0, 12]; uom year}.
Напоминаем, что не следует путать смыслы и слова которые их могут выражать. В языке, об одном и том же можно сказать "женщина", "девушка", "особь женского пола" (female) и т.д. В словаре смыслов подобные слова могут находистся в лингвистическом разделе words. Смыслы же должны отличаться друг от друга, например, атрибутами (иначе будет происходить дублирование понятий). В примере выше: woman - класс всех особей женского пола, независимо от их возраста (девочки, дамочки, бабушки). Возрастное уточнений добавляет им соответствующий атрибут. При необходимости можно создать и подмножество объектов, обладающих этим атрибутом (boy, girl).

Профессии могут пересекаться (Чехов одновременно doctor и writer). Раса (race), с одной стороны, разновидность людей, подобно, как dog и cat - разновидности млекопитающих (mammal). С другой стороны, рассы могут смешиваться (отец European, мать - Asian). Поэтому для конкретных элементов множеств (особенно людей) обычно используется множественное наследование:

Mia isa woman, Asian, doctor, writer.


Каждое отношение isa наделяет объект Mia дополнительными к базовому human свойствами (и знаниями).
Это позволяет отвечать на поверхностные семантические вопросы, в которых переменные $X, $Y, начинающиеся с символа доллара, являются неизвестными, подлежащими определению:

woman att { isa female { ako gender } }.
pilot att { isa brave  { ako courage} }.
Mia   isa woman, pilot.

Mia att $X { isa gender }?   ->  $X = { isa female }   # What is Mia's gender?


Атрибуты

Отношения isa, ako и att имеют тесную аналогию с объектно ориентированным программированием.
В последнем есть классы (это множества), наследующие от других классов свойства и методы (отношение ako). Экземпляр класса (ob isa Class1, Class2) - это конкретный объект. Он может иметь свойство (att) с определённым именем, являющимся экземпляром соответствующего множества. При необходимости, свойство может уточняться числовым или строковым значением val и единицами измерения uom. Типичными примерами свойств являются: color, shape, size, weight, age, appearance, tactile, vital_state.

Например, такое свойство как red (красный) является именем множества всех возможных цветов "красноватого вида" у всех мыслимых объектов, обладающих цветом. Конкретное яблоко (яблоко12) имеет (также конкретный) красный цвет, который есть элемент множества red. Поэтому его свойство мы описываем так: яблоко12 att { isa red }. "Безымянный узел" (получаемый автоматический идентификатор) ничем не отличается от обычного узла (на рисунке справа он обозначен точкой). Естественно, его можно поименовать и руками: яблоко12 att яблоко12_red { isa red }.

В примере из начала документа, Мия - это конкретная девушка. Она имеет свою (также конкретную) степень "симпатичности", которая отлична от симпатичности Лизы или Маши. Поэтому:

Mia att Mia_nice { isa nice }.


Если атрибут принадлежит не конкретному объекту, а концепту (множеству), создавать дополнительный узел, обычно, нет необходимости:

apple  att apple_color.      red, green, yellow ako apple_color { ako color }.
Конкретные объекты наследуют атрибуты своих предков-концептов: apple12 isa apple.
В результате возможны следующие вопросы к системе:
apple12 att $X { isa red }?      ->  0.5                        # да, это возможно
apple12 att $X { isa blue }?     ->  0.0                        # нет, это невозможно
apple12 att $X { isa color }?    ->  $X = { isa apple_color }   # цвет ещё не известен.
Т.е. типичное яблоко имеет атрибут из множества "яблочных цветов" (выше - красный, зелёный, жёлтый). Любой из них (но один, если нет com!) может быть у конкретного яблока apple12. Так как цвет яблока не известен, на вопрос "яблоко красное?" следует ответить "не знаю, но это возможно" (0.5). Вопрос "какой цвет у яблока?", должен дать ответ "яблочный цвет, т.е. или красный, или зелёный, или желтый".


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

black, white, green ako color.
black, white        ako h_skin_color { ako color }.

h_skin pof human.        # кожа неотъемлемая часть человека
h_skin att h_skin_color. # значение не определено, но или black, или white

Таким образом, если Mia isa woman, то она как конкретный объект (woman ako human), наследует обязательную часть Mia_skin isa h_skin с атрибутом h_skin_color.
Далее, значение этого атрибута может быть уточнено: Mia_skin att { isa white } и проверено на правдоподобность: (white ako h_skin_color?), что вернёт 1.0 (да, является подмножеством).

Атрибуты black, white взаимоисключающие, т.к. у них и их предков нет отношения com. Кроме этого, для h_skin указан только один атрибут h_skin_color, экземпляр которого будет цветом конкретной кожи конкретного человека. Если объект имеет несколько цветов, необходимо выделять его части (например, передняя сторона листа красная, а задняя - зелёная). Многоцветный цвет можно также выделить в отдельное множество: zebra att black_white.


Атрибуты могут иметь значения val которые бывают числами (чёткими или нечёткими), логическими величинами (чёткими или нечёткими) или строками. Так, распределение веса всех людей из множества human равны (0.1,50,90,300). Это нечёткое, трапецивидное число, состоящее из четырёх обычных чисел:

(abs_min, usual_min, usual_max, abs_max).
Подмножество всех женщин имеет распределение веса, центр которого сдвинут влево.


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

girl { ako woman; att { ako age; val [0, 12,24, 40]; uom year }  }
Mia  { isa girl;  att { isa age; val 16;             uom year }  }
Впрочем, нечёткие значения атрибутов могут быть и у конкретных объектов (Mии примерно 16 лет).


Часть и целое

Объекты часто образуют системы, которые воспринимаются как самостоятельные объекты. Для описания таких систем используется отношение X pof Y (система или объект X является частью системы Y). Отношение pof имеет множество семантических оттенков.


Семантика частей объектов, как обычно, различается при помощи ako-иерархии. Аналогично атрибутам, части конкретных объектов должны быть самостоятельными сущностями:

head { ako essential_part; pof human }.
Mia  isa human.
#--------------------------------------
Mia_head { isa head; pof Mia }.

Такие конкретные части возникают "автоматически" при необходимости уточнения свойств конкретного объекта.


Число частей объектов задаётся атрибутным узлом со значением. Так, животное обязано иметь одну голову:

animal ako human.

a_head { ako head;  pof animal;
                    att {isa count; val 1} }

h_leg  { ako leg;   pof human;
                    att {isa count; val [0,2]} }

Всё свойства объектов в иерархии ako наследуется. Человек (human) имеет одну голову (head), т.к. её имеет животное (animal). Наследуется ближайшее в иерархии значение. При более детальном описании, человеческая голова не эквивалентна голове животного:

Для концептов, pof, строго говоря, это не отношение между двумя множествами, а взаимно-однозначное отображение одного множества в другое (функция). Например (h_head pof human.) означает, что каждый человек из множества head обладает головой из множества голов head (размеры множеств при этом совпадают).


Произвольные отношения

Смыслы могут вступать в различные парные отношения: (Толстой автор "Война и мир") или (Mия мать Сэма). Так как подобных отношений очень много и они могут выстраиваться в иерархию, следует их реализовывать через фиктивные узлы (точка):

Tolstoy rel { isa author;  rel War_and_Peace }.
Маша    rel { isa sister;  rel Саша }.
Саша    rel { isa brother; rel Маша }.
Субъектов (исходящих стрелок) такого отношения может быть несколько:
Маша    rel { isa mother;   rel Миша, Гриша, Лиза; }.

Родственные отношения между людьми могут быть самыми разнообразными. Базовыми для данного человека являются связи с его отцом (father) и его матерью (mather). Остальные родственные отношения - производные. Семья - это группа людей (по крови или по жизни?).

family ako group.
Mia isa woman.
Bob isa man.
Mia, Bob pof { isa family }.
Отношения wife, husband являются временными (не по крови).


Положение

Статическое положение одних объектов, относительно других в языке описывается при помощи предлогов (в, из, вокруг, до, поперёк, вдоль, за, на, между, под, над, с, внутри, у,...) и наречий (здесь, там, где-то,...).

Кроме предлогов between (между) и among (среди), остальные предлоги связывают два объекта. Бинарные предлоги X in Y несимметричны, а X between Y,Z симметричен относительно объектов привязки Y,Z.


В семантической сети положение объектов будем описывать при помощи отношения loc (location). Его ребро направлено от объекта в узел места, в котором объект находится. Узел места является конкретной сущностью (экземпляр множества "мест"). Он может быть в свою очередь, частью некоторого другого места или объекта.

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


Некоторые сущности имеют типичный способ размещения относительно них других объектов (на поляне, в доме). Для них можно ввести множественное наследование, например:

house { ako building, in; }
floor { ako surface,  on; pof house }
Место может иметь длинный "адрес": кафе в центре города, слева от ратуши, в здании на втором этаже.

Первые две локации ссылаются непосредственно на объекты, которые могут быть местом с типичным расположением в нём объектов. Для информации "часы на ратуше", необходимо вводить уже место "на стене ратуши" для этих часов:

Clock loc { isa on; pof TownHall }.        # Часы находятся на поверхности (не типично)
Mayor loc  TownHall.                       # Мэр находится внутри (типично, по умолчанию)
или (при необходимости) добавить сущность "стена ратуши" (которая имеет в своих предках on):
Clock loc TownHallWall1 { isa wall; pof TownHall }.


Правила

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

# Если человек, обладает свойством "женственности", то это женщина.
$X { isa human; att female }     ->  $X isa woman.

# Часть человека находится в том же месте, что и сам человек.
$X pof $Y { isa human; loc $Z }  ->  $X loc $Z.

# Дочки - матери.
$X rel $R1 { isa mother; rel $Y}. 
$Y isa woman                     ->  $Y rel $R2 { isa daughter; rel $X }.

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


Островной мир

Эти сущности важны для жителей двух затерянных островов в бескрайнем океане:


Они различают следующие свойства сущностей:


Описание соответствующей семантической сети имеет вид:

# Иерархия атрибутов:

gender, age,    size,  color ako attribute.
male,   female               ako gender.
young,  old                  ako age.
small,  normal, large, huge  ako size.
black,  white,    
blue,   yellow, red,   green ako color.
yellow, green                ako banana_color { ako color }.

# ako-иерархия сущностей:

being,  object, thing ako entity.
plant,  creature      ako being.
animal, fish,  bird   ako creature.
human,  cat,   dog    ako animal.

food, tool, vehicle, furniture, part ako thing.
house, island, ocean ako object.
axe, kettle          ako tool.
table, chair         ako furniture.
boat                 ako vehicle.

a_pro  { ako human; com person }.
fisherman, sailor ako a_pro.

person { ako human }.
woman  { ako person; att female; }.
man    { ako person; att male; }.
child  { ako person; com woman, man }.

head   { ako part;  pof creature; }.
h_head { ako head;  pof human; }.

ocean  { ako object; att huge, blue }.
island { ako object; }.

grass  { ako plant; att green }.
palm   { ako plant; att large, green }.

banana { ako food;  pof palm;  att banana_color; }.

# Конкретные объекты:

Mia { isa woman }.
Sam { isa man, fisherman }. 
Lis { isa child; att { isa female}; }.
Bob { isa child; att { isa male  }; }.
Bu  { isa cat;   att { isa small }}.
Av  { isa dog }.

Ocean            isa ocean.
Land, Tyland     isa island.
House, Bower     isa house.
Table1           isa table.
Ch1,Ch2,Ch3,Ch4  isa chair.

Примеры обыденных знаний:
$X { isa human; att female }     ->  $X isa woman.
$X pof $Y { isa human; loc $Z }  ->  $X loc $Z.

Примеры запрсов к семантической сети:
senses.ancestors('Sam')       # fisherman, man, professional, human,
                              # animal, creature, being, entity, person

senses.isa('Mia', 'human')    # 1.0  :  Mia является    элементом множества human
senses.isa('Mia', 'ocean')    # 0.0  :  Mia не является элементом множества ocean
senses.isa('Mia', 'sailor')   # 0.5  :  Mia может быть  элементом множества sailor

senses.set_pof('Mia')         # создать части объекта и вывести всё с ним связанное:
senses.sense  ('Mia')         # Mia { isa woman; }.
                              # body_Mia { pof Mia; isa body; }.
                              # head_Mia { pof Mia; isa head; }.


senses.query( '$X { isa head;  pof Mia }.')
# 1.0,  $X = head_Mia < Есть ли голова у Мии?

senses.query( 'Mia att $X { isa gender }.')
# 1.0,  $X = female     < Какого пола Мия?

senses.query( 'Ocean att $X { isa color }.')
# 1.0,  $X = blue     < Какого цвета океан Ocean?

senses.query('Mia loc House. $X { isa head;  pof Mia; loc $Y }.')
# 1.0,  $X = head_Mia, $Y: House < Где голова Мии, если Мия в доме?

senses.query( 'Lis isa woman.' )
# 1.0   <  потому, что Lis att female (!)

senses.query( 'Tyland loc  Land.' )
# 0.0   <  Находится ли остров Tyland на острове Land

Следующие вопросы требуют действий и знаний о них:

Эти вопросы рассматриваются в следующем документе.