12+
Искусственный интеллект: начала MSM

Бесплатный фрагмент - Искусственный интеллект: начала MSM

Сингулярность неизбежна

Объем: 272 бумажных стр.

Формат: epub, fb2, pdfRead, mobi

Подробнее

Предисловие ко второму изданию

Интерес к искусственному интеллекту не случаен. Согласитесь, кому не хотелось бы иметь при себе всегда внимательного собеседника или помощника, который работал бы за него 24 часа в сутки без усталости, ссор и эмоций?

Но тема, выбранная в повествовании, затронута не ради популярности.

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

То, чем занимается автор на основной работе, — это обработка текстов, видео, работа с журналистами, светом и звуком. Но кроме прочего, у него есть увлечение, занимающее его уже очень давно — программирование.

Свою первую масштабную программу, которая обрабатывала электронные резюме я создал в 2009 году, постепенно дорабатывал и патентовал в 2013-м году как «Комплекс обработки резюме «Спартак». Его суть заключалась в автоматической обработке резюме от приема и до переписки с клиентами без вмешательства человека в этот процесс. Это был существенный прорыв в автоматизации на тот момент. Моя система отличалась очень высокой точностью обработки (до 98% точности распознавания). Но речь сейчас не о ней. Я привел этот пример, как небольшой экскурс к собственной квалификации.

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

Решение пришло внезапно, — вечером 4 августа 2017 года. И на следующий день я приступил к работе над программой, которая оказалась с одной стороны — невероятно проста, а с другой стороны — чрезвычайно интеллектуальна. К моменту, когда я писал эти строки прошло всего несколько месяцев, но уже теперь мы можем видеть потрясающие результаты, подтверждающие верность и перспективность выбранного направления.

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

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

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

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

Введение

Если нужно что-нибудь спрятать, лучше всего положить это на самое видное место, потому что там его искать не придет в голову никому.»

Бернар Вебер

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

Андрей Курпатов, «Красная таблетка»

«Ну а с чего Вы решили, что Вы разумная жизнь? Вот это мне всегда было любопытно, давайте посмотрим как Ваш вид закончит свое существование, тогда мы будем говорить о его разумности.»

Александр Невзоров, из интервью в журнале «Сноб» от 16.09.2015 г.

Вопрос о том, что такое разум, разумная жизнь, беспокоит наших современников все чаще. И если бы мы создавали классическое исследование на эту тему, то можно было бы привести десятки выдержек из отечественных и зарубежных монографий, а также привести сотни аргументов в пользу той или иной теории. Но цель этого исследования — не научная диссертация с целью получить ученую степень. Исследование, которое невольно мне пришлось затронуть — это конечно же не вопрос одного дня или года, для более-менее сносного погружения в тему. Но я надеюсь, что читатель имеет голову на плечах, чтобы следовать простым и логичным выводам. Условимся сразу, взяв за постулат крылатое выражение «Sapienti sat» («Разумному достаточно», лат.) Да простят меня те специалисты, на чей кусок хлеба я покусился. (У вас еще будет достаточно времени для критики.) Но сейчас мы попробуем разобраться самостоятельно, на максимально доступных примерах, что же такое человек и как работает человеческое мышление; а главное, что делает человека человеком.

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

Что такое человеческий мозг?

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

Да, мозг это очень сложный биологический орган. Но, согласно анатомическим данным, строение мозга человека не уникально. Подобный сложный инструмент имеют многие млекопитающие, такие как лошади, приматы, дельфины; причем по размеру, мозг, например, слона (5 кг) или синего кита (6—8 кг) — значительно превосходит человеческий (1,5 кг). Различия в организации принципа работы человеческого мозга и мозга животного существуют, но они для нас в данный момент малоинтересны. (Поскольку мозг — это лишь «железо», технический базис, но нам более важно, как организован «софт». То есть, нам необходимо представить модель «программного обеспечения», а не реконструировать «процессор»).

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

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

Мозг как эволюционный инструмент

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

Но здесь необходимо уловить еще пару важных моментов.

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

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

Ученые предполагают, что развитие сложного языка началось около 50 тысяч лет назад. И за эти 50 тысяч лет или примерно 2500 поколений человечество совершило самый мощный скачок в развитии; очевидно, больший, чем за предыдущие миллионы лет существования вида Homo. Существует много теорий происхождения языка, однако самой правдоподобной кажется теория постепенного развития языка в устойчивых социальных группах с распределенными среди индивидов специализациями. В этом случае каждый индивид воспитывался для выполнения определенной социальной роли в связи с чем возникала естественная необходимость в углублении объема знаний и воспитании. Кроме того, от эволюции человек получил в подарок развитую гортань а с ней и новые возможности для воспроизведения сложных звуков.

Из интересного, можно отметить, что мозг человека верхнего палеолита был крупнее современного примерно на 10% и возможно, потенциально обладал большими возможностями. Тем не менее, люди в верхнем палеолите не намного превзошли своих диких родственников. Можно резюмировать, что как инструмент, мозг полезен лишь в определенных условиях. Этим «определенным условием» является его социализация. Иначе говоря, каждому мозгу для достижения своих наилучших качеств необходим курс социальной дрессировки, — воспитание в обществе себе подобных существ и научение системе передачи информации, языку.

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

Главное понимание, которое следует выделить здесь в том, что наш мозг — не «умный» сам по себе. И не может стать «умным» по какому-то собственному желанию или разумению. Он становится «умным» лишь после успешного завершения процесса социального и культурного воспитания.

Между словами «умный» и «социально-адаптированный» мы можем поставить знак равенства, поскольку человек является существом социальным.

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

Итак, мы переходим к последнему и самому важному выводу.

Человек — это система символов

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

Когда человек считает, что он находится в сознании и «думает», сознательная часть мозга оперирует символами — штампами: «Воровать плохо», «На красный — переходить нельзя», «Делать добрые дела — хорошо», «Летом нужно съездить в отпуск», и т. д. Этот рой различных «установок» регулирует наше поведение или создает видимость того, что регулирует; хотя на самом деле большая часть процессов мышления производится дефолт-системами мозга. (Кстати говоря, хотелось бы на этом месте поблагодарить известного исследователя человеческого мышления, создателя «Академии смысла» Андрея Владимировича Курпатова. В некотором роде вводная часть этой книги близка к выводам, высказанным в его научно-популярных трудах «Красная таблетка» и «Чертоги разума». К похожим выводам приходит и Ноам Хомский, говоря о роли языка не только как коммуникационной системы, но в значительной степени и системы организации процесса мышления. И если в первых своих работах (например, «Язык и мышление», М. 1972) он лишь вскользь затрагивает данную тематику, то в последние годы теория известного лингвиста приобретает все большую устойчивость. В частности, тезис о неотъемлемости языка и мышления Хомский употребляет в 2017 году в популярном видео диалога с Лоренсом Крауссом «Наука, Разум и Политика» на проекте «Origins»).

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

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

