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

В предыдущем посте я показал, как настроил GPT-J для генерации Haikus, и результаты оказались довольно хорошими. Для моего последнего эксперимента, GreenLIT, я хотел расширить границы использования GPT-J для творческого письма, чтобы посмотреть, сможет ли он создавать сценарии для совершенно новых телешоу и фильмов.

Вот блок-схема компонентов и процессов для GreenLIT. Я подробно расскажу об этом в разделах ниже.

Для начала я поискал в Интернете и нашел пять наборов данных с открытым исходным кодом с текстом, которые я использовал в качестве обучающих данных:

  • Диалоги фильмов из проекта ConvoKit от Корнелла (лицензия MIT) [1]
  • Краткое изложение сюжета фильма от Роунака Баника на Kaggle (лицензия CC0) [2]
  • Диалоги друзей из проекта ConvoKit (лицензия MIT) [1]
  • Краткое изложение сюжета друзей из Википедии (лицензия CC-BY-SA) [3]
  • Анализ потокового шоу от Шивама Бансала на Kaggle (лицензия CC0) [4]

Первый и третий наборы данных содержат диалоги из сценариев фильмов и популярного ситкома «Друзья». Другие наборы данных включают названия, жанры и краткое содержание сюжетов телешоу и фильмов. Я написал некоторый код Python для предварительной обработки и фильтрации текста, чтобы создать набор записей для четырех задач для изучения GPT-J:

  1. Жанр и тема → Название и сюжет
  2. Название и сюжет → Диалог
  3. Название и сюжет → Сценарий
  4. Диалог → Скрипт

Обратите внимание, что под диалогом подразумеваются только имена персонажей и реплики, тогда как сценарий — это диалог плюс указания по сцене. Я объясню все это подробно далее.

Я начал с модели GPT-J [5], варианта GPT-3 с открытым исходным кодом [6]. Ранее GPT-J обучался на обширной коллекции текстовых данных из Интернета под названием The Pile [7].

Я настроил GPT-J с более чем 38 000 обучающих записей в течение 20 часов в Google Colab, чтобы создать свою модель GreenLIT. После тонкой настройки я использовал следующую текстовую подсказку в качестве ввода.

GENRE: crime drama
THEME: cryptocurrency

Из этой подсказки модель GreenLIT сгенерировала следующие заголовки и сводки сюжетов:

#1. TITLE: Bitcoin Heist
SUMMARY: Two young men embark on a heist that could be the start of a new revolution.
#2. TITLE: Satoshi's Daughter
SUMMARY: A crime drama about a woman who inherits a cryptocurrency fortune.
#3. TITLE: The Dark Web
SUMMARY: The story of two brothers who join the underground Bitcoin economy.
#4. TITLE: Cryptostorm
SUMMARY: Cryptostorm revolves around the story of a young man who has been trying to keep his life on track after being sent to
prison for a crime he didn't commit.
#5. TITLE: The Cypher
SUMMARY: A young hacker joins a group of underground hackers to create a secure platform.

Я выбрал № 3, The Dark Web, из этого списка и отправил заголовок и резюме обратно в GreenLIT, чтобы создать первую страницу сценария. Вот.

TITLE: The Dark Web
SUMMARY: The story of two brothers who join the underground Bitcoin economy.
SCRIPT:
[Scene: The living room of the house, the door opens and the brothers come in. They are both dressed in black, have their hoods up.]
LEO - Okay, we did it! We hit the mother lode!
DREW - We hit the mother lode?
LEO - Yeah!
DREW - How much is in here?
LEO - Six hundred and forty dollars worth.
DREW - (To himself) Well, that's better thaan nothing.
LEO - The bitcoins are untraceable.
DREW - The bitcoins?
LEO - Yeah, the Bitcoin is basically just a name for a cryptographic currency.
DREW - A cryptographic currency?
LEO - Yeah, like, a secure, internet way of transferring money from one person to another.
DREW - Sounds like they invented the internet.
LEO - Well, the internet is just a network of computers connected to other computers by phone lines, but the internet is also the thing that makes it possible to transfer money from one computer to another without a bank.
DREW - Oh, yeah?
LEO - Yeah.
DREW - How do you do that?
LEO - Well, it's actually really complicated, and I don't understand it myself, but the short version is that the Bitcoin is run by a bunch of computers all connected to each other. It's kind of like a decentralized Ponzi scheme.
DREW - A decentralized Ponzi scheme?
LEO - Yeah, you know, like the government runs a Ponzi scheme.

