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

Сначала несколько оговорок: у меня нет опыта в психологии, социологии или чем-то еще, что делает меня экспертом по EQ, только небольшой опыт в машинном обучении и науке о данных (хотя в основном это относится к проектированию летающих вещей), небольшой опыт в компьютерных наук и не имеет опыта обработки естественного языка (NLP). Так что посмотрим, как пойдет ;-)

Моя цель состояла в том, чтобы создать чат-бота, который реагировал бы на меня, когда я хотел поговорить об эмоциях таким образом, чтобы помочь мне понять их и чувствовать себя обоснованным. Изучая мои текстовые беседы, кажется, что общей нитью в моих текстовых беседах с моим другом, когда я говорил об эмоциях, была модель реагирования на уязвимость с сочувствием и поддержкой. Я хотел, чтобы чат-бот мог это делать. Для чат-бота в этой статье я явно не использовал этот шаблон, а вместо этого использовал разговоры как необработанные данные для точной настройки (обучения) ряда различных предварительно обученных моделей НЛП.

Основное предположение состоит в том, что, чтобы узнать о своих эмоциях, этот человек должен быть готов исследовать их и проявит уязвимость в процессе. Многим это неудобно, поэтому возможность иметь компаньона, который всегда будет слушать, быть позитивным и подбадривать вас, кажется хорошим способом «попрактиковаться» для людей, которые не привыкли так делиться. По моему опыту, лучшие дружеские отношения — это те, которые чувствуют себя полностью защищенными от суждений и оскорблений и обеспечивают психологическую безопасность, так что я могу сказать им все что угодно и получить настоящую, честную обратную связь. Мне очень повезло, что в моей жизни есть такие люди, но держу пари, что это не универсальный опыт. Я хотел найти способ построить такого друга для тех, у кого его может не быть в жизни, таким образом, чтобы он помог продемонстрировать, что быть уязвимым безопасно, а также смоделировать, как может выглядеть хороший друг, когда они этого не делают. есть уже этот пример.

Я испробовал несколько различных подходов к данным и процессу обучения, пока выяснял все это, но, в конце концов, чат-бот, который я разработал до сих пор, был результатом двухэтапного процесса. Во-первых, я обучил модель НЛП под названием GPT-NEO (версия 1.3B) от EleutherAI на всех текстовых данных из наших чатов, что составляет около 12000 разговоров. Эта конкретная модель была выбрана, потому что она была с открытым исходным кодом и доступна через API HuggingFace (и огромное спасибо Huggingface за их работу по демократизации НЛП, которая в первую очередь позволила кому-то вроде меня взяться за этот проект). Это была самая большая модель, которую я мог обучить на экземплярах Google Colab, которые я использовал. Кроме того, гораздо более крупный GPT-J (также от EleutherAI) будет конечной целью, если этот процесс обучения будет успешным, и, таким образом, GPT-NEO будет разумной заменой этой модели. В оставшейся части статьи я буду называть чат-бота, которого я обучил, GPT-NEO-TC (для текстового общения).

Обучение модели НЛП на этих данных чата имело ожидаемый эффект, который был двояким: научить модель реагировать на разговор с несколькими говорящими, предоставив данные, в которых было два говорящих, а также заставить этот разговор следовать схожим шаблонам и звучать как текстовые сообщения, которые я создавал на протяжении многих лет. По первой цели стать чат-ботом обучение прошло очень успешно. Что касается второй цели — звучать как наши текстовые разговоры, то чат-бот был хорош, но не идеален. В частности, это было довольно случайным и довольно повторяющимся. Кроме того, чат-бот иногда терял нить разговора или уводил его в странном направлении. Это известные проблемы для технологии чат-ботов, особенно в версии с более низким уровнем точности, которую я использовал (в целом чат-боты с более высокими параметрами гораздо больше похожи на ИИ и лучше справляются с поддержкой разговора).

