1. Введение

Еще в работах академиков Анохина П.К. и Судакова К.В [1] отмечалась центральная роль понятия действия в работе мозга человека. Они предложили понятие «акцептора результатов действия», как структуры объединяющей информацию о поведенческих актах, выполняемых субъектом. В предыдущей статье [2] я предположил и постарался показать как структуры, представляющие действие, делают возможным представление и обработку знаний в целом, а не только для реализации поведенческих активностей. В статье [3] попытался показать, как в процессе эволюции сознание могло возникнуть в качестве следующего механизма усложнения поведения вслед за рефлексами и эмоциями. Важность описания и представления действия отмечалась и другими авторами, в том числе и здесь на Хабре, например, Александром Болдачевым ( @boldachev) в статье "Семантика и деятельность".

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

Для начала уточним терминологию.

Активностью будем называть собственно выполняемое системой действие без какой-либо мета информации. В информационной системе активность может быть представлена некоторой подпрограммой или функцией, поэтому иногда вместо слова «активность» может использоваться слово «функция».

 Действие или Структура действия, в контексте данной статьи, означает Активность, совместно с дополнительной мета информацией об этой Активности, такой, например, как количество параметров Активности, результаты прошлых выполнений Активности, ожидаемый результат и пр. Совокупность указанной информации будем далее называть структурой действия или просто действием. Передача параметров в Активности и возможное получение результата Активности осуществляется передачей ссылок на Структуры действия.

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

 Все понятия в системе представляются в виде Структур действия. Поэтому использование по тексту терминов «понятие», «действие» и «структура действия» взаимозаменяемо и подразумевает указанную выше структуру, если отдельно не указано иное.

2. Базовые действия системы

Для определенности, будем рассматривать далее некую абстрактную информационную систему, предназначенную для обработки символьной (текстовой) информации.

Для начала определим два Действия – чтения символов(read) и вывода символов на печать(print). Также необходимы понятия для представления символов (цифры, буквы, знаки пунктуации и пр.). Будем обозначать Действия подобно математическим функциям – именем и заключенными в скобки параметрами, или аргументами – f(x1(), x2()). Аргументы и результат – тоже Действия. Для упрощения чтения, когда параметры действия не важны, будем писать просто A, например, вместо A(x1(), x2()).

Создание Структур действия будет выполняться служебным действием new(activity, param_num), где «activity» – Активность, составляющая действие, а «param_num» – число параметров, необходимых для Активности, например:

WHAT_IS = new (Activity_mapping, 1)

Если параметры не заданы, то подразумевается пустая активность и действие при выполнении не выдает никакого результата. На Рис.1 схематично показана Структура действия и базовые Действия.

Рис.  1 Структура действия и базовые действия
Рис. 1 Структура действия и базовые действия

Действия чтения символов и вывода их на печать содержат соответствующие Активности чтения и печати.

Действия, соответствующие понятиям символов, содержат пустую Активность (при ее выполнении ничего не происходит). Эти Действия имеют смысл только в качестве параметров других Действий, например, Действия печати, или как результат Действия чтения. То есть, Действие чтения возвращает ссылку на одно из этих понятий, а Действие печати при его выполнении осуществляет вывод на печать символа, соответствующего понятию, указанному в качестве аргумента.

2.1. Последовательности символов

Указанные ранее понятия позволяют системе работать с одиночными символами. Работа с последовательностями символов может быть организована в системе, например, следующим образом. Представим, что в системе имеются действия сохранения (store) в памяти и чтения из памяти (load) с параметрами: 1) индексом элемента в последовательности и 2) ссылкой на понятие.

Понятие, представляющее последовательность символов ABC, может быть создано тогда следующими действиями:

ABC = new()
store(ABC,0,A)
store(ABC,1,B)
store(ABC,2,C)

Доступ к первому элементу понятия ABC возможен выполнением действия load(ABC,0). При отсутствии понятия с указанным индексом возвращается код ошибки. Другие Действия, работающие с последовательностями понятий (например, действие печати) учитывают количество элементов в переданных им параметрах для выполнения соответствующих активностей.

2.2. Активность сопоставления

Определим, например, два понятия: буква – LETTER, и цифра – DIGIT.

Тогда мы можем сконструировать Действие WHAT_IS с одним параметром, активность которого будет заключаться в возвращении LETTER, если в качестве параметра указаны понятия А..Я, и DIGIT, если в качестве параметра указаны понятия 0..9.

WHAT_IS = new(Activity_mapping,1)
WHAT_IS(A) => LETTER, WHAT_IS(1) => DIGIT

Активность по сопоставлению аргументов и результата, Activity_mapping, удобно сделать универсальной, содержащей внутреннюю таблицу с соответствием Аргументы-Результат. Это позволит нам реализовывать любые понятия, связанные с классификацией понятий, их свойствами и отношениями между понятиями (Рис.2).

Рис.  2 Активность сопоставления и действие на ее основе
Рис. 2 Активность сопоставления и действие на ее основе

Активность Activity_mapping будет осуществлять сопоставление входного параметра с имеющейся внутренней таблицей и возвращать соответствующий входным данным результат. Данные в эту таблицу будем заносить специальным действием Learn(arg, action, result). Таким образом мы cможем сообщить системе, что при запуске Действия action с аргументом arg в результате надо выдавать ссылку на result.

