Czy sequele są lepsze od pierwowzoru?
Autorzy: Justin Cheigh i Daisuke Yamada
Streszczenie: W tym artykule staramy się odpowiedzieć na pytanie, czy sequele są lepsze od pierwowzoru. W tym celu przeprowadzamy analizę sentymentu recenzji poszczególnych seriali filmowych. Chociaż trenowaliśmy na zbiorze danych kaggle zawierającym 50 000 recenzji filmów, będziemy również zeskrobywać recenzje filmów z IMDb przy użyciu biblioteki Selenium Pythona . Sprawdź nasze repozytorium GitHub i dziękujemy za przeczytanie!
Motywacja
Zastanawialiście się kiedyś, czy kontynuacje są rzeczywiście lepsze od oryginału? Tak… wszyscy tam byliśmy. W rzeczywistości odpowiedź na to wielowiekowe pytanie prześladuje nas przez całe moje życie. Przeszukiwaliśmy i szukaliśmy odpowiedzi. Standardowa teoria filmu nie dała konkretnych odpowiedzi. Językoznawstwo i teoria literatury nie do końca pasowały. Filozofia tylko zwiększyła zamieszanie. Zwróciliśmy się więc do ostatniej możliwej deski ratunku: nauki o danych. Po szybkim maratonie Kung Fu Panda zabraliśmy się do pracy.
Naszym planem było wytrenowanie modelu analizy nastrojów przy użyciu oznaczonych danych. Dzięki temu modelowi mogliśmy określić nastroje recenzji filmów z różnych seriali. Na tej podstawie moglibyśmy opracować heurystykę do pomiaru popularności każdego filmu, co pozwoliłoby nam porównać kontynuacje i oryginał.
Skrobanie i wstępne przetwarzanie danych
Na początek potrzebowaliśmy danych. Znaleźliśmy zestaw danych IMDb na kaggle zawierający 50 000 recenzji filmów, z których każda jest oznaczona jako pozytywna lub negatywna . Ten zestaw danych był idealny do trenowania binarnego modelu analizy nastrojów, ale potrzebowaliśmy również danych na temat recenzji filmów z różnych seriali.
Zdecydowaliśmy się pracować z 4 różnymi seriami: Harry Potter, Star Wars, Kung Fu Panda i Cars. Po znalezieniu recenzji/rankingów filmów na IMDb dla każdego filmu z każdej serii, zeskrobaliśmy dane za pomocą selenu. Zapisaliśmy te dane jako folder plików CSV (/reviews/original), z których każdy zawiera (co najmniej) recenzje filmów i powiązane oceny w postaci gwiazdek. Odtąd te oceny w postaci gwiazdek będziemy nazywać ocenami krytyków lub po prostu ocenami.
W przeciwieństwie do naszego zestawu danych szkoleniowych, w którym oznaczono wartości nastrojów ( nastroje pozytywne lub negatywne ), te recenzje miały rzeczywiste oceny określone przez krytyka ( 1–10 , gdzie 1 oznacza najgorszą, a 10 najlepszą). Potwierdzimy tę rozbieżność podczas naszej analizy później.
Model analizy nastrojów
Następnie przystąpiliśmy do trenowania naszego modelu analizy tonacji. Pierwszym krokiem jest zakodowanie recenzji w jakimś wektorze numerycznym. Naiwną metodą jest po prostu zakodowanie słów na gorąco. Prowadzi to jednak do ogromnego wektora wejściowego, w którym brakuje semantycznego zrozumienia słów (na przykład traktuje USA i Amerykę jako zupełnie różne).
Dlatego zdecydowaliśmy się na użycie warstwy osadzania słów. Osadzenia słów reprezentują słowa jako wektory liczbowe w sposób uwzględniający podobieństwo semantyczne . Na przykład synonimy mogą znajdować się „blisko” w przestrzeni wektorowej, a także możesz nauczyć się relacji semantycznych, jak poniżej:
W szczególności użyliśmy wstępnie przeszkolonego osadzania słów GloVe, aby zdefiniować warstwę osadzania w naszym modelu. Po zdefiniowaniu tej warstwy osadzania przystąpiliśmy do definiowania naszego modelu. W naszym podstawowym modelu zdecydowaliśmy się na dwukierunkowy LSTM (pamięć długoterminowa). LSTM to rodzaj powtarzających się sieci neuronowych (RNN) zaprojektowanych do obsługi długoterminowych zależności.
W tradycyjnych sieciach RNN często napotykamy problem zanikającego (lub eksplodującego) gradientu, ponieważ wymagamy wstecznej propagacji w czasie . LSTM rozwiązują ten problem, mając komórkę pamięci , która może kontrolować przepływ informacji. Mianowicie, są 3 bramki: bramka wejściowa (nowe informacje wchodzące do komórki), bramka zapominająca (ile informacji z bieżącej komórki jest zapomniana) i bramka wyjściowa (jaka część stanu komórki jest wykorzystywana do wytworzenia wyjścia LSTM ). Bramy te, reprezentowane przez aktywacje sigmoidalne, pozwalają na długoterminowe zależności. Poniżej możesz zobaczyć architekturę LSTM:
Dwukierunkowy LSTM opiera się na tej strukturze przy użyciu 2 LSTM, umożliwiając przepływ informacji w obu kierunkach. Innymi słowy, LSTM przechowuje informacje tylko z przeszłości, ale dwukierunkowe LSTM zachowują informacje zarówno z przeszłości, jak iz przyszłości. Dzięki temu sieć ma kontekst otaczających słów, a obraz jej architektury pokazano poniżej:
Wdrożyliśmy nasz dwukierunkowy LSTM w następujący sposób:
# define pre-trained embedding layer
pre_emb = Embedding(
input_dim=len(word_index)+1,
output_dim=seqlen,
weights=[embedding_matrix], # from GloVe embedding
input_length=seqlen,
trainable=True
)
with tf.device(device):
# define bidirectional LSTM
model = Sequential([
pre_emb, # embedding layer
Bidirectional(LSTM(128, return_sequences=True)),
Dropout(0.2),
Bidirectional(LSTM(64)),
Dropout(0.2),
Dense(128, activation='relu'),
Dropout(0.2),
Dense(1, activation="sigmoid") # binary classification
])
# compile
model.compile(
loss=BinaryCrossentropy(from_logits=True),
optimizer='adam',
metrics=['accuracy']
)
Po wytrenowaniu ten model uzyskał 86,9% dokładności na zestawie testowym, w porównaniu z 50% wartością bazową! Teraz, gdy mamy ten wyszkolony model, możemy go użyć w zeskrobanych recenzjach filmów. Wzięliśmy więc nasze zeskanowane pliki CSV i dodaliśmy kolumnę „Nastroje” , która zawierała 0 (negatywne) lub 1 (pozytywne) na podstawie prognozy nastrojów naszego modelu dotyczącej recenzji. Te pliki CSV zostały zapisane w katalogu /reviews/annotated.
Wyniki i analiza
Świetnie! Tak więc dla każdej recenzji każdego filmu z każdej serii mamy dwie informacje: prognozę nastrojów naszego modelu (0 lub 1) i rzeczywistą ocenę krytyków (1–10). Zdefiniujmy pewną notację. Napraw recenzję r . Niech M(r) będzie binarną prognozą nastrojów naszego modelu dla recenzji, a C(r) będzie rzeczywistą oceną krytyków filmu, którego dotyczy recenzja.
Jaki jest związek między M(r) i C(r) ? Cóż, recenzje z dobrymi ocenami powinny intuicyjnie mieć pozytywny sentyment, co sugeruje, że chcemy pozytywnej korelacji między M(r) a C(r). W rzeczywistości absolutnie idealnym przypadkiem jest następująca zależność (zakładając, że C(r) odzwierciedla bezwzględny lub obiektywny poziom satysfakcji):
Więc jaki jest rzeczywisty związek?
Rozbijmy te wątki. Każda kolumna reprezentuje film z jakiejś serii. Jako przykład będziemy pracować z skrajną lewą kolumną, reprezentującą pierwszy film o Harrym Potterze. Niech R będzie zbiorem zebranych recenzji tego filmu. Wtedy możemy zinterpretować fabułę w następujący sposób:
- Najwyższa liczba (7,7) to średnia ocena krytyków; formalnie średnia (C(R)).
- Liczba na czerwono to średnia ocen krytyków dla recenzji, które nasz model przewidywał jako pozytywne; formalnie średnia ({C(r) | r w R i M(r) = 1}).
- Liczba zaznaczona na niebiesko to średnia ocen krytyków dla recenzji, które nasz model przewidywał jako negatywne; formalnie średnia ({C(r) | r w R i M(r) = 0}).
Po obejrzeniu tego zdecydowaliśmy się dalej zbadać rozkład C(r) pogrupowany według M(r). Otrzymujemy następujące działki:
Na przykład wykres Pozytywny Harry Potter pokazuje rozkład ocen krytyków dla recenzji filmów o Harrym Potterze, które nasz model sklasyfikował jako zawierające pozytywne nastroje. Jak byśmy się spodziewali lub mieli nadzieję, że te działki będą wyglądać? Wróćmy do naszego idealnego równania relacji między M(r) i C(r). Mamy nadzieję, że wykresy pozytywne zawierają tylko recenzje z oceną > 5, a wykresy negatywne — tylko recenzje z oceną ≤ 5.
Chcielibyśmy przynajmniej pewnego wzrostu liczby recenzji wraz ze wzrostem oceny pozytywnej i odwrotnie w przypadku negatywnej. Wydaje się to prawdą w przypadku wykresów Pozytywnych, co wskazuje, że nasz model może dobrze klasyfikować pozytywnie ocenione recenzje. Jednak nie dotyczy to Negatywnego; nasz model nie może dobrze sklasyfikować negatywnie ocenianych recenzji.
To jest ciekawe. Jednym z możliwych wyjaśnień jest to, że pozytywne recenzje są bardziej jednoznaczne; mówią takie rzeczy jak „Ten film był świetny!”. Z drugiej strony, negatywnie ocenione recenzje mogą być nieco trudniejsze do rozszyfrowania. Rozważ następującą (fałszywą) recenzję: „Chociaż niektórzy mogą pokochać CGI i animacje w tym filmie, ja nie byłem fanem”. Jest to niezwykle trudny przypadek dla sieci neuronowej. Istnieją słowa takie jak „miłość” lub „fan”, które są powszechnie kojarzone z pozytywnym sentymentem, ale trzeba naprawdę zrozumieć kontekst, aby wiedzieć, że jest to negatywna recenzja.
To tylko potencjalna hipoteza. Aby lepiej zrozumieć, stworzyliśmy chmury słów dla każdego filmu, grupując je według pozytywnego/negatywnego nastawienia:
Zauważyliśmy tutaj kilka ważnych rzeczy. Po pierwsze, bardzo rozpowszechnione są bardzo przewidywalne słowa, takie jak „Harry Potter”, „książka”, „film”, „scena”, „film” i inne. Jednym z powodów jest to, że nasze osadzanie GloVe wykorzystywało stały korpus. Korzystne może być użycie warstwy osadzania słów, która była specyficzna dla naszego konkretnego korpusu. Chociaż staraliśmy się to wyjaśnić, umożliwiając trenowanie warstwy osadzania, być może mogliśmy również wypróbować inną metodę niż GloVe.
Słowa takie jak „dobry” widzimy również w pozytywnych i negatywnych chmurach słów, co potwierdza nasze problemy z klasyfikacją negatywnych recenzji. Świetnie! Teraz, gdy wykonaliśmy wizualizację danych i lepiej zrozumieliśmy nasz zbiór danych, chcemy zdefiniować pewną heurystykę H(m) , która pobiera film wejściowy m i zwraca wartość proporcjonalną do tego, jak bardzo ludzie lubią film.
Analiza heurystyczna i dalsza
Chcieliśmy, aby H(m) uwzględniało zarówno przewidywania naszego modelu, jak i rzeczywistą ocenę krytyków. Definiujemy H(m) w następujący sposób:
Najpierw ważymy liczbę pozytywnych ocen według średniej oceny pozytywnych ocen krytyków. Następnie bierzemy to i odejmujemy liczbę negatywnych ocen ważoną średnią oceną krytyków negatywnych recenzji. To dobra heurystyka, ale musimy pamiętać, że nasz model nie jest najlepszy w klasyfikowaniu negatywnych recenzji. Dlatego tak naprawdę nie dbamy o średnią ocenę negatywnych recenzji, co sprowadza naszą heurystykę do następującej:
Więc używając tej heurystyki, jakie są nasze wyniki? Dla każdej z czterech serii postanowiliśmy stworzyć po dwie fabuły. Pierwsza to średnia ocena krytyków a film , a druga to nasza heurystyka vs. film:
Zwróć uwagę, że podczas grupowania według serii wykres średniej oceny nie zmienia się zbytnio , co wskazuje, że wszystkie filmy z każdej serii są z grubsza postrzegane przez recenzentów na podobnym poziomie. Może to tylko wskazywać na osoby, które faktycznie publikują recenzje na tej stronie, i ich gotowość do wystawiania różnych ocen.
Właściwa fabuła wygląda dość losowo dla każdej serii. Zauważ, że rzeczywista liczba na osi Y jest dość nieistotna, ponieważ tak naprawdę liczy się ranking względny. Nie ma oczywistego trendu wzrostu lub spadku H(m) w miarę postępu serii. Wygląda na to, że oryginały są nieco bardziej popularne niż kontynuacja , choć zdecydowanie są od tego wyjątki (Gwiezdne Wojny).
Inną interesującą informacją jest to, że poza Harrym Potterem ostatni film jest najmniej lub najbardziej popularny według naszej heurystyki. Intuicyjnie ma to sens, ponieważ seria albo wstrzymuje produkcję z powodu braku popularności, albo kończy się na wysokim poziomie. Co więcej, nie dotyczy to Harry'ego Pottera, ponieważ zakończyły się one po zakończeniu książek.
Podsumowanie i przyszła praca
Świetnie! Nie znaleźliśmy wyraźnych trendów dotyczących gorszych lub lepszych sequeli niż oryginały, ale mieliśmy okazję zagłębić się w ten temat. Udało nam się prawidłowo wykorzystać osadzanie słów GloVe i wdrożyć dwukierunkowy LSTM. Ponadto byliśmy w stanie skutecznie zeskrobać dane i przeprowadzić analizę.
W przyszłości prawdopodobnie zbadalibyśmy bardziej skomplikowane modele NLP, takie jak transformatory. Jednak naszym największym problemem było zdefiniowanie dobrej heurystyki H(m). Trudno jednoznacznie stwierdzić, czy nasza heurystyka była dobra, czy nie, ale istnieją powody, by sugerować, że może jej brakować.
Załóżmy na przykład, że a_p jest stałe we wszystkich filmach dla niektórych seriali. Widzieliśmy z naszych działek, że nie jest to wielkie założenie. Wtedy nasza heurystyka redukuje się do H(m) = C * r_p -r_n , gdzie C = a_p jest stałe. Oznacza to, że recenzje krytyków są ledwie uwzględniane w naszej heurystyce, co jest problematyczne, ponieważ już wiemy, że nasz model nie jest najlepszy w klasyfikowaniu negatywnych recenzji.
Pomimo tych niepowodzeń, ogólnie był to naprawdę zabawny projekt! Dziękuje za przeczytanie!