\chapter{Emoce}

Emoce procesy, které jsou vytvářeny jak psychicky, tak sociálně. Jejich zážitkovým jádrem jsou city, mají také ale složku fyziologickou, projevující se vegetativními (změna rychlosti srdečního tepu a dýchání) a motorickými reakcemi (mimika a gestikulace) \cite{Nakonecny2012}. 

Co z této definice plyne pro klasifikaci emocí v textu? To, že jsou to sociálně konstruované procesy, znamená, že nejsou dané od narození, ale člověk se je „učí” během socializace, a tedy různé sociální skupiny můžou používat stejné slova pro vyjádření různých emocí či přiřazovat těmto slovům různou emocionální intenzitu a~při kategorizaci textů dle emocí je nutné tedy dbát na kontext, ve kterém jsou tyto texty použity.

Druhou záležitostí je způsob, jakým jsou emoce projevovány. Podle populárně tradovaného psychologického mýtu tvoří slova, která používáme pouze 7~\% našich emocí, dalších 38~\% vyjádřeno pomocí tónu hlasu a jeho modulace, zbývajících 55~\% tvoří výraz tváře a gestikulace. Pokud by byl tento mýtus pravdivý, znamenalo by to, že detekovat emoce pouze z textu by bylo velice nepřesné až nemožné. Tento mýtus ovšem vznikl pouze z jednoho velmi specifického experimentu a nemůže být tedy vztahován na odlišné situace a sám autor se od jeho generalizace distancuje \cite{Vybiral2002}. 

\section{Rozdělení emocí}
Emoce se dle intenzity a délky trvání dělí do tří kategorií:

\begin{itemize}
\item afekt – velmi intenzivní krátkodobá emoce,
\item nálada – méně intenzivní dlouhodobější emoce,
\item vášeň – intenzivní a dlouhodobá emoce.
\end{itemize}

Dle typu se dělí na základní, které se vyskytují u všech národností a kultur (avšak jejich projevy mohou být odlišné), ale také u vyšších živočichů, a na vyšší (ty jsou evolučně starší). Mezi základní emoce se v psychologické literatuře uvádějí následující typy \cite{Nakonecny2012}: 

\begin{itemize}
\item Úzkost
\item Radost a štěstí
\item Smutek
\item Strach
\item Hněv
\item Pocit viny
\item Stud
\item Starost
\item Hnus
\item Lítost
\item Naděje
\item Empatie
\end{itemize}

Tento seznam však není konečný, neboť různí psychologové emoce kategorizují jinak a tedy tyto emoce nemají ustálené definice a záleží na každém člověku, do které kategorie by projevenou emoci zařadil. To ještě ovlivňuje tzv. emoční inteligence (schopnost zvládat své emoce a vcítit se do emocí ostatních), zda bude schopen tento člověk danou emoci vůbec zachytit.

\chapter{Předzpracování přirozeného textu}
\label{ch:predzpracovani}

Text můžeme považovat za vektor znaků. Samotné znaky však nenesou sémantický význam sami o sobě, a proto je potřeba tento vektor rozdělit na vyšší jazykové celky – slova a věty. S těmito celky můžeme dále pracovat, jako například doplnit slovům chybějící diakritiku, odstranit sémanticky nevýznamná slova, nebo slova převést na základní tvar u jazyků, které slova ohýbají.

V této kapitole jsou postupně rozebrány tyto postupy v pořadí, jimiž text postupně prochází. Tyto postupy je možné použít na jakýkoliv jazyk oddělující jednotlivá slova, jejich popis je však převážně zaměřen na češtinu.

\section{Lexikální analýza}
Základním problémem při práci s přirozeným jazykem je rozdělení textu na lingvisticky významné jednotky \cite{Dale2000}. 

Tento proces se nazývá segmentace textu a rozděluje se na rozlišení jednotlivých slov a vět. Proces rozdělení věty na slova se nazývá tokenizace (nebo také segmentace slov) a spočívá v nalezení hranice slov, tedy míst, kde dané slovo začíná a kde končí. Takto určené slovo se proto někdy označuje jako token. Segmentace vět má za cíl nalézt jednotky, které se skládají z jednoho nebo více slov a obdobně jako u~tokenizace hledá hranice začátku a konce věty. 

V praxi nemůžou oba procesy fungovat nezávisle na sobě, jelikož například tečka na konci zkratky \textit{Bc.} neoznačuje ukončení věty, ale náleží k tomuto slovu. Další komplikace nastává v případě, kdy zkratka zakončená tečkou leží na konci věty a~tečka tvoří jak hranici slova, tak hranici věty.  

Proces segmentace závisí na použitém korpusu (soubor textů určitého jazyka, někdy specificky zaměřený pouze na určitou oblast – například texty zákonů), tedy na typu zpracovávaných textů, neboť například při zpracování komentářů v diskusích pod zpravodajskými články či statusy a komentáře na sociálních sítích nebývají vždy dodržována gramatické pravidla a celý proces tedy musí být mnohem robustnější než například při zpracování textů novinových článků.

\subsection{Tokenizace slov v českém jazyce}
Pro rozdělení jednotlivých slov v česky psaném textu se používá mezera, odlišení jednotlivých slov by mohlo vypadat jako jednoduchý proces – proházet text znak po znaku a v případě nalezení znaku mezery označit předchozí znaky za znaky tokenu.  
Jak už ale bylo uvedeno výše, tento přístup vykazuje několik problémů: 

\begin{itemize}
\item Zkratky zakončené tečkou – v tomto případě by tečka měla náležet k tokenu, aby s ním bylo možné dále pracovat jako se zkratkou.
\item Složená slova – některé se nemusí oddělovat spojovníkem a je tedy otázka, zda ze složených slov oddělených spojovníkem vytvořit dva tokeny nebo je naopak spojit v jeden.
\item Čísla a data by měly být považováno za jeden token, i když jsou oddělena tečkami či čárkou.
\item Emotikony (smajlíky) – skládají se z několika znaků (většinou interpunkčních znamének) a musí zůstat zachovány jako jeden token, aby s nimi bylo možné dále pracovat, neboť právě pro emocionální analýzu jsou podstatné, protože vyjadřují emoci sami o sobě. 
\end{itemize}

\subsection{Segmentace vět v českém jazyce}
České věty bývají zakončeny jedním ze třech interpunkčních znamének: tečka zakončující oznamovací větu, vykřičník ukončují větu rozkazovací nebo zvolací a otazník označující větu tázací. Rozlišit jednotlivé věty ale opět není tak jednoduché:

\begin{itemize}
\item Jak již bylo uvedeno, tečka se používá taktéž pro ukončení zkratky, v řadových číslovkách či v češtině nesprávně, ale často jako desetinný oddělovač v číslech nebo pro odlišení tisíců v číslovkách.
\item Vykřičník se používá i uprostřed věty obklopen kulatými závorkami dávající důraz na předešlé slovo.
\item Samostatnou záležitostí je práce s přímou řečí nacházející se ve větě. Například zacházet s větou \textit{Zuzka volala: “Jakube! Jakube! Stůj!” a utíkala za ním.} jako s~jednou větou či ji rozdělit na více vět? Přímá řeč nevyjadřuje postoje autora, a proto by měla být pro potřeby emocionální analýzy označena, aby s ní bylo možné pracovat odlišně (například ji kompletně vypustit). Uvozovky se v textu používají navíc pro označení ironie, tedy přiřazují slovu jiný (opačný) význam, než má dané slovo samo o sobě (například věta \textit{Já miluji Zuzku} a \textit{Já „miluji” Zuzku} má slovo \textit{miluji} naprosto opačný význam). 
\end{itemize}

\section{Stop slova}
Stop slova jsou taková slova, která nenesou sémantický význam. Většinou se jedná o slova, která se v korpusu vyskytují nejčastěji, ale nemusí to platit pro každé slovo sémanticky nevýznamné (například málo používána spojka \textit{třebaže}) \cite{Feldman2007}. V češtině se převážně jedná o slovní druhy:

\begin{itemize}
\item spojky (ale, a, i, …),
\item předložky (v, k, u, ...),
\item zájmena (já, ty, on, ona, ono, …),
\item často používané slovesa (být, mít).
\end{itemize}

Odstraněním těchto slov z textu nejenom že dojde ke zjednodušení následujících procesů (sníží se celkový počet zpracovávaných slov), ale také může dojít ke zpřesnění výsledků následného zpracování, neboť například dva texty obsahující velké množství spojek by mohli být považovány za více podobné než v případě, kdy tyto spojky budou odstraněny.

