Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.97/148: Рейтинг темы: голосов - 148, средняя оценка - 4.97
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
1

Алгоритм работы чат-бота

14.02.2010, 22:11. Просмотров 27515. Ответов 53
Метки нет (Все метки)

Задумал создать чат бота.
Кюрю доки и хотелось юы услышать советы умных людей.
Пока я сдел альфу альфа.
и недоволен результатом совсем.
у меня сейчас только одна таблица. аля
------------------
привет | прив/ку/хай | приветствие
как тя звать?/ты кто?| я бот | Знакомство
------------------
последний столбец тема разговора.

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

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

кактотак)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2010, 22:11
Ответы с готовыми решениями:

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

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

Алгоритм создания самообучающегося бота для какой-то простой игры
Интересует алгоритм создания самообучающегося бота для какой-то простой игры. Нашел алгоритм...

Алгоритм обработки запроса. Чат. Client+server+mysql bd
Доброго времени суток. Пишу чат. Написал клиент, сервер. На локальном хосте создал бд. Нужно...

Файл: Реализовать алгоритм работы чат-бота...
Всем привет! Задача такова: - Пользователя просят написать слово, например "Привет" - программа...

53
insideone
Модератор
Автор FAQ
3668 / 945 / 114
Регистрация: 10.01.2010
Сообщений: 2,538
14.02.2010, 22:29 2
Эпичная тема, честное слово. Ничего типа искуственного интелекта у вас не получится конечно, но более менее сносного болтуна можно создать... По теме:
Поиск нужно производить по маске, т.е. анализировать строки. Для привета достаточно маски "прив.*" т.е прив и может быть ещё что то дальше.
Ещё интересная идея - допустим боту пишут "Привет! Как дела!" Он анализирует строку и находит соот-ие по "прив.*", но на как дела он не ответит, а можно бы.
Теоретически можно улавливать какую то фразу не по целой фразе а по составу. Допустим если боту говорят ту же "Привет бот как твои дела" то "как дела" уже не сработает, поэтому стоит делать список слов наличие который в фразе дает боту право ответить. Т.е. проверяем по списку и видим что из этого списка 100% слов были найдены (и "как" и "дела") значит нужно "прикрепить" этот ответ к конечной серии ответов. Конечно 100% можно регулировать. Задать порог в 80% например.
Так же стоит ввести "настроение", т.е. сделать фразы которые понижают\повышают настроение, может из за этого он будет выбирать разные фразы.
Насчет поддержки темы разговора - наврятли, это слишком тяжело... надо подумать
1
Phantom
Эксперт С++
3175 / 856 / 39
Регистрация: 29.12.2008
Сообщений: 952
14.02.2010, 22:34 3
Krist_ALL, посмотри, вот тут я отвечал уже, несколько ссылок полезных нашел. Если цель написать простенького бота, то очень неплохие там алгоритмы приводятся, а, главное, простые для понимания и реализации. Начать с них, а дальше усложнять по возможности.
http://www.cyberforum.ru/development/thread54456.html#post293766
1
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
14.02.2010, 22:51  [ТС] 4
Phantom, я уже читал этот ман) Все равно спасибо!.
просто получается что либо человек спрагивает - бот отвечает либо наоборот.
и даже пусть будет мега словарь - всеравно фигня будет.

по поводу поддержки темы....
пример:
Я:я люблю машины.
Бот:какая у тя машинга?
или у меня машина бмв.
тоесть спрашивает или тоже фразу утвердительную говорит.
поэтому и есть колонка тема.
+ можно вести учет того что юзер уже спрашивал и если он снова спросит то сказать ему об этом. а то все боты реагируют тока на повтор прямой тоесть када друг за другом фразы. напримр а а - они говрят типа повтор а 2 раза привет говорю или спрашиваю чтото им пофиг

