Ах, перед восходом солнца. Трио До — моя любимая трилогия всех времен. Это воплощение романтики в фильме, переданное Джесси и Селин во всей красе. Этот блог будет неполным без хотя бы одного поста о лучшей истории любви всех времен.

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

Поскольку Джесси и Селин — очень разные люди (т. е. они много спорят и не соглашаются), должно быть так, что их использование слов и модели поведения также должны быть совершенно разными — и это то, что мы хотим выяснить с помощью этой задачи классификации. Получим ли мы достаточно хорошие результаты и сможем ли мы различить говорящего?

Источник данных

В этом упражнении мы будем использовать все разговорные фразы из Перед восходом солнца и Перед закатом. Опустим на время Перед полуночью. Мне трудно очищать и очищать последний диалог. Для первых двух фильмов сценарии доступны напрямую из вики До. Я использовал Beautiful Soup для парсинга HTML и возврата кортежей говорящего и диалогового окна. Сценарий третьего фильма доступен где-то в сети в виде PDF-файла, но его действительно трудно обработать надлежащим образом.

Я сохранил все диалоговые кортежи в одном кадре данных Pandas и отфильтровал строки, содержащие менее трех слов. Мне пришлось сделать это, потому что «Привет» и «Хорошо, спасибо» на самом деле не такие уж отличительные и только добавили бы шума в нашей задаче классификации.

В общей сложности у меня получилось 1024 строки с равным разделением для Джесси и Селин. Стечение обстоятельств? Я не знаю.

Моделирование

В качестве модели классификации мы будем использовать простую нейронную сеть с прямой связью, построенную на базе Keras. Сначала я попытался передать слова через слой внедрения Word2Vec, но понял, что в этом нет особого смысла. Word2Vec кодирует *семантическое* значение текста, но на самом деле мы хотим обнаружить различие в использовании слов, что-то гораздо более поверхностное. Мы не ищем так глубоко в семантике. Таким образом, для этой задачи достаточно простого представления униграммы мешок слов. Прочтите мою старую статью, чтобы понять, что это значит.

Не хочу утомлять вас подробностями выбора модели, но я опробовал двух- и трехслойные сети с 10-кратной перекрестной проверкой. Наиболее эффективной была трехслойная сеть с 32 скрытыми элементами в каждом. Я также поместил слой с отсевом 0,5 между первыми двумя слоями, чтобы иметь некоторую регуляризацию.

Результаты

В настоящее время самая эффективная модель имеет точность обучения 86% и точность тестирования 62% в среднем по 10 раз. Модель, очевидно, не так уж и удивительна, но, по крайней мере, она работает лучше, чем случайное угадывание, на 12%.

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

Так давайте попробуем:

Просто продолжай заниматься на фортепиано, ладно?, Ты действительно хорош, и они проводят так много времени в твоей школе… просто помни, что на самом деле музыка — это то, что ты будешь использовать в своей жизни. не забудь — ты хочешь эти кунжутные штучки, верно? Они действительно хороши.

Эту строчку произносит Джесси. Модель предсказывает, что Джесси сказал это с вероятностью 67%.

Два котенка. Каждый раз, каждый год два кота. Я имею в виду, это было просто… потрясающе. Затем однажды, мне было 30, и я обедал со своим,, папой, я вспоминал, упомянул маленькую Клеопатру, и он такой -,, самое сложное, что мне приходилось делать, это убивать этих милых маленькие котята'-, и я такой ЧТО?,,оказывается- послушайте-было иногда,,до 7 котят в том помете-

Это от Селин. Модель предсказывает Селин с вероятностью 70%.

Ты такой банальный! Иногда я такой -,"

По Селин, но модель предсказывает Джесси с вероятностью 52%.

Давайте без иллюзий. На данный момент классификатор все еще довольно дерьмовый, и мы можем многое сделать для его улучшения.

To Do

Что ж, я не уверен, что мы сможем получить *чрезвычайно высокую* точность, учитывая, что у нас есть максимум сценарий трех фильмов для обучения. Мы должны сообщить Ричарду Линклейтеру, что нам нужно больше данных, поэтому он должен снять четвертый фильм. 🙂

Итак, что мы можем сделать, чтобы улучшить наши результаты?

Во-первых, мы должны включить Before Midnight в наши тренировочные данные. Очевидно, это улучшит наши результаты. На данный момент, чем больше у нас линий, тем лучше.

Во-вторых, мы можем включить биграммы в нашу модель мешка слов. Джесси и Селин могли использовать разные пары слов, и это могло отличить их друг от друга. Кто знает?

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

В-четвертых, мы можем попробовать разные алгоритмы машинного обучения. Случайные леса — это непараметрические модели, которые исторически очень хорошо справлялись с задачами бинарной классификации. Почему бы не попробовать?

Если говорить о Before Sunrise как о науке о данных, то здесь есть над чем поработать! анализ настроений, моделирование тем, динамические тренды слов. Вы называете это. Все это очень интересно. Давайте рассмотрим их все на Data Meets Media.

Весь мой код и обработанные данные можно найти на Github. Не забудьте подписаться на меня в Facebook и Twitter.

Первоначально опубликовано на datameetsmedia.com 31 марта 2018 г.