«Офис» был популярным сериалом более десяти лет. Шоу имело высокую популярность в течение 9 сезонов в эфире, и новая волна популярности пришла после того, как оно прекратилось благодаря Netflix.
Майкл Скотт был уникальным и любимым телевизионным персонажем в сердцах многих людей. Майкл Скотт был другим — и когда он
Оставшись ближе к концу сериала, люди были опустошены тем, что одного из их любимых персонажей больше нет в сериале, и вызвали эмоциональную реакцию многих фанатов. Именно из-за того, насколько культовым является Майкл Скотт, я решил, что он будет отличным кандидатом для подражания ИИ. В частности, я хочу знать, может ли модель ИИ генерировать письменную речь в стиле Майкла Скотта.
Прежде чем перейти непосредственно к работе с ИИ, давайте немного изучим, как говорит Майкл и как его язык изменился в течение семи сезонов «Офиса», в котором он был.
Мне удалось получить данные по каждой произнесенной строке из The Office на Reddit, предоставленные u/misunderstoodpoetry. Я импортировал данные в R для исследования. Первые несколько строк данных выглядят следующим образом:
Очистка и формирование
Первым шагом каждого проекта по науке о данных является очистка данных. В этом случае требуется минимальная очистка. Я удалил несколько ненужных столбцов id, deleted
и удалил текст в скобках из столбца line_text
. Пример этого показан в строке 6.
office_cleaned <- office_df %>% select(-c(id, deleted)) %>% mutate(line_text = str_replace_all(line_text, "\\[.+?\\]", ""))
Затем я хотел свернуть все сказанные строки, чтобы их можно было маркировать (формировать по одному слову в строке) позже. На случай, если позже я захочу просмотреть несколько персонажей по сезонам, я сгруппировала данные по говорящим и сезонам. Но, поскольку в данный момент нас интересует только Майкл Скотт, мы можем отфильтровать строки, произнесенные только им:
office_grouped <- office_cleaned %>% group_by(season, speaker) %>% summarise(text = paste(line_text, collapse = " ")) #Filter to just Michael office_michael <- office_grouped %>% filter(speaker == "Michael")
Наконец, мы можем использовать пакет tidytext
для дальнейшей очистки данных, токенизации и удаления стоп-слов. Я также добавил несколько пользовательских стоп-слов после того, как увидел, что в списке стоп-слов в tidytext
пропущено несколько бессмысленных слов, которые часто произносит Майкл Скотт (например, да, эй, гм). В этом случае я решил использовать 3 грамма вместо того, чтобы смотреть на отдельные слова.
michael_tokenized <- office_michael %>% ungroup() %>% unnest_tokens(word, text, token = "ngrams", n = 3) %>% filter(!word %in% stop_words_custom$word, str_detect(word, "[a-z]"))
Эволюция Майкла Скотта по временам года
Итак, как выглядит речь Майкла по сезонам и меняется ли она вообще?
Короткий рассказ — не очень. Давайте посмотрим на самые популярные триграммы, произнесенные Майклом за сезон:
Как мы видим, речь Майкла очень последовательна на протяжении всех его 7 сезонов. Его главные триграммы состоят в том, чтобы говорить о себе, просить других что-то сделать (что имеет смысл, учитывая его руководящую должность). Отсюда видно, что Майкл Скотт довольно эгоистичен.
Генерация текста
Теперь, когда мы получили некоторое представление о том, как говорит Майкл Скотт, мы можем взять весь его текст и передать его в нейронную сеть, чтобы посмотреть, сможет ли сеть вывести текст, который звучит так, как сказал бы наш дорогой Майкл Скотт.
Существует три основных типа нейронных сетей: многослойное восприятие (MLP), сверточные нейронные сети (CNN) и рекуррентные нейронные сети (RNN). Для этой задачи мы будем использовать RNN, потому что RNN способны изучать последовательности, например последовательности в речевых паттернах.
К сожалению, модели генерации текста требуют много времени для обучения и требуют системы с графическим процессором для ускорения процесса. К счастью, мне удалось найти короткий путь. Google Collab — отличный ресурс, предоставляющий среду для ноутбука без каких-либо требований к настройке. Он также имеет возможности графического процессора, которые ускоряют работу с этими типами моделей. Я также нашел полезную библиотеку Python textgenrnn
, которая упростила обучение модели и создание текста.
Спасибо Максу Вульфу (автору textgenrnn
) за предоставленный пакет, а также некоторый существующий код, который упростил мой первый этап создания текста.
Результаты
Итак, как прошел первый этап обучения модели и генерации текста? Результат модели выдал примерно 2000 слов того, как, по ее мнению, звучит Майкл Скотт. По большей части это было бессвязно (хотя, возможно, это все-таки указывает на Майкла Скотта), но были и интересные моменты.
Эй, Дуайт. Я переоденусь, чтобы увидеть тебя. Я собираюсь поговорить со всеми вами сегодня. Так что ребенка не будет. Я хочу иметь секрет. Я видел это, я хочу, чтобы вы взяли фан для состояний партии, это карты, и я провел офис. Это мой друг, и я думаю, что это хорошо. Это хорошо Слава Богу. Эй, эй, она на пути к завершению. Я не понимаю, что он реалити машины и что делать этого не надо. Мне нужно добраться до ребят. Я думаю, что я должен был быть складом. Предполагается, что Майкл Скотт Пэм лучше. Хорошо ли это? Что, черт возьми, сердце не имеет никакого смысла.
Хотя в основном это бессвязно, в нем определенно есть некоторые фразы, которые звучат близко к тому, что сказал бы Майкл.
Так что, возможно, прямо сейчас ИИ не может воспроизвести Майкла Скотта. Однако, учитывая, что это только первый проход с довольно быстрым методом обучения модели, кажется, что более тщательный метод может дать результаты, более близкие к тому, что мы искали.