Так мы подходим к понимаю, что такое человеческий язык и человеческая логика.

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

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

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

Я хотел бы еще раз акцентировать этот момент. Язык это не побочный эффект, не следствие, не убогий родственник который ходит за интеллектом и просит у него милостыню. Язык в наиболее общем смысле и является всем сосредоточением человеческого фактора который есть в человеке, как в биологическом существе. Язык и является воплощением интеллекта. Ничто другое кроме языка, системы знаний и культуры не рождает интеллект. Невозможно быть интеллектуальным немым, рожденным в пещере, и построить с нуля теорию струн или даже сконструировать телегу, если до этого ты не получил «готовых» необходимых знаний и навыков при помощи языка, системы символов. Либо тебе придется эволюционировать сотни и тысячи поколений, действуя методом проб и ошибок, и попутно изобретать собственный язык с собственной логикой. Но зачем это делать, если он уже есть?

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

Возвращаясь к нашему первому вопросу, задумаемся, что же представляет собой человеческое мышление? А точнее, какими единицами мы оперируем, когда рассуждаем о тех или иных вещах? Это — самое важное, что нам следует выяснить. (Причем, с учетом тематики повествования, нам нет необходимости строить модель, в точности повторяющую действия мозга; но нам нужно реализовать «в железе» систему, которая будет повторять логику модели, принятой в человеческой культуре).

Когда мы сидим за столом, и например, читаем эту конкретную книгу, с ее обложкой, названием, содержанием, толщиной, весом и фактурой страниц, что ответим мы на вопрос, чем мы занимаемся? В первую очередь мы ответим «Чтением»… «Я читаю эту книгу» — скорее всего скажете вы и покажете обложку для того, чтобы другой человек получил минимальное необходимое представление о конкретном предмете вашего занятия.

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

Без каких-либо оговорок можно сказать, что ВСЕ вещи, с которыми мы сталкиваемся в материальном мире, — имеют частное, фактическое представление в виде конкретного предмета, и более общее, абстрактное понятие. Так, «стакан молока» — это конкретное явление более абстрактного понятия «Молоко», еще более абстрактного «Молочные продукты», которые в свою очередь входят в еще более абстрактное понятие «Продукты питания», и так далее. Так же вполне конкретный карандаш, обладающий некоторыми характеристиками твердости, цвета, толщины стержня, заточенности, наличия резинки и других интересных вещей входит в более абстрактные группы, которыми мы оперируем: «Карандаши», «Пишущие принадлежности», «Канцелярия», «Офисные предметы». Но разве вы не замечаете, как нас все время в глубине нашего сознания что-то останавливает в этом перечислении? Как будто меры абстракций в данном случае заканчиваются на «Офисных предметах»? Будто бы наш мозг говорит нам «Эй парень, такой группой абстракций я уже не оперирую, остановись».

Говоря о карандашах, кошках, мебели, технике и тому подобном мы всегда оперируем довольно простым набором абстракций, включающим в себя 2—3 уровня.

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

Проблема состоит в том, что наш мозг не работает или очень плохо работает в направлении от частного объекта к общему. Так, говоря о карандашах, нам уже невозможно представить в какую группу объектов мы можем обобщить «Канцелярию». И немного поскрипя извилинами наш мозг выдает нам что-то в духе: бытовые предметы или неживые объекты. Но неужели это все, на что способен наш мозг?

Из этого отступления мы можем сделать главный вывод:

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

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

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

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

В чем же это может нам помочь?

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

Следующая глава займется подробной доработкой этого вопроса.

Глава 1. Эврика!

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

Помнится в далеком детстве я сталкивался в одной популярной книге по программированию с примером такой игры, в виде простой программы на паскале и бейсике.* (1. Очков В. Ф., Хмелюк В. А., От микрокалькулятора к персональному компьютеру, М.: Изд-во МЭИ, 1990).

Каждый новый объект там хранился в бинарном «дереве» ответов, «поворачивая» на каждой ветке ответного алгоритма «влево» на ответ «Да» или «вправо» на ответ «Нет». Здесь я процитирую авторов книги:

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

Программа самообучающаяся, т.е., машина сама «выращивает» дерево вопросов и ответов, которое хранится в двух литерных массивах В (вопросы) и О (ответы) и в одном числовом Р (логические переходы, ведущие к ответу).» (с. 165)

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

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

Вспомните, как вы начинаете игру в качестве угадывающего?

Чаще всего, вашими первыми вопросами будет вроде «Это живое»? «Это животное»? «Это человек»? и другие, очень общие вопросы. То есть, интуитивно, мы отсекаем от невероятно большого количества объектов материального мира ее значительную часть, для того, чтобы сократить поиски. В результате планомерного отсечения лишнего, наступает момент, когда число определяемых объектов сужается до класса, содержащего всего несколько предметов, и заканчивается на верном варианте.

Приведу пример. Мы начинаем в качестве угадывающего.

— Это живое?

— Нет

— Это можно взять в руки?

— Да

— Этим мы пользуемся каждый день?

— Да

— Это предмет гигиены?

— Нет

— Это предмет одежды?

— Нет

— Это твердое?

— Да

— Это элемент компьютера?

— Нет

— Это тяжелое?

— Нет

— Это телефон?

— Да

Конечно, задуманный объект был не очень сложным, поэтому мы отгадали его всего за 9 попыток. И конечно, отгадывающий хитрил, действуя на основе интуиции, переключаясь на самые популярные группы объектов. Но попробуйте сами, и вы откроете самое интересное, — то, что практически любой объект, или предмет, или понятие из реального мира можно отгадать, задав от 10 до 22 вопросов. Это правило действует так или иначе, в зависимости от степени разветвленности объектных классов, с которыми мы имеем дело.

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

Таким образом, у меня возникла идея о классификаторе ВСЕГО, любого предмета или объекта, понятия, животного или явления. Если мы сможем «нарисовать» эту топографическую карту в мозге машины, то проблема разгадки механизма мышления будет решена.

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

В первую очередь я нарисовал наверху слово

ВСЕ

Что собственно обозначает «все сущее», «всю вселенную со всем содержимым». Если бы я был буддистом, то назвал бы этот объект Аум или Ом, — звук, появившийся перед началом вселенной.