Jelikož se ve většině případů jedná o neohebná slova (předložky, spojky) a není jich velké množství, je možné vytvořit ručně seznam těchto slov a odstraňovat je ještě před tím, než jsou slova převedena lematizátorem (viz níže) na jednotný tvar.

Druhý možný způsob je automaticky projít seznam všech slov v korpusu a odstranit například 10~\% nejpoužívanějších slov nebo pomocí metody tf-idf (term frequency-inverse document frequency, popsána níže) nalézt nejméně relevantní slova. U tohoto postupu ale může dojít k odstranění i slov nesoucích sémantický význam, avšak dle použitého algoritmu následného zpracování textů to nemusí znamenat žádnou překážku, neboť i tak by těmto často se vyskytujícím slovům přiřazoval nízký význam. 

Třetí nejjednodušší způsob je ignorovat všechna jednoznaková a dvouznaková slova.

Pro účely emocionální analýzy může být vhodné zachovat pouze tzv. NAVA slova (z anglického Noun – podstatné jména, Adjective – přídavné jména, Verb – slovesa a Adverb – příslovce), protože právě tato slova jsou nosiče emocí. K tomu však musíme znát slovní druh použitého slova, k čemuž slouží nástroje označované jako Part-of-speech tagging.

\section{Doplnění diakritiky}
Česká gramatika používá diakritická znaménka umístěná nad písmenky. Pokud zpracováváme texty pocházející z diskusí a sociálních sítí, kde uživatelé z historických důvodů nebo kvůli rychlejšímu psaní nepoužívají diakritiku, musíme ji doplnit, neboť poté by slova \textit{stastny} a \textit{šťastný} byly považovány za odlišné. Nejjednodušší řešení je odstranit diakritiku ze všech slov – i když by to vedlo ke spojení různých slov v~jedno (například slovo \textit{žebra} by bylo převedeno na slovo \textit{zebra}, které označuje zvíře), pro emocionální analýzu textu by to nemuselo mít podstatný vliv.

Pokud by v následném procesu byl použit lematizátor, pro slova bez diakritiky by nebyl nalezen základní slovní druh, a proto toto řešení není možné použít. Jedním z nejjednodušších řešení je použití slovníku pro kontrolu pravopisu, který obsahuje velkou část existujících slov včetně jejich ohnutých tvarů. V případě, že toto slovo neobsahuje diakritiku a není nalezeno ve slovníku, je vygenerováno slovo ve všech možných tvarech (například pro slovo \textit{caj} jsou vygenerována slova \textit{čaj}, \textit{cáj} a \textit{čáj}). Pokud je jedno z těchto slov nalezeno ve slovníku, je použito místo slova původního. Tento proces je však velmi náročný pro dlouhá slova bez diakritiky (například pro slovo \textit{nejnarocnejsi} bude vygenerováno celkem 4607 variant!) a navíc u některých slov může dojít k doplnění diakritiky na jiné slovo, než jaké by se v daném kontextu mělo nacházet (například u slova \textit{presne} nelze bez znalosti kontextu určit, zda se má doplnit na slovo \textit{přesně} nebo \textit{přesné}).

Druhou možností je vytvořit konečný automat vycházející z korpusu a najít slovo s diakritikou podle četnosti použití v použitém korpusu \cite{Rychly2012}. Tuto metodu používá například systém CzAccent vyvinutý na Masarykově univerzitě. Výhodou tohoto postupu je rychlejší nalezení kýženého slova a větší pravděpodobnost nalezení správného slova, neboť doplňuje nejčastěji používanou variantu slova. Stále však zůstává problém s doplňováním dle kontextu.

Třetí variantou je systém vycházející opět z korpusu, ale pracující s N-gramy, tedy například z dvojicí po sobě jdoucích slov. Při doplňování diakritiky by bylo možné vycházet z těchto dvojic a pokud by bylo v korpusu uvedena dvojce slov \textit{jíme žebra}, při doplňování diakritiky do dvojce slov \textit{jime zebra} by byl doplněn správný tvar slova \textit{žebra}. Nepodařilo se mi ovšem najít, zda by se tento systém pro doplňování diakritiky pro češtinu používal.

\section{Tvarosloví}
Gramatika českého jazyka a ostatních slovanských jazyků pracuje s ohýbáním slov (v menší míře se vyskytuje i v~angličtině a němčině), takže se v přirozeném textu nacházejí slovní tvary než přímo jednotlivá slova. Pokud na tento jev náležitě nezareagujeme, povede k odlišení slov se stejným významem pouze jinak ohnutá v důsledku kontextu věty. Například ve větách \textit{dobrý muž} a \textit{dobrá žena} vyjadřuje slovo \textit{dobrý} stejnou emoci, ovšem prostým porovnáním znaků slova by nedošlo k jejich propojení a při následném zpracování by byly považována za dvě odlišná slova. Naším cílem tedy je dosáhnout toho, aby různě ohnutá slova byla považována za stejná \cite{Strossa2011}.

\subsection{Morfologické nástroje}
V lingvistických disciplínách se pro popis slova používá tzv. morfů, ze kterých se jednotlivá slova skládají a nesou lexikální nebo gramatický význam.

\textbf{Lexikální morfy} nazýváme také jako kmeny slov. Tento morf zůstává u slova po odtržení všech gramatických morfů. Zjednodušeně řečeno se jedná o tu část slova, která zůstává stejná ve všech tvarech daného slova. Problémem je, že v češtině existují slova, která mají několik různých kmenů (například slovo dům má dva kmeny: \textit{dům} a \textit{dom-}). Lexikální morfy se ještě dělí na submorfy (odvozovací předpony, kořeny a odvozované přípony), která se ale používají spíše pro studium historického vývoje slov a pro počítačové zpracování přirozeného jazyka nemá velký význam, v~českém jazyce by je bylo ovšem možné použít pro hledání odvozených slovních druhů z jiného slovního druhu (například přídavného jména \textit{knižní} od podstatného jména \textit{kniha}). 

\textbf{Gramatické morfy} jsou nejmenší prvky slova, které nesou určitý gramatický význam. Dělí se na:
\begin{itemize}
\item koncovky,
\item gramatické předpony (například nej- vytvářející tvar třetího stupně u přídavných jmen a příslovcí),
\item infixy (prvky vkládané dovnitř kmene) a interfixy (posloupnosti hlásek prokládané mezi hlásky kmene) – v českém jazyce tyto morfy neexistují.
\end{itemize}

Jazyky, které odlišují různé tvary slov (jako čeština) můžeme rozdělit do dvou topologických tříd:

\begin{itemize}
\item \textbf{třída flexitivních jazyků}, ve kterých gramatické morfy kombinují více gramatických významů. Mezi tuto třídu jazyků patří i čeština, neboť například pádové koncovky v sobě neoddělitelně obsahují jak informaci o pádu i čísle. Pro počítačové zpracování jazyka je navíc důležité, že různé morfy mají stejný význam v závislosti na třídě slov (v češtině například koncovky vyjadřující 2.~pád jednotného čísla podle různých skloňovacích vzorů).
\item u \textbf{aglutinačních jazyků} naopak typicky jednotlivé gramatické morfy nesou jen jeden elementární gramatický význam. Mezi tyto jazyky patří například maďarština nebo finština.
\end{itemize}

Důležitou schopností jazyků je možnost skládat slova, která mají více plnohodnotných  lexikálních morfů, neboli kořenů. Tento systém skládání slov má nejvyvinutější němčina, v češtině je typický pro některá přídavná jména (například slovo \textit{rychloobrátkové}), v některých složitějších případech se v písmu tyto kmeny oddělují spojovníkem (například \textit{vědecko-technický}). 

\subsection{Práce s tvaroslovím}
Pro řešení problému s tvaroslovím můžeme zvolit dva základní nástroje – derivátor slovních tvarů a lemmatizátor.

\textbf{Derivátor} je algoritmus, který k danému slovu vygeneruje všechny možné gramatické tvary případně i odvozeniny. Například pro slovo \textit{počítač} by tento algoritmus vygeneroval tvary: \textit{počítač, počítače, počítači, počítači, počítačem.} V češtině se pro skloňování podstatných jmen používá 14 různých vzorů, pro přídavné jména jen vzory dva. Pokud bychom tedy dokázali zjistit, do které třídy slovo patří, vygenerovat všechny tvary přidáním správných koncovek podle příslušného vzoru se nejeví jako velký problém. Avšak slova s latinským původem, pomnožná podstatná jména a vlastní jména cizího původu se těmito vzory neřídí ve všech případech. Dalším problém komplikující skloňování je to, že u některých slov dochází při skloňování ke změně kmene (např. kořen slova \textit{dům} se v druhém pádě mění na \textit{dom-}). 

