Ах, преди изгрев слънце. Преди триото е любимата ми трилогия на всички времена. Това е олицетворение на романтиката във филма, предадена от Джеси и Селин в целия й блясък. Този блог „няма да бъде пълен“ без поне една публикация за най-добрата любовна история на всички времена.

Така че нека започнем с един интересен изследователски въпрос. Имайки предвид диалог от филма, можем ли да определим кой го е казал: Джеси или Селин? Това е основно упражнение за двоична класификация. Трудната част е събирането и почистването на данните и след това обработката на текста във функции за машинно обучение.

Тъй като Джеси и Селин са много различни хора (т.е. те спорят и не са съгласни много), трябва да е така, че тяхното използване на думи и модели също трябва да са доста различни - и това е, което искаме да разберем с тази задача за класификация. Ще получим ли достатъчно добри резултати и ще можем ли да различим говорещия?

Източник на данни

За това упражнение ще използваме всички устни реплики от „Преди изгрев“ и „Преди залез“. Нека оставим преди полунощ за момента. Трудно ми е да изстържа и почистя диалоговия прозорец на последния. За първите два филма, сценариите са директно достъпни от Преди wiki. Използвах Beautiful Soup, за да „анализирам HTML“ и да върна кортежите на говорител-диалог. Сценарият на третия филм е наличен като PDF някъде из нета, но е много трудно да се обработи по подходящ начин.

Съхраних всички диалогови кортежи в един кадър с данни Pandas и филтрирах редовете, които имаха по-малко от три думи. Трябваше да направя това, защото „Здравей“ и „Добре, благодаря“ всъщност не са толкова отличителни и само биха добавили към шума в нашата задача за класификация.

Общо завърших с 1024 реда с равномерно разделение за Джеси и Селин. Съвпадение? не знам

Моделиране

Ще използваме проста невронна мрежа с предварителна връзка, изградена на Keras като наш класификационен модел. Първоначално се опитах да прекарам думите през слой за вграждане на Word2Vec, но разбрах, че всъщност няма много смисъл да го правя. Word2Vec кодира *семантичното* значение на текста, но това, което всъщност искаме да открием, е разликата в използването на думи, нещо много по-плитко. Ние не търсим толкова дълбоко в семантиката. Като такова просто представяне на торба с думи с униграма е достатъчно за тази задача. Вижте моята стара статия, за да разберете какво означава това.

Не искам да ви затормозявам с подробности относно избора на модел, но изпробвах двуслойни и трислойни мрежи при 10-кратно кръстосано валидиране. Най-добре представящата се беше трислойна мрежа с 32 скрити единици всяка. Също така поставих слой с отпадане 0,5 между първите два слоя, за да има някакво регулиране.

Резултати

Понастоящем най-добре представящият се модел е с 86% точност на обучение и 62% точност на теста средно за 10 пъти. Моделът очевидно не е чак толкова невероятен, но поне се справя по-добре от случайно предположение с 12%.

Можем да използваме модела, за да ни кажем дали някои невиждани преди реплики е по-вероятно да бъдат изречени от Джеси или Селин. Нека опитаме реплики от третия филм.

Така че нека опитаме:

Просто продължавай да се упражняваш на пиано, става ли?, Наистина си добър и те прекарват толкова много време в това твое училище… просто помни, че музиката всъщност е нещо, което ще използваш в живота си., Точно така, и не Не забравяйте — вие, искате тези сусамови неща, нали?, те са наистина добри.

Тази реплика е произнесена от Джеси. Моделът прогнозира 67% вероятност Джеси да е казал това.

Две котенца., Всеки път, всяка година две котки., Искам да кажа, че беше просто…, невероятно. Тогава един ден, бях на около,, 30 и обядвах с моя,, татко, спомнях си, споменах малката Клеопатра и той беше като -,, най-трудното нещо, което трябваше да направя, беше да убия тези сладки малки котенца'-,, и аз бях като КАКВО?,, Оказа се - чуйте това - понякога имаше до 7 котенца в това котило -

Тази е от Celine. Моделът предсказва Селин със 70% вероятност.

Ти си толкова изтъркан! Понякога съм просто като -,,”

От Селин, но моделът прогнозира Джеси с 52% вероятност.

Нека не си правим илюзии. Класификаторът все още е доста скапан в момента и има много неща, които можем да направим, за да го подобрим.

To Do

Е, не съм уверен, че ще успеем да постигнем *изключително висока* точност, като се има предвид, че разполагаме със сценарий само за максимум три филма, по които да тренираме. Трябва да уведомим Ричард Линклейтър, че имаме нужда от повече данни, така че той трябва да направи четвърти филм. 🙂

Е, какво можем да направим, за да подобрим резултатите си?

Първо, трябва да включим преди полунощ в нашите данни за обучение. Очевидно това ще подобри резултатите ни. В този момент колкото повече линии имаме, толкова по-добре.

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

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

Четвърто, можем да изпробваме различни ML алгоритми. Случайните гори са непараметрични модели, които исторически са се справяли много добре със задачите за двоична класификация. Защо не го изпробвате?

По отношение на „Before Sunrise“ като тема за наука за данни, има много възможни неща, върху които да работите! анализ на настроенията, моделиране на теми, динамични тенденции в думите. Вие го наречете. Всичко е много вълнуващо. Нека ги разгледаме всички в Data Meets Media.

Целият ми код и обработените данни могат да бъдат намерени в Github. Не забравяйте да ме последвате във Facebook и Twitter.

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