• Ivan Kutil

Analýza emocí v oscarovém filmu Země nomádů pomocí Google Cloudu

A OSCARA získává film Země nomádů! 25. 4. jsme se dozvěděli jaký byl dle americké Akademie filmového umění a věd nejlepší film roku 2020.

Existuje plno indikátorů, podle kterých by se dal odhadnout nejlepší filmový snímek. Jedním z nich jsou bezpochyby emoce, které hrají ve filmu hlavní roli - jejich množství, rozložení či změna. Právě proto scénáristé využívají ty správné techniky tak, aby emoce zanechaly v divácích hluboký dojem i po skončení filmu. Demokratizace AI (či ML v tomto případě) vede k přístupnějším algoritmům, které dříve byly dostupné hlavně pro vědecké výzkumníky nebo firmy s velkými rozpočty. I díky tomu je oblast zpracování přirozeného jazyka (Natural Language Processing) přístupná téměř pro kohokoliv, kdo potřebuje analyzovat jazykovou syntaxi, identifikovat objekty v textu nebo právě k analýze emocí (sentimentu). Velké firmy jako Google, Microsoft či Amazon investují obrovské částky na vylepšení jejich algoritmů, které pak poskytují pro konzumaci formou služby, např. přes aplikační rozhraní (API).


Díky API tak můžeme jednoduše analyzovat texty. A protože filmové titulky tuto funkci splňují, můžeme z nich v čase zjistit, jak se v průběhu filmu mění emoce. Nejdříve si uložíme anglické titulky ze serveru OpenSubtitles ve formátu .srt.

Pak je nahrajeme přes webové rozhraní na Google Disk.



Poté vytvoříme nový Google Apps Script, který je vhodný pro automatizaci a prototypování aplikací. Vývoj, spuštění a případné nasazení probíhá komplet ve webovém prohlížeči, takže se nemusí nic instalovat.

Dále je potřeba vytvořit Google Cloud Platform (GCP) projekt, který slouží pro aktivaci a nastavení Google Cloud služeb. Výhodou Google Apps Scriptu je, že vám tento GCP projekt vytvoří automaticky spolu s Apps Scriptem.


Dále je nutné aktivovat Cloud Natural Language API, kam se budou posílat texty pro analýzu. Cena za využívání je nastavena za analyzovaný dokument s 1000 textovými znaky v rámci jednoho API dotazu. Měsíčně máte zdarma až 5000 dotazů, resp. 5000 dokumentů a každý s 1000 znaky. Poté se platí dle přiloženého ceníku. Takže po překročení bezplatného limitu budete platit $1 za 1000 dokumentů (každý s 1000 znaky).



Povolení API provedete v GCP Projektu v menu API & Services → Library → Cloud Natural Language API → Enable



Pro povolení po vás bude chtít Google přiřadit k GCP Projektu platební účet (Billing account) pro případ, že byste překročili bezplatné používání. Po založení navíc získáte kredit $300 po dobu 90 dní, pokud byste některý z limitů překročili (https://cloud.google.com/free/docs/gcp-free-tier). Pokud používáte Google Cloud služby a nechcete vkládat kreditní kartu, tak se můžete ozvat jednomu z českých Google partnerů (např. AppSatori).


Dále je potřeba získat API klíč, který identifikuje vaši aplikaci pro dotazování na API Endpoint. Ten získáte v nastavení v GCP Projektu → API & Services -> Credentials → Create credentials → API key. Pro použití na produkční verzi by bylo vhodné je nastavit i omezení (Application restrictions) jaké aplikace mohou API volat (např. HTTP referrer).


Tento API klíč uložíme jako proměnou “apiKey” do File → Project properties --> Script Properties, odkud ji budeme načítat v kódu.



Pozn. Google Apps Script má od 12/2020 staré a nové IDE rozhraní. V novém rozhraní (k dnešnímu datu 04/2021) nejde editovat Script Properties, tak se musíte přepnout do staršího IDE přes tlačítko (Use legacy editor).



Google Tabulky využijeme jako malou databázi, kam si budeme ukládat vstupní texty pro analýzu a výsledek. Abychom nemuseli analyzovat podtitulky po větách, ale po delších celcích, provedeme tzv. bucketing . Vytvoříme shluky textu v délce dvou minut a ty se budou analyzovat jako celek. Z těchto částí textu poté zjistíme, zda má tato část filmu spíš pozitivní nebo negativní sentiment. U dvouhodinového filmu těchto částí bude 60. <script src="https://gist.github.com/codeas/8a0edf18c8be1c02eef9e8592410a862.js"></script>


Dále dopíšeme funkci pro dotazování na API. Vezme se každý textový segment z filmu (tj. 2 minuty) a ten se pošle na Natural Language API. Vrátí se dvě vlastnosti - skóre (score) a důležitost (magnitude). V našem případě využijeme skóre, které je v intervalu <-1;1>. Čím více je číslo záporné, tím více jsou emoce negativní.


<script src="https://gist.github.com/codeas/3a5feae448ed59cc0f9cbdb8f2e0853e.js"></script>


Pak zbývá už jen dopsat hlavní funkci, která vezme připravená data (tj. 2 minutové textové segmenty), odešle na API a výsledek uloží do Google Tabulky, odkud lze vygenerovat grafy přes rozhraní.



Výsledkem je poté graf emocí v čase. Hezky je vidět stoupající trend pozitivních emocí během filmu (fialová čára).


Ve filmu jsou tři hlavní krize - kolem 20 minuty, 76 minuty a 100 minuty. Dále je zde důležitý prvek dramatu - katastrofa, kdy se radikálně změní děj. V posledních 10 minutách filmu se totiž skokově změní emoce z negativních na pozitivní a lze očekávat katarzi diváka až do konce filmu.



Blog