Хорошо, интересно. Сценарий, кажется, с юмором объясняет основы криптовалюты и немного развивает персонажей. И с щепоткой социального комментария. Подождите секунду, пока я позвоню своему агенту. 😉

Вы можете бесплатно ознакомиться с GreenLIT здесь в Google Colab. И обязательно ознакомьтесь с дополнительными примерами вывода в приложении ниже.

Сведения о системе

В следующих разделах я подробно расскажу о компонентах и ​​процессах, используемых в GreenLIT. Я начну с обсуждения метода обучения нейронных сетей, известного как многозадачное обучение.

Многозадачное обучение

У меня было две основные цели для проекта GreenLIT: (A) создать заголовки и краткое изложение сюжета новых шоу с учетом жанра и темы и (B) создать первую страницу сценария с заданным названием и кратким изложением сюжета. Хотя точная настройка двух специализированных моделей ИИ сработает, я хотел посмотреть, сможет ли одна точно настроенная модель выполнить обе задачи. Это будет иметь несколько преимуществ. Как я обнаружил в своем проекте Deep Haiku, точная настройка одной модели для нескольких, но похожих задач, известная как многозадачное обучение, может улучшить результаты обеих задач. Рич Каруна изучал эту технику [10] в Карнеги-Меллон.

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

Чтобы объяснить, как работает многозадачное обучение, Александр Гончар описывает концепцию, называемую перепроверка выбора признаков в своей статье здесь. Он говорит: Если одна функция важна для более чем одной задачи, то, скорее всего, эта функция действительно очень важна и репрезентативна для ваших данных и будет усилена системой во время многозадачного обучения.

Другим преимуществом является практическая эффективность — для выполнения обеих задач необходимо загрузить только одну модель ИИ. Использование одной модели сокращает дисковое пространство, время загрузки и память графического процессора.

Далее я расскажу, как я собирал обучающие данные для проекта.

Сбор данных о тренировках

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

Сбор сюжетов фильмов

На Kaggle, где размещены многочисленные наборы данных, я нашел большой список резюме сюжетов фильмов Рунака Баника под названием Набор данных фильмов. Он содержит названия, годы выпуска, жанры, краткое содержание и т. д. для более чем 40 000 фильмов. Он выпустил набор данных под лицензией CC0 (общественное достояние). Вот пример из 5 записей.

Я использовал модуль под названием KeyBERT [9] для извлечения тем из резюме. Вы можете увидеть мой код Python здесь.

Очередную сборник наборов данных я нашел на Kaggle от Shivam Bansal. Он собрал резюме около 20 тысяч потоковых шоу на Netflix, Amazon, Hulu и Disney+. Вот образец данных.

Я снова использовал KeyBERT, чтобы захватить темы из резюме потоковых шоу.

Чтобы научить GPT-J создавать заголовки и резюме из жанров и тем, я создаю запись, подобную этой, для каждого фильма и телешоу.

GENRE: action science fiction
THEME: saving the world
TITLE: The Matrix
SUMMARY: Set in the 22nd century, The Matrix tells the story of a computer hacker who joins a group of underground insurgents fighting the vast and powerful computers who now rule the earth.
GENRE: comedy sitcom
THEME: workplace comedy
TITLE: 30 Rock
SUMMARY: The life of the head writer at a late-night television variety show. From the creator and stars of SNL comes this workplace comedy. A brash network executive bullies head writer Liz Lemon into hiring an unstable movie star.

Сбор сценариев фильмов и телепередач

Затем я искал наборы данных сценариев. Цитируя Лео из The Dark Web, «я попал в самую точку», когда нашел ConvoKit из Корнелла. Официальное название наборов данных коллекции — Cornell Conversational Analysis Toolkit [1], выпущенный под лицензией MIT с открытым исходным кодом.

[ConvoKit] содержит инструменты для извлечения диалоговых функций и анализа социальных явлений в разговорах с использованием единого унифицированного интерфейса, вдохновленного (и совместимого) с scikit-learn. Несколько больших наборов разговорных данных включены вместе со сценариями, иллюстрирующими использование инструментария в этих наборах данных. — Джонатан П. Чанг и др.

Я использовал диалог из двух наборов данных в ConvoKit для точной настройки GreenLIT. Вот описания наборов данных с их сайта.

  • Cornell Movie-Dialogs Corpus — большая коллекция вымышленных диалогов, богатая метаданными, извлеченная из необработанных сценариев фильмов. (220 579 диалогов между 10 292 парами киногероев в 617 фильмах).
  • Корпус друзей — сборник всех разговоров, произошедших за десять сезонов популярного американского телесериала «Друзья» 1990-х годов.

