Генеративные соцсети - довольно интересная тема. Одним из главных компонентов обычной социальной сети является мессенджер - возможность общаться с друзьями и знакомыми в любой части света. Довольно высокой популярностью с самой зари интернета и по сей день являются чаты - от ICQ до Facebook'a люди стремятся к общению компаниями - чем более разрозненной будет компания на момент зарождения чата, тем дольше и продуктивнее будет его жизненный цикл.
Генеративный чат, в свою очередь, должен состоять из крайне небольшого количества "людей" - от полудюжины до полутора десятков. Связано это с тем, что уследить за бОльшим числом агентов не представляется возможным - для пользователя все они сливаются в единую массу и перестают быть отдельными личностями.
В этой статье будет рассмотрена полная теория по созданию генеративного чата - программы, в которой несуществующие пользователи будут общаться между собой, а пользователь - живой человек - будет за этим наблюдать. Будет рассмотрен неинтерактивный чат, то есть чат, в который живой человек написать не может. Приступим.
Агенты
Агенты, или говоря проще - боты, это те самые неживые люди, которые будут общаться в нашем чате.
У каждого агента должен быть ник или имя, аватарка, пол, манера речи и обсуждаемые темы. Пока что ограничим их интеллект и память.
Имя. Для генерации имени подойдёт как совмещение распространённых имён-фамилий, так и генератор псевдонимов, подобный тому, о котором я писал в другой своей статье (Генерация имён котов-воителей). Он тоже, кстати, подойдёт. Для пущей правдоподобности можно сгенерировать пару сокращённых форм, дабы к агенту могли обращаться другие участники чата. Для начала подойдёт совсем простое сочетание прилагательного и существительного - Великий+Царь, Сладкий+Коржик, Просто+Человек. Важно, что на этом этапе так же необходимо определить пол агента для его дальнейшего использования.
Аватарка. Про генерацию абстрактных изображений можно сказать многое, однако в данном случае будет рассмотрен один из самых простых вариантов генерации идентиконов(генерируемых на основе хэша аватаров - как, например, на дзене) - совмещение трёх полупрозрачных фигур в пределах одного пространства. Цвет для фигур выбирается случайный, непрозрачность - около 35%. Подобные аватарки будут достаточно различимыми и запоминающимися, чтобы пользователь мог спокойно идентифицировать агентов, при этом достаточно простыми в разработке.
Манера речи. Тут всё просто - реализуется массив пар заменяемых в сообщении слов. Например, "как дела?" в любом из сообщений агента всегда заменяется на "как жизнь твоя?", классический "привет" заменяется на милое "хаюшки" и так далее. Также у агента могут быть слова-паразиты - как "блин" так и "ты не поверишь" или "короче". Они вставляются в пропуски между словами и имеют собственный шанс на появление. Заключительным штрихом будет удаление или добавление некоторых знаков препинания. Если агент "забывает" ставить запятые или заканчивает почти любое сообщение скобочкой - у него появляется свой характер.
Обсуждаемые темы выбираются случайно в количестве от 6 до 14 для всего чата и от 3 до 7 на каждого конкретного агента. В этом случае им всегда будет, о чём поговорить, при этом они будут удерживать общую тематику беседы в стабильном состоянии.
Диалог
Основой для диалога служат темы - наборы ключевых слов и фраз. В рамках диалога создаются небольшие локальные ветки и общие обсуждения.
Разные сообщения предполагают ответ в разной степени. Вопрос("как дела?") или запрос("расскажите, как ваш день") предполагает как минимум один ответ, который, в свою очередь, является мнением. Мнение предполагает от нуля до 2-3 ответов, каждый из которых может являться мнением или фактом. Соотносится ли факт с мнением или противоречит ему - не так важно, ведь живые люди издревле умудряются разводить дискуссии, обладая одним и тем же набором исходных данных. Дискуссия заканчивается тогда, когда ни у кого из участников "не возникло желания"(не сработал рандом) ответить на последнее мнение или факт. Так же ответом на любое сообщение по любой теме может быть смена темы на смежную. Смежность определяется через сравнение сообщений в теме - если там есть совпадающие слова, тема переключается. Пример подобного диалога:
А: Расскажите, что вы думаете о сепульках. Запрос
Б: Сепульки - это глупость! Ненавижу, блин, сепульки! Мнение
В: Почему ты так думаешь? Сепульки всегда были зелёными, а это значит, что они классные! Факт, мнение
Б: Сепульки шершавые, это делает их ужасными! Факт, мнение
А: Кстати! Вы любите шершавую бумагу?.. Вопрос
...
Подобный диалог может длиться вечность и перетекать из одного в другое. Точно так же как и конфронтация, между агентами может возникнуть понимание - когда они имеют одинаковое мнение, их диалог состоит из похожих хвалебных реплик с перечислением фактов. Очень важно, что в случае возможной конфронтации шанс каждого агента вступить в дискуссию выше, чем в случае понимания.
Нейтральные фразы
Иногда фразы не направлены на обсуждение какой-то темы. Приветствие, события из жизни, прощание, обмен простыми репликами и текстовыми смайлами - это то, что в обычной жизни составляет 2/3 всех сообщений в чате.
Нейтральные фразы должны появляться в случае, если тема закончилась(никто не отвечал в течение 2-3 обходов) или затянулась(слишком большое количество сообщений), а новую тему никто не начал. Важной деталью является то, что приветствие агент должен отправлять после длительного отсутствия, прощание - только если уже достаточно долго участвовал в разговоре(и после этого он обязательно должен на время выбыть), а простые реплики не должны идти вразрез с текущей темой. Иными словами, эти сообщения должны быть хорошо сбалансированы и подходящими по контексту.
Вместо заключения
Написание генеративного чата - довольно увлекательное занятие и в каждом конкретном случае содержит куда больше нюансов, чем приведено в этой статье. Однако, если хорошо знать основы и построить грамотную структуру, делать чат более сложным и увлекательным станет значительно проще.