1. Текущая объектная модель – недостатки для ИИ

Большинство современных языков программирования реализуют объектную модель, которая подразумевает на базовом уровне понятие объекта, обладающего определенными свойствами. Свойства объекта понимаются как именованные переменные того или иного типа. Перечень свойств может задаваться непосредственно для объекта как в прототипных языках программирования (например, в JavaScript), либо через понятие класса в класс-ориентированных языках (С++, Java, Python и многие другие). 

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

Однако, в задачах искусственного интеллекта (ИИ), моделирования
мыслительных процессов, понимания смысла такой подход обладает существенным
недостатком. И заключается он в реализации понятия свойства. Свойство
рассматривается как неотъемлемая часть объекта и представляется в виде
некоторого именованного поля внутри объекта. Два, одинаково называемых поля в
разных объектах это два совершенно разных системных объекта, занимающих разное
место в оперативной памяти и не имеющих ничего общего с точки зрения системы
(Рис.1).

Рис.1 Структура объекта в современных языках программирования
Рис.1 Структура объекта в современных языках программирования

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

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

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

2. Свойство-ориентированный подход

2.1 Системный уровень

Если мы хотим сделать свойство самостоятельной от объекта структурой, нам необходимо определиться с помощью каких понятий мы будем его определять. Предлагаемый нами ответ – с помощью понятий действия и его результата (подробнее об обосновании применения действий и их результатов для описания предметной области – в статье «Смысл текста или представление знаний в системе, основанной на действиях»).   То есть будем рассматривать свойство как объединение некоторого действия (которое потенциально умеет проверять это свойство) и результата выполнения этого действия. Например, свойство «цвет» подразумевает действие по проверке цвета и результат – объекты, соответствующие значениям цвета, например, «красный», «желтый» и др. Действие подразумевает также возможное наличие у него параметров, в зависимости от которых и получается тот или иной результат.

Для представления действия нам нужна именованная структура обеспечивающая объектное представление некоторой функции или активности. Забегая вперед скажем, что она и будет базовым системным элементом, на котором будут строится и которым будут представляться все другие объекты системы – описания свойств, объектов и действий. Структура этого базового системного элемента, а также его взаимосвязи с другими элементами приведены на Рис.2.

Рис.2 Структура базового системного элемента
Рис.2 Структура базового системного элемента

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

Можно заметить, что знания о предметной области при таком подходе выражаются в виде изменения результата, выдаваемого функцией активности соответствующего базового элемента. Например, знание о том, что объект Х красный, а объект Y – желтый сохраняется в структуре Map базового элемента «Цвет» (Рис.2), что приводит к получению результата «красный» при выполнении функции с параметром X и «желтый» при выполнении функции с параметром Y.

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

  • Действие, оказывающее воздействие на окружающую среду - если функция выполняет определенные внешние для системы действия (например, выводит на экран «Hello world»);

  • Действие, считывающее состояние окружающей среды – если функция возвращает ссылки на базовые элементы, соответствующие некоторым состояниям внешней среды (например, возвращается список ссылок на базовые элементы, соответствующие введенным символам);

  • Действие возвращающее значение какого-то свойства для того или иного аргумента (например, рассмотренный выше «цвет» чего-то) – если функция возвращает ссылку на базовый элемент, основываясь либо на внутренних знаниях (сохраненных в Map, Рис.2), либо на проверке свойств аргумента;

  • Абстрактный объект, «нечто», - если функция не делает ничего и этот базовый элемент не участвует в других отношениях;

  • Объект с определенными свойствами, - функция не делает ничего, но объект присутствует в качестве аргумента в других базовых элементах.

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

2.2 Уровень описания предметной области

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

  1. Описание свойства (property)

  2. Описание объекта (object)

  3. Описание объекта-действия (action)

Для классификации объекта системы по отношению к этим понятиям предусматриваются соответствующие встроенные базовые элементы property, object и action, а также базовый элемент «есть(быть)», выполнение активности которого позволяет получить одно из этих значений.

Для формирования описания свойства в системе дополнительно определяются встроенные базовые системные элементы – prop_action, prop_argument, prop_result, возвращающие ссылки на базовые элементы, представляющие соответственно действие, входящее в описание свойства, аргумент этого действия и результат этого действия.

Для формирования описания объекта в системе дополнительно определяется встроенный базовый системный элемент – obj_properties, возвращающий ссылки на базовые элементы, представляющие описание свойств данного объекта.