\textbf{Lematizátor} je v podstatě inverzní proces k derivátoru a tedy pro slovo v~jakékoliv podobě vrací základní (slovníkový) tvar, holý kmen (v anglické literatuře se pro tento nástroj častěji používá označení \textbf{stemmer}) nebo jen kořen slova. Jaký výstup lematizátoru je nejvhodnější záleží na způsobu použití a zpracovávanému jazyku. Při použití kmene slov v češtině je nejeví jako vhodné, neboť některé slova s různým významem mají stejné kmeny (slova past a pasta by tak byla považována za stejná) a některé slova nemají, jak již bylo uvedeno výše, pouze jeden kmen a~nastává tedy otázka, který kmen by měl lematizátor pro tyto slova vracet, a proto se spíše používá převod na základní tvar.

Dalšími možnými způsoby je porovnávání podobnosti slov se slovníkem základních tvarů. Ke zjištění zvukové podobnosti slov se používá metoda SOUNDEX, která je však vytvořena pro anglický jazyk a pro složitější češtinu by mnoho slov s odlišným významem bylo považováno za stejná. Další možností je převést dané slovo na trigramy (posloupnost tří po sobě jdoucích hlásek) a porovnání s míry podobnosti s~trigramy slov nacházejících se v~korpusu a přiřazovat k danému slovo další v~případě vysoké míry shody (obdobně jako derivátor). Pokusy s těmito metodami v anglickém jazyce ale nevedly k lepším výsledkům.

Pro detekci emocí v přirozeném textu je vhodné z uvedených nástrojů využít lematizátoru, neboť derivátor vstup derivátoru musí být slovo v základním tvaru, čehož není možné docílit v přirozených textech a navíc vede ke vzniku mnoha dalších slov, které by bylo nutné dále zpracovávat a měnit jejich váhu v závislosti na tom, kolik slov derivátor vygeneroval. 

U lematizátoru je ale třeba zvážit jeho výstup, jelikož lematizátor vracející lexikální morf (kmen) slova, jak už bylo uvedeno, by v českém jazyce vedl k problematickým výsledkům a speciálně pro použití v emoční analýze by například u~třetího stupně přídavných jmen odtrhl gramatickou předponu \textit{nej-}, která nese jinou emocionální informaci, než u slova bez této předpony. Lematizátor by tedy měl vracet základní tvar slova.

\chapter{Metody pro získávání emocí z dokumentu}
Mezi základní metody pro získávání emocí z textu dokumentu patří slovníkové metody pracující s vytvořeným slovníkem slov s přiřazenou emocí, lingvistické metody vycházející z pravidel gramatiky jazyka a strojové učení, které po natrénování modelu na korpusu je schopno automaticky určovat typ emoce nacházející se v textu \cite{gOc1FahCii7VyLA7}. 

Tyto metody se dělí na strojové učení s učitelem, kdy je model natrénován pomocí dokumentů s již určenou emocí (tedy správnou „odpovědí”) a model posléze pro nový neoznačený dokument vrací dle podobnosti s ostatními dokumenty nejpravděpodobnější emoci. Při použití strojových metod učení bez učitele naopak není potřeba mít data označena, ale tyto metody automaticky zpracují text, ve kterém naleznou podobnosti. Pro získání typu emoce v dokumentu je poté potřeba porovnat slova označující danou emoci s modelem.  

\section{Slovníkové metody}
\label{sec:slovnikove}
Při používání těchto metod se většinou využívá ručně vytvořených slovníků slov spolu s informací, jakou emoci tyto slova nesou. Vytvoření tohoto slovníku je zdlouhavá ruční práce, počet emocionálních kategorií je u těchto metod omezen vytvořeným slovníkem a nedokáže označit větu, které obsahuje emoce ovšem bez přímého uvedení slova tuto emoci nesoucí (například ve větě: \textit{Malý Petr dostal na Vánoce hodně dárků}). Dalším problémem je, že tyto metody pracují pouze s jednotlivými slovy bez ohledu na kontext, ve kterém jsou použity, což může ovlivnit typ vyjádřené emoce. Tyto slovníky existují například pro anglický jazyk, pro češtinu se mi nepodařilo žádný veřejně dostupný slovník nalézt.

\section{Lingvistické metody} 
Další z možných metod je porozumění lingvistických pravidel, kde se určení emoce využívá principu založeného na základě několika předpřipravených typech frází obvykle vyjadřující subjektivní význam. U těchto metod dochází k vytažení frází obsahující přídavná jména nebo příslovce, neboť významy ukázaly, že právě tyto slovní druhy jsou dobrými ukazateli toho, že daná fráze je subjektivní. Přesto však bez uvedení kontextu není možné určit orientaci emoce. Proto algoritmus vyjme z~fráze dvě po sobě jdoucí slova, kde jedno z nich je přídavné jméno nebo příslovce a druhé je slovo určující kontext. Tyto algoritmy pracují s tabulkou jaké slovní druhy, které se nacházejí za sebou, budou použity. 

Například algoritmus \cite{Turney2002} založený na této metodě vybírá mimo jiné slova podle vzoru, kdy první slovo musí být přídavné jméno a následující podstatné jméno v jednotném nebo množném čísle, což znamená, že z věty \textit{This camera produces beautiful pictures} vybere slova \textit{beautiful pictures}. V následujícím kroku dojde ke spočtení pravděpodobnosti pomocí metody PMI (pointwise mutual information), že se uvedené slovo nachází v korpusu blíž slovům \textit{excellent} nebo \textit{poor}, čímž je zjištěna orientace (kladná nebo záporná) tohoto slova.

Nevýhodou těchto metod je pracné vytvoření tabulky slovních druhů, která je navíc závislá na použitém jazyku (zatímco ve zmíněném algoritmu bylo pro angličtinu použito jen pět pravidel, pro složitější češtinu by jich muselo být více a byly by složitější) \cite{gOc1FahCii7VyLA7} . 

\section{Strojové učení s učitelem}
Strojové metody pro určení emoce většinou pracují s učitelem. Tento přístup však vyžaduje velké množství textu, které musel člověk ručně zařadit k příslušné emoci, kterou tento text vyjadřuje. Tento korpus se posléze použije k natrénování modelu (jako nejúčinnější se ukázala metoda SVM \cite{Pang2002}). Přestože dosahují dobrých výsledků, alespoň v češtině neexistuje žádná veřejná databáze, která by obsahovala text spolu s určenou emocí. Navíc databáze z jedné domény textů nebude dobře fungovat při použití na doménu jinou (například označená databáze pocházející z komentářů pod webovými zprávami bude odlišná od databáze vycházející z hodnocení produktů na e-shopu). 

Existují taktéž metody spojující slovníkové metody a strojového učení s učitelem. Slovníkové metoda se použije pro natrénování modelu a metoda poté dokáže určit, na rozdíl od přímé slovníkové, emoce i u textu, ve kterém se přímo nevyskytuje slovo uvedené ve slovníku.

\section{Strojové učení bez učitele}
\label{sec:bez-ucitele}

Tyto metody pracují s automatickou kategorizací textu dle použitých slov a jejich frekvence. Mezi ně patří metody sémantického modelování: latentní sémantická analýza (LSA), pravděpodobnostní LSA (pLSA) a latentní Dirichletova alokace (LDA). Metoda LDA bude použita pro emocionální analýzu v této práci a proto bude popsána blíže spolu s ostatními metodami, ze kterých principiálně  vychází. Princip těchto metod spočívá v tom, že slova nacházející se v dokumentech často spolu budou mít podobný význam bez ohledu na pozici, ve které se v textu nachází (tzv. bag-of-words). Používají se ale i jiné metody, například založené na Pointwise mutual information \cite{gOc1FahCii7VyLA7}. 

\chapter{Současné přístupy}
\label{ch:vyzkumy}
Klasifikace emocí pomocí metod strojového učení bez učitele byla použita již v~předchozích výzkumech. V této kapitole jsou popsány ty, jsou relevantní k této diplomové práci.