Вот фрагмент диалога в отеле «Руанда» из Корнеллского корпуса диалогов о фильмах.

PAUL - What's wrong?
ZOZO - Beg your pardon sir, you are Hutu. You are safe there.
PAUL - You are with me, Zozo, don't worry.
ZOZO - What is it like to fly on a plane, sir?
PAUL - It depends where you sit Zozo. In coach it is like the bus to Giterama.
ZOZO - That is why they call it coach?
PAUL - Maybe. But in business class there are fine wines, linens, Belgian chocolates.
ZOZO - You have taken business class?
PAUL - Many times.
PAUL - I will try my best George but these days I have no time for rallies or politics.
GEORGE - Politics is power, Paul. And money.Gathering TV Scriptss

А вот фрагмент сценария из Корпуса друзей, действие которого происходит в любимой кофейне банды, Central Perk.

SCRIPT:
[Scene, Central Perk]
MONICA - There's nothing to tell! He's just some guy I work with!
JOEY - C'mon, you're going out with the guy! There's gotta be something wrong with him!
CHANDLER - All right Joey, be nice. So does he have a hump? A hump and a hairpiece?
PHOEBE - Wait, does he eat chalk?
(They all stare, bemused.)
PHOEBE - Just, 'cause, I don't want her to go through what I went through with Carl- oh!
MONICA - Okay, everybody relax. This is not even a date. It's just two people going out to dinner and- not having sex.
CHANDLER - Sounds like a date to me.

Добавление сценических указаний

Обратите внимание, что, в отличие от сценария «Друзей», в сценарии «Отеля «Руанда»» нет никаких сценических постановок. Просто есть диалог.

Чтобы научить модель GreenLIT добавлять сценические указания, я создал набор сценариев из «Друзей» только с диалоговым окном, показанным ниже, за которым следует сценарий. Эти обучающие записи состоят из: «ДИАЛОГ:» + строки + «СЦЕНАРИЙ:» + строки с ремарками.

DIALOG:
MONICA - There's nothing to tell! He's just some guy I work with!
JOEY - C'mon, you're going out with the guy! There's gotta be something wrong with him!
CHANDLER - All right Joey, be nice. So does he have a hump? A hump and a hairpiece?
PHOEBE - Wait, does he eat chalk?
PHOEBE - Just, 'cause, I don't want her to go through what I went through with Carl- oh!
MONICA - Okay, everybody relax. This is not even a date. It's just two people going out to dinner and- not having sex.
CHANDLER - Sounds like a date to me.

После тонкой настройки, если я закончу приглашение «… ДИАЛОГ:», он создаст просто диалог. Но если я закончу подсказку «… СЦЕНАРИЙ:», он будет знать, что нужно создать диалог с указаниями сцены. Это многозадачное обучение в действии!

Далее я расскажу, как решил проблему с повторяющимися именами персонажей в сгенерированных скриптах.

Разнообразие имен персонажей

После некоторых первоначальных экспериментов я заметил, что включение сценариев «Друзья» в обучающий набор данных приводит к тому, что модель часто использует имена шести центральных персонажей. Например, система будет создавать исторические произведения, действие которых происходит в 18 веке, с персонажами по имени Джоуи, Фиби и Чендлер.

Чтобы разнообразить имена персонажей, я поменял местами имена персонажей для каждого из 236 эпизодов Друзей. Я использовал список имен, собранный Управлением социального обеспечения США.

Например, показанный выше скрипт использовал эти имена символов для обучающих данных:

Росс → Лукас
Чендлер → Антонио
Джоуи → Эдди
Рэйчел → Шарлотта
Фиби → Стелла
Моника → Люциана

Я также заменил все ссылки на «Центральную кофейню» на «Кофейню», чтобы избавиться от «дружественности» сценариев. Вот модифицированный скрипт:

SCRIPT:
[Scene, Coffee Shop]
LUCIANA - There's nothing to tell! He's just some guy I work with!
EDDIE - C'mon, you're going out with the guy! There's gotta be something wrong with him!
ANTONIO - All right Eddie, be nice. So does he have a hump? A hump and a hairpiece?
STELLA - Wait, does he eat chalk?
(They all stare, bemused.)
STELLA - Just, 'cause, I don't want her to go through what I went through with Carl- oh!
LUCIANA - Okay, everybody relax. This is not even a date. It's just two people going out to dinner and- not having sex.
ANTONIO - Sounds like a date to me.

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

Сбор сводок сюжета для друзей

Поскольку набор данных ConvoKit не содержит сводок сюжетов, я взял сводки для всех эпизодов сериала «Друзья» из Википедии.