И вниз от него две ветки — Неживое и Живое. (Рис. 1)

Пусть «ВСЕ» будет иметь название или код «А».

Рис. 1. Как можно начинать классификацию

Как вы думаете, что дальше? Как следующий объект может унаследовать признак предыдущей?

Может быть как-то так, как на рисунке 2?

Рис. 2. Как не стоит начинать классификацию

Или так, как на рисунке 3?

Рис. 3. Так тоже не стоит начинать классификацию

Совсем нет. Нам не поможет ничто подобное.

Это невероятно просто, но я еще раз даю вам шанс прийти к этой мысли самостоятельно. Мы могли бы назвать нижние ветки «B» и «С», но, тогда нам придется прикладывать дополнительные усилия по формированию дополнительных условий и правил.

Но мы сделаем по-другому.

«Неживое» мы назовем AA, а «Живое» — АВ (рис. 4).

Рис. 4. «Живое» и «Неживое» получили свои уникальные коды.

Понимаете, что произошло?

Дам вам еще один шанс.

Пусть теперь под «Живым» у нас будет несколько объектов, которые мы назовем соответственно: «Животное» — АВА, «Растение» — ABB, «Гриб» — АВС, «Бактерия» — ABD, «Вирус» — ABE. (Рис. 5).

Рис. 5. Каждый объект иерархии наследует свойства предыдущего в виде уникального кода.

Так, каждый новый объект нашего дерева начинает содержать весь блок описаний своих предков, и это очень интересное явление. Продолжим путешествие по дереву вниз, и для этого, отчасти воспользуемся действующими классификаторами животного мира. Например, мы задумали описать кошку. Под веткой «Животное» ABA рисуем ветку вниз с именем «Хордовое» — ABAA «Членистоногое» ABAB и «Моллюск» ABAC. (Рис. 6).

Рис. 6. Продолжаем углубление в структуру, разделив «Хордовых», «Членистоногих» и «Моллюсков».

Кошка это, конечно, хордовое, поэтому идем ниже и пишем следующий переходный этап «Черепное» ABAAA, после которого делаем ответвления «Млекопитающее» ABAAAA, «Птица» ABAAAB, «Рыба» АВАААС, «Земноводное» ABAAAD. (Рис. 7).

Рис. 7. Дополняем классификатор разделами «Черепное» и выходящими из него: «Млекопитающее», «Птица», «Рыба» и «Амфибия».

Под млекопитающим нарисуем «Хищное» ABAAAAA, под ним — «Волчьи» (где находятся собаки) ABAAAAAA и «Кошачьи» — ABAAAAAB, и наконец, собственно «Кошка» — ABAAAAABA. (Рис. 8).

Рис. 8. Завершаем классификацию «Кошки».

Таким образом, мы получили код живого существа, у которого в «геноме» записаны все его основные уникальные свойства, такие как «Живое» (AB) «Животное» (ABA) «Хордовое» (АВАА) «Черепное» (АВААА) «Млекопитающее» (АВАААА), «Хищное» (АВААААА) и «Кошачьи» (АВАААААВ). (Рис. 9).

Рис. 9. На этом примере видно, как всего 9 символами был зафиксирован «геном» кошки в нашем собственном классификаторе.