Článek Chenghua Lina a Yulana He \cite{Sowmiya2014} využívá pro určení emoce jimi vytvořenou metodu Joint Sentiment/Topic (JST) Model, která rozšiřuje vrstvu LDA o emocionální klasifikátor. Jedná se tedy o metodu strojového učení bez učitele, pro zvýšení účinnosti je možné použít seznam emocionálně zabarvených slov spolu s příslušnou kategorií. Tato metoda byla testována pro kategorizaci 2~000 hodnocení filmů do třech kategorií: pozitivní, neutrální a negativní. Bez využití seznamu emocionálně zabarvených slov byla přesnost v určení pozitivní nebo negativní emoce přibližně 60~\%, při použití různých seznamů slov byla přesnost až 84~\%. Autoři tuto metodu porovnávali s metodami založenými na SVM, která dosahovaly přesnosti až 90~\%.

Práce \cite{Waila2012} porovnává tři metody pro detekci emocí: dvě využívající učení s učitelem (Naïve Bayes a SVM) a metodu strojového učení bez učitele označovanou jako SO-PMI-IR. Tato metoda spočívá v extrakci předem určených slovních spojení z dokumentu dle slovních druhů u kterých je následně určeno, s jakou pravděpodobností se nachází v blízkosti slov „excellent” a nebo „poor” v dokumentech korpusu. Emoce celého dokumentu je následně zjištěna rozdílem pozitivních a negativních pravděpodobností nebo za využití metody sémantického modelování LSA (tato metoda je poté označována jako SO-LSA). Pro určení emoce slovního spojení je zapotřebí velkého korpusu, autoři ve své práci využili vyhledávač, který prohledával webové stránky. Tyto metody byly použity pro detekci pozitivní nebo negativní emoce na 2~000 dokumentech, přesnost Naïve Bayes byla 83~\%, SVM 79~\% a přesnost SO-PMI-IR 84~\%.

Hybridní metoda HDP-LDA (Hierarchical Dirichlet process-Latent Dirichlet Allocation) byla použita v článku \cite{Ding2013} a má vyřešit problém samostatné metody LDA, která nedokáže odlišit faktické a emocionální slova a větě přiřazuje jen jeden aspekt. Pomocí HDP je určen počet aspektů, které budou použity pro model LDA. Jedná se o podobnou metodu jako JST, neboť taktéž rozšiřuje funkci LDA, ale měla by poskytovat vyšší přesnost, jelikož umožňuje odlišit faktické a emocionální slova. Tato hypotéza se potvrdila i v experimentálních výsledcích, kdy byla metoda použita pro určení pozitivní, negativní nebo neutrální emoce v recenzích restaurací a byl využit seznam emocionálně zabarvených slov – pro použité korpusy HDP-LDA dosahovala vždy lepších výsledků než JST.

\chapter{Sémantické modelování}
\label{sec:modelovani}

Vstupem těchto metod je dokument, který byl předzpracován metodami uvedenými v~kapitole \ref{ch:predzpracovani}. Předzpracování přirozeného textu, tedy základní tvary slov po lematizaci. Pro každý dokument $ d  $ nacházející se v korpusu $ D $ je poté vytvořen vektor, který má délku jako seznam všech unikátních slov použitých v daném korpusu. Pokud se v tomto dokumentu dané slovo vyskytuje, je na pozici vektoru tohoto slova uvedena hodnota 1, v opačném případě 0. Z toho vyplývá, že tento vektor bude velmi řídký, neboť daný dokument bude obsahovat pouze několik slov nacházejících se v celém vektoru. Tyto vektory se následně skládají do matice $ \mathbf{A} $, kde každý řádek označuje dokument a každý sloupec slovo z korpusu \cite{Drusa2014}. 

Mějme tři dokumenty $ d_{n} $

\begin{eqnarray}
d_{1} &=& \mbox{Modré peří na zem padá padá padá neroztáva} \\
d_{2} &=& \mbox{Jako kámen k zemi padal jako krásný modrý kámen}\\
d_{3} &=& \mbox{Padá tam kde roste tráva modré modré peří sněží}
\end{eqnarray}

po provedení předzpracování vzniknou tři vektory $ d'_{n} $

\begin{eqnarray}
d'_{1} &=& ( \mbox{modré, peří, zem, padat, neroztávat} )  \\
d'_{2} &=& ( \mbox{kámen, zem, padat, krásný, modré} )\\
d'_{3} &=& ( \mbox{padat, růst, tráva, modré, peří, sněžit} )
\end{eqnarray}

seznam slov nacházejících se ve všech transformovaných dokumentech seřazených dle abecedy pak označíme jako 

\begin{equation}
\begin{split}
V =\mbox{ } & (\mbox{kámen, krásný, modré, neroztávat, padat,} \\ 
    & \mbox{peří, růst, sněžit, tráva, zem})
\end{split}
\end{equation}

výsledná reprezentace pak získá podobu tabulky \ref{tab:tabulka1}.

\begin{table}
  	\caption{Matice $ \mathbf{A} $ }
 	\label{tab:tabulka1}
	\begin{center}
	  \begin{tabular}{ l | ccc }
	    slovo & $ d'_{1} $ & $ d'_{2} $ & $ d'_{3} $ \\ \hline
	    kámen & 0 & 1 & 0 \\ 
	    krásný & 0 & 1 & 0 \\
	    modré & 1 & 1 & 1 \\
	    neroztávat & 1 & 0 & 0 \\
	    padat & 1 & 1 & 1 \\
	    peří & 1 & 0 & 1 \\
	    růst & 0 & 0 & 1 \\
	    sněžit & 0 & 0 & 1 \\
	    tráva & 0 & 0 & 1 \\
	    zem & 1 & 1 & 0 \\ 
	  \end{tabular}
	\end{center}
\end{table}

Místo prostého přiřazení hodnoty 1 při výskytu slova nebo 0 je vhodnější využít již dříve zmíněnou metodu tf-idf. Ta určuje, jaký je výskyt daného slovo v dokumentu relevantní vůči slovům v celém korpusu. Tato hodnota přímo úměrně narůstá s tím, jak často je použito v daném dokumentu, avšak je posunuto o to, jak toto slovo často použito v celém korpusu – takže jsou zvýhodněna slova specifická pro daný dokument a potlačena slova, která se vyskytují často ve většině textů. 

Výpočet této hodnoty je následující \cite{Manning20008}: Jako term frequency $ \mathrm{tf}(t, d) $ je považován počet výskytů slova $ t $ v dokumentu $ d $, tedy $ \mathrm{tf}(t, d) = \mathrm{f}(t, d) $. Existují ale i odlišné metody pro výpočet tf, jako například rozšířená frekvence, která bere ohled na délku dokumentu. V tom případě 

\begin{equation}
\mathrm{tf}(t,d) = 0.5 + \frac{0.5 \times \mathrm{f}(t, d)}{\max\{\mathrm{f}(w, d):w \in d\}}
\end{equation}

Inverse document frequency určuje, kolik informace dané slovo nese, tady jak často (tedy spíše jak málo) se vyskytuje ve všech dokumentech. Spočítá se jako

\begin{equation}
\mathrm{idf}(t, D) =  \log \frac{N}{|\{d \in D: t \in d\}|}
\end{equation}

kde:
\begin{itemize}
\item $ N $ značí délku korpusu
\item $ |\{d \in D: t \in d\}| $ je počet dokumentů $ d $ v korpusu $ D $, ve kterých se vyskytuje slovo $ t $
\end{itemize}

Výsledná hodnota vznikne vynásobením obou hodnot:

\mathchardef\mhyphen="2D
\begin{equation}
\mathrm{tf\mhyphen idf}(t,d,D) = \mathrm{tf}(t,d) \times \mathrm{idf}(t, D)
\end{equation}

U takto vytvořené matice můžeme spočítat podobnost dvou dokumentů (řádků) použitím kosinovy podobnosti pro tyto vektory výpočtem kosinu úhlu, které tyto vektory svírají. Jelikož tyto vektory vždy svírají úhel od 0 do 90 stupňů (hodnota po td-idf nemůže být záporná), je výsledná hodnota od 0 do 1, kde 1 značí stejný dokument \cite{Drusa2014}. 

\begin{equation}
\mathrm{podobnost}(A, B) = {A \cdot B \over \|A\| \|B\|} = \frac{ \sum\limits_{i=1}^{n}{A_i \times B_i} }{ \sqrt{\sum\limits_{i=1}^{n}{(A_i)^2}} \times \sqrt{\sum\limits_{i=1}^{n}{(B_i)^2}} }
\end{equation}