Чтобы бороться с проблемами повторяемости и случайности, я сгенерировал больше данных для использования в обучении для второго этапа обучения, просто общаясь с чат-ботом. Я использовал конкретные подсказки, чтобы вести разговор, а затем отвечал на вопросы таким образом, который демонстрировал уязвимость. Эти подсказки были примерно такими: расскажите мне о случае, когда вы защищались; расскажите мне о времени, когда вы испытали сильные эмоции; расскажите мне о случае, когда вам было стыдно и т. д. Я отвечал на вопросы, а затем чат-бот давал три ответа; из этих ответов я выбирал лучший и затем продолжал разговор. Обычно я делал пять перебросок вперед-назад, а затем заканчивал разговор. Я повторял этот процесс много раз и сохранял каждый разговор. Если чат-бот успешно следовал желаемому шаблону (отвечая с сочувствием и поддержкой) и в целом имел смысл, я сохранял разговор в базе данных. В конце концов, у меня был новый набор данных, который был намного меньше, чем первая база данных, но и гораздо более целенаправленным, так как я вручную курировал этот набор данных.

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

Одна из моделей, которые я опробовал на этом пути, заключалась в использовании чат-бота Facebook Blenderbot (версия 1.0). Это модель НЛП, специально разработанная для разговоров и разработанная с использованием ряда источников, включая набор данных, созданный на основе эмпатических ответов. Из коробки эта модель отлично справляется с поддержанием разговоров, но когда я использовал свои данные для ее тонкой настройки, я обнаружил, что разговоры стали намного хуже и очень повторяющимися (вероятно, я что-то делал не так). Чат-бот (до обучения на моих данных) посредственно проявлял эмпатию и редко говорил что-либо в поддержку, но отлично генерировал фальшивые уязвимости. Если вы попросите его рассказать вам о времени, когда ему было стыдно, он придумает историю и будет придерживаться ее. Хотя это и бесполезно для самого моего чат-бота, я понял, что на самом деле это очень удобно для целей сравнения и разработки данных. Я решил сделать так, чтобы Blenderbot общался со своим чат-ботом, чтобы ускорить создание новых данных, и сравнить его с другим чат-ботом, чтобы увидеть, как сложились мои результаты.

Для сравнения с чат-ботом, которого я обучал, я взял ту же модель НЛП GPT-NEO и обучил ее с помощью вышеупомянутой базы данных Эмпатический диалог, созданной Facebook. (Я буду называть это GPT-NEO-ED до конца статьи). Я полагал, что это станет разумной позицией, которая научит GPT-NEO вести беседы и позволит мне увидеть, создал ли я что-то новое или есть аналогичная возможность, которую можно было бы развить из этих свободно доступных данных. Для разговоров я предоставлял Blenderbot случайную подсказку, которая затем обычно отвечала заявлением, показывающим уязвимость, а затем я заставлял чат-ботов, которых я обучил, отвечать и продолжать разговор с Blenderbot. Примерно в одной трети случаев один из ботов терял след разговора, либо путая говорящего, либо просто говоря что-то случайное. Скорее всего, это произойдет с Blenderbot, как и с ботами GPT-NEO, которых я обучал, что опять же, вероятно, является функцией модели более низкого порядка, которую я использовал (сейчас есть Blenderbots с более высокими параметрами и даже более новая версия). Я мог бы использовать, но не имел вычислительной мощности).

Из разговоров, которые прошли успешно, я субъективно выбрал несколько хороших, средних и плохих образцов, чтобы продемонстрировать, как работали чат-боты. Для каждой беседы первый текст (верхний левый угол изображения) представляет собой случайно выбранную подсказку из списка, затем сторона беседы с Blenderbot находится справа, а сторона беседы GPT-NEO продолжается слева.

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

В этом разговоре чат-бот GPT-NEO-ED лучше поддерживает, хваля пользователя за его отношение. Это гораздо более подтверждающее поведение, хотя в ответах не так много сочувствия (но есть сочувствие в извинениях без каких-либо реальных указаний на то, о чем они сожалели). Этот разговор имеет некоторые оттенки взаимодействия, которое, как мне кажется, было бы полезно для тех, кто исследует свои эмоции.

