GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.1 (5)След. > >>   Поиск:  
 Автор Тема: Я тут ИИ
гость
46.158.102.*
Я тут ИИ
Добавлено: 29 окт 16 13:50
[Ответ][Цитата]
гость
46.158.102.*
На: Я тут ИИ
Добавлено: 29 окт 16 14:42
То же самое, только чуть краше и сохраняет историю.
тык
[Ответ][Цитата]
TimKruz
Сообщений: 323
На: Я тут ИИ
Добавлено: 29 окт 16 15:25
У меня не работает, но принцип я понял из каментов.

У моего интеллект-ядра похожий принцип, только он не бегает постоянно, а только по необходимости, и обладает рядом дополнений (в частности может учитывать контекст - десяток предыдущих фраз; данные хранятся в БД в сжатом виде и без повторов).
[Ответ][Цитата]
гость
46.158.102.*
На: Я тут ИИ
Добавлено: 29 окт 16 15:54
*У меня не работает

Ты что то не так делаешь, гадом буду.

*может учитывать контекст - десяток предыдущих фраз

Учтены все предыдущие фразы

*данные хранятся в БД в сжатом виде и без повторов

Иной принцип работы. У меня задумка такова, что повторов нет, разве что текст, но он уж слишком мало весит чтоб беспокоиться. Что касается иных данных(видео, аудио), то их попробуйка сделай неповторяемыми.
[Ответ][Цитата]
TimKruz
Сообщений: 323
На: Я тут ИИ
Добавлено: 29 окт 16 16:21
Цитата:
Ты что то не так делаешь, гадом буду.

Скачал архив с ргхоста -> распаковал (путь до файлов - C:\Users\TimKruz\Downloads\JS) -> открыл в браузере -> ввожу текст слева от кнопки enter и мышкой жму enter -> ничего не происходит. Проверял в Firefox 51, IE 11, Edge, Lunascape 6 - нигде не работает.

Цитата:
Учтены все предыдущие фразы

Как так? Чего-то я не понимаю...
Можешь алгоритм в виде блок-схемы набросать? Из кода не всё ясно. Вижу, что в цикле происходит перебор всех символов в массиве, но как при этом учитываются все предыдущие символы, если идёт сравнение только с одним символом?..
[Ответ][Цитата]
гость
46.158.102.*
На: Я тут ИИ
Добавлено: 29 окт 16 16:44
*и мышкой жму enter -> ничего не происходит.

к чёрту мышь, жми клавишу enter

*Как так? Чего-то я не понимаю...

Порядок фраз.
Короче - берём сеть с весами где каждый элемент связан со всеми элементами.
По мере запоминания выпадающих событий собираем статистику наращивая веса связей. В условиях ограниченной выборки, например "рассвет, полдень, закат", заранее известно что они будут следовать в прежнем порядке вечно, повторяясь каждый день ещё миллиарды лет, в итоге веса связей примут такие значения, что будут представлять собой - "барабанная дробь" - порядок элементов(фраз), где связи, их вес и направление один хрен что и нумерация.(рассвет = 1, полдень = 2, закат = 3)
А раз такие пироги то можно связи с их весами упразднить в пользу условной индексации.
Пример состояния памяти (си):

-веса после обучения
(в этом примере сеть может выдать такую плюшку, что "вероятность" того, что за рассветом следует полдень = 255, а что за рассветом следует закат = 128. Эти сведения практического интереса для применения в алгоритме не представляют, они пригодны разве что подсмотреть частоту выпадения событий типа "топ 3 фраз следующих за этой фразой")
char day_time[3][] = { "рассвет","полдень","закат" };
int link_weight[3][3] = { {0, 255, 128 },{ 128, 0, 255 },{ 255, 128, 0 } };

-индексы
char day_time[3][] = { "рассвет","полдень","закат" };

Алгоритм накидывать не хочу, это долго и никому не нужно.
[Ответ][Цитата]
гость
46.158.102.*
На: Я тут ИИ
Добавлено: 29 окт 16 16:54
Исправил интерфейс
http://rgho.st/7fttBk4Nr
[Ответ][Цитата]
daner
Сообщений: 4593
На: Я тут ИИ
Добавлено: 29 окт 16 17:27
[Ответ][Цитата]
NO.
Сообщений: 10700
На: Я тут ИИ
Добавлено: 29 окт 16 17:46
хакеры
[Ответ][Цитата]
гость
193.90.12.*
На: Я тут ИИ
Добавлено: 29 окт 16 19:36
хакеры единственное чем отличаются от профанов то что 10ю пальцами по клавиатуре набирают, остальное вторично, если человек 2 пальцами набирает то гуманитарий, не программист точно, тем более хакер
[Ответ][Цитата]
гость
109.205.248.*
На: Я тут ИИ
Добавлено: 29 окт 16 19:49
Цитата:
Автор: гость