2.3. Активность сравнения - свойства и их описание

Так как, во многих случаях, действие возвращает ссылку на результирующее понятие, можно представить Активность (Activity_compare), которая будет сравнивать реальный результат указанного действия с каким-либо понятием, сравнивая их на совпадение. Положительный результат сравнения будем обозначать понятием Да(YES), а отрицательный – понятием Нет(NO).

YES = new(), NO = new()

На базе этой Активности (Activity_compare) можно реализовать любое свойство. Для этого введем в системе понятие свойства (PROPERTY). Для реализации сравнения нам необходимо иметь информацию о действии, его аргументах и ожидаемом результате. Реализуем это с использованием действий PROP_ACT, PROP_ARG и PROP_RESULT соответственно. Их аргументом будет понятие свойства.

PROPERTY = new()
PROP_ARG = new(Activity_mapping,1)
PROP_ACT = new(Activity_mapping,1)
PROP_RESULT = new(Activity_mapping,1)

Вот как, например, будет выражено утверждение о том, что понятие something есть буква:

some_prop = new(Activity_compare,1)
Learn(some_prop, WHAT_IS, PROPERTY)
Learn(some_prop, PROP_ARG, something)
Learn(some_prop, PROP_ACT, WHAT_IS)
Learn(some_prop, PROP_RES, LETTER)

Схематично это представлено на Рис. 3.

Рис.  3 Свойство и его возможное влияние на действие
Рис. 3 Свойство и его возможное влияние на действие

То есть свойство some_prop сообщает, что при запуске действия WHAT_IS с аргументом something результат будет LETTER. Предположим, что мы считаем достоверным свойство some_prop. Тогда мы вносим изменение в таблицу активности понятия WHAT_IS чтобы при запуске WHAT_IS с аргументом something в качестве результата возвращалось LETTER. Несложно реализовать и более изощренное поведение, чтобы Активность, стоящая за Действием (в данном случае, Activity_Mapping) анализировала утверждения о релевантных свойствах (в которых присутствует заданное действие) на предмет дополнительных параметров, например, достоверности или вероятности и выдавала результат учитывая только достоверные или вероятные утверждения.

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

2.4. Объекты как наборы свойств, действия как вид объектов

То, что мы в обычной речи называем объектами, понятиями, является по сути описанием некоторого набора свойств, часто встречающихся совместно и поэтому для удобства определяемых через одно понятие. Для представления в системе объектов введем понятие OBJECT. Объекты могут обладать как общими свойствами (например, название), так и специфическими для определенных видов объектов. Для доступа к общим свойствам объекта предусмотрим действие OBJ_PROPS, которое будет выводить в качестве результата список свойств, то есть объектов подобных some_prop из предыдущего раздела.

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

• Кто делает – субъект действия (ACT_ACTOR)
• Что делает – само действие (ACT_ACTION)
• С чем, что делает – объекты действия (ACT_OBJECT)
• Модальность – состояние действия (нужно сделать, делается, сделано и т.д.) (ACT_MOD)
• и другие возможные свойства (когда, зачем, как, почему, достоверность, вероятность и т.д.)

Иными словами, объект-действие — это некоторое высказывание о действии (подобно тому как свойство можно рассматривать как высказывание о результате какого-то действия).

Таким образом, понятие, стоящее за фразой «Светит солнце», может быть представлено в системе через объект-действие some_action (предполагаем, что понятия SUN, SHINE, INPROCESS определены ранее):

some_action = new()
Learn(some_action, WHAT_IS, OBJECT_ACTION)
Learn(some_action, ACTOR, SUN)
Learn(some_action, ACTION, SHINE)
Learn(some_action, ACT_MOD, INPROCESS)

3. Смысл текста и знания

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

Смысл проявляется во влиянии на результаты действий. Модификация знаний об объектах и их свойствах приводит к изменению результатов при выполнении действий.

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

4. Запросы к знаниям

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

Вот, например, пример структуры для вопроса «Кто светит?»:

some_question = new()
Learn(some_question, WHAT_IS, OBJECT_ACTION)
Learn(some_question, ACTOR, Q_ARG)
Learn(some_question, ACTION, SHINE)
Learn(some_question, ACT_MOD, INPROCESS)

Поиск ответа выполняется действием, например, так:

FIND_ANSWER = new(Activity_search_answer,1) FIND_ANSWER(some_question) => SUN

5. Заключение

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

Показанная в данной статье способность с помощью Структур действия представлять знания об окружающем мире, является только одним из проявлений универсальности подхода, основанного на Действиях. В статье [2] было показано, как эти же структуры могут обеспечить планирование поведения и его адаптацию к изменяющимся условиям окружающей среды.

Литература

[1] Александров Ю.И., Брушлинский А.В., Судаков К.В., Умрюхин Е.А. Системные аспекты психической деятельности / М.: Эдиториал УРСС, 1999. – 137 с. 17 п.л. ISBN: 5-8360-0021-2

[2] Гурьев А.П., Динамическая семантическая сеть, основанная на действиях. 2019.
http://www.real-ai.ru/action-based-dynamic-semantic-network/

[3] Гурьев А.П., От эффектора к действию. Эволюция нейронных структур. 2020.
http://www.real-ai.ru/evolution-from-effector-to-action/