Nevýhodou tohoto přístupu je vysoký počet dimenzí (sloupců matice), které jsou z velké části prázdné. Prostor matice roste exponenciálně a rozdíly ve vzdálenostech klesají. Pro zmenšení velikosti můžeme vynechat ty dimenze, které jsou nenulové pouze v jednom nebo v několika málo dokumentech.

Výše uvedený postup je společný pro všechny tři následující metody sémantického modelování. Nyní bude popsáno, jak snížit počet dimenzí vytvořením témat, které tvoří skupina slov s podobným významem, kdy každému slovu je přiřazena určující míru příslušností slova k danému tématu. Důvod aplikace tohoto kroku je: 
\begin{itemize}
\item Další snížení prostoru matice, neboť práce s~velkou maticí je výpočetně a~paměťově náročná.
\item Snížení šumu, tedy odstranění slov, které se v dokumentech vyskytují jen sporadicky, čímž vznikne matice vhodnější pro další použití.
\item Dojde k nahrazení slov, které se opravdu v dokumentu vyskytují, skupinou slov se stejným významem či slov relevantních pro daný dokument.
\end{itemize}

\section{LSA}
Základem latentní sémantické analýzy (LSA, někdy též nazývána jako LSI – latentní sémantické indexování) je tzv. singular value decomposition (SVD). Matice $ \mathbf{A} $ je aproximována maticí s nízkou hodností $ \mathbf{A}’ $. 

Toho je dosaženo postupnou volbou os původního prostoru tak, aby byl zachován co největší rozptyl dat. Jde tedy o techniku nejmenších čtverců, která minimalizuje součet druhých mocnin změn. Nejdříve je třeba rozhodnout, kolik témat bude vytvořeno. Čím větší počet jich bude, tím jemnější rozdělení by se mělo vytvořit, avšak nebude možnost zachytit rozdíly u příbuzných témat \cite{Vejvoda2014}. 

Hlavní výhodou SVD pro použití v oblasti zpracování přirozeného jazyka je, že ignoruje rozptyl pod zadanou hranici pro silné snížení množství dat, ale zároveň zachovává hlavní závislosti. Vychází z principu lineární algebry, který určuje, že matice $ \mathbf{A} $ může být rozdělena do součinu tří matic – ortogonální matice $ \mathbf{U} $, diagonální matice $ \mathbf{S} $ a transpozice ortogonální matice $ \mathbf{V} $ \cite{Baker2005}: 

\begin{equation}
\mathbf{A} = \mathbf{U} \mathbf{S} \mathbf{V}^{T},
\end{equation}

kde:
\begin{itemize}
\item $ \mathbf{U}^{T} \mathbf{U} = \mathbf{I} $,
\item $ \mathbf{V}^{T} \mathbf{V} = \mathbf{I} $,
\item sloupce matice $ \mathbf{U} $ jsou ortogonální vlastní vektory $ \mathbf{A} \mathbf{A}^{T} $,
\item sloupce matice $ \mathbf{V} $ jsou ortogonální vlastní vektory $ \mathbf{A}^{T} \mathbf{A} $ a
\item $ \mathbf{S} $ je diagonální matice obsahující odmocniny vlastních čísel z matic $ \mathbf{U} $ nebo $ \mathbf{V} $ v sestupném pořadí.
\end{itemize}

Po tomto kroku řádky matice $ \mathbf{V} $ reprezentují jednotlivé dokumenty a podobnost jednotlivých dokumentů je možné určit porovnáním řádků v matici $ \mathbf{V} \mathbf{S} $. Obdobně jsou slova reprezentovány řádkovými vektory v matici $ \mathbf{U} $ a podobnost jednotlivých slov může být zjištěna porovnáním řádků v~matici $ \mathbf{U} \mathbf{S} $ \cite{Baker2005}. 

Pokud odstraníme triplet (pár vektorů z matice $ \mathbf{U} $ a $ \mathbf{V}^{T} $ s příslušnou hodnotu z~matice $ \mathbf{S} $) s~nejmenší singulární hodnotou, získáme nejlepší aproximaci matice s~nižší hodností $ \mathbf{A}’ $, kde

\begin{equation}
\Delta = \| \mathbf{A} - \mathbf{A}' \|_{2}
\end{equation}

je nejmenší \cite{Materna2014}. 

V tomto procesu se pokračuje, dokud není získán požadovaný počet témat (pro typické velké korpusy se jedná přibližně o odstranění 300 tripletů).

\section{pLSA}	
pLSA (pravděpodobnostní LSA, také známé pod označením Aspekt Model) je podobná metoda, která místo SVD používá statistické nástroje. Výhoda oproti LSA je ve stabilnějším matematickém základu a v dosahováních lepších výsledků.

\begin{figure}[ht]
\centering
\begin{tikzpicture}

  \node[obs]    (d)  {$d_{i}$};
  \node[latent, above=of d]    (Z)      {$Z_{i,j}$} ; 
  \node[obs, right=of Z]          (W)      {$W_{i,j}$} ; 

  \edge{Z}{W}
  \edge{d}{Z}

  \plate {plate1} { 
    (W) 
    (Z) 
  } {$N$}; 

  \plate {} { 
    (plate1) 
    (d) 
  } {$M$} ; 

\end{tikzpicture}
\caption{Model pLSA v PLATE notaci}
\end{figure}

Předpokládejme, že v korpusu chceme identifikovat témata $ z \in \{ z_{1}, z_{2}, ... z_{K} \} $. Taktéž předpokládejme, že s každým tématem $ z $ je spojeno rozdělení pravděpodobnosti přes všechna slova $ t \in \{ t_{1}, t_{2}, ... t_{M} \} $, která se v korpusu vyskytují. Hledáme tedy funkci, která pro každé téma $ z $ přiřazuje každému slovu ze slovníku jeho pravděpodobnost, tedy $ P (t | z) $. Dále obdobně předpokládejme, že pro každým dokumentem $ d \in \{ d_{1}, d_{2}, ... d_{N} \} $ z korpusu existuje funkce $ P (z | d) $, která udává pravděpodobnost výskytu tématu $ z $ v dokumentu. Spojením těchto dvou funkcí se poté pro určení pravděpodobnosti výskytu slova $ t $ v dokumentu $ d $ použije funkce \cite{Materna2011}: 

\begin{equation}
P(t|d) = \sum\limits_{k=1}^K P (t|z_{k},d) P(z_{k}|d) = \sum\limits_{k=1}^K P(t|z_{k}) P (z_{k}|d).
\end{equation}

Pravděpodobnost $ P(t|z,d) $ můžeme zjednodušit na $ P(t|z) $, neboť je důležité rozdělení pravděpodobnosti na globální úrovni, nezávislé na dokumentu.

Použitý model předpokládá, že slovo dokumentu je generováno právě z jednoho tématu a jsou na sobě navzájem v rámci tohoto dokumentu nezávislá. Z toho plyne pravděpodobnost dokumentu:

\begin{eqnarray}
P(d) &=& \prod_{m=1}^M P(t_{m}|d)^{c(t,d)} \\
\log(P(d)) &=& \sum\limits_{m=1}^M c(t_{m},d)\log(P(t_{m}|d)) 
\end{eqnarray} 

kde $ c(t,d) $ značí počet výskytů slova $ t $ v dokumentu $ d $. Celý výraz můžeme zjednodušit na logartimus pravděpodobnosti celého korpusu $ D $:

\begin{equation}
\log(P(D)) = \sum\limits_{n=1}^N \sum\limits_{m=1}^M c(t_{m},d_{n})\log(P(t_{m}|d_{n})).
\end{equation}

Stále však neznáme, jakým způsobem zjistit $ P (t | z) $ a $ P (z | d) $. Tyto pravděpodobnosti určíme pomocí metody založené na maximalizaci věrohodnosti dat. Pokud tyto neznámé označíme za $ X $, pak budeme hledat takové parametry $ X $, které maximalizují pravděpodobnost $ P(D|X) $. K tomu se používá například algoritmus Expectation-Maximization. Poté získáme pravděpodobnost $ P(z|d) $ pro libovolný dokument a téma. Pro každý dokument tedy bude existovat vektor témat, jehož složky budou určovat pravděpodobnost výskytu tématu v dokumentu.