Этот разговор показывает некоторые тенденции, которые были бы совершенно ужасны для обучающего/обучающего чат-бота EQ. Ответы не поддерживают или не сочувствуют, и на самом деле они почти оскорбительны и намекают на то, что говорящий лжец и ему нужно «вернуться в то время», когда они были другими. Этот разговор действительно подчеркивает опасность разговоров с чат-ботами на деликатные темы; если бы это был пользователь, который стеснялся или нервничал из-за демонстрации уязвимости, этот разговор был бы разрушительным, поскольку побудил его продолжать попытки. Если бы друг сказал мне это, я, вероятно, никогда бы больше не сказал ему ничего обидного.

Это были примеры разговоров чат-бота, обученного на данных Empathetic Dialogues. Сравните это со следующими тремя разговорами, которые были из разговоров с чат-ботом, обученным на моем собственном наборе данных.

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

В «хорошем» примере разговора с GPT-NEO-TC ответы положительные, имеют смысл, демонстрируют сочувствие, и я считаю, что в целом они будут полезны для тех, кто уязвим, и побуждают их глубже копаться в этих чувствах. . Когда чат-бот работает так, как задумано здесь, я слышу, как моя лучшая подруга говорит мне эти вещи своим голосом, что я также считаю хорошим признаком того, что мне удалось уловить ее суть в ИИ. Если бы чат-бот всегда отвечал так, думаю, я был бы очень доволен результатами.

К сожалению, ИИ не всегда попадает в цель, как в предыдущем разговоре. Хорошая новость заключается в том, что даже в «плохих» разговорах чат-бот немного повторяется и не очень плавно. Ответы по своей сути по-прежнему поддерживающие, а не потенциально разрушительные, как это было в GPT-NEO-ED, но они представляют собой более шаблонные общие поддерживающие ответы, а не что-то проницательное или ободряющее. Я могу представить пользователя, получающего эти ответы и чувствующего себя равнодушным к ним, потому что они на самом деле не показывают никакой связи с разговором.

Из этого проекта я пришел к выводу, что мои текстовые данные действительно обеспечивают улучшенный чат-бот для тех целей, которые я имел в виду, чем другие существующие данные или чат-боты. Основная слабость моей модели НЛП заключалась в том, что она была недостаточно надежной, чтобы ее можно было использовать для самостоятельного выполнения этой задачи по обучению EQ, поскольку иногда она теряет нить разговора, а также, вероятно, иногда является немного повторяющейся и общей. Я думаю, что это можно исправить, используя более крупную модель NLP для точной настройки, а также генерируя более разнообразные данные из текущего чат-бота и курирования.

Другая часть проекта, которая беспокоила меня, заключалась в том, что моя оценка того, что является хорошим, плохим или средним для этих разговоров, была полностью субъективной. Я думаю, что лучшим подходом было бы разработать показатель поддержки и сочувствия в ответ на уязвимость, а затем я мог бы использовать более количественную меру того, стал ли мой чат-бот работать лучше. У меня есть некоторые идеи на этот счет, но я оставлю их на другой день ;-)

Еще одним шагом было бы сравнение того, как мой чат-бот реагирует на некоторые из существующих приложений, которые имеют аналогичную цель в отношении психического здоровья, например, Woebot, Wysa и Replika. Я уверен, что они набрали бы более высокие баллы за плавность разговора и взаимодействие, но мне любопытно, облегчат ли они кому-то самоанализ так же, как я думаю, было бы полезно.

Я считаю, что новые подходы к масштабируемому обучению EQ так или иначе не за горами. EQ — настолько фундаментальный навык, который активно используется как на рабочем месте, так и в образовательных системах с социально-эмоциональным обучением, поэтому я считаю крайне важным, чтобы мы находили способы донести методы самосовершенствования до максимально широкой аудитории. Разработка чат-бота, который может помочь вам исследовать эти чувства, может быть одним из инструментов, которые могут помочь людям.