Комментарии 39
В указанных подходах понятие свойств пассивно и приобретает смысл только в силу реализации определенного механизма вывода. В предлагаемом подходе свойство активно. Свойство само хранит знания и выдает результат.
Основной плюс, на мой взгляд, в том что не надо заранее продумывать и фиксировать какую-то жесткую структуру объектов и их свойств с учетом всех возможных изменений в будущем. Свойства легко добавлять к уже реализованным объектам по мере необходимости. В обработке естественного языка это актуально.
Нет, во всех этих представлениях семантической сети как раз все свойства динамические и доопределяемые (в этом, собственно, и суть этих форматов/протоколов/языков, суть проблемы описания бесконечно расширяемой семантической сети).
Если вспомнить синтаксис естественного языка, то известно, такой языковый знак как слово имеет характеристики: состояние, свойство, действие. Похоже ваш "новый язык" включает эти характеристики неким кодовым/знаковым образом. Любой язык коммуникационная система с использованием знаков порядок которых устанавливается доступным образом. Так что ваш подход не уникален.
Если вспомнить синтаксис естественного языка, то известно, такой языковый знак как слово имеет характеристики: состояние, свойство, действие.
Есть даже язык программирования основанный на основе СЛОВА — Форт (Forth) а также группа языков конкатенативной парадигмы. ?
Был, к примеру, сделан и дипломный проект в рамках широко использования слов русского языка в окружении условного Форт — небольшой браузер HTML файлов. (почти выглядивщий как программа-«роман» в словах)
P.S. Попытка автора статьи ввести синтаксические/семантические конструкции структурного плана сразу уменьшают мощность потенциального использования такого языка в сравнении, к примеру, в сравнении с DSL направленостью.
Сама идея классификации различных сущностей с помощью привычных для человеческого мышления понятий очень хороша и напрашивается сама собой. И это очень хорошо отображается на обычные части речи (существительное, прилагательное и глагол, т.е. объект, свойство и действие), но дьявол как обычно в деталях.
Ведь семантический анализ текста со свободной лексикой легко не сделать. Да и чем сложнее синтаксис будет становиться, тем труднее будет его использовать. А если взять строгие правила оформления кода программ, то получится еще один из десятков тысяч языков программирования.
У меня подход к данной теме немного другой. Разработать язык программирования с такой семантикой, в которую бы вписывались любые термины и комбинации символов, т.е. язык программирования без привязки к ключевым словам только на основе грамматики и тем самым сосредоточится не на теории, а уже на реализации.
В области ИИ я ничего не понимаю, и наверное вы придумали что-то полезное, но замечу:
Два, одинаково называемых поля в
разных объектах это два совершенно разных системных объекта
может быть один экземпляр свойства между многими объектами
... и не имеющих ничего общего с точки зрения системы
у них один тип или класс или интерфейс или структура или экземпляр
Человек воспринимает свойство самостоятельной сущностью и говоря, например, о цвете машины и о цвете волос, мы понимаем, что речь идет об одном свойстве – цвете
да, это тип
Следовательно, для реализации алгоритмов, моделирующих мыслительные процессы человека, свойство и объект должны быть представлены в виде самостоятельных и равноправных структур
они так и представлены, как объект и как тип свойства
Так как описание объекта максимально абстрактно («Нечто»), а новые свойства легко определяются и добавляются, то функциональность может быть расширена без необходимости внесения изменений в уже реализованные действия
Это объект JS или словарь. А потом понадобится ответить на вопрос "как работать с этим объектом, когда я забыл где и что добавлял, и есть ли оно в данный момент", и вы изобретёте контракт и класс. JS -> TS. А функциональность при наследовании и так расширяется без изменений, или меняется где это нужно через override. Или допустим на строго типизированном языке можно сделать класс, у которого все свойства и методы будут в словаре, и вызывать методы Get Set Call, что и происходит в JS. Только это будет в одном случае, а всё остальное строго. И будет это дженерик, у которого для свойств указывается один и тот же тип, или any/object для любого типа. И через этот тип свойства в разных объектах связаны по смыслу. А когда нужно связать их ещё и по поведению в рантайме, то они просто станут ссылками на объект свойства где-нибудь в куче.
В условиях острого недостатка новых идей
Сильно сказано. Может они просто не проходят отбор.
В частности, на многие десятилетия считающееся само собой разумеющимся представление о том, что объект первичен, а свойство привязано к объекту.
Потому что по определению, объект - это данные и методы их обработки. Если данные сами по себе - то никакого объекта нет. Там где данные не привязаны к объекту, есть например функциональное или процедурное программирование. И у вас о свойствах представление как о примитивах типа целого числа, но они могут быть объектами, их смысловая связь прямо прописана в виде класса.
"может быть один экземпляр свойства между многими объектами"
- Возможно, я не совсем понял, что вы имеете в виду, но один экземпляр вполне может быть как значение свойства, да. Но смысл свойства определяется не значением, а тем откуда оно получается. Например "высота = 2" и "ширина = 2" - ссылаются на один и тот же объект (2), но имеют разный смысл, так как ссылки идут из разных областей памяти. И тип объекта (в данном случае - целое число) не определяет смысл свойства. Можно сделать класс или структуру, назвать ее Color, но смысл у нее появится только в зависимости от того как мы ее будем использовать, то есть откуда будем на нее ссылаться.
" Потому что по определению, объект - это данные и методы их обработки."
- это в объектно-ориентированном программировании. Именно это положение и предлагается пересмотреть в предлагаемом свойство-ориентированном подходе.
смысл у нее появится только в зависимости от того как мы ее будем использовать, то есть откуда будем на нее ссылаться
Не обязательно. У целого числа 2 может быть потомок Width. Тогда он будет отличаться от Height. В любых объектах, которые их используют. Это можно делать наследованием или каким-нибудь брендированием для передачи смысла "2 как ширина". А у Color может быть наследник SkyColor или color.type = sky. То есть цвет не имеет смысла, и используется там, где смысл не важен, а цвет неба используется там, где важно его отличать от цвета кожи.
Сделайте обобщённый класс Sense<T,S>, и сможете для полей писать смысл, и он будет единый для всего проекта. Например поле "ширина_кабины" : Sense<int,кабины> = 5.
В моем понимании «глубоко копнуть» это показать середину луковицы
где дальше только сенсорная информация.
Определенные комбинации сигналов с сенсоров приводят к рефлекторным реакциям или выбросу тех или иных веществ в мозг, которые и влияют на выполняемые действия.
Рефлексы это «короткие» пути обработки сигналов, не контролируемые (или слабо контролируемые) более высокими уровнями «луковицы».
Создание ИИ должно идти не путем создания «языка», язык это высокоуровневая составляющая.
Попробую привести аналогию:
Вы знаете как устроена и на каких принципах функционирует совеменная вычислительная техника (от транзистора, до ОС и в самом конце пользовательское ПО).
Для ИИ практически ничего кроме нейрона (транзистора) достоверно ничего неизвестно, да и нейрон исследован относительно слабо. Если перенести современные знания о ИИ на современную вычислтетельную технику. Вы программы (аппаратуру тоже ) для компьютера писали бы не на языках программирования, а с использованием «глубокого обучения» случайных последовательностей ассемблерных комманд. При этом не понимая что такое ассемблер, который тоже был получен методом «глубокого обучения» «транзисторных сетей».
Думаю теперь Вы понимаете насколько «смешными» являются современные знания о ИИ.
Если у Вас есть желание серьезно заняться ИИ, пишите.
Насчет "смешного" текущего уровня ИИ согласен. Плохо, что от частого неоправданного использования, дискредитируется сам термин искусственный интеллект. Очень актуальна задача перехода от "глубокого обучения" к более высокоуровневым алгоритмам. А для этого надо понять с какими понятиями работает мозг. Если проводить аналогию с электронными компонентами, то необходимо перейти от рассмотрения отдельных транзисторов к рассмотрению функциональных блоков, дискретных элементов, микросхем.
Собственно в статье я и сделал такую попытку - описанный в разделе 2.1 базовый системный элемент мог бы, на мой взгляд, служить таким базовым блоком. Но наверняка кто-то может и другие гипотезы предложить.
В свое время японцы попытались реализовать что очень похожее, по ряду причин проект провалился.
Если интересно, почитайте:
ru.wikipedia.org/wiki/Компьютеры_пятого_поколения
Есть проблема — абсолютное большинство людей обладают крошечным кругозором (программисты особенно) и ничего кроме распиаренных фон Неймана и нейронных сетей не видят. Народ банально не хочет думать и даже научное сообщество в прямую говорит, что если то о чем вы пишете уже не описано в 10+ работах передовых ученых, то это ерунда недостояная даже прочтения (про анализ написанного даже не говорю).
... Человек воспринимает свойство самостоятельной сущностью ...
Ну, если учесть объективный научный факт того, что материя (объективная реальность) проявляется только и исключительно через свои свойства, то такое отношение вполне логично и объективно. :)
... свойство и объект должны быть представлены в виде самостоятельных и равноправных структур ...
То, что мы воспринимаем, как "самостоятельную" сущность и объект, объективно является функцией, т.е. свойством, иной сущности и объекта.
Объективно, любой ЯП реализует свойство-ориентированный подход. Так, что автор несколько нелогичен, когда пытается выделить свойство, как некую "самостоятельную" сущность.
Нелогичность в философской основе предлагаемого проекта, закономерно приведет к его логическому тупику, при практической реализации и применении, или замкнет его на очень узком диапазоне решаемых задач.
То что сейчас называется ИИ, больше похоже на цифровую обработку сигнала. В сигнальном графе нет понятия принадлежности и иерархии. Семантика таких средств как TensorFlow не зависит от языка программирования, поскольку реализует базовые понятия кибернетики.
Я и забыл, что КДПВ может не отображаться в самой статье. Boomburum, так и задумано?
Ваш подход не имеет ни какого нейрофизиологического и психологического обоснования. Рассматривать свойство, например цвет, как действие это полный абсурд. Способность действовать или нет присуща (имманентна) классам объектов, самим сущностям , но не их свойствам. Можно рассмотреть действие (глагол) как основу смысловой организации мира и связать с ним субъект и объект. Это стандартная схема и не надо изобретать велосипед.
"Ваш подход не имеет ни какого нейрофизиологического и психологического обоснования. "
Странно такое читать. Еще в 70-80-е годы прошлого века академиком П.К.Анохиным была разработана теория функциональных систем, в которой центральным элементом рассматривалось действие, так что про отсутствие обоснования неверно. В статье я предложил как от действий можно перейти к свойствам (рассматривая значения свойств как результат неявных действий выполняемых мозгом). Не вижу в этом абсурдности - просто расширение давно известного представления об организации структур мозга вокруг действий. То есть действия не только могут вызывать внешние проявления в поведении, но и порождать внутренние образы, становящиеся значениями свойств.
А объекты возникают для удобства работы с относительно неизменными наборами свойств.
Именно такой взгляд я попытался показать, но, конечно, он не единственный и можно смотреть на мир и через объектно-центричную оптику, как делаете вы. Просто два разных взгляда, и для меня, объектно-центричный взгляд представляется менее гибким.
Да нет батенька! Вы декларируете "Свойство-ориентированный подход" т.е. во главу угла ставятся свойства и из них вытекают действия. Я считаю, что это не правильно и ссылку на Анохина вы не правильно интерпретируете. Например в лингвистике и особенно в английском языке значение глагола определяющее, но оно не может быть единственным и интерпретироваться без субъекта действия. Это как бы неразлучная пара и строить весь мир только на действиях это не верно, я бы сказал метафизично. Самое главное: я не вижу в вашем подходе рационально зерна. Объектно-ориентированный подход с классом сущностей и методами (действиями) широко принять всеми, прост и понятен, а вы как бы переворачиваете весь мир с ног на голову и говорите, что действие и свойства это все, а сущности лишь вытекают из этой концепции. Зачем это вами нужно ? Для чего? В чем суть драйва?
Нет, ну название "свойство-ориентированный", на мой взгляд, лучше подчеркивает отличие от объектно-ориентированного подхода, хотя свойство и не является там базовым элементом, а производным от действия.
А зачем? - Для гибкости и динамичности. При таком подходе не надо заранее ничего знать об описываемом понятии, можно начать с полной абстракции - "нечто". Потом присвоить ему какие-то свойства. Если свойств не хватает, описать таким же образом новые свойства и использовать их. Причем в основе одна и та же внутренняя структура.
А в объектно-ориетированном подходе вы прежде чем создать сущность должны предусмотреть класс и определить какие-то свойства для него. То есть для предметной области вы заранее должны построить некоторую иерархию классов. В случае большой предметной области и/или меняющихся задач все становится очень нетривиально, так как разные задачи могут требовать разных иерархий. Собственно поэтому все предыдущие попытки создать семантический анализатор текста были неудачными... Как-то так...
А для четко определенных задач в ограниченной предметной области, конечно проще пользоваться объектно-ориентированным подходом.
Я вас понял. Но ведь есть абстрактные классы unknown и их можно использовать для старта проекта, наращивая ваши любимые свойства и действия, пока ситуация не прояснится и не удастся перевести неизвестный в определенный. Не так ли?
Но определенный класс должен уже существовать, либо вы должны динамически его создавать... А с какими свойствами и методами? Если пустой, то смысла в этом мало...
Возможно, я недопонимаю чего-то, но мне на этом пути видятся большие препятствия...
Спасибо за интерес к теме! Удачи!
динамическая генерация классов и методов была бы идеальна. Я много занимался трассировкой и отладкой кодов чужих программ. Такая техника позволяет понять и воспроизвести алгоритмы и структуры данных. Там действительно все начинается с действий, а параметры это свойства. Если записать и обработать подробные логи, то можно синтезировать и класс и свойства и методы.
Если уж вы хотите внести некую лепту в развитие базового подхода программирования, то попробуйте реализовать концепцию фреймов Минского, Филлмора, Шенка, типичных ситуаций и понятий. Это действительно работает и может принести пользу. Я же со своей стороны раздумываю над неким подходом моделирования мира для ИИ и роботов на основе иерархии всех понятий взятых например из WordNet и реализовать их в виде классов, т.е. парсер для понимания текста создает на лету классы и вызывает методы соответствующие словам естественного языка. Смотрит наличие противоречий, пропусков информации и выбирает только исправные семантические и прагматические интерпретации текста. Мне кажется в этом есть свой смысл. Спасибо за дискуссию и Удачи !
Ну, каждый занимается тем, что ему интересно, и тем, что считает верным - в этом ценность и смысл 🙂
Важно делиться своими мыслями, даже если другим они кажутся неверными. Мне кажется тупиковым объектный подход, а вы не согласны с моим взглядом. Это нормально.
Здорово, что вы пытаетесь реализовать свое видение. Искренне желаю удачи!
Спасибо большое, на этот раз я полностью согласен с вам !
Вообще говоря очень жаль, что нынешнее поколение разработчиков нейросетей не знает или не хочет использовать успехи классического ИИ. Я же считаю, что дальнейшее развитие только коннекционистского подход не принесет успеха без интеграции с передовыми системами логического вывода. Человек должен четко понимать как и почему приято то или иное решение на каждом шаге на основании каких данных и каких правил. В современных нейросетях понять что происходит во внутренних слоях крайне трудно.
Это да. А для меня современные нейросети неинтересны потому, что они основаны на предыдущем опыте человека и, если бы не было огромного датасета этого опыта, то не было бы и результата. А с человеческим мозгом все интереснее - маленький ребенок, не обладая энциклопедическими знаниями, вполне может приобретать новые знания и использовать их, и потенциально может освоить любую предметную область. Хотелось бы создать такой аналог ребенка 🙂, способного к обучению в любой области, без необходимости заливания в него всего прошлого опыта... К тому же могут быть ситуации когда прошлый опыт будет неверен...
На самом деле успехи нейросетей колоссальны, а классический ИИ давно топчется на месте. Нейросети разом решили все проблемы NLP, машинных переводов, распознавания и синтеза речи на всех языках ! Но именно интеграция нейросетей с логическим выводом залог развития успеха ИТ. По поводу обучения ребенка нет проблем. Берется некий игровой движок с поддержкой физики, сложным окружением пространства и предметов, создается виртуальная креатура с поддержкой ИИ и в частности методов обучения с подкреплением (reinforcement learning). На быстром компе ваш "ребенок" научится жизни через неделю вместо 3-х миллиардов лет эволюции. Дале код обученной модели скидывается в прошивку робота или авто и поехали. Именно так сейчас и поступают все разработчики. Надо научить ребенка читать, писать, говорить, различать кошек и собак - без проблем. Сейчас стоят немного другие вопросы: самосознание, эмоции, мораль, этика. Самое важное, что весь опыт вашего ребенка в виде файла модели можно залить в миллиарды других виртуальных или физических объектов! С машинным обучение чему угодно сейчас проблем нет.
пока мы дискутировали с вами, мне пришла простая мысль как построить семантическую сеть для визуального представления смыла текста при помощи LLM. Достаточно скормить сети текст как промпт и последовательно задавать кучу вопросов об о всех действующих лицах и сущностях. Ответы как раз и будут данными для построения графа сети.
Нет, ну то что LLM имеет некоторое внутреннее знание о прочитанном тексте не вызывает сомнения. И это знание безусловно можно вытаскивать в нужном виде. Но хочется сделать это без LLM!
Вы удивительный человек, как будто и не программист вовсе. :-) Я например первым делом ищу готовое решение или хотя бы его часть и только потом сажусь за кодирование. Уверяю вас, что вам не удастся реализовать в полной мере то, что успешно решает LLM ни за какие временные рамки!
над задачами NLP десятки тысяч ученых и программистов бились 70 лет и без результата, а нейросети обошли всех на повороте буквально за 3-5 лет! Да еще как обошли, с бесконечным отрывом !
Идея для языка программирования искусственного интеллекта. Свойство-ориентированный подход