Poté můžeme určit podobnost dvou dokumentů jako u LSA. Nevýhodou této metody je nemožnost predikce vektoru témat, které nebyly v trénovací množině a~náchylnost k přeučování. Oba tyto problémy řeší metoda LDA a proto se pLDA v~praxi nepoužívá \cite{Materna2011b}. 

\section{LDA}
\zkratka{lda} je metoda, která vychází z pLSA, avšak na rozdíl od ní předpokládá, že témata mají Dirichletovskou apriorní pravděpodobnost rozdělení \cite{Materna2011b}. 

\begin{figure}[ht]
\centering
\begin{tikzpicture}[x=1.7cm,y=1.8cm]

  % Nodes

  \node[obs]                   (X)      {$W_{i,j}$} ; %
  \node[latent, above=of X]    (T)      {$Z_{i,j}$} ; %
  \node[latent, above=of T]    (theta)  {$\theta_{i}$}; %
  \node[const, above=of theta] (atheta) {$\alpha$};


  % Factors
  \factor[above=of X]     {X-f}     {Multi} {} {} ; %
  \factor[above=of T]     {T-f}     {left:Multi} {} {} ; %
  \factor[above=of theta] {theta-f} {left:Dir} {} {} ; %

  % More nodes
  \node[latent, right=of X-f] (phi)  {$\phi_{k}$}; %
  \node[const, above=of phi]  (aphi) {$\beta$}; %

  \factor[above=of phi] {phi-f} {right:Dir} {} {} ; %

  \factoredge {theta}  {T-f}     {T} ; %
  \factoredge {atheta} {theta-f} {theta} ; %
  \factoredge {phi}    {X-f}     {X} ; %
  \factoredge {aphi}   {phi-f}   {phi} ; %

  \gate {X-gate} {(X-f)(X-f-caption)} {T}

  \plate {plate1} { %
    (X)(X-gate) %
    (T)(T-f)(T-f-caption) %
  } {$M$}; %
  \plate {} { %
    (plate1) %
    (theta)(theta-f)(theta-f-caption) %
  } {$N$} ; %
  \plate {} { %
    (phi)(phi-f)(phi-f-caption) %
  } {$K$} ; %

\end{tikzpicture}
\caption{Model LDA v PLATE notaci}
\end{figure}

Tato metoda vychází z binomického rozdělení pravděpodobnosti, které je definováno jako:

\begin{equation}
f(k|n,p) = {n\choose k}p^k(1-p)^{n-k}.
\end{equation}

V případě, že neznáme parametr $ p $, ale existuje jen představa, je možné jej modelovat pomocí dalšího rozdělení pravděpodobnosti. K tomu se používá tzv. beta rozdělení, jehož definice je následující:

\begin{equation}
f(p|\alpha,\beta) = \frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)\Gamma(\beta)}\, p^{\alpha-1}(1-p)^{\beta-1}.
\end{equation}

a jehož podoba se zásadně mění dle parametrů $ \alpha $ a $ \beta $. Binomické a beta rozdělení je definováno pouze pro dvourozměrný prostor, a protože \zkratka{lda} pracuje ve vícerozměrném prostoru, je třeba použít vícerozměrné varianty těchto funkcí. Vícerozměrná varianta binomického rozdělení se nazývá multinomické rozdělení (v matematickém zápisu označovaná jako \textit{Mul}) a vícerozměrná varianta beta rozdělení je Dirichletovo rozdělení (\textit{Dir}), od kterého získala tato metoda také svůj název.

Obdobně jako u pLSA při snaze získat určitý počet témat vyjádříme pravděpodobnost generování korpusu, a poté budeme hledat takové hodnoty parametrů, které tuto pravděpodobnost maximalizují. Na rozdíl od metody pLSA se však používají aproximativní metody jako například variační metody nebo Gibbsovo vzorkování. 

Výhodou \zkratka{lda} oproti pLSA je fixní počet parametrů, tedy není náchylná k přeučování a dosahuje lepších výsledků. Hlavní výhodou je však možnost odhadovat témata i pro nové dokumenty, které nebyly použity k trénování modelu.

\chapter{Praktická část}

Pro ověření možnosti klasifikovat texty dle emocí metodou bez učitele byla zvolena metoda \zkratka{lda}, která z analýzy možných metod vzešla jako dosahující nejlepších výsledků. Taktéž umožňuje generovat témata i pro dokumenty, které nebyly použity pro natrénování modelu, což je potřeba pro ověření účinnosti algoritmu.

Implementace, která je součástí přílohy \ref{cha:cd}, byla provedena dle zadání v programovacím jazyce Java a vycházela z implementace popsané v článku Hoffman, Blei, Bach: Online Learning for Latent Dirichlet Allocation \cite{Hoffman2010}. Její výhodou je, že parametry modelu upravuje přímo po zpracování jednoho dokumentu, nebo po zpracování minidávky (minibatches, omezují šum) a ne po dávkách, jako jiné metody, které provádějí několikanásobný průchod všemi dokumenty dokud nedojde ke konvergenci modelu. Tato výhoda se projeví v menší časové náročnosti trénování modelu a také tím, že není nutné udržovat zpracovávané dokumenty v~paměti a~po zpracování je ho možné z paměti odstranit. Z téhož článku vychází také implementace \zkratka{lda} použitá v knihovně Gensim \cite{Rehurek2010} pro jazyk Python, vůči které byla implementace vytvořená v této práci testována na správnou funkčnost.

V knihovně jsou využity mimo standardní knihovny jazyka Java také upravená třída \texttt{GammaDistribution} z matematické knihovny Math projektu Apache Commons, která slouží k výpočtu náhodných čísel dle rozdělení gama a je distribuována pod open-source licencí Apache a metoda \texttt{psi} počítající funkci digama $ \psi(x) $ z matematické knihovny Cephes napsanou v jazyce C a distribuovanou pod licencí BSD. Ostatní třídy a metody byly vytvořeny v rámci této diplomové práce.

\section{Trénovací a testovací data}
\label{sec:data}

Pro otestování funkce algoritmu byly použity dokumenty v českém jazyce rozdělené na dva korpusy:
\begin{itemize}
\item $ D_{train} $ – dokumenty určené  pro natrénování modulu.
\item $ D_{test} $ – dokumenty sloužící k~porovnání dokumentů s natrénovaným modelem.
\end{itemize}
Každý dokument se skládá z již předzpracovaných slov a je zařazen pod jednu z~následujících emocí:

\begin{itemize}
\item Afraid (znepokojení) – negaitnví
\item Anger (naštvání) – negativní
\item Neutral (neutrální)
\item Sadness (smutek) – negativní
\item Satisfaction (spokojenost) – pozitivní
\item Surprise (překvapení) – pozitivní
\end{itemize}

Počet dokumentů dle korpusu a emoce je uveden v tabulce \ref{tab:tabulka2}. Jedná se již o~předzpracované dokumenty, u kterých bylo provedeno odstranění stop slov a slova byla převedena na základní tvar. Soubory obsahují přímo jednotlivá slova oddělená mezerami, tudíž není třeba pro rozdělení dokumentů na jednotlivá slova (tokeny) používat složité tokenizátory. 

Trénovací dokumenty obsahují celkem 3~455 unikátních slov, testovací pak 2~894, z čehož však 1~509 není obsaženo v trénovací množině dokumentů, což znamená, že pro ověření funkce algoritmu je využito 1~385 slov.

\begin{table}
  \caption{Počet dokumentů v korpusu dle emoce}
 	\label{tab:tabulka2}
	\begin{center}
	  \begin{tabular}{ l | cccccc | c  }
	    Korpus & Afraid & Anger & Neutral & Sadness & Satisfaction & Surprise  & Celkem \\ \hline
	    $ D_{train} $ & 89 & 110 & 22 & 129 & 149 & 22 & 521   \\ 
	    $ D_{test} $ & 42 & 48 & 21 & 87 & 120 & 21 & 339   \\
	  \end{tabular}
	\end{center}
\end{table}

\section{Popis algoritmu}
\label{sec:algoritmus}

Program načítá dokument z korpusu $ D_{train} $, rozdělí jej na jednotlivá slova za pomoci třídy \texttt{java.util.StringTokenizer}. Tím vznikne obdobná matice, jako je uvedená v tabulce \ref{tab:tabulka1}. Jelikož by však byla většina buněk vyplněna nulami (jeden dokument z trénovací množiny obsahuje jen přibližně 15 unikátních slov z 3~455), je v implementaci použita datová struktura tzv. řídkého pole (spojový seznam) pro snížení paměťové náročnosti.

