6 лет своей жизни я потратил на изучение искусственного интеллекта. Результат моих исследований выразился в незаконченном проекте marishko.com. Я пытался разработать систему человеческого общения, не требующую специально обученного учителя, а способную обучаться автономно как маленький ребёнок.
В этой статье я хочу поделиться некоторыми используемыми мною алгоритмами и идеями.
Сразу скажу, что в своих исследованиях я больше опирался на природу интуиции как основу интеллекта, поэтому мои мысли далеки от математических алгоритмов.
![image](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/dd2/d7f/3d6/dd2d7f3d6486d18d4e29357af9d6f1e2.jpg)
Для хранения информации я использую обычную реляционную СУБД (Interbase Firebird).
Все данные храню в трёх таблицах:
— Фразы
— Связи
— Диалоги
Данные получаю путём общения робота через ICQ с реальными людьми.
Критерии отбора людей: от 18 до 50 лет, страна: Россия, язык: Русский
ФРАЗЫ
Когда пользователь пишет боту сообщение, то это сообщение приводится специальным алгоритмом к понимаемой системой форме, иными словами я делаю для каждой фразы маску.
Алгоритм довольно прост. Я использую опыт психологов, которые утверждают, что когда человек читает текст то он смотрит в слове на первую букву, средние, последнюю, а так же длину слова. Этого хватает чтобы идентифицировать слово. И только если он не узнал слово, то читает по всем буквам.
Таким образом я составляю для каждой фразы маску.
Пример:
Для фразы «Привет, как поживаешь, дружище?» маска будет следующей: «пхивхт как пххивххшь дххжщхе»
Думаю вы заметили что так же я вырезаю все знаки препинания.
СВЯЗИ
После того как маска получена, создаётся связь между присланной фразой и той фразой которую в прошлый раз послал пользователю бот. Таким образом появляется запись в табличке связей.
Чтобы дать пользователю ответ, бот точно так же использует таблицу связей. Если ответ не найден. То через некоторое время вылетает фраза с которой начинается новая тема (как правило это фраза с которой никакая другая фраза не связана)
ДИАЛОГИ
Когда общение налажено, может возникнуть проблема, что бот отвечает вещи которые никак не вяжутся со всем ранее сказанным. Для решения этой пробемы используются диалоги.
Каждый диалог сохраняется, и в процессе общения определяется на какой из сохранённых диалогов больше похож текущий диалог. И соответственно при определении фраз для ответов предпочтение отдаётся тем которые содержатся в похожем диалоге.
CИСТЕМА SPLITHEAD
Собственно механизм который без всяких проблем позволит боту пройти тест Тьюринга.
За этим смелым заявлением скрывается небольшое мошенничество. Бот может общаться одновременно с десятком пользователей. И в какой-то момент включается режим SplitHead.
В результате происходит связывание различных пользователей через бота.
Это означает что когда Вася Иванов пишет роботу, то робот пересылает его сообщение другому случайному пользователю, к примеру Саше Петрову, а ответы Саши Петрова попадают через бота Васе Иванову.
Таким образом два человека общаются между собой и оба пишут одному и тому же боту.
Естественно их диалог пополняет базу бота.
Примеры диалогов бота можно посмотреть здесь:
marishko.gorcer.com/icq_logs.php
Скачать программу Маришко.icq можно здесь:
marishko.gorcer.com/icq_index.php?page=download
P.S.: Прошу строго не судить содержание диалогов бота, наиболее активная аудитория робота импульсивная молодёжь.
P.S.2: Так как эта работа делалась когда я был молодым и не опытным система работает немного не стабильно
P.S.3: Исходники на проект в свободном распространении.
Спасибо пользователю stronciy. За этот пост в песочнице он дал мне инвайт.
В этой статье я хочу поделиться некоторыми используемыми мною алгоритмами и идеями.
Сразу скажу, что в своих исследованиях я больше опирался на природу интуиции как основу интеллекта, поэтому мои мысли далеки от математических алгоритмов.
![image](https://habrastorage.org/getpro/geektimes/post_images/dd2/d7f/3d6/dd2d7f3d6486d18d4e29357af9d6f1e2.jpg)
Для хранения информации я использую обычную реляционную СУБД (Interbase Firebird).
Все данные храню в трёх таблицах:
— Фразы
— Связи
— Диалоги
Данные получаю путём общения робота через ICQ с реальными людьми.
Критерии отбора людей: от 18 до 50 лет, страна: Россия, язык: Русский
ФРАЗЫ
Когда пользователь пишет боту сообщение, то это сообщение приводится специальным алгоритмом к понимаемой системой форме, иными словами я делаю для каждой фразы маску.
Алгоритм довольно прост. Я использую опыт психологов, которые утверждают, что когда человек читает текст то он смотрит в слове на первую букву, средние, последнюю, а так же длину слова. Этого хватает чтобы идентифицировать слово. И только если он не узнал слово, то читает по всем буквам.
Таким образом я составляю для каждой фразы маску.
Пример:
Для фразы «Привет, как поживаешь, дружище?» маска будет следующей: «пхивхт как пххивххшь дххжщхе»
Думаю вы заметили что так же я вырезаю все знаки препинания.
СВЯЗИ
После того как маска получена, создаётся связь между присланной фразой и той фразой которую в прошлый раз послал пользователю бот. Таким образом появляется запись в табличке связей.
Чтобы дать пользователю ответ, бот точно так же использует таблицу связей. Если ответ не найден. То через некоторое время вылетает фраза с которой начинается новая тема (как правило это фраза с которой никакая другая фраза не связана)
ДИАЛОГИ
Когда общение налажено, может возникнуть проблема, что бот отвечает вещи которые никак не вяжутся со всем ранее сказанным. Для решения этой пробемы используются диалоги.
Каждый диалог сохраняется, и в процессе общения определяется на какой из сохранённых диалогов больше похож текущий диалог. И соответственно при определении фраз для ответов предпочтение отдаётся тем которые содержатся в похожем диалоге.
CИСТЕМА SPLITHEAD
Собственно механизм который без всяких проблем позволит боту пройти тест Тьюринга.
За этим смелым заявлением скрывается небольшое мошенничество. Бот может общаться одновременно с десятком пользователей. И в какой-то момент включается режим SplitHead.
В результате происходит связывание различных пользователей через бота.
Это означает что когда Вася Иванов пишет роботу, то робот пересылает его сообщение другому случайному пользователю, к примеру Саше Петрову, а ответы Саши Петрова попадают через бота Васе Иванову.
Таким образом два человека общаются между собой и оба пишут одному и тому же боту.
Естественно их диалог пополняет базу бота.
Примеры диалогов бота можно посмотреть здесь:
marishko.gorcer.com/icq_logs.php
Скачать программу Маришко.icq можно здесь:
marishko.gorcer.com/icq_index.php?page=download
P.S.: Прошу строго не судить содержание диалогов бота, наиболее активная аудитория робота импульсивная молодёжь.
P.S.2: Так как эта работа делалась когда я был молодым и не опытным система работает немного не стабильно
P.S.3: Исходники на проект в свободном распространении.
Спасибо пользователю stronciy. За этот пост в песочнице он дал мне инвайт.