6 лет своей жизни я потратил на изучение искусственного интеллекта. Результат моих исследований выразился в незаконченном проекте marishko.com. Я пытался разработать систему человеческого общения, не требующую специально обученного учителя, а способную обучаться автономно как маленький ребёнок.
В этой статье я хочу поделиться некоторыми используемыми мною алгоритмами и идеями.
Сразу скажу, что в своих исследованиях я больше опирался на природу интуиции как основу интеллекта, поэтому мои мысли далеки от математических алгоритмов.
Для хранения информации я использую обычную реляционную СУБД (Interbase Firebird).
Все данные храню в трёх таблицах:
— Фразы
— Связи
— Диалоги
Данные получаю путём общения робота через ICQ с реальными людьми.
Критерии отбора людей: от 18 до 50 лет, страна: Россия, язык: Русский
ФРАЗЫ
Когда пользователь пишет боту сообщение, то это сообщение приводится специальным алгоритмом к понимаемой системой форме, иными словами я делаю для каждой фразы маску.
Алгоритм довольно прост. Я использую опыт психологов, которые утверждают, что когда человек читает текст то он смотрит в слове на первую букву, средние, последнюю, а так же длину слова. Этого хватает чтобы идентифицировать слово. И только если он не узнал слово, то читает по всем буквам.
Таким образом я составляю для каждой фразы маску.
Пример:
Для фразы «Привет, как поживаешь, дружище?» маска будет следующей: «пхивхт как пххивххшь дххжщхе»
Думаю вы заметили что так же я вырезаю все знаки препинания.
СВЯЗИ
После того как маска получена, создаётся связь между присланной фразой и той фразой которую в прошлый раз послал пользователю бот. Таким образом появляется запись в табличке связей.
Чтобы дать пользователю ответ, бот точно так же использует таблицу связей. Если ответ не найден. То через некоторое время вылетает фраза с которой начинается новая тема (как правило это фраза с которой никакая другая фраза не связана)
ДИАЛОГИ
Когда общение налажено, может возникнуть проблема, что бот отвечает вещи которые никак не вяжутся со всем ранее сказанным. Для решения этой пробемы используются диалоги.
Каждый диалог сохраняется, и в процессе общения определяется на какой из сохранённых диалогов больше похож текущий диалог. И соответственно при определении фраз для ответов предпочтение отдаётся тем которые содержатся в похожем диалоге.
CИСТЕМА SPLITHEAD
Собственно механизм который без всяких проблем позволит боту пройти тест Тьюринга.
За этим смелым заявлением скрывается небольшое мошенничество. Бот может общаться одновременно с десятком пользователей. И в какой-то момент включается режим SplitHead.
В результате происходит связывание различных пользователей через бота.
Это означает что когда Вася Иванов пишет роботу, то робот пересылает его сообщение другому случайному пользователю, к примеру Саше Петрову, а ответы Саши Петрова попадают через бота Васе Иванову.
Таким образом два человека общаются между собой и оба пишут одному и тому же боту.
Естественно их диалог пополняет базу бота.
Примеры диалогов бота можно посмотреть здесь:
marishko.com/icq_logs.php
Скачать программу Маришко.icq можно здесь:
marishko.com/icq_index.php?page=download
P.S.: Прошу строго не судить содержание диалогов бота, наиболее активная аудитория робота импульсивная молодёжь.
P.S.2: Так как эта работа делалась когда я был молодым и не опытным система работает немного не стабильно
P.S.3: Исходники на проект в свободном распространении.
Спасибо пользователю
stronciy. За этот пост в песочнице он дал мне инвайт.
комментарии (145)
А вообще бот общается, и вполне бойко. Только каждые 10-15 фраза вообще в потолок стреляет.
БОТ, кому, текст…
и вообще чат какой то странный. такое чувство что никто сообщения не читает, а тупо постит как бот
плюс к тому у каждого индивидуума есть свои ИНТЕРЕСЫ. при знакомстве и далее можно на них опираться, но сначала нужно о них узнать (посмотрите хотя бы последних симов, как они знакомятся), да и боту неплохо бы дать какие-то свои интересы и особенности.
ещё хотелось бы не тупой перепост видеть, а более-менее грамотную речь с учётом уровня мышления бота. человеческое дитя не просто повторяет, как попугай, а обрабатывает поступающую информацию и отвечает уже фразами, которые сам строит.
Но уровень данного бота ограничен тем что есть.
Я думал о целях но боту этого не привить пока у него нет мышления. А само выражение «мышление робота» оно скрывает кучу неизвестных мне механизмов, и на несколько порядков выше всего того что я сделал.
Маришко Здарово чувак
Аноним Прива
Маришко Hi
Аноним Как жизнь?
Маришко Нормально
Аноним а у меня не очень :(
Самый нормальный вариант ICQ-версия.
Да кстати, я так подумал, он наверное спамеров отлично достаёт :)
marishko.com/icq_robots.php
но не факт что они сейчас запущены.
select s.assign_dt,s.id,s.cat_id,s.serial,s.level, u.id as owner_id, u.name as owner_name from mu_serials s left outer join mu_users u on (s.user_id=u.id) where u.uin=«90176382ba0f35b765603649ed885861baa01e2b652d664e16eb0df56f0b5de6»
Table 'eshkaorg_marishko.mu_serials' doesn't exist
>наиболее активная аудитория робота импульсивная молодёжь.
С которой проще всего общаться на её же языке =) Скармливать одну из десятка заготовленных фраз…
Однако я два года уже не занимаюсь этим проектом и уверен что есть пользователи у которых база побольше будет.
Но это уже совсем другая история.
(21:12:32) bot: ДАВАЙ ВЫПЬЕМ ЗА ЖИЗНЬ
(21:13:11) user: Наливай
(21:13:11) bot: Пьянству — бой!
(21:13:40) user: Ну а херли предлогаешь
Бот непроходимо тупой, но смешной.
Тоесть есть рейтинг у фраз и у пользователей.
К примеру у фраз:
«Ты х*й» и «Пошёл на х*й» рейтинг -1000
а у фраз
«Я тебя люблю» и «Тё клёвый» рейтинг +1000
И каждый юзер, который пишет фразу, получает к своему рейтингу 10% от рейтинга той фразы которую он написал.
Бот, когда определяет что же ответить, учитывает рейтинг пользователя и рейтинг фраз.
Если вы к примеру 10 раз пошлёте бота на х*й то разговор вежливый уже не получится.
Иного выхода я не нашёл.
И в любом случае тут изначально (и в процессе) приходится в ручную рейтинги проставлять.
Ничего нового вы, в общем-то, не изобрели.
Порадовало только перенаправление сообщений юзеров :)
АнонимЗдарова
МаришкоПривет. Прошу прощенья за автоответ, скоро буду… А пока не откажусь увидеть твоё фото, мои есть тут: SEX.icqSearch.info
Чортовы спамеры, научили малютку плохому.
полез в базу удалять…
Он совершенно бестолковый, но несмотря на это до сих пор жив и даже порой говорит забавные вещи.
Однажды я растрогался и даже купил ему домен
А тут топ 30 популярных ответов
Йодда: Знаю анлим 4 Мбит/c за 335руб» :D
Йодда: А что это? Интересно. Я тоже хочу -:)
Йодда: Будет ли ездить сам, это другой вопрос
tim: Когда закончится кризис?
Йодда: еще пару лет — это же время великих возможностей! Выгоден он тем кто заинтересован в переделе капитала
И… не могли бы Вы поделиться ссылочками, накопленными за 6 лет и находками ИИ, которые Вас поразили.
То немногое что нравилось читал и закрывал.
>>можно задать тут много вопросов или лучше письмом?
как хотите.
А вы пробовали, чтоб его обучали сначала маленькие дети, потом постарше и т.п.?
А у вас есть замены «масок»? Например Маришке сказали, что сегодня будет дождь — как бот это воcпримет (воспримет ли). А если потом скажут, что сегодня дождя не будет…
А можно бота научить, чтобы он советовал, что мне послушать? Задав мне пару вопросов о нравившейся мне музыке?
1) Цель — познать истину
2) Нет не пробовал, начал сразу с друзей с которыми в то время в университете водку пили
3) нет
4) Бот не знает что такое музыка, не знает что такое «нравится», он просто общается…
По четвертому пункту… — спорный момент. А Вы про пролог слышали — смотрели варианты экспертной системы?
2) нет не слышал
Если нет, то мне это не подходит.
У нас задача была — разработать конкретную систему но так, чтобы машина вывода, хранилище данных и набор правил были разными сущностями и их можно было малой кровью менять (правила совсем без крови).
А экспертная система на прологе — это 3в1 и слабо подлежит портированию.
У меня например система решала две задачи:
1. Диагностика неисправности автомобиля по обнаруженным симптомам и с запросами дополнительных тестов (основное задание)
2. Экспертная система по классификации экспертных систем (в качестве развлечения) — классифицировал по Питеру Джексону
В прологе (конкретно amzi и лично для меня) достаточно трудно решалась проблема gui (один из важным моментов для меня — когда подключали к c++ builder — очень намучались) — зато в результате получилось… практически чудо (молчу-молчу).
А на чем тогда Вы делали задания?
Формат правил и машина вывода свои (16 режимов работы для разных типов задач), подробностей сейчас не скажу, было это лет 5 назад, исходники и описалово дома в архиве лежат.
Сам лично с прологом не сталкивался, видел только упоминания и примеры в литературе, ну и слышал мнение преподавателя, собственно его и изложил. Может он как-раз со старыми версиями общался, всё может быть.
Но учитывая, что машину вывода нужно было разрабатывать самому, то использовать специализированные языки как-то некошерно, ИМХО. Даже если бы можно было использовать что-то другое, всё равно остановился бы на Delphi — мне он идейно ближе, да и есть достаточно много наработок. Если нужна кроссплатформенность, то наверное на Java + PostgeSQL или какой-нить NoSQL для скорости на больших объёмах. Но это всё тонкости. Хоть на BrainFuck, лишь бы работало)
Я сам не очень люблю узкоспециализированные среды/языки. Как по мне — лучше знать один-два языка и уметь делать на нём почти всё, нежели каждый проект начинать с поиска и изучения среды и языка. Была даже сумасшедшая идея — графический редактор с интерпретатором C/Pascal/Java для написания инструментов и фильтров не отходя от кассы. Пока валяется эта идея рядом с остальными в суспенде.
Эх. Не хотел так говорить) Писал одну работу по тензорным исчислениям и для моей задачи использовать пролог + c++builder — и было это, как на билдере или делфи писать калькулятор) — т.е. очень красиво, понятно и главное… круто но сложно (достаточно сложно для среднего знания языков) для реализации на других языках.
Также создание AI для задач (как то пятнашки, крестики-нолики в одну строчку, всякие логические задачи с принцессами и комнатами, задачу энштейна и др. — ооочень красиво реализовываются на прологе и главное — очень мало кода).
А что, Вы тогда про лисп скажете? Или автолисп не подходит как пример для последнего абзаца?
Если интересно на сайте progz.ru можно попросить (могут и дать) примеры решения задач как то крестики нолики (обучаемые) и др. на вижуал прологе (т.е. с гуи, базой данных и т.п.) — это действительно круто и круто даже сейчас.
Лисп я щупал по-ближе. Чего-то там парсил, чего-то там считал. Но и он как-то мне особенно вкусным не показался. т.е. да, всё круто, компактно и вроде как элегантно пишется. Но я на Delphi ненамного большими усилиями (а зачастую и меньшими, если юзать сторонние типовые решения) решу те-же задачи, но работать будет быстрее, ГУИ будут красивше и упаковано будет в один exe'шник без необходимости тянуть всякие сторонние либы или среды исполнения.
Лисп интересен для отладки сложного алгоритма (парсинга в основном), но в последствии, когда нужна производительность, его переписывают на что-то более машинно-ориентированное — было куча таких проектов. Если не ошибаюсь, то даже первый гуглобот был на лиспе.
Там да, лисп рулит. Сам не писал, но видел как работают довольно сложные модели.
Но у меня задумка другая была — растровый редактор и манипуляции процедурным языком, в основном матричные, итерационные и статистические операции.
И… last.fm разговаривает о музыке с пользователями и советует?
Создать бота а-ля тамагочи. Который будет информировать о состоянии устройства разбавляя текст диалогами подобным выше. И которому будут отдаваться распоряжения и команды для управления устройством.
Я думал сделать автоответчик для сайтов требующих консультанта, чтобы человек мог зайти и получить ответы на свои вопросы, задав их боту.
Я подразумевал интерфес, будь то устройство или интернет сервис. Везде, где требуется обмен информацией: человек <-> машина
А устройство привел в пример для понимания, как бы выглядел интерфес мобильного телефона;)
— я бооот!
— чем докажешь?
— пошлю тебя нахуй!
тэст тьюринга пройден XD
(23:49:12) user: Неа, я бот
(23:49:38) bot: Ээээй… это я бот!
(23:49:47) user: Неа
(23:49:54) user: Ты проперся:-P
(23:50:16) bot: Сама пропёрся
Крышу сносит.
ЗЫ. А вообще, нехрен в чатах сидеть.
Аноним привет
Маришко Ты че идиот
кхм
1) начать сессию — возвращает идентификатор сесии
2) добавить сообщение в сессиию
3) Получить новые сообщения.
Тогда вашего бота можно использовать хоть в IRC хоть в jabber
> (22:25:51) bot: Да да.
> (22:25:59) user: Да-да
> (22:25:59) bot: Ты че робот?
> (22:26:10) user: Да ну?
Офигеть, роботы уже на людей гнать начинают!
в детстве у нас тоже прожка была, которая так разговаривать умела… только она это делала лучше
искуственный… идиотизм
И сами исходники найти чет не могу на сайте.
Скачал клиент, создал учетку на marishko.com и icq. Прописал в настройках.
И ничего не происходит. Клиенты не ищутся, хотя чекбокс включен. Вручную тоже не добавляются…
(19:08:30) bot: Чем занимаешься
(20:33:57) bot: Привет чебурашка
(20:34:05) user: На море хочу попозже
(20:35:06) bot: Мож поумнееешь дятел ебаный
и так весь диалог)))
Мда… слабоват движок…
marishko.com/icq_robots.php
Некоторые стучат и наверное долго не могут понять почему бот такой умный и говорит вполне человеческим языком ))
Аноним ПРивет друган
Маришко Займёмся виртуальным сексом? Лучший сайт, Анонимность, ДоступностьБолее 27.500 партнёров ждут именно вас!http://marishko.mugik.ru
forum.gorcer.com/viewtopic.php?f=5&t=321
(22:16:10) user: Откуда у тебя мой номер
(22:16:10) bot: Карамельки
(22:16:46) user: Каие нахуй карамельки
Эксперименты были.
Не трудно проверить, зарегистрируйте два ICQ-номера и скачайте бота.
(20:41:19) user: 28 леша
(20:41:55) bot: По ебалу хочешь
Где-то в начале 2000 было очень много российских чатботов на собственном движке, забавных, но так же непроходимо тупых.
Вообще в сфере чат ботов-имитаторов ИИ я не замечаю особого прогресса с момента появления AIML, на которой великая и могучая Алиса работает, а оно подразумевает ручное и полуавтоматическое создание базы, но никак не автономное обучение :/
Это всё равно что делать резиновых кукол, внешне похоже на человека, но это далеко от генетики, которая намного сложнее.
Пытался анализировать человеческое мышление и пришёл к тому что всё это связано с интуцией и эволюцией.
В частности эволюция человеческой мысли от начальной стадии к конечной происходит так же как эфолюция жизни на земле — все слабые варианты отпадают, все сильные развивают мысль дальше.
Но это я никак не смогу применить.
ИМХО, то чем стоит сейчас заниматься учёным одиночкам, разрабатывающим ИИ, это алгоритмическое направление с возможными примесями всех остальных направлений. При этом нужно как можно больше упрощать, чтобы создать шарообразный ИИ в вакууме (издержки алгоритмического подхода). Например, давать существу взаимодействовать не со сложным реальным миром, а с упрощённым виртуальным и.т.п.
marishko.com/answerlist.php?talk=%EB%E5%F1
marishko.com/answerlist.php?talk=%F0%EE%E1%EE%F2
marishko.com/answerlist.php?talk=%E4%E5%E2%F3%F8%EA%E0
:)
Последнее что я ему писал, это — «твой пост гавно» (с год назад в ЖЖ). С тех пор он со мной не общается.
А как он связан с человеком который связан с 20 лет на AI?
Ссылочка(боюсь теги снова не заработают, поэтому по старинке) tema.livejournal.com/500545.html
Хотя может быть ещё и такой вариант:
— Эй, а почему это не работает?
— А этого я похоже не учёл!
Думаю если вы объедините усилия, то шанс что вас заметят возрастает в 2а раза, а там глядишь и до мирового признания недалеко, не всей же славе доставаться русским в америке!
Я не нашёл нигде.
Ну тогда эта миссия мировой значимости падает на мои плечи :-) заодно попрошу что б из игнора вытащил
Твоё имя попадёт в историю, как пособника порабощения человечества.
Это должно его убедить.