+ можно еще у юзера спрашивать инфу об нем и помнить . а во время разговора вставлять данные его. напримр узнаем снаачала имя а потом обращаемся по имени и иногда чтоб было человекоподобнее.
0
insideone
Модератор
Автор FAQ
3668 / 945 / 114
Регистрация: 10.01.2010
Сообщений: 2,538
14.02.2010, 23:09 5
ну а в чем проблема? юзер скорее напишет свое имя с Большой буквы, вот его и запишем, к томуже можно подключить словарь имен и пробежаться по совподениям.
насчет повторов введи счетчик, вообще тут конечно надо хранить данные в памяти
а ещё можно учесть такое... если бот раз за разом по какой то логике отвечает одинаково, после какого то раза фраза вообще вылетает...

ps. Идей много можно напридумывать, каждая по своему сложна, код распухнет и будет давать сбои. Тут надо базу основательно продумать а то тяжело будет потом новые "фишки" внедрять
1
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
15.02.2010, 12:32  [ТС] 6
Вообщем я думаю сделать так:

Человек:привет бот!
SQL
1
SELECT replica FROM dictionary WHERE frase LIKE '%привет бот%'
PHP
1
Полного совпадения нет, пробуем по первому слову
SQL
1
SELECT ...... LIKE %привет%
PHP
1
Ага, наши в бд привет и слово это относиться к теме знакомство. Значит установим тему разговора знакомство
Бот:Приветствую!
Человек:погода хорошая сегодня.
PHP
1
про погоду бот ничего не знает и реплика была утвердительной. тогда бот спрашивает человека вопрос по теме разговора. берем из базы вопрос наприме как тя зовут и говорим человеку
БОт:как тя зовут?
PHP
1
ВОт тут хз как сделать потому что наверно надо будет ввести специальные вопросы, ответы на которые бот  будет помнить во время разговора.
Человек:кристалл
PHP
1
Дальше хз как
Как вам такой алгоритм?

+ незнаю как сделать чтоб когда бот например говорит привет и сразу мог спрасить. напирмер привет. как у тя дела?
вмеет хранить реплику с вопросом как то тупо наверное. вобще сама идея чтоб бот был активном в разговоре а не как остальные боты тока слушать могут и поодакивать типа как интересно! итд.
0
insideone
Модератор
Автор FAQ
3668 / 945 / 114
Регистрация: 10.01.2010
Сообщений: 2,538
15.02.2010, 15:00 7
Так если вопрос идет о PHP тут и нельзя сделать чтобы бот сам реагировал, т.к. само PHP же не может реагировать оно только формирует страницу. Хотя можно с Ajax'ом поработать. С другой стороны вы можете отправлять фразу бота после ответа бота. Забейте базу разных вопросов бота и они имею разный приоритет, допустим приоритет "как тебя зовут?" высокий, т.к. это важная часть беседы, а чтобы бот спросил "какая у тебя машина?" это надо чтобы так выпало (скажем шанс 10%). Опять надо хранить "таблцу пользователя" в которой хранятся кому что бот отвечал (чтобы не задавал повторные вопросы и не отвечал повторно). Так же стоит ввести с десяток фраз которые могут как бы невзначай перевести разговор например "да ладно фиг с ним, давай лучше о погоде?" такие фразы будут использоваться когда бот не знает что сказать. И конечно они тоже не должны повторно вызываться.
1
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
18.02.2010, 15:32  [ТС] 8
Еще несколько вопросов..

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


и еще такой момент. юзер вводит:
windows - хорошая вещь
бот найдет 'хорошая вешь' а о винде забудет.
как отличать самые важные слова во фразе?


и еще
вдруг так полчиться
чел:привет
бот:привет
чел:как тебя зовут?
бот:меня зовут БОТ. какачя хорошая погода.