Na tuto matici je poté aplikována metoda pro tf-idf, tak jak je popsaná v kapitole \ref{sec:modelovani}. Následně je tato matice použita pro natrénování modelu LDA. 

Vstupními parametry metody jsou:
\begin{itemize}
\item matice skládající se z dokumentů a slov,
\item počet clusterů, do kterých mají být jednotlivé dokumenty zařazeny,
\item přesnost parametrů modelu (vyšší přesnost znamená zpomalení trénování),
\item počet dokumentů v tzv. minidávce (minibatch), v rámci níž neproběhne přepočet parametrů celého modelu (vyšší počet zvýší rychlost výpočtu a navíc může snížit „šum” modelu).
\end{itemize}

Výstupem metody je matice $ \mathbf{LDA}_{m,n} $, kde $ m $ značí počet unikátních slov v~korpusu a $ n $ počet clusterů, přičemž prvek této matice reprezentuje, s jakou „intenzitou” je slovo zastoupeno v určitém clusteru.

Jelikož se jedná o metodu učení bez učitele, model byl vytvořen na základě podobnosti dokumentů bez informace o tom, jakou emoci reprezentuje. K tomu slouží následující krok, ve kterém jsou dokumenty z korpusu $ D_{train} $ porovnávány s modelem. Výsledkem je informace o podobnosti (normovaná od 1 do 0) s jednotlivými clustery. S informací o podobnosti clusterů a emoci lze určit emoci clusteru a to pomocí různých metod, jejichž  popis a výsledná přesnost je uvedena v kapitole \ref{sec:metody}. 

V posledním kroku jsou načteny dokumenty z korpusu $ D_{test} $ a zpracovány obdobně jako dokumenty z $ D_{train} $ s tím rozdílem, že slova, která se nenacházela v~$ D_{train} $ jsou ignorována, jelikož nejsou obsažena ani v matici $ \mathbf{LDA}_{m,n} $, se kterou je dokument porovnáván. Výstupem porovnání je opět vzdálenost od jednotlivých clusterů a jelikož z předchozího kroku je známa informace o emoci, kterou vyjadřuje celý cluster, můžeme určit i emoci zpracovávaného dokumentu. 

Celý proces je zobrazen na schematu \ref{fig:schema}.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[trim=0cm 8cm 0cm 7cm,scale=0.7]{obrazky/graf}
  \end{center}
  \caption{Blokové schema funkce algoritmu}
  \label{fig:schema}
\end{figure}

\section{Metody pro získání emoce clusteru}
\label{sec:metody}

K získání těchto výsledků byla využita data popsaná v kapitole \ref{sec:data}. Parametry algoritmu byly nastaveny empiricky a to následovně:

\begin{itemize}
\item Počet clusterů: 6
\item Přestat počítat parametry dokumentu při změně menší než 1 \%
\item Velikost minidávky: 10
\end{itemize}

Po natrénování modelu bylo tedy vytvořeno 6 clusterů, v tabulce přílohy \ref{cha:tabulka} je uvedeno ke každém clusteru deset slov reprezentující cluster spolu s jejich normalizovanou intenzitou (součet intenzit všech slov v clusteru se rovná 1, v tabulce pro přehlednost uvedenou v procentech).

Vůči tomuto modelu byly do jednotlivých clusterů rozřazeny dokumenty z $ D_{train} $, počet dokumentů na základě emoce v clusteru je zobrazen v grafu \ref{fig:graf1}. Dokument byl vždy přiřazen ke clusteru, k~němuž měl nejnižší vzdálenost.

\begin{figure}[!h]
  \begin{center}
    \includegraphics{obrazky/Picture1}
  \end{center}
  \caption{Počet dokumentů náležící clusteru dle emoce}
  \label{fig:graf1}
\end{figure}

Jak bylo uvedeno v kapitole \ref{sec:algoritmus}, k tomu, abychom získali informaci o emoci z~korpusu $ D_{test} $, musíme znát, jakou emoci reprezentuje cluster, ke kterému dokument náleží. Jelikož známe také informaci o vzdálenosti dokumentu od clusteru, je možné využít více způsobů, jakými lze emoci clusteru spočítat.

\subsection{Maximální počet dokumentů}
Nejjednodušší možností je považovat emoci celého clusteru podle toho, které dokumenty se v něm nejčastěji vyskytují. Dokument byl vždy přiřazen ke clusteru, k~němuž měl nejnižší vzdálenost. Při použití této metody budou tedy emoce clusterů dle tabulky \ref{tab:tabulka3}.

\begin{table}
  \caption{Emoce clusteru při použití metody Maximální počet dokumentů}
 	\label{tab:tabulka3}
	\begin{center}
	  \begin{tabular}{ r|ll }
	    Cluster & Bez normalizace & S normalizací  \\ \hline
	    1 & Anger & Afraid \\
	    2 & Satisfaction & Neutral  \\
	    3 & Sadness & Afraid \\
	    4 & Anger &  Anger \\
	    5 & Afraid & Afraid \\
	    6 & Satisfaction & Suprise \\
	  \end{tabular}
	\end{center}
\end{table}

Nevýhoda této metody je zřejmá: potlačuje dokumenty s emocemi, které se v trénovací množině vyskytují s nižší intenzitou a taktéž celý cluster je reprezentován jen jednou emocí, i když by například obsahoval stejný počet dokumentů s rozdílnými emocemi.

První problém můžeme eliminovat využitím normalizace, která omezuje vliv dokumentů s emocemi, které se v $ D_{train} $ vyskytují častěji. Počet dokumentů v clusteru je vynásoben proměnnou $ k(e) $ podle vzorce \ref{ke}.

\begin{equation}
\label{ke}
k(e) = \frac{\sum D_{train}}{\sum d \in D_{train, e}}
\end{equation}

V tabulce \ref{tab:tabulka3} lze vidět, že nyní jsou sice ke clusterům přiřazeny i emocionální kategorie, které byly v korpusu $ D_{train} $ zastoupeny méně než ostatní, stále však přetrvává problém v tom, že některé emoce byly kompletně potlačeny.

\subsection{Procentuální zastoupení}
Další z možností je neposuzovat cluster jako jednoznačného zástupce určité kategorie, ale jako procentuální vyjádření reprezenzující, s jakou intenzitou cluster emoci reprezentuje. Graf \ref{fig:graf2} uvádí použití této metody bez normalizace, obdobně jako u~předchozí metody lze však použít i normalizovanou metodu.

%\begin{table}
%  \caption{Procentuální zastoupení emocí v clusterech}
% 	\label{tabulka2}
%	\begin{center}
%	  \begin{tabular}{ r|cccccc }
%	    Cluster & Afraid & Anger & Neutral & Sadness & Satisfaction & Surprise   \\ \hline
%	    1 & 29 & 30 & 0 & 26 & 13 & 0 \\
%	    2 & 12 & 8 & 7 & 25 & 41 & 6 \\
%	    3 & 25 & 35 & 2 & 27 &12 & 0 \\
%	    4 & 18 & 29 & 6 & 27 & 18 & 2 \\
%	    5 & 28 & 28 & 4 & 16 & 19 & 4 \\
%	    6 & 6 & 20 & 3 & 26 & 38 & 7 \\
%	  \end{tabular}
%	\end{center}
%\end{table}

\subsection{Vzdálost od clusteru}
Předchozí metody využívaly jen ty dokumenty, jejichž vzdálenost ke clusteru byla co nejmenší. Je možné však brát v úvahu i dokumenty vzdálené více. Vzdálenost dokumentu je definována od 0 do 1, kde 1 značí nejmenší vzdálenost. 

\begin{equation}
E_{C_{j}} = \sum\nolimits_{d \in D_{train, e}} distance(d, C_{j})
\end{equation}

Výsledky metody bez normalizace jsou uvedeny v grafu \ref{fig:graf2}.

\begin{figure}[!h]
  \begin{center}
    \includegraphics{obrazky/Picture2}
  \end{center}
  \caption{Procentuální zastoupení a vzdálenost dokumentů v clusteru}
  \label{fig:graf2}
\end{figure}