Исходный код для получения сводок находится здесь. Я снова использовал KeyBERT, чтобы получить ключевые слова для тем эпизодов.

Вот сводка данных, которые я собрал для обучения GPT-J.

После того, как я прошел все обучение, я начал тонкую настройку GPT-J для создания новых шоу и сценариев.

Тонкая настройка GPT-J

Подобно тому, что я делал в своем проекте Deep Haiku, я настроил GPT-J для обучения и выполнения всех четырех задач, необходимых для GreenLIT:

  1. Жанр и тема → Название и сюжет
  2. Название и сюжет → Диалог
  3. Название и сюжет → Сценарий
  4. Диалог → Скрипт

Модель GPT-J от Eleuther AI [5] соответствует размеру модели curie OpenAI, второй по величине модели GPT-3 [6]. Eleuther AI обучил модель на The Pile, обширном (800 ГБ) наборе данных разнообразного текста, используемого для языкового моделирования [7].

У Google Colabs есть только графические процессоры с 16 гигабайтами памяти, а GPT-J исчерпает память, если использовать его как есть. Чтобы запустить его в Colab, я преобразовал GPT-J 6-B с 32-битными параметрами в 8-битные, используя метод низкоранговой адаптации Эдварда Ху и др. в Microsoft [8]. Вы можете прочитать подробности на карточке модели Eleuther AI здесь.

Запуск системы

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

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

Например, я запустил систему с параметрами ЖАНР: криминальная комедия и ТЕМА: ограбление банка приятелем. Четыре из семи сгенерированных заголовков взяты из существующих шоу. Я пометил эти «дубликаты» звездочками в результатах ниже.

01 The Bank Heist Gang - A group of friends decides to do a bank heist before things go haywire.
02 *** The Bank Job - A group of ex-cons and petty criminals rob a bank in a small town. While carrying out the heist, they become involved in romantic entanglements, and the heist itself turns into a big, silly mess.
03 *** Buddy Buddy - The film opens with a young man who, while on a business trip, is robbed by his own bodyguard who is also the son of the man who owns the bank.
04 The Bumstead Affair - When a bank robbery goes awry, a group of young men decide to get rich quick by robbing the other robbers.
05 *** Get Shorty - Get Shorty is a crime comedy centered around three friends who get involved in a heist.
06 The Great American Caper - A man and his best friend have a scheme to rob a bank.
07 *** The Hustler - A Las Vegas bank robber attempts to double-cross the mob by holding up their own bank... and the movie changes into a slapstick comedy.

Я выбрал The Bumstead Affair из оригинальных названий, чтобы увидеть сгенерированный сценарий. Вот.

[Scene: All of the guys are in the basement where Trench is at the computer. The guys are discussing the upcoming robbery attempt.]
D'JACK - We're gonna hit the bank on Sunday. The place is closed on Sunday. The cops will never know.
TRENCH - Yeah, but...
D'JACK - But what?
TRENCH - What about the cameras?
D'JACK - The cameras are gonna be out.
(The guys are looking at the computer monitor)
D'JACK - And we'll make sure the alarm's gonna be out, too.
TRENCH - Yeah, but then...
D'JACK - Then what?
TRENCH - Then we'll be in the bank and we're gonna get rich?
D'JACK - Right, that's the goal.

Хорошо, это довольно просто. Но мне нравятся имена персонажей Тренч и Д’Джек. И мне также нравится включение сценических постановок.

Обсуждение результатов

Я играл с GreenLIT в течение недели или около того, и, похоже, он неплохо справляется с новыми идеями для шоу, даже несмотря на то, что он часто повторно использует названия. Обратите внимание, что добавление нового жанра и темы снижает репликацию.

Однако диалоги в сгенерированных скриптах кажутся мне несколько пресными. Хорошей новостью является то, что разговоры кажутся естественными, но содержание прозы часто довольно примитивно. Это может быть связано с тем, что все новые сценарии предназначены для сцены 1, страницы 1 шоу. И они прыгают прямо во вступительную экспозицию.

Дополнительные примеры сценариев см. в приложении.

Исходный код и Colabs

Весь исходный код этого проекта доступен на GitHub. Я выпустил исходный код под лицензией CC BY-SA.

Благодарности

Я хочу поблагодарить Дженнифер Лим и Оливера Стримпеля за помощь в этом проекте.

Рекомендации

[1] Джонатан П. Чанг, Калеб Чиам, Лие Фу, Эндрю Ван, Жюстин Чжан, Кристиан Данеску-Никулеску-Мизиль. 2020. ConvoKit: набор инструментов для анализа разговоров Материалы SIGDIAL.