С использованием подобных базовых элементов описание свойства «Цвет X - красный» имеет структуру, показанную на Рис.3.

Рис.3 Описание свойства «Цвет X – красный». Представляется элементом P.
Рис.3 Описание свойства «Цвет X – красный». Представляется элементом P.

Объекты в традиционном понимании (как нечто обладающее набором свойств) выражаются описанием объекта. Для примера на Рис. 4 показан элемент O, представляющий собой описание объекта, обладающего свойствами «Цвет – желтый» и «Форма – круглая».

Рис.4 Описание объекта со свойствами «цвет – желтый», «форма –круглая». Представлен элементом O (структура свойств P1 и P2 не показана).
Рис.4 Описание объекта со свойствами «цвет – желтый», «форма –круглая». Представлен элементом O (структура свойств P1 и P2 не показана).

Действия в традиционном понимании, в свойство-ориентированном подходе также выражаются в виде описания объекта (описание объекта-действия), которое предполагает наличие определенного набора специфических свойств, связанных с выполнением некоторой активности – в частности, кто выполняет активность (act_actor), что за активность (act_action), объект активности (act_object), когда выполняется активность (act_time), модальность выполнения активности (хочет, может, надо) (act_mod) и др.

То есть описание объекта-действия – это описание объекта, в списке свойств которого (получаемого через obj_properties) присутствуют описания свойств указанных видов (act_actor, act_action, act_object, act_time, act_mod и др.)

2.3 Пример возможного синтаксиса

Основными операциями, необходимыми для работы с объектами, при таком подходе будут следующие:

  1. Создание базового системного элемента с определенным ID и функцией активности (типовой, по умолчанию);

  2. Выполнение функции, предусмотренной базовым элементом, и получение результата в виде списка ссылок на другие элементы;

  3. Манипуляции с таблицей мэппинга базового элемента – добавление, удаление, модификация записи;

  4. Операции сравнения списка базовых элементов (указателей на базовые элементы);

  5. Создание элементов, соответствующих описанию свойства, объекта и объекта-действия.

На Рис. 5 и Рис.6 приведен возможный вариант синтаксиса для реализации указанных операций.

Рис.5 Вариант синтаксиса по работе со базовыми элементами и описаниями свойств
Рис.5 Вариант синтаксиса по работе со базовыми элементами и описаниями свойств
Рис.6 Вариант синтаксиса по работе с описаниями объектов и действий
Рис.6 Вариант синтаксиса по работе с описаниями объектов и действий

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

3. Характеристики, обеспечиваемые предлагаемым подходом

Приведем некоторые ключевые особенности данного подхода:

  • Все объекты системы, описывающие предметную область, на системном уровне представляются единообразно в виде базовых системных элементов (Рис.2). В системе имеется ряд встроенных элементов, обеспечивающих создание основных видов объектов – описаний свойств, объектов, действий;

  • Первичный элемент описания предметной области – свойство. Объект определяется как нечто, способное хранить набор свойств. Действие – подвид объекта;

  • Понятия класса и экземпляра класса отсутствуют. С точки зрения излагаемого подхода класс и экземпляр класса – это объекты, различающиеся только возможным набором свойств;

  • Определение объекта заключается в создании «пустого» (без свойств) объекта и наделении его определенными свойствами;

  • Знания о свойствах тех или иных объектов хранятся не в этих объектах, а в свойствах.

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

  • Чрезвычайная гибкость. Для описания любого нового понятия достаточно ответить на следующие вопросы:

    • Это объект, действие или свойство?

    • Нужны ли дополнительно связанные с ним понятия?

    • Есть ли уже оно в системе?

    • Если нет, то как оно будет называться в системе?

    • Какими свойствами оно будет связано с другими объектами?

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

  • Легкая расширяемость. Так как описание объекта максимально абстрактно («Нечто»), а новые свойства легко определяются и добавляются, то функциональность может быть расширена без необходимости внесения изменений в уже реализованные действия;

  • Выразительность представления. Опыт работы над прототипом семантического анализатора RealAI позволяет говорить, что с использованием данного подхода, возможно представить любые отношения, выражаемые естественным языком.

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

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

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

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

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

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