тоесть вторая фраза не втему совсем.
и что хранить отделбьно вопросы отделбно фразы..както вот не пойму..
0
insideone
Модератор
Автор FAQ
3668 / 945 / 114
Регистрация: 10.01.2010
Сообщений: 2,538
18.02.2010, 15:42 9
Цитата Сообщение от Krist_ALL Посмотреть сообщение
Как обучать бота?
логи то он будет вести но хзапоминать все что вводит юзер тоже не выход.
Нужно запоминать фразу а слова из неё (как я писал выше - список слов - и есть фраза) и причем эти слова укорачивать: "ты тупой и глупый бот" -> "ты", "туп*", "и", "глуп*", "бот". В результате реакция будет и на "ты тупое и глупое существо". Ну а в обучении... да, фразу юзера надо будет полностью записывать, а вот то что сказал бот урокачивать по таком принципу как я выше описал. Чтобы не сложилась ситуация когда бот начинат человеку говорить "бот" можно заменять это слово в ответах на "человек" допустим
как отличать самые важные слова во фразе?
"windows - хорошая вещь" - создает связь между "windows" и "хорош*", т.е. мы связываемся по прилагательному
1
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
18.02.2010, 16:13  [ТС] 10
"windows - хорошая вещь" - создает связь между "windows" и "хорош*", т.е. мы связываемся по прилагательному
и как же отичать прилагательные?ты так говоришь а как я это накодю - этж нереально отличать слова по части речи.а словарь грузить ппц


ты тупой и глупый бот" -> "ты", "туп*", "и", "глуп*", "бот".
а как узнат у какого слова укарачивать а у какова нет?
предположим мы укарачиваем 2 буквы тогла 'ты' совсем укаратится - мона длинну слвоа проверять
например:
человек: ты тупой бот
скрипт:
-----------------
ты - длинна <= 3(2) не укарачиваем
тупой - длинна норм -> туп*
бот - длинна <=3(2) не укарачиваем
-----------------
ищем в бд
ты туп% бот - есть
а если
ты тупое существо - нету в бд 100 процентного совпадения
то тогда
ищем по певым 2м словам
ты туп% есть (ты тупой бот)

так?
ты тупое существо
0
insideone
Модератор
Автор FAQ
3668 / 945 / 114
Регистрация: 10.01.2010
Сообщений: 2,538
18.02.2010, 16:28 11
Цитата Сообщение от Krist_ALL Посмотреть сообщение
и как же отичать прилагательные?ты так говоришь а как я это накодю - этж нереально отличать слова по части речи.а словарь грузить ппц
Может по окончаниям? "хороший", "хорошая", "хорошее", "красивый", "красивое", "красивее". Несомненно работа с языком задача сложная, однако все поисковые системы укорчивают слова для поиска таким образом и ищут по основам слов (по крайне мере это так выглядит). Короче мб нужно срезать какие то заданные буквы в конце слова, "ий", "ая", "ее", "ый", "ое", "ее" и т.д.
1
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
18.02.2010, 16:53  [ТС] 12
А если вот так:
как твои дела?
как у тебя дела?
тут отрезанием окончаний необойжешься..(

+ мона педлоги нах вырезать например у в на

и какая база должна быть?
вопрос - ответ?
твое имя - бот
тебе лет -10

такая?
а как же бот тогдабудет спрашивать чтото у человека при такой структу ре бд?
отдельно ворпсы хранить или как непойму.
0
insideone
Модератор
Автор FAQ
3668 / 945 / 114
Регистрация: 10.01.2010
Сообщений: 2,538
18.02.2010, 16:59 13
Цитата Сообщение от Krist_ALL Посмотреть сообщение
тут отрезанием окончаний необойжешься..(
а зачем они тут? все что вы привели попадает под набор { "как", "дела" } просто процен для первой фразы равен 66% а для второй меньше - 50%, составляется список возможных ответов (допустим все фразы - триггеры >= 50% совпадений) и выбирается рандомом
Цитата Сообщение от Krist_ALL Посмотреть сообщение
и какая база должна быть?
{ "как", "дела" } = { "нормально", "да поживаю потихоньку", "а тебе какое дело?" }
Вообще это ваше дело... вам проект лучше виднеется чем мне))тут стоит все продумать, а чужие советы по архитектуре приложения только помешают имхо
Цитата Сообщение от Krist_ALL Посмотреть сообщение
+ мона педлоги нах вырезать например у в на
Пожалуй да Все равно толку от них не много для бота... хотя... ну тогда когда составляете триггерные списки учтите это и не пишите в БД предлогов
1
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
18.02.2010, 17:06  [ТС] 14
а когда тогда окончания отрезать?

