Как настроить модель машинного обучения для создания телешоу и фильмов с новыми названиями, краткими описаниями сюжетов и сценариями.
В предыдущем посте я показал, как настроил 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:
- Жанр и тема → Название и сюжет
- Название и сюжет → Диалог
- Название и сюжет → Сценарий
- Диалог → Скрипт
Обратите внимание, что под диалогом подразумеваются только имена персонажей и реплики, тогда как сценарий — это диалог плюс указания по сцене. Я объясню все это подробно далее.
Я начал с модели 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:
- Жанр и тема → Название и сюжет
- Название и сюжет → Диалог
- Название и сюжет → Сценарий
- Диалог → Скрипт
Модель 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 долларов в месяц. Не члены могут читать только три заблокированных истории каждый месяц.