(Стоит заметить что в «боевой» версии программы код кошки немного отличается, но также состоит из 9 символов — ABABACBBA. Формы кодов в различных разветвленных классификаторах этого типа могут довольно существенно отличаться как по принципу построения, так и по глубине. Например,

— код «Собака» выглядит как «ABABACBCB» (9 символов);

— код «Палец» выглядит как «АААААААDAABBAABAABAAAA» (22 символа!),

— код «Физика» выглядит как «AAAAAAADAABA» (12 символов),

— код «Вилка» выглядит как «AAADAACAABAA» (12 символов),

— код «Любовь» выглядит как «AAAAAABBAAA» (11 символов).

Кстати, вы заметили, но между пальцем и физикой есть общее. Это «Физическое», — часть кода «AAAAAAADAAB», после которого их «дороги» расходятся. Но подробнее о структуре классификатора мы поговорим в 4 главе.

Что уникального в этом коде?

— Заслоняя «хвост» любого понятия, мы находим его предка. Сравнивая «голову» кода с другим — мы находим его родственника. И это только самое простейшее свойство, лежащее на поверхности.

Что является аксиомой в этом коде?

— Каждый «потомок» имеет более длинный хвост чем его «родитель».

— Каждый «родитель» имеет более короткий хвост, чем его «потомок».

— Сравнивая два кода начиная с «головы» мы найдем общего предка до момента их расхождения.

— Сохранять любой объект можно простым описанием «M это N»;

На практике это выглядит в виде формулировки, как например «Человек это гоминид», после чего в базу данных или в файл программа вносит запись типа

ABABACAAA ЧЕЛОВЕК

(Конечно, предварительно программа должна знать что такое «Гоминид», чтобы иметь возможность присвоить код новому понятию).

— Каждая новая ветка начинается с буквы А. Каждая добавочная в ряде одного порядка — следующий по значению код символа.

То есть, каждый новый уровень мы начнем с добавления «А» к коду, а если какой-то объект добавляется к существующему на одном уровне, то получим уже «В», «C», «D»… и т. д.

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

Я начал работу над собственным классификатором, и прорисовал его графически для простоты представления в powerpoint, и на первом этапе это выглядело, как на рисунке 10.

Рис. 10. Графический пример ветвлений в начале классифицирования неживого (слева) и живого (справа).

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

Из рисунка видно, что схема кажется очень сложной, и запутанной, хотя здесь всего лишь около 150 базисных наименований. К моменту написания этих строк число основных объектов в базе данных рабочей программы уже составляет около 3000 (Продолжая работу по расширению ядра классификатора с использованием морфологии и толкового словаря это число уже приблизилось к 60 000 слов, но эта история достойна отдельной книги. Прим. автора ко второму изданию). И хотя эта схема еще слишком проста для классификации «ВСЕГО», но уже слишком сложна, чтобы изобразить ее в виде подобного двухмерного рисунка. В будущем мы обязательно это нарисуем.

Кстати говоря, мне очень импонирует, что эта схема чем-то напоминает человеческий мозг (рис. 11). Или мне кажется? Но это несущественный вопрос.

Рис. 11. Если разветвленную структуру «классификатора всего» «упаковать» в небольшом объеме, то он мог бы получить сходство со схематичным мозгом.

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

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

Посмотрим, как выглядит часть записей словаря «боевой» программы на рисунке 12.

Рис. 12. Фрагмент кодирования в словаре «боевой» (но все же, тестовой) программы.

Сохраняя новые и новые объекты и их коды в базу данных, мы получаем структуру, обладающую огромным потенциалом, которую я назвал «Многомерным строчным множеством» или «Multidimensional Strings Multiplicity» (англ.). (Сокращенно, можно использовать аббревиатуру MSM или «слово-множество»).

Глава 2. Невероятное многомерное множество

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

Что самое главное — эта структура обладает важнейшим свойством комплементарности элементов между собой. Элементы классов в отличие от других онтологий и классификаторов приобретают неявное свойство дополнительной операбельности, унификации во взаимоотношениях друг с другом и в связи с этим не требуют дополнительной памяти. Сравнивать классификаторы MSM и обычное ООП или классификатор — это как сравнивать паровой двигатель и двигатель внутреннего сгорания. Да, и то и другое едет, но первичные преимущества MSM очевидны: это и скорость и энергозатратность.

Приступив к изучению ресурса, неожиданно полученного в наше распоряжение, удивляет невероятное количество вариативности объектов многомерных множеств. Каждый «этаж» нашего дерева, даже если ограничиваться только доступной 8-битной таблицей символов ASCII, позволяет «разветвить» наше «дерево» вариантов до 256 элементов, и это же может сделать каждый следующий «этаж». Поэтому даже короткая 4-х этажная конструкция обладает невероятной емкостью — 256 х 256 х 256 х 256 = 4 294 967 296 элементов. То есть, чуть меньше, чем всех людей на земле мы можем записать в нем поименно. Напомню, этого числа нам нужно достигнуть всего в 4 классах элементов для того, чтобы достичь отказа системы принимать следующий элемент. Но, как мы поняли из предыдущей главы, нам столько и не понадобится, поскольку в большинстве случаев «ветки» дерева будут расти скорее в «длину» чем в «ширину».

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

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

Разумеется, для того, чтобы сформировать «умное» и разветвленое многомерное множество требуются серьезные усилия, особенно в областях классификатора, относящихся к неживым объектам и понятиям. Но не будем забегать вперед. Подробно об этом можно прочитать в 4 главе.

2.1. Общее и частное

Остановимся на простых операциях со множествами MSM.

Например, мы имеем задачу найти общее свойство нескольких элементов, объектов реального мира.

Пусть это будет:

ABВACAAB Яблоко

АВВАСААС Апельсин

ABBBAA Трава

ABВAAAB Сосна

Для этого мы всего лишь сравниваем попарно слова-множества и запоминаем результат в совпадающей части:

в 1 паре ABBACAAB и ABBACAAC это будет ABBACAA — ФРУКТ

далее мы сравниваем полученное и следующее —

ABBACAA и АВВВАА — получаем АВВ — РАСТЕНИЕ, и сравниваем теперь его с последним:

АВВ и ABВAAAB — также находим общее АВВ — Растение;

Так мы получили ответ, что все 4 объекта относятся к «растениям».

Возьмем еще один пример:

AAAAAABABA Эмоции

AAAAAABBAA Симпатия

AAAAAABAAABA Миф

Так же сравниваем левые части кода этих слов-множеств, находим общее, и это будет AAAAAAB — Субъективное. И это совсем неочевидный ответ, который имеет место быть.

Для того, чтобы найти лишнее в ряде элементов, потребуются уже некоторые хитрости:

ABABACCABA Коза

ABABACCAAA Корова

ABABACDAA Лошадь

AAADAACBBA Стол

ABABABAAA Акула

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

Сделать это можно следующим образом:

Мы сравниваем поочередно каждое из слов-множеств со всеми присутствующими; причем сравниваем по-хитрому, получая в качестве ответа процентное соотношение «попадания» в искомое.

Например, имея некие коды A B C D E, мы можем получить средневзвешенную оценку общности так:

А и В = 95%, А и С=93%, А и D=5%, А и E=50%, итого (95+93+5+50) /4=60.75%

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

Если взглянуть на процедуру процентного сравнения детальнее, сначала мы сравниваем каждый символ позиционно с первого до последнего. Затем оцениваем нахождение всех частей одного слова в другом. То есть, если у нас есть строка «ABCDEF» мы берем и сравниваем подстроку AB, потом BC, потом CD, потом DE и EF. Затем группу трех символов ABC, BCD, CDE и DEF. Затем сравниваем группы четырех символов ABCD, BCDE и CDEF, и наконец пять — ABCDE и BCDEF. Так же мы снижаем оценку схожести, если «слова» отличаются по длине. (Но все же описанный здесь метод больше подходит для работы со словами естественного языка, где значение имеют корни, приставки суффиксы, словоформы и прочее. Для сравнения элементов MSM вполне подходит метод «первого расхождения», когда начиная сравнивать объекты с «головы», мы доходим до позиции расхождения и затем сравниваем пройденную длину с общей длиной самого длинного объекта. Процент отношения пройденного пути к общей длине и будет здесь показателем схожести. В более поздней версии программы именно этот способ сравнения показал наиболее точные решения. Прим. автора ко второму изданию.)

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

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

Сыграем в эту игру еще раз:

AAAAAAABAAB Сила

AAAAAAABAAA Вес

AABDABAA Водород

AAAAAAADC Теория

Здесь программа отсечет самый инородный объект — Водород. А затем на «вылет» пойдет и Теория.

2.2 Расширение значений свойствами и их наследование

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

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

Например, запишем «Лев сильный»:

ABABACBBBA AAAAAAABAABA

Или «Лев большие когти»:

ABABACBBBA AAAAAAABAADAC AAAAAAADAABBAABAABDAA

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

Так и запишем «Хищное большие когти»:

ABABACB AAAAAAABAADAC AAAAAAADAABBAABAABDAA

Так с помощью слов-множеств мы сможем умножать знания на подмножества объектов.

Каков механизм этого?

Мы знаем что Лев ABABACBBBA это часть подмножества хищное ABABACB.

ABABACBBBA = ABABACB [+BBA]

//Лев Хищное

Поэтому для того чтобы определить, что Льву принадлежат свойства ABABACB, мы найдем в словаре свойств слово-множество ABABACB и сравним, является ли оно «головой» объекта Лев ABABACBBBA. Мы выяснили, что это так, и запомнили.

Теперь, спросив о свойствах Льва система может уверенно ответить свойствами Хищного, если таковые у нас присвоены. Так мы получим на вопрос о свойствах Льва ответ «Большие когти». Точно такой же ответ мы уже получим и на вопрос о свойствах Тигра, Пантер, Гепарда, Медведя, Волка и десятках других известных системе животных, относящихся к Хищным, а также всем подклассам, видам и семействам, находящимся на уровень выше. Таким образом, одно единственное знание многократно «размножилось», не составив никакого труда. Умножение знаний является одним из уникальных свойств многомерного множества.

В MSM каждое новое знание умножается на все подклассы множества.

P=P*N где P — элемент свойства, а N — число всех элементов подклассов множества.

В описанном примере, мы присвоили 1 новое знание классам 15 семейств, включающем 270 видов. Это означает, что мы получили фактически 270 новых знаний, с минимальными затратами, — используя лишь одну запись в словаре свойств. Конечно, не все записи могут быть столь же эффективны. Какие-то из них могут затрагивать 1—2 или 10 объектов. Но все же, это очень прогрессивно с точки зрения как эффективности использования ресурсов компьютера, так и с позиции минимизации труда, который будет впоследствии затрачен на обучение.

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

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

2.3 Интуитивный ответ на узкий вопрос

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

Например, система знает несколько свойств Льва (некоторые из которых были присвоены вышестоящим классам и были унаследованы, как в п. 2.2.):

— Большие клыки, большие когти, желтый, имеет гриву, быстрый, ест людей, Африка.

Все эти сведения кажутся достаточно сумбурными, не так ли? Компьютер при общем запросе просто вывалил все, что знает.

Но если мы спросим «Расскажи о цвете льва?», программа ответит «Желтый», поскольку знает что «Желтый» относится к классу объектов «Цвет», присвоенных льву, и посчитает этот ответ наиболее подходящим автоматически. На вопрос о «Скорости льва» он ответит «Быстрый», а на вопрос об «Анатомии льва» последует ответ о «Больших клыках» и «Больших когтях». Причем, если вы спросите о лапах льва, он скажет только, что у него «Большие когти», а если о зубах льва — ответит «Большие зубы». А если мы спросим «Расскажи, где лев?» программа ответит «Африка».

Как это происходит? В процедуре типа «Расскажи о» я не использовал никаких дополнительных хитростей. Просто в поиске с одним запросом «Лев» он ищет все записи с классом «Лев» и его потомков, и вылавливает все свойства. В поиске с двумя запросами — он ищет всех родственников с двумя классами: «Лев» и что-то, являющееся потомком второго.

Посмотрим на упомянутые коды. Здесь выделены общие элементы между родственными объектами:

AAAAAAABACA Цвет

AAAAAAABACAFA Желтый

AAAAAAABAAC Скорость

AAAAAAABAACA Быстрый

AAAAAAADAABBAABAAFB Зубы

AAAAAAADAABBAABAAFBA Клыки

AAAAAAADAABBAAB Анатомия

AAAAAAADAABBAABAAB Конечности

AAAAAAADAABBAABAABB Ноги

AAAAAAAAFF Где

AAAAAAAAFFAC Африка

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

2.4 Агрегированное обобщение

Как и в предыдущем пункте 2.3, воспользовавшись аналогичной процедурой мы можем получить обобщающие сведения, которые не были очевидны первоначально и получены от классов потомков. Например, задав вопрос «Расскажи о цвете хищного» мы получим ответ: «Желтый, коричневый, бурый, белый, серый» — это агрегированное, интуитивное, новое знание о цветах всех потомков класса «Хищное»; конкретных животных, которым мы присваивали цвета, но не предполагали, что такой вопрос может возникнуть. Также, задав вопрос «Расскажи о скорости хищного» мы узнаем ответ «Быстрый», но характеристику «Быстрый», мы могли дать как отдельным потомкам этого класса, так и самому классу «Хищное». Поскольку дублирующие ответы, возникающие в процессе их поиска отсекаются программой, мы уже не можем быть уверены, построен вывод о характеристике объектов из одного упоминания в потомке, либо в старшем классе; но так или иначе этот ответ можно признать удовлетворительным при накоплении достаточных знаний в базе данных.

* В этой процедуре есть некоторые ограничения. Например, если мы укажем, что «Львенок — маленький», это понятие вступает в конфликт того что «Лев — большой». В этом случае нам требуется процедура исключения свойств младших понятий-антагонистов, что технически не представляется сложным.

2.5 Совершенство в неопределенности

Здесь я сделаю некоторое отступление, чтобы определить суть проблемы, которая существовала ранее для программистов, работающих со строковыми данными.

К примеру, мы имеем некоторое высказывание M+N+O на которое имеется ответ D. Но разность формулировок делает эту задачу в обычном программировании практически недостижимой, поскольку в человеческом языке существует огромное множество вариаций одних и тех же выражений. То есть, чтобы получить D, нам пришлось бы описать все возможные вариации запроса. Если мы установим простую зависимость M1+N1+O1=D1 тогда уже на вопрос M1+N2+O1 ответа уже не получим, поскольку N1 <> N2

Предположим, каждое из слов в этом выражении имеет по несколько времен и склонений (например, 4), а к тому же по 3 синонима, что тогда мы имеем? 3*4=12 форм существования одного варианта M, N, или O. Так мы получаем неопределенно большое множество: M [1..12] +N [1..12] +O [1..12] =D [1..12]

Грубо говоря, это число будет равным 12^3 или 1728 вариантов. Но допустим, что программист «упоролся» и потратил несколько недель своего времени на то, чтобы описать их все. А если это более сложное выражение? Немного пофантазируем.

Рис. 13. Пример экспоненциального возрастания вариантов записи выражения, несущего один и тот же смысл, в зависимости от количества использованных слов.

То есть, чтобы «понять» простым перебором вариантов это предложение размером в 130 байт нам понадобится база данных размером 1 821 639 Терабайт, или 1,8 Петабайт. И даже если на каждую новую запись некий идеальный программист будет тратить всего 1 секунду, это займет у него больше времени, чем существует наша биологический вид — 495 338 914 лет.

Но даже если гипотетически у нас есть неисчерпаемый ресурс в виде армии из 1 миллиарда программистов и они начнут работу 1 января без перерывов и выходных, то закончат ее примерно к началу лета. А стоимость хранилища составит около $200 млн. И это все будет сделано только для того, чтобы сохранить все варианты только одного, не очень сложного предложения!

Если же мы (вновь, гипотетически!) реализуем некий алгоритм, который будет пользоваться десятками словарей, генерировать варианты и проверять каждый из них с вычислительной скоростью одного из самых мощных компьютеров мира в 100 петафлопс, на эту работу у него уйдет около 1—2 минут. Соответственно, на обработку страницы текста он затратит порядка 20 минут. Несколько медленно для машины стоимостью в $270 млн., не так ли? (речь идет о китайском суперкомпьютере Sunway TaihuLight имеющем 10,5 миллионов ядер процессоров, — самый мощный компьютер в мире по данным на 2016 год).

Но как поступает наш мозг и MSM? Они вычисляют классами.

Та же формула в MSM будет выглядеть как

A [class A] +B [class B] +C [class C] =D [class D]

И процесс обучения одному понятию занимает всего 1 запись.

Например, мы попросим MSM запомнить следующее:

— Хищное имеет четыре ноги.

Тогда на частный вопрос:

— У Льва есть четверка ног?

Программа ответит «Да». Но заметьте: исходная «учебная» фраза по существу совершенно отлична от второго вопроса. Обучение синонимам так же производилось в модели всего лишь однажды, при формирования классификатора.

Почему так происходит? В класс «Хищное» уже включены многие понятия и склонения слов, относящиеся к данной ветке. В класс «Лев» включены склонения «Льва», «Льву», «Льве», «Львом», «Львенок», и т. д.

Остальные понятия также подробно описаны. (Но поиск ведется не парсингом всех возможных вариантов с нахождением точного совпадения, а совпадением части слово-множества-класса).

Далее, класс «Есть» мы назвали синонимом класса «Имеет», поэтому при поиске ответа программа сравнивает с эталонным вопросом и сгенерированные ей же вариации с синонимами классов из базы данных.

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

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

2.6 Несколько методов — широкий спектр задач

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

Далее — список вопросов и ответов системы, полученный на практике (В — вопрос или запрос, О — ответ):

В: Что такое маракуйя?

О: Я не знаю

В: Маракуйя это фрукт

О: ОК

В: Свойства маракуйя фиолетовый

О: ОК

В: Вкусный фиолетовый фрукт, что это?

О: Маракуйя

В: Какие фрукты ты знаешь?

О: Если имеется в виду ФРУКТ, то банан, яблоко, апельсин, абрикос, персик, маракуйя.

В: Что такое маракуйя?

О: Маракуйя — это фрукт и фрукты

В: Маракуйя это живое?

О: Определенно, да

В: Маракуйя это растение?

О: Определенно, да

В: Маракуйя и апельсин это транспорт?

О: Нет, ни один ни другой, это не транспорт.

В: Персик и маракуйя — это фрукты?

О: Конечно, да

В: Грызет орехи, кто это?

О: Грызун

В: Свойства белка ест орехи

О: ОК

В: Грызет орехи, кто это?

О: Белка

В: Живет в лесу серый, большие зубы, кто это?

О: Волк

В: Белый, маленький, живет в лесу, кто это?

О: Заяц

В: Ест людей живет в Африке зеленый, кто это?

О: Крокодил

В: Желтый, живет в Африке, хищник, кто это?

О: Лев

В: Кто такой лев?

О: Лев это пантеры и кошачьи

В: Расскажи обо льве?

О: Желтый, имеет гриву, быстрый, есть людей, Африка

В: Расскажи где лев?

О: Африка

В: Расскажи о цвете льва?

A: Желтый

В: Расскажи о мехе льва?

О: Не знаю МЕХЕ. Не знаю.

В: Мех это шерсть

О: Верно. Я знаю.

В: Мехе это шерсть

О: ОК

В: Расскажи о мехе льва?

О: Имеет гриву

В: Расскажи об анатомии льва?

О: Не знаю.

В: Лев это хищное?

О: Определенно, да

В: Свойства хищное большие клыки, большие когти

О: ОК

В: Расскажи об анатомии льва?

О: Большие клыки, большие когти

В: Расскажи о конечностях льва?

О: Большие когти

В: Расскажи о зубах льва?

О: Большие клыки

В: Расскажи о зубах тигра?

О: Большие клыки

В: Лев это черепное?

О: Определенно, да

В: Свойства черепное череп

О: ОК

В: Расскажи об анатомии льва?

О: Большие клыки, большие когти, череп

В: Расскажи об анатомии тигра?

О: Большие клыки, большие когти, череп

В: Расскажи о скорости тигра?

О: Быстрый

В: Расскажи лев медленный?

О: Быстрый

В: Найди лишнее: самолет стол блокнот маракуйя бордюр?

О: Маракуйя

В: Найди лишнее: апельсин, маракуйя, трава, малина, дерево, крокодил?

О: Крокодил

В: Найди лишнее: религия, наука, христианство, монотеизм?

О: Наука

В: Найди лишнее: щука лошадь волк лев?

О: Щука

В: Найди лишнее: щука лошадь волк лев стол?

О: Стол

В: Найди лишнее: блокнот, ручка, бумага, тетрадь?

О: Ручка

В: Найди лишнее: ручка, рыба, молния, кошка, стол?

О: Молния

В: Найди лишнее: ручка, рыба, кошка, стол?

О: Рыба

В: Найди лишнее: ручка, кошка, стол?

О: Кошка

В: Найди общее: лошадь волк лев?

О: Млекопитающее

В: Найди общее: стол кресло диван шкаф?

О: Мебель

В: Найди общее: стол стул ручка блокнот?

О: Офисное

В: Найди общее: лев тигр гепард пантера?

О: Кошачьи

В: Найди общее: ручка блокнот бумага карандаш?

О: Канцелярия

В: Найди общее: наука теория физика?

О: Научное

В: Найди общее: наука теория физика религия христианство?

О: Понятие

В: Что лучше, смерть или жизнь?

О: Жизнь лучше чем смерть

В: Что лучше кошка или таракан?

О: Кошка лучше, чем таракан

В: Чем лучше смерть или таракан?

О: Таракан лучше чем смерть

В: У кошки есть красивая шерсть?

О: Сильно сомневаюсь.

В: Кошачьи имеет красивая шерсть запомни

О: Ответ:

В: Да, конечно

О: ОК

В: Кошка имеет красивую шерсть?

О: Да, конечно

В: У кошки есть красивая шерстка?

О: Да, конечно

В: Лев имеет красивую шерсть?

О: Да, конечно

В: У льва есть красивая грива?

О: Да, конечно

В: Таракан имеет красивую шерсть?

О: Сомневаюсь.

В: Человек имеет красивую шерсть?

О: Сомневаюсь

В: У тигра есть красивый мех?

О: Да, конечно

В: У черепахи есть красивый мех?

О: Сильно сомневаюсь.

В: Сколько ног у кошки?

О: Четыре ноги

В: Какие ноги у льва?

О: Четыре ноги

В: Таракан имеет шесть ног?

О: Да

В: У таракана есть шестерка ног?

О: Да

В: У паука есть шестерка ног?

О: Сомневаюсь

В: У паука есть восьмерка ног?

О: Конечно

В: Сколько будет два плюс три?

О: Пять

В: Сколько будет пара сложение тройка?

О: Пять

В: Человек имеет две ноги?

О: Конечно

В: У человека есть пара ног?

О: Конечно

В: Лев имеет пару ног?

О: Сильно сомневаюсь.

В: Лев имеет две ноги?

О: Четыре ноги

В: Расскажи о цвете маракуйи?

A: Не знаю МАРАКУЙИ. Не знаю.

В: Маракуйи это маракуйя.

О: ОК

В: Расскажи о цвете маракуйи?

О: Фиолетовый

Рис. 14. Фрагмент практического прогона программы вопросно-ответной системы.

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

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

2.7 Вариативный ответ

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

И это одно из поразительных явлений в MSM.

Если мы научим:

Сколько конечностей у хищное?

Ответ: четыре конечности

А затем спросим:

Сколько ног у Льва?

То получим ответ:

Четыре ног

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

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

Описанное свойство — ни что иное как зеркальный эффект, где ответ напрямую зависит от вопроса и непрогнозируем или лишь частично прогнозируем, поскольку не все объекты класса могут быть известны на момент формирования правила.

Непрогнозируемый зеркальный эффект ответа полностью удовлетворяет условию вопроса и встраивает понятия из вопроса в ответ.

Например, простое:

— Ты уже выучил уроки?

— Да, я выучил уроки

На вопрос мы получаем положительный ответ в любых вариациях.

— Ты учил задания?

— Да, я учил задания.

И т. д.

Так же мы можем задать порядок ответа. Например, мы даем к запоминанию фразу.

— На ферме живет парнокопытное, запомни

Ответ:

Парнокопытное живет на ферме.

После чего получаем интересную вариацию:

— На ферме живет бык?

— Бык живет на ферме.

— На ферме жила свинья?

— Свинья жила на ферме.

— Когда-то на ферме жила овца?

— Овца жила на ферме.

и т. д.

Рис. 15. Пример практического использования зеркального вариативного ответа в программе MSM.

2.8 Сравнительные операции

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

Для реализации этого механизма нам потребуется два дополнительных словаря:

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

AAAAAAABAABA> AAAAAAABAABB (СИЛЬНЫЙ> СЛАБЫЙ)

AAAAACA> AAAABA (УМНЫЙ> ГЛУПЫЙ)

AAAAAAABAACA> AAAAAAABAACB (БЫСТРЫЙ> МЕДЛЕННЫЙ)

AAAAAAABAADA> AAAAAAABAADB (БОЛЬШОЙ> МАЛЕНЬКИЙ)

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

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

ABABACBBCA AAAAAAABAACA +150 (ГЕПАРД БЫСТРЫЙ +150)

ABABACAAA AAAAAAABAACA +20 (ЧЕЛОВЕК БЫСТРЫЙ +20)

ABABACFAA AAAAAAABAADA +2000 (СЛОН БОЛЬШОЙ +2000)

ABABACBBBB AAAAAAABAADA +200 (ТИГР БОЛЬШОЙ +200)

ABABACAAA AAAAACA +100 (ЧЕЛОВЕК УМНЫЙ +100)

ABABACBB AAAAACA +20 (КОШАЧЬИ УМНЫЙ +20)

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

— Кто умнее, лев, человек, мышь или слон?

Здесь задача становится исключительно математической, то есть нам необходимо сравнить качественные характеристики из словарей по указанным значениям. В случаях, когда значение отсутствует (например, мы не указали информации об уме мыши) мы можем оставить значение по умолчанию — ноль; либо попробовать найти этот качественный показатель у родителей объекта (в данном случае у объекта «мышь» мы будем искать его у объектов «Грызун» и тд). Но поднимаясь выше по лестнице иерархии объектов и соответственно удаляясь от первоначального объекта нам необходимо прибегать к уменьшению значения, пропорционально отдаленности от объекта. То есть, если мы задали значение по умолчанию ABABACB AAAAAAABAABA +100 («ХИЩНОЕ СИЛЬНЫЙ +100») то удаляясь от родителя ABABACB («Хищное») это значение будет уменьшаться, поскольку увеличивается вероятность, что потомок окажется слабее. Это решение справедливо, поскольку в классе объектов ABABACBCB («Собака») оказывается например и ABABACBCBC («Шпиц»), который уже довольно сильно не соответствует общему утверждению. Таким образом будет справедливым уменьшать значение по формуле =

M = N-step* (1/4*n)

Step — разница в количестве с верхним классом, N — исходное значение

M=100 — 3* (1/4*100) = 25

Здесь предполагаемое значение силы для «Шпица», как и для любой другой породы собак будет равным примерно 25. Для улучшения показателя соответствия потребуется больше информации о входящих в класс объектах. Повысить значение показателя, можно например, добавив характеристику «Сильный» в описание класса «Овчарка», и указав конкретный показатель. Так, овчарка по сравнению со шпицем получит преимущество в категории силы. Но если численный показатель не будет увеличен, овчарка может получить превосходство по умолчанию, имея характеристику «сильный», — по сравнению со шпицем, который такой характеристики иметь не будет.

Как это работает на практике? Задав вопрос с использованием категории, мы получим ответ:

— Кто из них умнее: таракан, стол, человек или тигр?

— Человек

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

Например.

Выбери желтое сильное животное: таракан, крокодил, апельсин, лев, шпиц, человек?

— Лев

Выбор будет очевиден, поскольку всем условиям соответствует лишь один объект.

Как производился выбор ответа? Стоит детализировать этот момент.

Таркан = животное, таракан <> желтый, таракан <> сильный (1 совпадение)

Крокодил = животное, крокодил <> желтый, крокодил=сильный (2 совпадения)

Апельсин <> животное, апельсин = желтый, апельсин <> сильный (1 совпадение)

Лев = животное, лев = желтый, лев = сильный // как потомок «хищное» +25 и как «лев» +100 (4 совпадения)

Шпиц=животное, шпиц=желтый, шпиц=сильный //как потомок «хищное» +25 (3 совпадения)

Человек=животное, человек <> желтый, человек=сильный // как «человек» +20 (2 совпадения)

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

2.9 Логическое дополнение

Программа на основе MSM может дополнять пропущенную информацию на основании имеющихся данных. Например, мы можем построить задание следующим образом.

— Вставь пропущенные слова: _ идет по дороге, ест _ и напевает песенку.

Задание может быть решено в нескольких вариациях, и совсем не сложно добиться одного из верных решений:

— Человек идет по дороге, ест гамбургер и напевает песенку.

Здесь было решено несколько задач:

— Определен объект, который может ходить по дороге, петь и есть, — человек.

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

Знание о том, что человек может есть на улице (которая является родственником определения «дорога») может быть дано в одном из определений свойств объектов-продуктов быстрого питания вроде «Гамбургер», «Хот-дог», «Пицца», «Мороженое» и др.

2.10 Логические решения простых задач

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

Например: Девочка Яна вдвое выше кота Барсика, Барсик вчетверо выше мыши Лариски, а мама Алла втрое выше Яны. Найди самого низкого и самого высокого?

Правильным ответом может быть «Мышь Лариска и мама Алла». Для нетипового (незаписанного) решения нам потребуется:

— Определить и сохранить во временных определениях всех участников задания: «Яна» — человек, «Барсик» — кошка, «Лариска» — мышь, и «Алла» — человек.

— Задать временные свойства объектов: Яна — девочка, Барсик — кот, Алла — мама. (Мышь и так является мышью, поэтому ее свойства мы проигнорируем). Эти свойства нам потребуются для грамотного построения ответа.

— Задать временные характеристики, используя антагонистов:

Яна> Барсик

Барсик> Лариска

Алла> Яна

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

Более сложный путь представит собой арифметический анализ, и здесь кажется очевидным задание временных качественных характеристик объектов в категории «высокий»:

«Яна высокий +2*Барсик»

«Барсик высокий +4*Лариска»

«Алла высокий +3*Яна»

Теперь, найдя минимальное значение-антагонист из этапа 3 — «Лариска» мы присваиваем ей значение «1»; вычисляем значение «Барсик»= «Лариска»*4 или 1*4=4; далее вычисляем значение «Яна»= «Барсик»*2 = 4*2 = 8; и наконец значение «Алла» = «Яна»*3 = 8*3=24. Иначе говоря, минимальное значение будет равно «1» и будет принадлежать мыши Лариске, а максимальное — маме Алле и будет равно «24».

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

2.11 Смешанное использование знаний

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

Например, мы записали «да-утверждение»: «Чтобы получить мясо нужно убить животное». Теперь на вопрос: «Что должен сделать лев чтобы получить мясо коровы?» Он ответит «Убить корову», соединив часть информации из утверждения и выбрав дополнительную информацию из самого вопроса.

2.12 Множество методов

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

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

— Легкое идентифицирование объекта;

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

— Поиск общих свойств объектов и их сравнение;

— Уточнение данных по заданным параметрам.

— В отличие от бесконечного множества вариантов представления строковых данных в естественном языке, число задач, которые могут быть поставлены перед программистами, работающим с MSM структурой — имеет вполне определенное и главное, конечное число. И на это потребуются не десятки и сотни тысяч человеко-часов, как на проект CYC, а всего лишь несколько сотен часов. (Подробнее о различии с проектом CYC вы можете прочитать в 5 главе. Прим. автора).

Важным принципом концепции MSM является приоритет правил/методов перед значениями. В первых главах нами были исследованы различные правила:

1. Правило, как находить общее;

2. Правило, как выбирать лишнее;

3. Правило, как вести поиск по вышестоящему свойству;

4. Правило, как вспомнить фиксированную фразу;

5. Правило, как отгадать загадку;

6. Правило, как найти объект с сильнейшим свойством в списке или в сравнении;

7. Правило, как найти объект со слабейшим свойством в списке или в сравнении;

8. Правило, как выбирать элементы общие по свойствам;

9. Правило, как при описанном условии выполнить соответствие с действующим объектом;

и другие.

Какие то из них — элементарные, какие-то — составные. Значительную часть из них можно автоматизировать, путем комбинирования простых правил в более сложные. Они и составят кирпичики, которыми мы выложим нужную «стену» разумности. Постепенно наращивая алгоритмы получения новых правил, мы достигнем момента, когда ими будет покрыта основная часть «человеческого» понимания. И тогда программа, работающая по принципу MSM будет показывать чрезвычайно высокие интеллектуальные результаты аналогичные или превосходящие показатели человеческого интеллекта.

В числе основных преимуществ принципов организации MSM можно выделить следующие:

1. Формулирование правил в МСМ производится не на единичных переменных или объектах, а в рамках широких классов объектов и правила оперируют классами зависимостей а не конкретизированными артефактами. Например при отсутствии знания «сильнее» он поймет правило как «больше» или «быстрее», используя доступные классы ветвей в рамках имеющихся сведений.

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

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

4. Для объектов MSM мы имеем возможность бесконечного наращивания дополнительных словарей в которых можем фиксировать те или иные зависимости, и их число ограничено только нашей фантазией. Например, можно легко описать зависимость в которой человек с зонтиком не промокнет под дождем, а человек со сломанным зонтиком промокнет больше чем человек, находящийся в закрытой машине и так далее. Мы ничем не ограничены.

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

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

Глава 3. Автоматическое расширение классификатора

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

То есть, предположим, что мы имеем толковый словарь русского языка, в котором нам знакомы около 800 понятий из 80000. Так за один прогон программа может дополнить ядро классификатора еще 200—300 понятиями, затем 600—700, затем 1500—2000 и так далее, до тех пор, пока это число не приблизится к 80 000.

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

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

В теории, машина может обучаться и самостоятельному подбору входных алгоритмов и их внутреннего устройства путем положительного подкрепления, выделения признаков, а также перебора и составления из массы простых алгоритмов — более сложных. С помощью этой технологии могут быть задействованы суперкомпьютеры, которые будут «перемалывать» код из набора нескольких десятков простых правил и составлять новые блоки случайным образом, а затем проверять на тестовой выборке их работоспособность. Пусть немного, но это может давать нам по 1—2 новым правилам в день.

Знаю, что последний абзац зыбок, по причине того, что похожие технологии уже пытались использовать; но, эти попытки производились не на том архитектурном поле, без «глубоководной», архитектурно-комплементарной «онтологии».

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

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

Теперь мы рассмотрим более предметные вопросы.

3.1. Проблемы и решения в деталях

Случай 1.

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

Бесплатный фрагмент закончился.

Купите книгу, чтобы продолжить чтение.