[2] Р. Баник, Набор данных фильмов на Kaggle (2018)

[3] Википедия, Краткий обзор сюжета друзей

[4] С. Бансал, Потоковые фильмы и телешоу на Kaggle (2022)

[5] GPT-J, Mesh-Transformer-JAX: модельно-параллельная реализация языковой модели Transformer с помощью JAX (2021)

[6] GPT-3, Т. Б. Браун, Б. Манн, Н. Райдер, М. Суббиа, Дж. Каплан, П. Дхаривал, А. Нилакантан и др. Языковые модели — это немногие ученики (2020)

[7] Л. Гао и др., The Pile: набор данных разнородного текста объемом 800 ГБ для языкового моделирования (2020 г.)

[8] Р. Каруана, Многозадачное обучение (1997).

[9] М. Гротендорст, KeyBERT: минимальное извлечение ключевых слов с помощью BERT (2020 г.)

[10] Э. Ху и др., LoRA: низкоранговая адаптация больших языковых моделей (2021)

Приложение

Следующие сценарии для новых шоу были созданы с помощью GreenLIT. Я указал жанр и тему, и система сгенерировала от 5 до 10 заголовков и резюме. Затем я выбрал свой любимый, и система сгенерировала сценарии.

Робопокалипсис

GENRE: science fiction drama
THEME: robot uprising
TITLE: Robopocalypse
SUMMARY: Robopocalypse is a science fiction drama about a coming robot uprising, and the people left behind to survive it.
SCRIPT:
[Scene: A lab. Dr. Nathan Frost is looking at a robot on a cart. A technician is walking around the room, adjusting wires on the robot.]
FROST - What the hell is he doing?
TECHNICIAN - We're trying to figure that out. He's been giving us static for the last three hours.
FROST - Static?
TECHNICIAN - Yeah, like he's been transmitting.
FROST - What does he do?
TECHNICIAN - I've been running diagnostics on him, but there's nothing wrong.
FROST - Does he have a malfunction?
TECHNICIAN - We've tried every possible combination of switches, buttons, and dials, and nothing seems to work.
FROST - He's got to be controlled by a central computer. Who is he?
TECHNICIAN - He doesn't have a tag, like the other robots. He's supposed to be a model.
FROST - Where'd he come from?
TECHNICIAN - He looks like the others, except for the fact that he's a few hundred years ahead of the development schedule.
FROST - Well, he's ours now, so I guess we'll have to wait till he figures out what he's supposed to do.

Ночь стоит на месте

GENRE: thriller drama
THEME: cold war spy
TITLE: The Night Stands Still
SUMMARY: When a Russian defector arrives at the home of an American diplomat, he makes a startling confession, and the diplomat and the diplomat's wife are forced to hunt for a killer, and a traitor.
[Scene: The American embassy in Moscow. The diplomat, an older man, is sitting alone in his office. His wife enters.]
ROBERT - How are you doing?
SYLVIA- I'm not sure.
ROBERT- Oh.
ROBERT- The guy's in there. He's a Russian defector. He came here last night.
SYLVIA - What did he say?
ROBERT - Well, he's not exactly talking, but he has to be kept alive. And he's got something to tell us.
SYLVIA- What?
ROBERT - I don't know. He came in last night and made these phone calls.
SYLVIA - He's on the run.  I'm sorry.
ROBERT - It's not your fault, Sylvia.

Стоунер Хай

GENRE: stoner comedy
THEME: goofy friends smoke pot
TITLE: Stoner High
SUMMARY: A group of high school students try to save a local marijuana grow operation from a sheriff.
SCRIPT:
[Scene: A room at Stoner High. The school principal is looking at a report from the sheriff]
PRINCIPAL - What's going on, Sheriff?
JASON - The grower's name is Randy "Duke" Burdon. He's got a rap sheet a mile long. They found marijuana plants growing in his garage.
PRINCIPAL - Duke Burdon?
JASON - That's the guy.  He's been arrested for growing pot twice before, but he always gets off on a technicality.
PRINCIPAL - Are you sure that's him?
JASON - I know this guy.
PRINCIPAL - Okay. I'll find out what I can...
JASON - I don't think that's a good idea.
PRINCIPAL - Why not?
JASON - Because you're a principal. And because you're too old to party, and you don't need to be the target of a bunch of kids.
PRINCIPAL - I'm not going to let it happen.
JASON - And what if it does?
PRINCIPAL - I'll handle it.

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