%\begin{table}
%  \caption{Procentuální zastoupení emocí v clusterech}
% 	\label{tabulka2}
%	\begin{center}
%	  \begin{tabular}{ r|cccccc }
%	    Cluster & Afraid & Anger & Neutral & Sadness & Satisfaction & Surprise   \\ \hline
%	    1 & 21 & 30 & 0 & 29 & 20 & 0 \\
%	    2 & 10 & 9 & 1 & 26 & 52 & 1 \\
%	    3 & 19 & 30 & 1 & 31 &19 & 0 \\
%	    4 & 12 & 27 & 1 & 31 & 29 & 1 \\
%	    5 & 19 & 28 & 1 & 23 & 28 & 1 \\
%	    6 & 8 & 18 & 1 & 29 & 44 & 1 \\
%	  \end{tabular}
%	\end{center}
%\end{table}

\subsection{Porovnání metod}
K porovnání přesnosti výše zmíněných metod byly použity dokumenty z korpusu $ D_{test} $ a to tak, že byl ke každému dokumentu nalezen nejbližší cluster a vybrán procentuální podíl emoce clusteru, kterou byl dokument označen.

Jelikož jsou dokumenty z $ D_{test} $ s různými emocemi rozloženy nerovnoměrně, což by ovlivnilo výsledky měření ve prospěch těch, které jsou zastoupeny častěji, jak v~$ D_{train} $, tak v  $ D_{test} $ (viz tabulka \ref{tab:tabulka2}). Proto byl vytvořen korpus $ D_{test}' $, jenž je tvořen náhodně vybranými 300 dokumenty z korpusu $ D_{test} $ tak, že dokumenty s~rozdílnými emocemi jsou zastoupeny ve stejné míře.

Výsledky jsou uvedeny v grafu \ref{fig:graf3} a byly získány jako průměr z pěti průběhů algoritmu (i když model LDA byl při každém spuštění stejný, při porovnání se počítá distribuční funkce gama z náhodných čísel, což ovlivňuje výsledky). Z grafu je patrné, že nejlepších výsledků dosahuje metoda, kdy celý cluster považujeme za zástupce jedné emoce.

\begin{figure}[!h]
  \begin{center}
    \includegraphics{obrazky/Picture3}
  \end{center}
  \caption{Přesnost použitých metod}
  \label{fig:graf3}
\end{figure}

I tak je přesnost této metody nízká, konkrétně přibližně jen 20 \%. Pokud by byla emoce dokumentu určena náhodně, přesnost by byla přibližně 16 \%.

\section{Vliv parametrů na přesnost}
Předchozí měření byla provedena pro model s nastavenými parametry tak, jak jsou uvedeny v \ref{sec:metody}. V této kapitole bude provedena změna těchto parametrů a za použití metody pro určení emoce clusteru \textit{Maximální počet dokumentů s normalizací dle počtu dokumentů} určen jejich vliv na přesnost.

\subsection{Počet clusterů}
Jak je zřejmé z grafu \ref{fig:graf1}, clustery neobsahují dokumenty pouze jedné emoce.  Z~tabulky \ref{tab:tabulka2} vyplývá, že pokud se pro učení emoce clusteru používá metoda maximálního počtu dokumentů, některé emoce při ní nejsou zastoupeny vůbec. Proto byl sledován vliv počtu clusterů na přesnost modelu.

\begin{figure}[!h]
  \begin{center}
    \includegraphics{obrazky/Picture4}
  \end{center}
  \caption{Závislost přesnosti modelu na počtu clusterů}
  \label{fig:graf4}
\end{figure}

Z grafu \ref{fig:graf4} plyne, že přesnost narůstá s rostoucím počtem clusterů, od 20 clusterů se pohybuje kolem 25 \%. Vyšší počet clusterů má však vliv na rychlost a paměťovou náročnost. 

\subsection{Velikost minidávky}
Minidávka určuje počet dokumentů, které jsou zpracovány v jedné dávce bez provedení kroků M a E, které synchronizují parametry modelu minidávky s parametry celého modelu. Zvýšení počtu dokumentů v minidávce tedy vede ke snížení časové náročnosti výpočtu a také k omezení šumu vznikajícího z unikátních slov v dokumentu – přílišné potlačení již ale vede ke snížení přesnosti modelu.

\begin{figure}[!h]
  \begin{center}
    \includegraphics{obrazky/Picture5}
  \end{center}
  \caption{Závislost přesnosti modelu na velikosti minidávky}
  \label{fig:graf5}
\end{figure}

Výsledky měření jsou uvedeny v grafu \ref{fig:graf5}. Z něj vyplývá, že nejlepších výsledků bylo dosaženo pro minidávku s 15 dokumenty, s vyšší velikostí přesnost mírně klesala, nejmenších hodnot dosahovala pro 5 dokumentů, naopak pokud byl v minidávce jen jeden dokument, byla přesnost vyšší.

\subsection{Přesnost odhadu parametrů}
Tento parametr určuje, k jaké nejmenší změně musí dojít mezi dvěma iteracemi při zpracování jednoho dokumentu, aby se ve zpracování dokumentu pokračovalo. Z~grafu \ref{fig:graf6} vyplývá, že tento parametr má jen malý vliv na přesnost celého modelu, nejmenší přesnosti dosahuje při hodnotě minimální změny 1 \% a narůstá jak pro větší, tak i pro nižší hodnoty.

\begin{figure}[!h]
  \begin{center}
    \includegraphics{obrazky/Picture6}
  \end{center}
  \caption{Závislost přesnosti modelu na přesnosti výpočtu modelu}
  \label{fig:graf6}
\end{figure}

\subsection{Optimalizace parametrů}
Dle předchozích bodů byly upraveny parametry modelu, aby bylo dosaženo co největší přesnosti. Konkrétně byly nastaveny na:

\begin{itemize}
\item Počet clusterů: 50
\item Přestat počítat parametry dokumentu při změně menší než 0,0001 \%
\item Velikost minidávky: 15
\end{itemize}

Po této změně parametrů došlo ke zvýšení přesnosti odhadu emoce dokumentu o 4 procentní body na 24 \%.

\section{Sloučení trénovacího a testovacího korpusu}
Předchozí měření byla provedena tak, že pro natrénování modelu bylo využito jen dokumentů z korpusu $ D_{train} $ a dokumenty z $ D_{test} $ byly použity jen pro ověření přesnosti. Tento postup je typický pro metody strojového učení s učitelem, neboť dokumenty musí být předem označkovány příslušnou emocí. U sémantického modelování však dochází jen ke vzniku clusterů pouze na základě slov, které dokument obsahuje a tedy bez nutnosti dodání informace o jeho emoci.

Při tomto měření byl model LDA vytvořen jak z dokumentů korpusu $ D_{train} $, tak i $ D_{test} $ za použití optimalizovaných parametrů. Pro určení emoce clusteru byla využita metoda \textit{Maximální počet dokumentů}. 

Tento způsob však nepřinesl měřitelné zlepšení přesnosti.

\section{Snížení počtu kategorií}
V dalším kroku bylo zjišťováno, jak se projeví snížení počtu emocionálních kategorií, a to sloučením pozitivních (surprise, satisfaction), neutrálních a negativních (afraid, anger, sadness). Opět byly použity optimalizované parametry.

V tomto případě se přesnost byla těsně pod 50 \%, v přídě náhodného výběru kategorie by byla přibližně 33 \%.

\section{Zhodnocení výsledků}
Při klasifikaci emocí do šesti kategorií byla při optimalizaci parametrů modelu LDA dosažena maximální přesnost 24 \%. Při snížení počtu kategorií na tři byla přesnost určení emoce přibližně 50 \%. Tato metoda tedy nedosahuje výsledků, které byly dosaženy například pomocí SVM v ostatních výzkumech, jak bylo uvedeno v kapitole \ref{ch:vyzkumy}. Z nich také vyplývá, že použití samotné metody LDA není ke klasifikaci emocí vhodné a pro zvýšení přesnosti je potřeba použít metodu rozšířenou o vrstvu emocionální klasifikace. Ta však vyžaduje již označené slova příslušnou emocí, podobně jako u slovníkových metod popsaných v kapitole \ref{sec:slovnikove}, ovšem s tou výhodou, že pro určení emoce dokumentu se na rozdíl od slovníkové metody se v něm toto slovo nemusí vyskytovat. 

Použití obdobné metody bylo plánováno pro klasifikaci emocí v této práci, pro češtinu ovšem neexistuje takový volně dostupný slovník a jeho vytvoření by bylo nad rámec této práce.

Přesnost by mohla být zvýšena větší velikost trénovacího korpusu a to nejenom v počtu dokumentů, ale také v počtu slov na jeden dokument, aby se dosáhlo větší shody mezi dokumenty na základě použitých slov.
