Источник: Nuances of Programming
В своём дипломном проекте я решил продолжить работать с естественным языком, фильмами и IBM Watson. В предыдущем проекте я визуализировал психологические профили персонажей фильмов, а в этом проекте решил пойти еще дальше. Позвольте несколько вводных слов до нашего погружения в проект.
Проблема
До того как я стал специалистом по данным, я был погружён в дизайн и в 2015 году основал свою компанию Screenshot Production. Мы работали индивидуально под каждого человека, чтобы он ощутил себя частью чего-то большего. В продажах мы ориентировались на результаты предварительного опроса.
Такой метод сильно воздействует, но не масштабируется. Мы обычно были в состоянии разместить 100–150 человек за выходные, и билеты должны были быть непомерно дорогими, только чтобы окупить затраты на организацию.
Основной вопрос проекта был таким: можем ли мы использовать науку о данных и глубокое обучение с генерацией, чтобы обеспечить такой же эффективный и персонализированный опыт в виде нарратива и воздействовать на сотни тысяч людей одновременно? Другими словами, можем ли мы использовать социальный профиль пользователя в сочетании с вымышленным диалогом, чтобы создать надёжный, интерактивный и полностью персонализированный нарратив?
До того как начать радоваться, позвольте дать короткий ответ: не сейчас. Генерация текста относительно молода как область, а мой опыт не так обширен для лонгридов. Но я создал генератор коротких историй. Это шаг к цели.
Методы, данные и процессы
Как и в предыдущем проекте, я использовал корпус фильмов, подготовленный университетом Калифорнии в Санта-Круз. Этот корпус разбит по жанрам и содержит диалоги из 960 фильмов. Диалоги отделены от описания сцен.
Я очистил и обработал данные с Pandas, разбив их по персонажам. Затем отфильтровал по следующему условию: сто строк и не менее трёх слов в каждой, чтобы получить главных героев вместе с диалогами, которые ярко их характеризуют.
Затем я создал базу данных с иерархической структурой, содержащую жанр, название, персонажа и диалоги для всех жанров:
Затем пропустил каждого персонажа через IBM Watson, чтобы получить психологические портреты. Учтите, что Watson нуждается в отдельном конфигурировании, а ниже написана функция, чтобы пропустить данные через Watson:
В базе оказалось более трёх тысяч персонажей. Затем я использовал Tweepy, чтобы получить последние 200 твитов наших пользователей и составить их психологический портрет с помощью Watson:
Затем я сравнил профили из Твиттера с профилями персонажей фильмов, используя коэффициент Отиаи и нашёл наиболее похожего на пользователя персонажа. Я использовал эту функцию:
Наконец, я задействовал OpenAI GPT-2, чтобы сгенерировать короткий твит от лица персонажа. Эта нейросеть была обучена с помощью GPT-2 Simple индивидуально на каждом диалоге персонажа в корпусе фильмов и настроена так, чтобы текст не превышал длину твита.
Предварительные результаты
Результаты всей этой работы были обнадеживающими! Я проверил её с помощью ряда твиттеров людей в моей группе, а также с некоторыми известными профилями, такими как Илона Маска (он оказался похож на Спока из Star Trek), и почувствовал, что результаты в большинстве случаев имеют смысл. Я также создал небольшое веб-приложение на Flask, ниже результат для Дональда Трампа:
Трамп на 99% похож на Чарли Крокера из “Ограбления по-итальянски”. Читаем описание персонажа: “Вышедший из тюрьмы лидер криминальной группировки, который намеревается ограбить инкассаторский грузовик с 500 килограммами золота”. Хорошо звучит!
Читайте также:
Читайте нас в телеграмме и vk
Перевод статьи Nicholas Sherwin: Personalized, Generative Narratives