February 12, 2019

ASW

ASW (Associative System Window), то есть Ассоциативная Система ("Ассист") - это программа, выстраивающая ассоциации в зависимости от входных и ожидаемых выходных параметров. На нынешнем этапе развития, то есть на середину февраля 19-го, Ассист представляет собой довольно невразумительного чат-бота; даже некоторые его предшественники, создаваемые для сугубо развлекательных целей, намного способнее, чего уж говорить про Алису и Сири, не так ли?

На самом деле интересно то, что вышеуказанные голосовые ассистенты уже обучены на взаимодействие с пользователем, в то время как Ассист поставляется "голым". В версии от сентября 18-го мы называли его Джеффом и в одном из справочных окон особо акцентировали внимание на том, что, в общем-то, у вас в результате обучения может получиться и не Джефф вовсе:

По большей мере, суть приложения постепенно теряется, как только мы начинаем работать над интерфейсом. Нас это очень огорчает, поскольку самих функций нет, а мы ходим вокруг да около. Мда, это действительно сложно - создать какого-то чат-бота там. Я не знаю даже. Вот вам p-bot.ru, и то умнее) А теперь перейдём к реализации и к тому, почему мы считаем, что Ассист - хорошая вещь или, по крайней мере, задумка.

Хорош тот бот, который легко обучается, буквально схватывая всё на лету. В обработке естественного языка Ассист, может быть, и не преуспел, зато как только вы спросили у него что-то, и он не может на это ответить, он сам внезапно решает спросить, а как бы вы сами ответили?

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

Так мы и подходим в ограничение: чего-то нам не хватает. Чего-то умного. Например, он не может выполнить ни одного действия, а Алиса даже будильник поставит или музыку включит. Не то чтобы я намекал на идейное сходство ассоциативной системы и голосового ассистента, но вот уж если строить ассоциации, то и подходить с другой стороны вопроса.

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

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

Углубимся в работу системы. Есть один объект/класс - кусок кода, короче, - который выполняет поиск выражений по базам данных SQLite 3. Все выражения ввода - активаторы, которые вызывают ассоциирующиеся с ними реагенты. Всё просто: если в базе есть активатор, то у него обнаруживается такая характеристика, как список ссылок на реагенты. Причём реагент тоже может выступать в качестве активатора: сможет ли бот общаться сам с собой?

Вместо списка ссылок на реагенты внезапно может обнаружиться путь к другому контейнеру (другой таблице в этой же базе данных)/другой базе данных или вообще к внешней программе или к скрипту Python. Скрипт запускается нативно из кода, причём в него передаётся выражение и из него принимается выражение-реагент.

Что ещё хлеще этого?

Предустановленные шаблоны. Никаких скриптов Python, если ты хочешь узнать информацию из Википедии:

Шаблон времени, даты, добавления новых выражений, Википедии, поиска в Интернете... и сохранения ввода. Последний (вкупе с некоторыми особенностями) рассмотрим поподробнее, поскольку всё остальное более-менее ясно: встретился реагент с шаблоном времени - Ассист выведет время в UTC и пр.

Зачем нужно сохранение ввода?

Представьте, что вы - работодатель. Или собираете отзывы. Или опрос проводите. Вам нужен некоторый бланк с вопросами-ответами, то есть кто-то должен задавать вопрос, получать ответ и его записывать. Для Ассиста это не что иное как сценарий действий. Сценарий - это отдельный контейнер, который может притягивать к себе - пока весь сценарий не будет пройден или досрочно прекращён, ни одно из выражений других контейнеров не попадёт на экран: поиск будет производиться только в этом сценарии. Действительно, разговаривая с другом о чёрных дырах, вы бы сразу поняли, что имеет в виду друг, если он бы сказал: "Она хороша"? Да едрить, кто она? Чёрная дыра или та красотка из Мака? Вот и вы бы сначала спросили, а Ассист тем пуще спросит.

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

Зачем ещё пригодится Python?

Да-да, наши любимые... нейронные сети.

И для взаимодействия с голосовыми ассистентами:

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

Круто?

Только в теории.

На самом деле нам нужна помощь. Ведь это довольно сложный проект...

Нет, не так. Это наихудшая попытка сделать закос под искусственный интеллект. И, тем не менее, она выгорит!

[email protected]

[email protected]

https://github.com/kollieartwolf/asw