Комментарии (20)


  1. napa3um
    03.03.2022 10:46
    +3

    Переизобретаете OWL? Или RDFS? Или HATEOAS? Или ПРОЛОГ? Или фреймы Минского? Думаю, нужна какая-то модельная задача, приложение, пример применения вашего Языка, иначе не очень понятно, зачем это всё.


    1. Sanek22 Автор
      03.03.2022 11:15

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

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


      1. napa3um
        03.03.2022 11:19
        +2

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


  1. YNK
    03.03.2022 11:04
    +1

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


    1. forthuser
      03.03.2022 13:19
      +1

      Если вспомнить синтаксис естественного языка, то известно, такой языковый знак как слово имеет характеристики: состояние, свойство, действие.

      Есть даже язык программирования основанный на основе СЛОВА — Форт (Forth) а также группа языков конкатенативной парадигмы. ????

      Был, к примеру, сделан и дипломный проект в рамках широко использования слов русского языка в окружении условного Форт — небольшой браузер HTML файлов. (почти выглядивщий как программа-«роман» в словах)

      P.S. Попытка автора статьи ввести синтаксические/семантические конструкции структурного плана сразу уменьшают мощность потенциального использования такого языка в сравнении, к примеру, в сравнении с DSL направленостью.


  1. rsashka
    03.03.2022 12:24
    +1

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

    Ведь семантический анализ текста со свободной лексикой легко не сделать. Да и чем сложнее синтаксис будет становиться, тем труднее будет его использовать. А если взять строгие правила оформления кода программ, то получится еще один из десятков тысяч языков программирования.

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


  1. Gigatrop
    03.03.2022 14:00
    +2

    В области ИИ я ничего не понимаю, и наверное вы придумали что-то полезное, но замечу:

    Два, одинаково называемых поля в
    разных объектах это два совершенно разных системных объекта

    может быть один экземпляр свойства между многими объектами

    ... и не имеющих ничего общего с точки зрения системы

    у них один тип или класс или интерфейс или структура или экземпляр

    Человек воспринимает свойство самостоятельной сущностью и говоря, например, о цвете машины и о цвете волос, мы понимаем, что речь идет об одном свойстве – цвете

    да, это тип

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

    они так и представлены, как объект и как тип свойства

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

    Это объект JS или словарь. А потом понадобится ответить на вопрос "как работать с этим объектом, когда я забыл где и что добавлял, и есть ли оно в данный момент", и вы изобретёте контракт и класс. JS -> TS. А функциональность при наследовании и так расширяется без изменений, или меняется где это нужно через override. Или допустим на строго типизированном языке можно сделать класс, у которого все свойства и методы будут в словаре, и вызывать методы Get Set Call, что и происходит в JS. Только это будет в одном случае, а всё остальное строго. И будет это дженерик, у которого для свойств указывается один и тот же тип, или any/object для любого типа. И через этот тип свойства в разных объектах связаны по смыслу. А когда нужно связать их ещё и по поведению в рантайме, то они просто станут ссылками на объект свойства где-нибудь в куче.

    В условиях острого недостатка новых идей

    Сильно сказано. Может они просто не проходят отбор.

    В частности, на многие десятилетия считающееся само собой разумеющимся представление о том, что объект первичен, а свойство привязано к объекту.

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


    1. Sanek22 Автор
      03.03.2022 15:07

      "может быть один экземпляр свойства между многими объектами"

      - Возможно, я не совсем понял, что вы имеете в виду, но один экземпляр вполне может быть как значение свойства, да. Но смысл свойства определяется не значением, а тем откуда оно получается. Например "высота = 2" и "ширина = 2" - ссылаются на один и тот же объект (2), но имеют разный смысл, так как ссылки идут из разных областей памяти. И тип объекта (в данном случае - целое число) не определяет смысл свойства. Можно сделать класс или структуру, назвать ее Color, но смысл у нее появится только в зависимости от того как мы ее будем использовать, то есть откуда будем на нее ссылаться.

      " Потому что по определению, объект - это данные и методы их обработки."

      - это в объектно-ориентированном программировании. Именно это положение и предлагается пересмотреть в предлагаемом свойство-ориентированном подходе.


      1. Gigatrop
        03.03.2022 15:25
        +2

        смысл у нее появится только в зависимости от того как мы ее будем использовать, то есть откуда будем на нее ссылаться

        Не обязательно. У целого числа 2 может быть потомок Width. Тогда он будет отличаться от Height. В любых объектах, которые их используют. Это можно делать наследованием или каким-нибудь брендированием для передачи смысла "2 как ширина". А у Color может быть наследник SkyColor или color.type = sky. То есть цвет не имеет смысла, и используется там, где смысл не важен, а цвет неба используется там, где важно его отличать от цвета кожи.

        Сделайте обобщённый класс Sense<T,S>, и сможете для полей писать смысл, и он будет единый для всего проекта. Например поле "ширина_кабины" : Sense<int,кабины> = 5.


  1. Rutel_Nsk
    03.03.2022 17:08

    Думаю Вы недостаточно глубоко «копнули», все о чем Вы говорите это слишком высокоуроневые вещи. То что вы описали скорее характерно человеку с образованием от «Институт», остальные мыслят существенно проще. У них никаких объектов и анализа свойств нет, скорее рефлекторные и эмоциональные реакции.


    1. Sanek22 Автор
      03.03.2022 17:21

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


      1. Rutel_Nsk
        03.03.2022 19:15

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


        1. Sanek22 Автор
          03.03.2022 19:53

          Мне кажется что середины «луковицы» и нет уже. Специалисты по нейрофизиологии и нейрохимии возможно меня поправят, но механизм рефлексов и эмоций вроде более-менее понятен — связи между нейронами и выброс химических веществ в мозгу.
          Определенные комбинации сигналов с сенсоров приводят к рефлекторным реакциям или выбросу тех или иных веществ в мозг, которые и влияют на выполняемые действия.


          1. Rutel_Nsk
            04.03.2022 03:41

            Выброс веществ — это относительно медленнй процесс (секунды)
            Рефлексы это «короткие» пути обработки сигналов, не контролируемые (или слабо контролируемые) более высокими уровнями «луковицы».
            Создание ИИ должно идти не путем создания «языка», язык это высокоуровневая составляющая.
            Попробую привести аналогию:
            Вы знаете как устроена и на каких принципах функционирует совеменная вычислительная техника (от транзистора, до ОС и в самом конце пользовательское ПО).
            Для ИИ практически ничего кроме нейрона (транзистора) достоверно ничего неизвестно, да и нейрон исследован относительно слабо. Если перенести современные знания о ИИ на современную вычислтетельную технику. Вы программы (аппаратуру тоже ) для компьютера писали бы не на языках программирования, а с использованием «глубокого обучения» случайных последовательностей ассемблерных комманд. При этом не понимая что такое ассемблер, который тоже был получен методом «глубокого обучения» «транзисторных сетей».

            Думаю теперь Вы понимаете насколько «смешными» являются современные знания о ИИ.

            Если у Вас есть желание серьезно заняться ИИ, пишите.


            1. Sanek22 Автор
              04.03.2022 15:26

              Насчет "смешного" текущего уровня ИИ согласен. Плохо, что от частого неоправданного использования, дискредитируется сам термин искусственный интеллект. Очень актуальна задача перехода от "глубокого обучения" к более высокоуровневым алгоритмам. А для этого надо понять с какими понятиями работает мозг. Если проводить аналогию с электронными компонентами, то необходимо перейти от рассмотрения отдельных транзисторов к рассмотрению функциональных блоков, дискретных элементов, микросхем.

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


              1. Rutel_Nsk
                04.03.2022 15:35

                Описываемое Вами очень похоже на понимание ИИ как базы знаний.
                В свое время японцы попытались реализовать что очень похожее, по ряду причин проект провалился.
                Если интересно, почитайте:
                ru.wikipedia.org/wiki/Компьютеры_пятого_поколения

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


                1. Sanek22 Автор
                  04.03.2022 15:54

                  Спасибо, посмотрю.
                  По науке — увы, это так.


  1. kichrot
    03.03.2022 18:03
    +1

    ... Человек воспринимает свойство самостоятельной сущностью ...

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

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

    То, что мы воспринимаем, как "самостоятельную" сущность и объект, объективно является функцией, т.е. свойством, иной сущности и объекта.

    Объективно, любой ЯП реализует свойство-ориентированный подход. Так, что автор несколько нелогичен, когда пытается выделить свойство, как некую "самостоятельную" сущность.

    Нелогичность в философской основе предлагаемого проекта, закономерно приведет к его логическому тупику, при практической реализации и применении, или замкнет его на очень узком диапазоне решаемых задач.


  1. z0ic
    03.03.2022 22:20

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


    1. Dlougach
      04.03.2022 23:11

      Здесь, надо полагать, автор продвигает альтернативное понимание того, что такое искусственный интеллект. Была раньше такая мода решения NLP-задач: согнать тысячу структуральнейших лингвистов в одну комнату и не выпускать, пока они не построят всеобъемлющую модель языка.