«Офис» был популярным сериалом более десяти лет. Шоу имело высокую популярность в течение 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 слов того, как, по ее мнению, звучит Майкл Скотт. По большей части это было бессвязно (хотя, возможно, это все-таки указывает на Майкла Скотта), но были и интересные моменты.

Эй, Дуайт. Я переоденусь, чтобы увидеть тебя. Я собираюсь поговорить со всеми вами сегодня. Так что ребенка не будет. Я хочу иметь секрет. Я видел это, я хочу, чтобы вы взяли фан для состояний партии, это карты, и я провел офис. Это мой друг, и я думаю, что это хорошо. Это хорошо Слава Богу. Эй, эй, она на пути к завершению. Я не понимаю, что он реалити машины и что делать этого не надо. Мне нужно добраться до ребят. Я думаю, что я должен был быть складом. Предполагается, что Майкл Скотт Пэм лучше. Хорошо ли это? Что, черт возьми, сердце не имеет никакого смысла.

Хотя в основном это бессвязно, в нем определенно есть некоторые фразы, которые звучат близко к тому, что сказал бы Майкл.

Так что, возможно, прямо сейчас ИИ не может воспроизвести Майкла Скотта. Однако, учитывая, что это только первый проход с довольно быстрым методом обучения модели, кажется, что более тщательный метод может дать результаты, более близкие к тому, что мы искали.