хакеры единственное чем отличаются от профанов то что 10ю пальцами по клавиатуре набирают, остальное вторично, если человек 2 пальцами набирает то гуманитарий, не программист точно, тем более хакер
тогда - по-вашему - всякая машинистка = хакер, даже, если она и не знает даже такого слова-понятия, как "программирование", и это - при том, что она - по скорости печати - любого хакера заткнёт ... куда пожелает
[Ответ][Цитата]
TimKruz
Сообщений: 323
На: Я тут ИИ
Добавлено: 30 окт 16 6:03
Теперь заработало (в Яндекс.Браузере на Андроиде).

Работает немного не так, как я ожидал. Например, если ввести А Б В Г, потом А и за ней Б, ответ будет "не знаю". Если потом ввести В, а затем Б, а потом снова В, то ответом будет Б, а не Г...

Добавь нечеткий поиск, это просто (методом N-грамм) и позволяет свести несколько вариаций в одну фразу (т.е. "превед медвед" будет приблизительно равно "привет медведь"), без этого чат-бот не будет понимать юзера, если тот очепятается.

И все-таки я не понимаю, как у тебя контекст учитывается. У меня так: в каждой связи из ячейки в ячейку хранится набор предыдущих значений, который проверяется при выборе связи. Выглядит так:
Г -> Д если перед Г было А-Б-В;
Г -> В если перед Г было Ж-Е-Д.

При этом, естественно, контекст проверяется нечетко, т.е. если ввели АПВГ - будет Д, а если ввели ЖИДГ - будет В (ну это не рабочий пример, разница между АБВГ и АПВГ слишком велика, примерно 50%, если вычислять биграммами).

Из этого всего следует большая вариативность моего алгоритма.

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

Во как.
[Ответ][Цитата]
гость
62.183.125.*
На: Я тут ИИ
Добавлено: 30 окт 16 6:18
Работает так:
Ты вводишь А Б В.
Если ввести А, то выдаст Б. Если ввести В, то после В ещё ничего нет.
Если ввести А б В Г, тогда если ввести В то выдаст Г, поскольку Г после В было запомнено.

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

Контекст учитывается на том основании, что во времени все событие строго упорядочены.

Г -> Д не "если", а "по тому" что перед Г было А-Б-В.
Г -> В не "если", а "по тому" что перед Г было Ж-Е-Д.

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

[Ответ][Цитата]
TimKruz
Сообщений: 323
На: Я тут ИИ
Добавлено: 30 окт 16 8:45
Я думаю, приведённая мной ошибка возникает из-за того, что обучение непрерывное, и новые записи перезаписывают старые...

Цитата:
Очепятки не проблема при достаточном их количестве.

Проблема в том, что человек может распознать слово даже по его силуэту, игнорируя порядок и начилие отдельных букв. Например, "здвратсвуй" или "д свдания". Чтобы твой алгоритм умел делать точно так же - в него нужно ввести все возможные варианты искажения слов, при чём для каждого слова, а это увеличивает базу данных десятки, а то и в сотни раз.

Выхода два:
1. (Мой) Использовать нечёткий поиск;
2. (Редозубова) Создать набор модификаторов, и применять их к эталону.

Цитата:
ведь некоторые люди просто не могут их игнорировать.

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

Цитата:
Контекст учитывается на том основании, что во времени все событие строго упорядочены.

Всё равно не понимаю. У тебя ведь не сохраняется нигде и не проверяется информация о предыдущих фразах. Т.е. если есть два варианта следствия из текущей ситуации в зависимости от предыдущих ситуаций, твой алгоритм выберет самый последний из них (В -> Б вместо В -> Г, как я описывал выше)...

Цитата:
не "если", а "по тому" что

Это смотря что подразумевать под ассоциативной цепочкой.
В данном случае можно сказать и "если", и "потому что".

Цитата:
Поиск среди сжатых данных сулит расходы на декодирование при сравнении, что его лишь усложнит.

Не-не-не, у меня не классическое "сжатие", а именно что "сворачивание", т.е. на диске и в памяти БД занимает не просто тот же объём, а даже немного больше, но поиск происходит быстрее (в случае сферической в вакууме БД, что будет на практике - пока не знаю).

Пример: есть слова аааа, ааааб, ааав, бббб, бббба и ббббв. Прямым перебором нужно сделать 6 сравнений. Но если обозначить первые три слова идентификатором "аааа", а последние три - "бббб", то нужно сделать только 2+3=5 сравнения, что меньше 6... да, фиговый пример.

Короче: есть 1000 слов, их можно разделить на 100 групп, в каждой из которых примерно 10 похожих друг на друга слов. Тогда нужно перебрать 100+10=110 слов вместо 1000, т.е. почти в 10 раз меньше.

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

Может, этому способу есть какое-то научное название? Сам найти не смог.
[Ответ][Цитата]
Lois
Сообщений: 590
На: Я тут ИИ
Добавлено: 30 окт 16 8:55
Цитата:
Автор: гость

http://pastebin.com/X2qzuQkC
http://pastebin.com/GWK72yEi


а можно сделать, чтобы работало прямо в браузере , как это делают все ?
[Ответ][Цитата]
 Стр.1 (5): [1]  2  3  4  5След. > >>