мона искать по целой фразе - если false то по все слова -1
или мона искать 'как' + 'твои' + 'дела'
или как твои дела, как твои, как тв%
непойму(
0
insideone
Модератор
Автор FAQ
3668 / 945 / 114
Регистрация: 10.01.2010
Сообщений: 2,538
18.02.2010, 17:16 15
в PHP есть такая фишка
PHP
1
2
3
4
5
6
7
$слова_юзера = explode(" ", $фраза_юзера);
foreach ($слова_юзера as $слово)
{
   // если $слово оказалось предлогом - удалить его
   // тут надо обрезать $слово от лишних символов слева и справа (например запятых\табуляций)
   // тут надо обрезать окончания слов
}
на выходе получаем массив слов - триггер

Как дальше с БД я что то щас не могу придумать, т.к давно этим не занимался
Но смысл в том что нужно посчитать процент соответствия триггер (массива слов) триггеру из БД
например для фразы
"привет бот" выходной триггер будет { "привет", "бот" }
если в БД есть тригер { "привет" } то процент соответствия будет 50%
а если есть триггер { "привет", "бот" } то 100%
Потом составив список возможных ответов по триггерам из БД можно выбрать максимальное совпадение или рандомно выбрать

ps. PHP тоже давно не трогал, за кривокод не ругать
1
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
18.02.2010, 18:56  [ТС] 16
а если юзер ввел типа
какая твоя лбимая книга?
а бо тне знает о своей любимой книге ничего.
что тогда делать?


хочется прост овсе продумать заранее чтобы потом не переделывать большой оьъем работы .
0
insideone
Модератор
Автор FAQ
3668 / 945 / 114
Регистрация: 10.01.2010
Сообщений: 2,538
18.02.2010, 19:04 17
Цитата Сообщение от Krist_ALL Посмотреть сообщение
а бо тне знает о своей любимой книге ничего.
{"как*", "твоя", "любим*"} = { "у меня нет любимой %cut%" }
Т.к. в списке есть "как*", "твоя", "любим*" из фразы вырезается выделенное
какая твоя любимая книга
Остается книга, в ответе она заменяется на %cut%

гм... только что делать с окончанием книги, нужно как то заменить "книга" на "книги"
мб так
{"как*", "твоя", "любим*"} = { "у меня нет любимой %cut%и" }
а вырезаться будет из оставшегося слова тоже всякие окончания и т.д.
1
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
18.02.2010, 19:50  [ТС] 18
а сам бот будет спрашивать только если в ответной реплике будет вопрос.
еще мона сделать в бд колонку типа.ответ на этов ворпос запомнить и занести втакуюту переменную
0
insideone
Модератор
Автор FAQ
3668 / 945 / 114
Регистрация: 10.01.2010
Сообщений: 2,538
18.02.2010, 20:52 19
Не совсем понял...
Типа
ЮЗЕР: Какая книга тебе больше всего понравилась?
-> Вопрос который бот не знает
-> Ответить вопросом
-> Приготовиться к добавлению в БД новых данных
БОТ: Я пока не решил, а тебе?
ЮЗЕР: Мне понравилась книга "Война и мир"
-> ADD
-> { "как*", "книг*", "теб*", "больше", "всего", "понравил*" } == { "Одна из моих любимых, это - %cut%" }
0
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
20.02.2010, 20:45  [ТС] 20
Начал приступать к кодингу.
вопрос: как разделять фразу на слова?
пробел?а если запятая или точка, а может запятая и точка.
человек:привет, бот
как быть?
0
20.02.2010, 20:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2010, 20:45

Написать чат бота
Задача следующая: Есть игровой клиент ip адрес коннекта я заснифферил. Хотелось бы что-бы прога...

Создание чат-бота
Здраствуйте!Хочу начать изучать чат-ботов и создать своего.Может кто подробно рассказать про...

похож на чат бота
мне очень нужен php код. это должно быть на страницах сайта и отвечать на вопросы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru