%=========================================================================
% Autor: Matej Koreň
\chapter{Úvod}

Internet je celosvetová sieť počítačov, ktoré sú navzájom prepojené a komunikujú spolu. Jeho história siaha do roku 1969, kedy bol vytvorený spoločnosťou ARPA za zámerom prepojiť hlavné univerzity v~USA. Odvtedy sa táto sieť rozvíjala až do bodu, kde je k~internetu pripojených viac ako 4 miliardy používateľov. Jeho funkcie sa postupne vylepšovali a pridávali sa nové technológie. V~dnešnej dobre sa využíva na rôzne účely, avšak jeho prvotný zámer stále pretrváva -- jednoduché a dostupné získavanie informácii.

Jedným z~miest, ktoré ľudia používajúci internet najčastejšie navštevujú, sú sociálne siete. Sú to väčšinou verejne prístupné stránky a aplikácie, kde spolu ľudia môžu komunikovať, zdieľať novinky, zabávať sa ale aj pracovať. Prístupnosť k~informáciám však so sebou nesie aj mnoho nástrah. V~tradičných médiach, ako je televízia, rádio či tlač, musia prejsť články a reportáže overením poskytovaných informácii a zdrojov. Pri internete však existuje možnosť jednoducho a verejne prezentovať svoj názor a myšlienky bez žiadnej cenzúry. Preto je potrebné častokrát myslieť kriticky a tieto informácie si overiť na vlastnú päsť.

V~prípade, že niekto úmyselne zdieľa nepravdivé informácie za cieľom manipulácie obecenstva, jedná sa o~šírenie dezinformácii a klamlivých správ. V~súčasnosti má tento jav populárny názov Fake News. Tento trend sa začal objavovať hlavne s~nástupom služby Facebook, avšak je viditeľný už aj na iných platformách po celom internete. Ich odhaľovanie je častokrát náročné a vyžaduje si hlbšie zmýšľanie. 

Práca je rozdelená do štyroch kapitol. V~kapitole \uv{Štúdium problematiky} je popísaná história falošných správ, metódy ich šírenia, prístupy na odhaľovanie takýchto informácii a úvod do strojového učenia a jeho využitie pri klasifikácii. V~časti \uv{Návrh riešenia} Je uvedený presný cieľ práce, návrh práce na projekte a jeho architektúry, popis získavania a práce s~dátami a použité prostriedky na trénovanie modelov a ich vyhodnocovanie. Sekcia \uv{Implementácia a testovanie} pojednáva o~konkrétnom rozložení projektu, zvolenom prostredí, využitých nástrojoch a o~konkrétnej stavbe jednotlivých modulov. V~poslednej kapitole \uv{Testovanie a vyhodnocovanie} je celý projekt testovaný v~piatich experimentoch na rozličných dátach, či už anglických alebo aj na novovytvorenom slovenskom datasete Dezinfo SK. Jednotlivé modely sú s~využitím získaných poznatkov ohodnotené a následne odskúšané na online spravodajských článkoch z~niekoľkých novinových portálov.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter {Štúdium problematiky}

V~poslednom období sa téma falošných správ stala stále viac znepokojujúcou pre spoločnosť. V~dobe, keď sociálne siete majú veľký vplyv na to, ako sa ľudia rozhodujú (najmä v~oblasti politiky), je dôležité starostlivo zvažovať vierohodnosť informácií, ktoré sa na nich šíria. Napríklad v~súvislosti s~pandémiou COVID-19 sa mnohí ľudia stretli s~problémami s~pravdivosťou nariadení, výskumov alebo dát, ktoré boli zverejnené na sociálnych sieťach. Úrady v~štátnej správe sa tiež museli vyrovnať s~pochybnosťami zo strany občanov a niektorí ľudia využili túto situáciu na šírenie správ s~neoverenými faktami a subjektívnymi názormi.

Je dôležité, aby sme dokázali rozpoznať pravdivé od nepravdivých informácií, pretože falošné správy môžu mať vážne dôsledky, ako ovplyvnenie verejnej mienky alebo dokonca ovplyvnenie rozhodnutí vlády. Preto je dôležité, aby sme si vytvorili kritické myslenie a boli schopní overiť si informácie, ktoré sa nám dostanú do rúk, predtým, než ich začneme šíriť ďalej.
\section{Ako spozorovať falošnú správu?}

Táto téma určite nie je novinkou, keďže každá správa môže byť spochybniteľná. Už v~minulosti sa napríklad falšovali či šírili rôzne fámy v~novinách. Doba sa ale zmenila a nástupom internetu sa informácie sprístupnili širšej verejnosti. Ich šírenie sa stalo rýchlejším, jednoduchším a efektívnejším. Podľa výskumu z~roku 2018 vedcov Shawna Doriusa a Sorousha Vosoughiho \cite{Spread_of_fake_news}, ktorý zozbierali dáta z~Twitteru za posledných 12 rokov (2006-2018) sa falošné správy šíria rýchlejšie, než tie pravdivé -- a to až o~70 \%. Problematikou spozorovania falošných správ sa zaoberalo množstvo výskumov. Je to veľmi populárna téma, čo len prikladá k~jej dôležitosti. Vzniklo mnoho stránok, aplikácii a organizácii, ktoré sa snažia odhaliť alebo aj priamo zabrániť ich šíreniu. Hlavné otázky, ktoré by sme si mali klásť, sú nasledujúce:
\begin{itemize}
    \item Je zdroj týchto informácii dôveryhodný alebo čerpá z~iných dôveryhodných zdrojov?
    \item Snaží sa zdroj príliš vplývať na emócie?
    \item Aký je zámer zdroja zdieľať túto informáciu?
    \item Je táto informácia zmysluplná a uveriteľná?
\end{itemize}

Tieto kategórie rozhodovania sú kľúčové pri našom rozhodovaní. Samozrejme, nie každá informácia je ľahko overiteľná a častokrát sa overiť ani nedá. Stránka Wikipedia poskytuje zoznam webových stránok propagujúce takéto správy v~anglickom jazyku a v~češtine \cite{enwiki:en_dezinfo_zoznam,wiki:cz_dezinfo_zoznam}. Slovenské webové portály sú takýmto spôsobom zoradené na stránke \href{https://konspiratori.sk/zoznam-stranok}{konspiratori.sk}. Medzi niektoré dezinformačné weby v~týchto jazykoch patria:

\begin{itemize}
    \item \href{https://zemavek.sk/}{Zem \& Vek}   -- slovenský jazyk,
    \item \href{https://badatell.net/}{badatel.net}  -- slovenský jazyk,
    \item \href{https://wdn.com/}{World Daily News} -- anglický jazyk,
    \item \href{https://www.infowars.com/}{Infowars} -- anglický jazyk,
    \item \href{https://aeronet.news/}{AE News}-- český jazyk,
    \item \href{https://www.parlamentnilisty.cz/}{Parlamentní listy} -- český jazyk.
\end{itemize}


\section{Moderné prístupy}
\label{sec:modern}
V~reakcií na alarmujúce zvýšenie šírenia nepravdivých a zavádzajúcich správ v~období pandémie koronavíru sa Európska Únia rozhodla vytvoriť projekt SOMA (Social Observatory for Disinformation and Social Media Analysis),
\footnote{\url{www.disinfobservatory.org}}
ktorý s~pomocou spoločností TruthNest a Truly Media pravidelne adresujú najkontroverznejšie témy a problémy a uvádzajú ich na pravú mieru. Ich metóda využíva spojenie výkonnej technológie, založenej na strojovom učení a tímu vedcov, žurnalistov a politológov.

Spoločnosť Google taktiež vytvorila vlastnú verziu nástroju na klasifikáciu článkov s~názvom Fact-Check Explorer \footnote{\url{https://toolbox.google.com/factcheck/about\#fce}}. Tento nástroj ponúka hodnotenia príspevkov založené priamo na ľudských zdrojoch, ako napríklad recenzie zo stránky \hyperlink{https://checkyourfact.com/}{CheckYourFact} alebo francúzskej stránky \hyperlink{https://factcheck.afp.com/}{FactCheck} spadajúcej pod AFP (\textit{Agence France-Presse}) \footnote{Pre slovenský jazyk existuje podstránka \url{https://fakty.afp.com/list}}.

Pre priame využitie Fact-Check Explorer-u sa dá v~jeho sekcií \textit{Explorer} zadať kľúčové slovo článku alebo priamo zadefinovať (vyššie spomínané) overovacie stránky. Výsledkom je panel tvrdení o~danej téme z~konkrétneho zdroja, hodnotenie a odkaz na jeho podrobnejšie vysvetlenie.

Ďalším dostupným online nástrojom je na stránke \hyperlink{http://fakenews.research.sfu.ca/}{FakeNews.research.sfu.ca} a je súčasťou výskumu univezity Simona Frasera v~Kalifornii s~názvom \uv{Big data and quality data for fake news and misinformation detection} od Fatemeh Torabi Asr and Maite Taboada \cite{online_fact_checker}. K~výskumu je dostupné aj video \footnote{\url{https://bigdatasoc.blogspot.com/2019/05/video-abstract-big-data-and-quality.html}}, kde jedna z~autoriek popisuje vznik tohoto nástroja, zbieranie dát a testovanie modelov. Počas ich práce bolo zistené, že klasické spracovanie textu formou váhovania slov a využitia matematických modelov má na menších datasetoch vyššiu úspešnosť ako moderné transformátory -- pri testovaní nimi vytvorenej sady dát MisInfoText \footnote{\url{https://github.com/sfu-discourse-lab/MisInfoText}} s~10,000 článkami bol rozdiel úspešností \uv{klasických} modelov a modelov s~hĺbkovým učením takmer 15\%. Vo výslednom klasifikátore je využitá metóda podporných vektorov (viď. \ref{sec::SVM}) a jeho výstupom je skóre istoty v~intervale $x\in<-2,2>;\,x\in\mathbb{R}$, kde spodná hranica predstavuje 100\% reálnu správu a horná hranica 100\% falošnú správu.



\section{Strojové učenie - základné poznatky}

Strojové učenie je oblasť umelej inteligencie, ktorá sa snaží napodobniť procesy učenia sa ľudí v~sfére výpočtovej techniky. Ide o~učenie stroja, ktoré využíva hlavnú výhodu počítačov -- ich rýchlosť a schopnosť zvládať veľké množstvo úloh z~nízkymi nárokmi na zdroje.

Cieľom strojového učenia je poskytnúť počítačovému algoritmu veľké množstvo dát, na základe ktorých je schopný vytvoriť hranice medzi skupinami rôznych prvkov (tie sa nazývajú \uv{boundaries}) a potom dokáže každý nový vstup zaradiť alebo klasifikovať do príslušnej skupiny s~určitou mierou istoty. Ďalším cieľom je využiť tieto dáta na vytváranie predpovedí.

Strojové učenie sa dnes používa vo viacerých oblastiach, ako napríklad v~marketingu, financiách, medicíne alebo vo vývoji softvéru, kde sa využívajú rôzne algoritmy a metódy, ktoré umožňujú vytvárať modely schopné vykonávať rôzne úlohy, ako napríklad predpovedanie vývoja cien akcií na burze alebo rozpoznávanie obrázkov. Základné delenie kategórii je nasledovné:

\begin{itemize}
  \item{Učenie s~učiteľom},
  \item{Učenie bez učiteľa},
  \item{Kombinované učenie (s~aj bez učiteľa)},
  \item{Posilňované učenie},
  \item{Neurónové siete},
  \item{Ostatné typy (Hĺbkové učenie, Robotické učenie, ...)}.
\end{itemize}



\section*{Využite pri klasifikácii}

Keď chceme použiť strojové učenie na riešenie nejakého problému, potrebujeme k~dispozícii dáta, ktoré môže náš algoritmus spracovať. Tieto dáta by mali byť dostatočne veľké a rôznorodé, aby sme dosiahli čo najlepšie výsledky. Ale zároveň musíme zabezpečiť, aby boli dáta súvisiace a korelované, pretože ak použijeme nezávislé alebo úplne odlišné dáta, naše rozhodovacie hranice by mohli byť príliš široké a všeobecné.

Pre úspešné vykonanie úlohy strojového učenia musíme mať kvalitné vstupné dáta. Pri trénovaní modelu sa snažíme vytvoriť algoritmus, ktorý sa učí z~týchto dát a vytvára predpoveď na základe nich. Je dôležité zvoliť správny typ modelu pre danú úlohu a nastaviť jeho parametre tak, aby dosiahol čo najlepšie výsledky. Zároveň musíme zabezpečiť, aby boli dáta dostatočne relevantné pre danú úlohu, pretože inak môže náš model vytvárať široké a nepresné rozhodovacie hranice.


Pri klasifikácii sa vieme štatisticky pozerať na úspešnosť vyhodnocovania pomocou tzv. Kontingenčnej matice (viď. obrázok \ref{fig::confusionMatrix})

\begin{figure}[H]
	\centering
	\includegraphics[width=0.6\textwidth]{confusion-matrix.pdf}
	\caption{Kontingenčná matica (tiež Matica zámen, anglicky \uv{Confusion matrix}).}
	\label{fig::confusionMatrix}
\end{figure}

Z~nej vieme výstupy utriediť nasledovne:
\begin{itemize}
    \item True positive -- (správne zaradené),
    \item True negative -- (správne nezaradené),
    \item False postivie -- (nesprávne zaradené),
    \item False negative -- (nesprávne nezaradené).
\end{itemize}
Model bude najpresnejší, ak docielime nasledujúce pravidlá:
\uv{true positive} a \uv{true negative} budú dosahovať čo najvyššie hodnoty a
\uv {false positive} a \uv{false negative} budú dosahovať čo najnižšie hodnoty.

\section{Metódy klasifikácie}

\cite{PatternRecognition} Cieľom klasifikácie v~strojovom učení je schopnosť vstupnému vektoru $x$ priradiť jednu z~$K$ diskrétnych tried $C_k$, kde $k=1,...,K$. V~najčastejších prípadoch sú tieto disjunktné, takže každému vstupu je priradená práve jedna. Priestor vstupných vektorov je teda rozdelený do takzvaných \textit{rozhodovacích oblastí}, ktoré sú oddelené \textit{rozhodovacími hranicami}.
Pre lineárne modelý sú tieto hranice lineárnymi funkciami vstupného vektoru $x$ a teda sú definované ($D-1$)-dimenzionálnymi nadrovinami v~rámci $D$-dimenzionálneho priestoru. Dáta, ktorých triedy vieme touto hranicouu presne rozdeliť sa nazývajú \textit{lineárne separovateľné}.



\subsection*{Naive Bayes}


Zaoberá sa metódou klasifikácie a je založený na tzv. Bayesovej vete (podľa štatistika Thomasa Bayesa), ktorá určuje pravdepodobnosť javu na základe vopred známych vstupných podmienok. Jeho prívlastok 'Naive' (naivný) predpokladá nezávislosť atribútov (v~prípade klasifikácie textu sú to jednotlivé slová). Využíva spomínanú rovnicu 

\begin{equation}
\label{eq:bayes}
P(H|X) = \frac{P(X|H)*{P(H)}}{{P(X)}}
\end{equation}

kde $H$ je hypotéza a $X$ je dôkaz. Potom
$P(H|X)$ je výsledná pravdepodobnosť, že hypotéza $H$ platí,
$P(X|H)$ označuje pravdepodobnosť dôkazu $X$, keď $H$ platí. Pre doplnenie, 
$P(H)$ značí pravdepodobnosť hypotézy $H$ a
$P(X)$ pravdepodobnosť dôkazu $X$.


\subsection*{Rozhodovací strom}

\cite{izu_dt} Metóda rozhodovacích stromov (anglicky. \textbf{Decision trees}) je jedným z~prvých a najpoužívanejších algoritmov na klasifikáciu a predikciu. Spôsobom trénovania na množinách dát predpovedajú hodnotu cieľovej premennej. Vytvárajú štruktúru uzlov a hrán, graficky pripomínajúcu strom. Uzly sú triedy a hrany hodnoty testovacieho atribútu. Pre využite takéhoto stromu je nutné vytvoriť jeho štruktúru -- zvoliť si vstupné premenné a zadefinovať ich prahové hodnoty, na základe ktorých sa bude strom ďalej rozvetvovať. Pri klasifikácií je rast stromu ovplyvňovaný metrikou jeho presnosti -- informačným ziskom. Ak definujeme $p_\tau{_k}$ ako podmnožinu dát množiny $R_\tau$ patriacej triede $k$, kde $k = 1,...,K$, potom jednou z~možností, ako informačný zisk vypočítať,  je takzvaný \textit{Gini Index}

\begin{equation}
\label{eq:entropy}
    Q_t (T) = \sum_{k=1}^{K} p_\tau{_k}(1-p_\tau{_k}) 
\end{equation}

ktorého prednosťou je vysoká citlivosť na rozdelenie pravdepodobností jednotlivých tried v~uzloch stromu, práve kvôli ktorej bol využitý aj v~projekte. 


\begin{figure}[ht]
	\centering
	\includegraphics[width=0.8\textwidth]{tree.pdf}
	\caption{Vizualizácia rozhodovacieho stromu vygenerovaná po trénovaní (\nameref{sec::Experiment_5}). Na obrázku je možné vidieť hodnoty Gini indexov v~uzloch, počet vzoriek spĺňajúci kritériá zaradenia, ich hodnoty a triedy.}
	\label{fig::DT_sk_tree}
\end{figure}


\subsection*{Podporné vektory}
\label{sec::SVM}

\cite{sur:vectors,Cortes1995} Ide o~najčastejšie využívaný klasifikátor pre problémy s~dvoma triedami. Tento algoritmus spadá do kategórie tzv. jadrových algoritmov -- základným prvkom sú rozhodujúce roviny, pomocou ktorých sa hľadá tzv. nadrovina. Tá pôvodný priestor príznakov rozdeľuje tak, že trénovacie dáta z~odlišných tried ležia v~opačných pol priestoroch, a maximalizuje priestor medzi danou pol rovinou a podpornými vektormi. Inak povedané, nadrovina sa snaží okolo seba vytvárať čo najväčšie pásmo bez bodov tak, aby okrajové body rozdelených oblastí boli rovnako vzdialené od stredu pásma nadroviny. Súčasťou techniky podporných vektorov je jadrová transformácia priestoru ( z~pravidla do vyššej dimenzie). V~prípade lineárnej transformácie je vzniknutá nadrovina v~dvojrozmernom priestore priamkou, v~trojrozmernom priestore rovinou. Trénovanie takýchto modelov prebieha s~cieľom minimalizovať vzdialenosť hraníc rozdeľúcich priestor vstupných dát $x$ s~podmienkami
\begin{equation}
    t_n (w^Tx_n + b) \geq 1,\; n\in(1,2,...,N)
\end{equation}
kde kde $w$ je (normálový) váhový vektor, $b$ je explicitne definovaná odchýlka, $N$ je počet trénovacích vektorov a $t_n \in {-1,1}$ udávajú triedy pre jednotlivé vstupné dáta (v~prípade binárneho klasifikátoru práve dve). Výstup modelu podporných vektorov neinterpretuje priamo pravdepodobnosť tried pre daný stup, ale takzvané \uv{mäkké skóre}, ktoré sa dá na ňu približne previesť. \label{sec:vectors_probability}

\begin{figure*}[ht]\centering
  \centering
  \includegraphics[width=0.5\textwidth]{svm1.pdf}\hfill
  \includegraphics[width=0.5\textwidth]{svm.pdf}\hfill
	\caption{Podporné vektory (\textit{support vectors}) ležia na okraji prázdnej oblasti (čierna prerušovaná čiara) a ovplyvňujú riešenie. Ak by sa ostatné dáta vypustili z~trénovacej sady, výsledok by se nezmenil. Prevzaté z~\cite{sur:vectors}.
}
	\label{fig::SupportVectors}
\end{figure*}


\subsection*{Neurónové siete} \cite{Bíla,ŠnorekMiroslav1996Nsan}
Umelá neurónová sieť je jednou z~najpoužívanejších metód strojového učenia. Vo svojej podstate modeluje funkcionalitu neurónov v~biológií -- tie reagujú na vstupné parametre, produkujú výstup a komunikujú s~ostatnými neurónmi. Počet vstupov neurónu je neobmedzený, avšak výstup je len jeden.
História vývoju prvých matematických  modelov neurónov siaha až do štyridsiatych rokov dvadsiateho storočia. Prvý neurón s~pravidlami učenia, tzv. \textbf{perceptron} bol vytvorený F. Rosenblattom o~pár rokov neskôr. 

\begin{figure}[ht]
	\centering
	\includegraphics[width=0.3\textwidth, angle=-90]{obrazky-figures/neuron.pdf}
	\caption{Perceptron -- $x_{1,2}$ určuje vstupy, $w_{1,2}$ váhy vstupov, $b$ odchýlku, $a$ výstup po súčte, $f(.)$ aktivačnú funkciu daného neurónu a $y$ jeho finálny výstup. Prevzaté z~\cite{sur:vectors}}.
	\label{fig::Perceptron}
\end{figure}

Perceptron má jednoznačne určené vstupy a výstupy, ich váhy, prahovú hodnotu a aktivačnú funkciu. Jednotlivé neuróny sa spájajú do celku a vytvárajú neurónovú sieť. Predpokladom čo najsprávnejšieho výstupu takejto siete je jej schopnosť učenia sa. V~biologickej sfére sú nové skúsenosti získavané pomocou zmyslov a ukladajú sa v~synapsiách, resp. v~spojeniach jednotlivých neurónov. V~matematickom modeli je  táto akcia nahradená zmenou váhovania vstupov. Podobne sa výstupy neurónov (sila elektrických impulzov) nahrádzajú rôznymi aktivačnými funkciami\label{activation_function}, ktoré modelujú rôzne chovania, ako napríklad citlivosť neurónov na vstup, prípadne takzvané \uv{zabúdanie}. 

\cite{activation_functions,enwiki:activation} Medzi najčastejšie využívané (nelineárne) funkcie patria: 
\begin{itemize}
    \item Sigmoida, 
    \item Gaussova krivka,
    \item Ricker wavelet (tiež zvaná \uv{Mexický klobúk}),
    \item Hyperbolický tangens,
    \item Rectified linear unit ( tiež \uv{ReLU}),
    \item Softmax \label{softmax} \footnote{  Na rozdiel od vyššie spomínaných funkcii, Softmax pri výpočte používa hodnoty premenných z~predošlých vrstiev. Využíva sa hlavne v~posledných vrstvách sietí, kde dokáže normalizovať výstupy na rozdelenie pravdepodobností predikovaných tried. \cite{PatternRecognition}}.
\end{itemize}
V~niektorých prípadoch sa taktiež používajú aj radiálne, zložené
či postupne diferencovateľné funkcie.

\begin{figure}[h]
\centering
\begin{subfigure}{.5\textwidth}
  \centering
  \includegraphics[width=.8\textwidth]{obrazky-figures/Activation_logistic.pdf}
  \caption{Sigmoida}
  \label{fig:sigmoida}
\end{subfigure}%
\begin{subfigure}{.5\textwidth}
  \centering
  \includegraphics[width=.8\textwidth]{obrazky-figures/Activation_rectified_linear.pdf}
  \caption{ReLU}
  \label{fig:relu}
\end{subfigure}
\caption{Sigmoida \ref{fig:sigmoida} (inak tiež logistická funkcia), ktorej rozsah je pevne ohraničený, čo modeluje určitú maximálnu rýchlosť odozvy neurónov. 
ReLU \ref{fig:relu} je jedna z~modernejších aktivačných funkcií, ktorej hlavné výhody sú výpočetná nenáročnosť či lepší gradientný zostup v~oboch smeroch. V~elektrotechnike je jej povaha analógiou k~pol-vlnovému usmerňovaču striedavého prúdu.
Prevzaté z~\cite{enwiki:activation}.}
\label{fig:activation}
\end{figure}

Existuje množstvo metód a algoritmov pre učenie neurónových sietí, kde medzi najpoužívanejšie patrí napríklad Hebbovské učenie (podľa paralelnej aktivácie neurónov) či Spätné šírenie chyby [
(anglicky \uv{Backpropagation} (ako gradientný zostup zmien váhovania).

\subsection*{BERT}

Podľa publikácie \cite{SOA} z~roku 2020 sa medzi najpoužívanejšie a najúspešnejšie modely zaradili predtrénované hlboké strojové učenie založené na transformátoroch, ako je \textbf{BERT}, \textbf{RoBERTa} alebo \textbf{XLNET}. \textbf{BERT}, alebo celým názvom Bidirectional Encoder Representations from Transformers bol vytvorený v~roku 2017 spoločnosťou Google. Je zložený na modeli hĺbkového učenia, kde váha každého výstupu je dynamicky prerátaná ako vstup, a zároveň umožňuje prechod analyzovaným textom obojsmerne. Transformátory dovoľujú trénovať tento model aj na väčšom objeme dát než pri iných modeloch -- konkrétne BERT bol trénovaný na celej anglickej Wikipédii a na dátach z~Toronto BooksCorpus. Jeho hlavnou prednosťou je priraďovanie významu slovám na základe toho, aký význam majú vo vete (podľa slov, ktoré sa nachádzajú okolo nich). Existuje niekoľko voľne dostupných modelov, ktoré sú predtrénované na špecifických dátach pre klasifikáciu patentov, vedeckých alebo medicínskych textov či vizuálno-lingvistických dát.

Pri trénovaní modelov BERT sa využívajú dve techniky: maskovanie a predikcia viet \cite{Bert}. Sú využívané súčasne, čo minimalizuje stratovosť oboch stratégii. Maskovanie prebieha tak, že 15\% slov v~určitej sekvencií je \uv{zakrytých}, respektíve nahradených špeciálnou maskou. Tá môže byť buď to prázdny reťazec, náhodné slovo alebo pôvodné slovo vo vete. Model sa následne snaží predpovedať toto ukryté slovo na základe zvyšných slov v~sekvencii. Predikcia nasledujúcich viet je proces, pri ktorom model na vstup dostáva dvojicu viet a snaží sa predpovedať, či tento pár na seba kontextovo nadväzuje, alebo nie. Počas trénovania je polovica týchto viet na seba nadväzujúca a druhá polovica nie. Taktiež sú tieto vety označené vopred označené na začiatku a na konci, čo modelu uľahčuje ich rozpoznávanie. 

\begin{figure}[H]
	\centering
	\includegraphics[width=\textwidth]{bert.pdf}
	\caption{Vizualizácia trénovania rozpoznávania súvislosti viet modelov  BERT. Ako klasifikačná vrstva môže figurovať napríklad neurónová sieť (na obrázku Feedforward Neural Network) s~aktivačnou funkciou  Softmax \ref{softmax} alebo iný klasifikátor. Obrázok inšpirovaný \protect\footnotemark .}
	\label{fig::Bert}
\end{figure}

\footnotetext{\url{https://www.geeksforgeeks.org/understanding-bert-nlp/}}

 Transformátory sa v~odvetví spracovania textu stávajú čoraz viac populárnejšími a ich využitie je naozaj všestranné. Na základe toho sa vynára otázka, či matematicky založené modely (ako napríklad Naive Bayes, Rozhodovacie stromy či Podporné vektory) sú stále relevantné na použitie a či je vôbec možné dosiahnuť porovnateľnú efektivitu voči neurónovým sieťam a transformátorom.
 \vspace{2cm}

 
 \textbf{Poznámka:} Kvôli náročnej implementácii je prístup ku spracovaniu prirodzeného jazyka a klasifikácii na základe modelov BERT v~práci nevyužitý, avšak figuruje v~porovnávaní výsledkov jednotlivých experimentov, pri ktorých ho buď samotní autori zbierok dát alebo ich používatelia využili na tento účel a slúži ako \uv{state-of-the-art} riešenie, respektíve najlepšie dosiahnuté skóre pre daný dataset.



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter {Návrh riešenia}

\section{Cieľ práce}
Cieľom tejto práce je vytvoriť a poskytnúť začínajúcim programátorom jednoduchú knižnicu pre klasifikáciu novinových článkov na základe ich spoľahlivosti. Táto knižnica spája jednotlivé kroky nutné pre spracovanie dát, trénovanie modelov a evalváciu textu z~odkazu na konkrétny príspevok. Modul podporuje výber vlastného datasetu, zvolenie trénovaného modelu strojového učenia (\textit{Naive Bayes}, \textit{Rozhodovací strom}, \textit{Podporné vektory} alebo \textit{Neurónová sieť}) a jeho uloženie, prípadne využitie predtrénovaných modelov. Používateľ si vie taktiež určiť, či chce vidieť detailný popis vyhodnotenia a výsledky testov po trénovaní. 

Ďalším cieľom je taktiež vytvorenie verejne dostupnej zbierky dát klasifikovaných článkov z~prostredia slovenských novinových portálov, ktoré je možné použiť práve na vyššie spomínané účely. Zámienkou na jeho vytvorenie je nedostatok verejne prístupných dát pre klasifikáciu textu v~slovenskom jazyk.u Dataset je tvorený manuálne a je pri ňom zabezpečený rovnomerný podiel pravdivých a nepravdivých príspevkov. Ich zaradenie do jednej z~dvoch tried spoľahlivosti je taktiež robené manuálne na základe verejne dostupného hodnotenia slovenských internetových spravodajských stránok vytvoreného špecialistami v~obore. Viac o~tejto sade dát je možné sa dozvedieť v~prílohe \ref{appendix:dezinfo}, ktorá ho detailnejšie popisuje.  

\section{Návrh architektúry}
Riešenie má tvar stiahnuteľného balíčku pre jazyk Python (prípadne pri používaní zdrojových súborov aj ako konzolová aplikácia), kde je možné zadať vstupné dáta na klasifikáciu a zvoliť preferovanú metódu klasifikácie. Dáta sa na pozadí vyhodnotia a ako výstup je vidno rozdelenie pravdepodobnosti vierohodnosti vstupu. Je taktiež možné pozrieť si iné štatistické údaje a porovnania s~tréningovou sadou. Druhou možnosťou je využitie predtrénovaných modelov na ohodnotenie správy z~internetu. Obe metódy vyžadujú rovnaký postup (viď. obrázok \ref{fig::Kostra programu}). 

\begin{figure}[H]
	\centering
	\includegraphics[width=0.6\textwidth]{kostra.pdf}
	\caption{Návrh architektúry - kostra programu a priebeh spracovania vstupného textu až po výstupnú klasifikáciu.}
	\label{fig::Kostra programu}
\end{figure}



\section{Výber vhodných dát a ich vizualizácia}

Keď chceme použiť strojové učenie na riešenie nejakého problému, potrebujeme mať k~dispozícii dostatočné množstvo vstupných dát, ktoré budú predstavovať rôzne prípady a situácie, ktoré budeme chcieť modelu predpovedať. Je dôležité, aby tieto dáta boli čo najrôznorodejšie, aby sme mohli modelu poskytnúť čo najviac informácií o~rôznych možnostiach a scenároch, ktoré by mohol model v~budúcnosti vidieť. Zároveň ale musíme dbať aj na to, aby boli tieto dáta relevantné a súvisiace s~tým, na čo chceme model použiť. Pokiaľ trénujeme model na dátach, ktoré sú navzájom nesúvisiace alebo úplne odlišné od toho, na čo chceme model použiť, vytvorené rozhodovacie hranice budú príliš široké a všeobecné a model sa môže správať nepresne alebo dokonca chybne. Vždy je teda dôležité zvážiť kvalitu a objem dát, ktoré použijeme na trénovanie modelu, aby sme dosiahli čo najlepšie výsledky.

Pri výbere dát máme dve možnosti -- vytvoriť si trénovaciu množinu samostatne alebo použiť niektorú z~verejne dostupných a odskúšaných. Prvá možnosť je časovo náročná a vytvorenie dostatočne rozsiahleho balíčku klasifikovaných správ by bolo zložité. Druhá možnosť nám síce odoberie časť práce, avšak musíme viac zohľadniť niektoré faktory dôležité pre správny výber, ako napríklad ich relevantnosť a formát. Existuje niekoľko takýchto súborov dát, ktoré boli špeciálne vyvinuté pre klasifikáciu falošných správ a ďalšie  sa neustále vyvíjajú. Pre tento účel bola využitá stránka \url{kaggle.com}, ktorá obsahuje voľne dostupné datasety rôznych kategórii a zameraní. Na túto úlohu boli z~tejto stránky vybrané štyri subory dát a jeden vytvorený. Ich bližší popis sa nachádza v~sekcií \ref{sec::Experiments}  Pre zjednodušenie práce boli všetky typu csv (comma separated values). Štruktúra všetkých dokumentov je taktiež podobná -- obsahuje (spravidla) stĺpce \textbf{title}, \textbf{text}, \textbf{label}, \textbf{date} prípadne \textbf{subject}.

\begin{table}[H]
\centering
\resizebox{\columnwidth}{!}{%
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
\textbf{id} & \textbf{date} & \textbf{title}              & \textbf{text}                      & \textbf{url}          & \textbf{check} & \textbf{label} \\ \hline
1           & 5.3.2023      & Ďalšia skupina renomo..     & Je veľmi dôležité, aby sa ...      & zemavek.sk/dalsia-... & -              & 0              \\ \hline
2           & 4.3.2023      & Pfizer tajil poškodenia...  & Počas uponáhľaných klinických ...  & zemavek.sk/pfizer-... & -              & 0              \\ \hline
3           & 3.3.2023      & Vedecká štúdia preuká...    & Ich povinné nosenie bolo preto ... & zemavek.sk/vedeck...  & -              & 0              \\ \hline
4           & 2.3.2023      & Ukrajinci pritvrdili v~...  & Ukrajinská armáda v~posledných ... & zemavek.sk/ukrajin... & -              & 0              \\ \hline
5           & 3.3.2023      & Ukrajinskí novinári ...     & Na doneckých frontoch sa ...       & zemavek.sk/ukrajin... & -              & 0              \\ \hline
6           & 5.3.2023      & Vojna na Ukrajine: Ruskí... & Ruskí mobilizovaní záložníci ...   & aktuality.sk/cl...    & -              & 1              \\ \hline
7           & 4.3.2023      & Koronavírus: WHO  ...       & Generálny riaditeľ Svetovej ...    & aktuality.sk/cl...    & -              & 1              \\ \hline
8           & 4.3.2023      & Metsolová na Ukrajine ...   & Predsedníčka Európskeho ...        & aktuality.sk/cl...    & -              & 1              \\ \hline
9           & 4.3.2023      & Rusko môže byť čoskoro ...  & Rusko by sa mohlo už na ...        & aktuality.sk/cl...    & -              & 1              \\ \hline
10          & 5.3.2023      & Bachmut je stále v~...      & Situácia v~meste Bachmut v~...     & aktuality.sk/cl...    & -              & 1              \\ \hline
\end{tabular}
}
\caption{Ukážka štruktúry datasetov využitých v~projekte. Konkrétny úsek pochádza z~datasetu Dezinfo SK, ktorý bol navrhnutý podľa štandardnej štruktúry zbierok novinových článkov pre klasifikáciu. Trieda (\textit{label}) \textbf{0} označuje nepravdivú správu a trieda \textbf{1} správu pravdivú.}
\label{tab:dezinfo_snippet}
\end{table}


\section*{Vizualizácia dát}
Na ukážku obsahu používaných záznamov môžeme použiť takzvanú slovnú mapu -- pomocou online nástroja na tvorbu \uv{wordclouds} \footnote{\url{https://www.wordclouds.com/}} vieme po tokenizácii a odstránení \uv{stop words} vziať výsledok a jednoducho vykresliť prehľad najčastejšie vyskytujúcich sa slov v~danom dokumente (najpoužívanejšie slovo je najväčšie):

\begin{figure}[H]
	\centering
	\includegraphics[width=0.5\textwidth]{Wordclouds/wordcloud_dummy.png}
	\caption{Slovná mapa - ukážka}
	\label{fig::Wordcloud}
\end{figure}

\section{Vektorizácia}
\label{sec:vectorization}
Pred ich spracovaním je potrebné vykonať niekoľko úprav -- v~prvom rade boli načítané pomocou knižnice \textbf{pandas} do dátového rámca. V~prípade samostatných súborov pre jednotlivé kategórie im boli manuálne priradené triedy Fake a True a datasety boli zlúčené do jedného rámca. V~nasledujúcom kroku bolo vyukonané spracovanie funkciami knižnice \textbf{nltk}, kde sa odstránila interpunkcia a boli vylúčené tzv. \uv{Stopwords} -- slová, ktoré nie sú vo vetnej syntaxi dôležité ( častice, citoslovcia, spojky, predložky, zámená a niektoré slovesá).
Zvyšné slová boli upravené tak, aby obsahovali len malé písmená (ang. lowercase) a stáli zvlášť (tokenizácia).

Tieto dáta sú potom zoskupované do matice podľa ich výskytov cez funkciu \textbf{Count vectorizer}. Ak máme množinu dokumentov, kde každý dokument je reprezentovaný ako reťazec znakov, tak výstupná matica má tvar $N*K$, kde $N$ je počet dokumentov v~množine a $K$ je počet unikátnych slov vo všetkých dokumentoch. Každý riadok matice potom reprezentuje jeden dokument a obsahuje hodnoty vektorov pre všetky slová v~abecednom poradí. Pri tejto matici si vieme skontrolovať jej hustotu, resp. riedkosť -- ak obsahuje príliš veľa hodnôt s~nízkym alebo nulovým výskytom, musí byť upravená (stlačená) tak, aby sa obmedzili výkyvy pri klasifikácii.  Napríklad pre nasledujúce dve vety: 
\begin{verbatim}
    Toto je ukážka matice výskytu slov.
\end{verbatim}
a
\begin{verbatim}
    Táto ukážka je maticou niekoľkých slov.
\end{verbatim}
by výstup tejto funkcie vyzeral nasledovne:

\begin{table}[h]
\centering
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
\hline
            & je & matice & maticou & niekoľkých & slov & táto & toto & ukážka & výskytu \\ \hline
\textbf{1.} & 1  & 1      & 0       & 0          & 1    & 0    & 1    & 1      & 1       \\ \hline
\textbf{2.} & 1  & 0      & 1       & 1          & 1    & 1    & 0    & 1      & 0       \\ \hline
\end{tabular}
\caption{Ukážka výstupu funkcie Count Vectorizer bez predspracovania textu. Existuje mnoho krokov, ako zmenšiť takúto maticu -- lematizácia, ostránenie 'stop words' alebo definícia minimálneho či maximálneho počtu výskytov jednotlivých slov.}
\label{tab:contvectorizer}
\end{table}

V~prípade experimentov ale vďaka predspracovaniu táto matica nulové hodnoty obsahovať nebude (všetky slová budú mať výskyt aspoň raz).

Ďalším dôležitým krokom je použitie výpočtu TF-IDF ( Term Frequency -- Inverse Document Frequency). V~podstate ide o~výpočet významnosti slov v~korpuse dokumentov. Je to pomer výskytu konkrétneho výrazu v~jednom dokumente na počet výskytu slova v~celom korpuse:

\begin{equation}
\label{eq:TF-IDF}
TF-IDF(\textbf{t},\textbf{d}) = TF(\textbf{t},\textbf{d}) * IDF(\textbf{t})
\end{equation}

Pričom

\begin{equation}
\label{eq:TF}
TF(\textbf{t},\textbf{d}) = \frac{f_d(t)}{|d|}
\end{equation}

kde ${f_d(t)}$ určuje počet výskytov termu \textbf{t} v~dokumente \textbf{d} a $|d|$ je počet slov v~danom dokumente, 

\begin{equation}
\label{eq:IDF}
IDF(\textbf{t}) = log(\frac{1+n}{1+df(t)})+1
\end{equation}

kde $n$ je počet dokumentov v~korpuse a $df(t)$  počet dokumentov v~korpuse obsahujúcich term \textbf{t}. Výsledkom tejto funkcie je matica výskytov rovnakého tvaru, ako po použití \textit{CountVectorizer}, avšak jej hodnoty sú normalizované v~rozsahu $x\in<0,1>;\,x\in\mathbb{R}$.

pozn.: formula popísaná vyššie použitá vo funkcií \textbf{TfidfTransformer} z~knižnice sklearn sa odlišuje od klasickej rovnice -- výraz $+1$ na konci zabezpečuje, aby slová ktoré sa vyskytujú vo všetkých dokumentoch neboli ignorované a konštanta 1 pri čitateľovi aj menovateľovi zabezpečuje prevenciu pri delení nulou. 

\section{Vyhodnocovanie modelov}
\label{sec::vyhodnocovanie}

Vyššie spomenuté modely boli natrénované a následne otestované na množine dát z~datasetu, ktorá bola rozdelená v~pomere 70:30.  Po každom natrénovaní modelu je popri ich testovaní vytvárané aj vyhodnotenie ich spoľahlivosti. Na tento úkon bola použitá funkcia \textbf{classification\_report} z~balíku \textbf{scikit}, ktorá produkuje textový výstup klasifikácie pre lepšiu prehľadnosť. V~nej môžeme sledovať presnosť, citlivosť či spoľahlivosť daného modelu (viď. v~kapitole \nameref{sec::Experiments}, tabuľky
\ref{tab:exp1_table},
\ref{tab:exp2_table},
\ref{tab:exp3_table},
\ref{tab:exp4_table} a
\ref{tab:exp5_table}.


Pri výpočte týchto hodnôt sa používajú prvky z~kontingenčnej matice \ref{fig::confusionMatrix} (ktorá je tiež súčasťou výstupu), kde:

\begin{itemize}
    \item precision -- \textbf{TP / (TP +FP)},
    \item recall --  \textbf{TP / (TP +FN)},
    \item accuracy -- \textbf{TP + TN / počet všetkých vzoriek},
    \item F1-Score (harmonický priemer citlivosti a precíznosti) -- \\
    \textbf{2 * (recall * precision) / (recall + precision)},

    \item support -- počet reálnych výskytov danej triedy v~datasete.
\end{itemize}

Hlavným smerodajným ukazateľom je práve F1-Score, pomocou ktorého dokážeme porovnávať jednotlivé modely a nie len globálnu presnosť. Jeho interval je $x\in<0,1>\,x\in\mathbb{R}$, pričom čím vyššie skóre model po tréningu dosiahne, tým je schopnejší presnejšie klasifikovať nové vstupy. Je taktiež dôležité zohľadniť rovnováhu tried v~dátach a náročnosť klasifikácie -- v~prípade, že triedy dát nie sú vyvážené, môže model vynikať v~predikcii väčšej a/alebo častejšej triedy, ale zlyháva pri menšej a/alebo menej častej triede. V~takomto prípade sa používajú techniky vyvažovania dát, ako napríklad \uv{over-sampling} alebo \uv{under-sampling} (pre-vzorkovanie a pod-vzorkovanie).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\chapter {Implementácia}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Technológia a prostriedky}

Ako vývojové prostredie bol zvolený jazyk Python verzie 3.9, ktorý je vďaka množstvu knižniciam pre strojové učenie, spracovanie textu či práce s~grafickým používateľským rozhraním veľmi vhodný. Existuje k~nim taktiež dostatok online dokumentácie a vzorových ukážok, takže ich použitie je jednoznačné a prácu zľahčujúce. Konkrétne sú v~projekte využité nasledujúce knižnice:
\begin{itemize}
    \item pandas -- manipulácia s~dátami a ich analýza\footnote{\url{https://pandas.pydata.org/}},
    \item scikit-learn -- prediktívna analýza a modely, vektorizéry, skórovanie\footnote{\url{https://scikit-learn.org/stable/index.html}},
    \item matplotlib + seaborn-- grafy, vizualizácia\footnote{\url{https://matplotlib.org/}, \url{https://seaborn.pydata.org/}},
    \item nltk -- spracovanie prirodzeného jazyku\footnote{\url{https://www.nltk.org/}},
    \item keras -- neurónová sieť a nástroje na jej implementáciu\footnote{\url{https://keras.io/api/models/sequential}},
    \item lime -- analyzátor výstupu modelov\footnote{\url{https://lime-ml.readthedocs.io/en/latest/lime.html}},
    \item dill -- ukladanie modelov (deserializácia objektov)\footnote{\url{https://pypi.org/project/dill/}},
    \item ostatné (numpy, sys, string, os).  
\end{itemize}


\section{Programová časť}
Program je rozdelený na moduly, ktoré sú volané z~hlavného programu -- Spracovanie textu, jednotlivé modely a koncové rozhranie. Pomimo kódovej časti sú uložené predtrénované modely, datasety a k~nim použité pomocné súbory.  

\begin{figure}[H]
	\centering
	\includegraphics[width=0.9\textwidth]{implementacia.pdf}
	\caption{Vizualizácia implementácie - vzájomné vzťahy medzi jednotlivými skriptami (obdĺžniky) a potrebnými dátami (elipsy). Program sa dostane do šedo vyznačených zón práve na základe argumentov zadaných pri spúšťaní. Funkcie definované v~časti \textit{process\_text} sú samostatne volané modelmi pri trénovaní. }
	\label{fig:implementation}
\end{figure}



\subsection*{Hlavný modul}
Hlavný modul (\textit{main.py}) má za úlohu volať jednotlivé časti programu podľa argumentov zadaných užívateľom pri spúšťaní cez príkazový riadok:

\begin{description}
    \item[\texttt{-h, -{}-help:}] zobrazenie nápovedy,
    \item[\texttt{-m, -{}-model [názov modelu]:}] výber modelov,
    \item[\texttt{-p, -{}-pretrained:}] výber medzi uložením modelu po trénovaní a použitím predtrénovaného modelu,
    \item [\texttt{-url, -{}-url [odkaz na článok]:}] zdroj online textu pre evalváciu,
    \item[\texttt{-v, -{}-verbose:}] bližší popis vyhodnotenia (html dokument a obrázky matíc zámen).
\end{description}

Pre účely spúšťania programu s~využitím balíka FakeNewsClassifier \ref{sec:package} je vo funkcii hlavného modulu \textit{models.py}, ktorý obsahuje definíciu triedy a jej metód zastupujúcich prácu s~argumentami.

Návod na prácu obsahujúci kroky pre inštaláciu a spustenie programu je uvedený v~projektovej dokumentácii v~súbore \textit{README.md} (viď. \nameref{appendix:cd})


\subsection*{Spracovanie textu}
Pre spracovanie textu bola využitá knižnica \textbf{NLTK}, ktorá zabezpečuje všetky potrebné funkcie na predspracovanie článkov pre jednoduchšiu analýzu. Z~nej boli využité balíčky \textit{punkt} pre tokenizáciu, \textit{wordnet} pre lematizáciu a \textit{corpora} pre anglické 'stopwords'. Pre slovenské datasety bol dokument obsahujúci 418 častíc, citosloviec, zámen a iných rôznych \uv{vylúčených slov} prevzatý od autora \textit{genediazjr} zo stránky GitHub \footnote{\url{https://github.com/stopwords-iso/stopwords-sk}}.

V~module \textit{process\_text.py} je definovaná funkcia, ktorej vstupným argumentom je text v~čistej podobe. Ten sa v~prvom kroku očistí od interpunkcie a čísel (objekty v~knižnici \textit{string}), následne tokenizuje (vytvoria sa samostatne stojace slová) a prebehne lematizácia -- hľadanie základných tvarov slov v~dokumente, respektíve v~množine tokenov. Z~takto upravených slov je následne možné odstrániť tie nepotrebné, a to tak, že sa každé slovo porovnáva so skupinou 'stop words', v~našom prípade anglických či slovenských. Po tomto kroku je sada pripravená na vektorizáciu. Skrátená ukážka kódu:
\begin{verbatim}
def process_text(text):
 #odstránenie interpunkcie a čísel
    text = ''.join(    #odstránenie interpunkcie a čísel
        [c for c in text if c not in string.punctuation and 
        c not in string.digits])
 #tokenizácia
    tokens = word_tokenize(text)
 #lematizácia
    lemmatized = [WordNetLemmatizer.lemmatize(word) for word in tokens]
 #stop-words
    stopped = [word for word in lemmatized if word.lower() not in sw]  
    return stopped
\end{verbatim}

\subsection*{Modely}
Modely Naive Bayes, Decision tree a Support Vector Machine sú prístupné v~knižniciach \textit{sklearn} a model neurónovej siete je z~knižnice \textit{keras}. Pre uľahčenie práce a zjednotenie krokov trénovania a vyhodnocovania bolo naimplementovaný takzvaný \uv{pipelining} -- ten dovoľuje špecifikovať jednotlivé kroky a uniformne medzi nimi vykonávať vkladanie a transformáciu vstupných dát. Pre každý dizajn sa táto sekvencia skladá z~spracovania textu, vektorizácie a finálneho klasifikátoru. Ukážka pre model Naive Bayes:

\begin{verbatim}
pipeline = Pipeline([
        # strings to token integer counts
        ('bow', CountVectorizer(analyzer=pt.process_text)),
        # integer counts to weighted TF-IDF scores
        ('tfidf', TfidfTransformer()),
        # train on TF-IDF vectors w/ Naive Bayes classifier
        ('classifier', MultinomialNB()),
    ])
\end{verbatim}

Môžeme vidieť, že funkcia \textbf{CountVectorizer} (popísaná v~sekcii \ref{sec:vectorization}) umožňuje explicitné využitie externej funkcie na analýzu vstupu. Výstupná matica je vstupom pre váhovaciu funkciu, po ktorej model (koncový klasifikátor -- položka \uv{classifier}) pracuje priamo s~váhami jednotlivých slov. Rovnaký postup je vykonávaný aj pre ostatné modely. Trénovanie je potom vykonané volaním metódy \verb|pipeline.fit(X_train, y_train)| a hodnotenie testov a článkov metódou \verb|pipeline.predict(X_test)| \footnote{\textbf{X\_train}, \textbf{X\_test}, \textbf{y\_train} a \textbf{y\_test} sú množiny vstupných dát, ktoré vznikli pri rozdeľovaní na trénovaciu a testovaciu sadu funkciou \textbf{train\_test\_split} z~balíku \textit{scikit}. }. 

Použité modely boli väčšinou konštruované so základnými implicitnými parametrami, ktoré boli uvedené v~dokumentácii. Parametre, ktoré boli zmenené sú nasledovné:

\begin{itemize}
    \item SVM -- lineárne jadro, povolený výstup pravdepodobnosti (viď. \ref{sec:vectors_probability}),
    \item DT -- minimálny počet listových uzlov = 10 ( pre presnejší výstup pravdepodobností).
\end{itemize}

Neurónová sieť bola implementovaná trojvrstvovou architektúrou so sekvenčným prechodom a dopredným šírením (anglicky \uv{Feed-forward neural network}, viď. obrázok \ref{fig:snn_implementacia}). Pri jej kompilácii je ako optimalizátor zvolený (zároveň najčastejšie využívaný) \uv{adam} \footnote{\url{https://optimization.cbe.cornell.edu/index.php?title=Adam}}, stratovosť je sledovaná metódou \uv{sparse categorical crossentropy} \footnote{\url{https://towardsdatascience.com/cross-entropy-loss-function-f38c4ec8643e}} a hlavnou metrikou je presnosť modelu. Aby nedochádzalo k~zbytočným epochám pri trénovaní a znížila sa výpočetná náročnosť a riziko pretrénovania, sieť implementuje a predčasné ukončenie tréningu v~momente, kedy sa stratovosť prestane znižovať, takzvaný \uv{Early stopping} \footnote{\url{https://paperswithcode.com/method/early-stopping}}.

Po trénovaní program vypíše štatistiky úspešnosti a vyzýva užívateľa na potvrdenie uloženia modelu. Modely sa ukladajú ako celok vo vytvorenej \uv{pipeline}, čo uľahčuje jej znovu načítanie pri evalvácii článku. Na túto prácu je využitá knižnica \textit{dill}, ktorá metódou \textit{dump} jednotlivé objekty deserializuje a inverzne ich naopak serializuje. Pre uloženie neurónovej siete je samostatne ukladané spracovanie textu (tiež \textit{pipeline} a váhy modelu vo formáte \textit{.h5} 
\begin{figure}[H]
    \centering
    \includegraphics[width=0.9\textwidth]{obrazky-figures/snn_network.pdf}
    \caption{Implementovaná neurónová sieť. Vstup tvorí matica získaná z~TF-IDF váhovania. Každý neurón má konštantný vstup, takzvaný \uv{bias} (na obrázku vyznačený orientovanou šípkou), ktorý ovplyvňuje celkový výstup. Pre vstup skladajúci napríklad z~1000 hodnôt je počet trénovateľných parametrov, respektíve váh (na obrázku spojenia medzi neurónmi) $(1000*128+128) + (128*64+64) + (64*2+2) = \textbf{136,514}$. }
    \label{fig:snn_implementacia}
\end{figure}

\subsection*{Webové články}
Skript \textit{scraper.py} implementuje jednoduché spracovanie článkov z~poskytnutého odkazu. Využíva knižnicu \href{https://newspaper.readthedocs.io/en/latest/}{newspaper3k}, ktorá vytvára objekty článkov a poskytuje rôzne vstavané funkcie pre prácu s~týmito objektami. Na získanie celého textu článku sú využité štyri metódy:
\begin{verbatim}
    article = Article(url)                      # Vytvorenie objektu
    article.download()                          # Stiahnutie článku
    article.parse()                             # Spracovanie článku
    full_text = article.title + article.text    # Spojenie nadpisu a textu
\end{verbatim}

Spracovaný text je následne využitý ako vstup na predikciu vierohodnosti v~module \textit{saved\_models.py}. Ak je finálnym klasifikátorom neurónová sieť, je tento text po prevedení na maticu váh predimenzovaný tak, aby pasoval do jej vstupu.

\subsection*{Analýza vyhodnotenia a grafy}

Pre vyhodnotenie úspešnosti testovania modelov po tréningu bola použitý modul \textit{classification\_report} z~knižnice \textit{sklearn.metrics}. Interpretuje výstupné hodnotenie modelov, respektíve celkových predikcí \textit{pipelines} na testovacej množine pomocou f1-skórovania tak, ako je to popísané v~kapitole \nameref{sec::vyhodnocovanie}. Jeho výstup je možné taktiež po pretransformovaní na dátový rámec vizualizovať pomocou matice zámen. Ich vykresľovanie zabezpečuje štandardná funkcia \textit{matplotlib} pre tvorenie grafov v~jazyku \textit{python}. Pri hodnotení internetových príspevkov sú znovu načítané uložené \uv{pipelines} s~modelmi. Na základe vstupu od užívateľa je tiež možné nastaviť zobrazenie detailnejšieho popisu hodnoteného článku pri finálnej evalvácii. Túto možnosť zabezpečuje knižnica \textit{Lime Explainer} od autora Marco Tulio Correia Ribeiro \footnote{ \url{https://github.com/marcotcr/lime}}. Umožňuje \uv{nahliadnuť} do rozhodovania modelov strojového učenia tak, že pozná vstupné dáta a proces ich transformácie, čím nasledovne dokáže interpretovať finálnu predpoveď klasifikátorov na originálnom vstupe \cite{lime_text_explainer}. Tento nástroj je vhodný pre lepšie porozumenie rozhodovaniu modelu a dokáže pridať či ubrať na jeho dôveryhodnosti vďaka hlbšiemu porozumeniu zo strany človeka.
Použitie tohoto nástroju je veľmi intuitívne, pre ukážku:
\begin{verbatim}
explainer = LimeTextExplainer(                 # vytvorenie objektu
            class_names=['True', 'False'],     # triedy
            bow=True)                          # využitie "bag-of-words"
explanation = explainer.explain_instance(      # volanie metódy
            news,                              # článok
            pipeline_nb.predict_proba,         # predikcia modelu
            num_features=20)                   # najdôležitejšie slová
explanation.save_to_file('explanation.html')   # uloženie dokumentu
\end{verbatim}
Ukážkové výstupy pre vyhodnotenie článkov z~portálov \textbf{New York Times} a \textbf{WorldNetDaily} je možné vidieť v~prílohe \ref{appendix:lime}. Všetky výstupy analyzátorov sú ukladané do zložiek \verb|figures/..| pre obrázky matíc a \verb|html/..| pre Lime, oboch pod unikátnymi názvami obsahujúcimi dátum a čas vytvorenia.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\pagebreak

\section{Vytvorenie balíčku}
\label{sec:package}
Celá implementácia tejto bakalárskej práce bola tvorená so zámerom poskytnúť jednoduchý voľne dostupný nástroj pre klasifikáciu článkov pre programovací jazyk python. Projekt bol preto štruktúrne pozmenený tak, aby vyhovoval štandardom pre vytváranie balíkov a distribúcii pre publikovanie na verejnom indexe \hyperlink{https://pypi.org/project/FakeNewsClassifier/}{PyPi}. Sekcia popisuje a parafrázuje jednotlivé kroky práce podľa návodu zo stránok \hyperlink{https://www.python.org/}{Python.org}, presnejšie články \cite{packaging_python, manifest_python}. Vo výsledku tento úkon vyžadoval vytvorenie niekoľkých doplnkových súborov nasledovne:
\vspace{5mm}
\dirtree{%
.1 Package/.
.2 {LICENSE}.
.2 {pyproject.toml}.
.2 {README.md}.
.2 {MANIFEST.in}.
.2 {src/}.
.3 {main.py}.
.3 {\_\_init\_\_.py}.
.3 {FakeNewsClassifier/}.
.4 {datasets/}.
.5 {dezinfo\_sk.csv}.
.5 {stopwords.txt}.
.4 {saved\_models/}.
.5 {\underline{predtrénované modely} (vo formáte .pk a .hdf5)  \protect\footnotemark}.
.4 {\_\_init\_\_.py}.
.4 {models.py}.
.4 {process\_text.py}.
.4 {saved\_model.py}.
.4 {scraper.py}.
.4 {\underline{modely} -- nb.py, svm.py, snn.py, dt.py}.
}
\vspace{5mm}
Pričom licencia je typu \hyperlink{https://opensource.org/license/mit/}{MIT}, \textit{pyproject.toml} obshauje informácie o~použitej platforme na zostavenie projektu, zvolený programovací jazyk, dodatočné informácie ako knižnice využité v~projekte a ich verzie, popis projektu, rôzne odkazy a iné. Súbor \textit{MANIFEST.in} dovoľuje vložiť do balíku dodatočné súbory, ktoré nie sú automaticky pridané (mimo skriptov končiacich príponou \uv{.py}) -- vďaka nemu je možné publikovať aj slovenský dataset, \uv{stop words} a uložené predtrénované modely. Popis inštalácie balíčku, jeho používanie či priame spustenie jeho stiahnutej verzie je popísané v~dokumente \textit{README.md} vo formáte markdown.
Po úprave do tohoto rozloženia bolo spustené zostavenie balíka príkazom
\verb|python3 -m build|, ktorý vytvoril komprimované verzie jeho distribúcie vo formátoch \textbf{wheel} a \textbf{.tar.gz}. Následne bolo možné príkazom \verb|twine upload dist/*| nahrať tieto súbory zo zložky \textit{dist} na online index. 
Balík je momentálne dostupný pod menom FakeNewsClassifier a je možné ho nainštalovať cez príkazový riadok pomocou inštalátoru \textbf{pip} ako \verb|pip install FakeNewsClassifier|, stiahnuť zdrojové súbory\footnote{\url{https://pypi.org/project/FakeNewsClassifier/}}  alebo pridať do virtuálneho prostredia cez používaný editor.


\footnotetext{{%
Formát \textbf{.pk} je výstupom metódy dump pre uloženie \uv{pipeline} pre každý model. Formát \textbf{.hdf5} umožňuje uloženie váh neurónovej siete a jej štruktúry do jedného súboru.}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Testovanie a vyhodnocovanie}
\label{sec::Experiments}
Nasledujúca kapitola popisuje trénovanie a testovanie vytvorených modelov na troch rozličných datasetoch. Každá podkapitola opisuje ich zloženie a obsah (vo forme slovnej mapy), postup práce, výsledky testovania, porovnanie s~dostupnými dátami a výsledkami od iných používateľov (prevažne z~využitím \textit{BERT}, \textit{LSTM} alebo iných moderných prístupov) a evalváciu dvoch online článkov spolu s~ich referenčným hodnotením získaným z~online klasifikátoru \hyperlink{http://fakenews.research.sfu.ca/}{FakeNews.research.sfu.ca} (jeho bližší popis sa nachádza v~sekcii \ref{sec:modern}). Očakávané zaradenie je pri každom príspevku farebne označené.

\section{Experiment 1 -- Fake and Real News dataset}
Pri tomto pokuse bol použitý dataset \textbf{Fake and real news dataset} od autora Clément Bisaillon \footnote{\url{https://kaggle.com/datasets/clmentbisaillon/fake-and-real-news-dataset}}. Obshauje dva súbory typu .csv (Comma Separated Values) -- ich štruktúra je načrtnutá v~tabuľke \ref{tab:dezinfo_snippet}. Celkovo balík obsahuje 38 729 unikátnych hodnôt rozdelených do dvoch súborov Fake.csv (17 903 hodnôt) a True.csv (20 826 hodnôt).

Na účely klasifikácie nám postačia stĺpce obsahujúce titulok a text správy. Takýto výcuc zo záznamov prešiel spracovaním textu. Jeho vizualizácia pomocou mapy slov bola nasledujúca:

\begin{figure}[H]
	\centering
	\includegraphics[width=0.4\textwidth]{Wordclouds/WC_true+fake.png}
	\caption{Slovná mapa prvého experimentu }
	\label{fig:::Exp. 1 - Wordcloud}
\end{figure}


V~ďalšom kroku boli natrénované a otestované modely Multinomial Naive Bayes, Support Vectors Machine, Decision Tree a Sequential Neural Network (ďalej len \textbf{NB}, \textbf{SVM}, \textbf{DT}, \textbf{SNN}). V~nasledujúcej tabuľke môžeme vidieť výstupy skórovacej funkcie:

\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{\begin{tabular}[c]{@{}c@{}}Precision\\ (Fake/True)\end{tabular}} & \textbf{\begin{tabular}[c]{@{}c@{}}Recall\\ (Fake/True)\end{tabular}} & \textbf{\begin{tabular}[c]{@{}c@{}}F1-score\\ (Fake/True)\end{tabular}} & \textbf{Accuracy} \\ \hline
NB                     & 0.96/0.95                                                                & 0.95/0.97                                                             & 0.96/0.96                                                               & 0.96              \\ \hline
SVM                    & 1.00/0.99                                                                & 0.99/1.00                                                             & 1.00/1.00                                                               & 1.00              \\ \hline
DT                     & 0.98/0.99                                                                & 0.99/0.99                                                             & 0.99/0.99                                                               & 0.99              \\ \hline
SNN                    & 0.98/1.00                                                                & 1.00/0.98                                                             & 0.99/0.99                                                               & 0.99              \\ \hline
\end{tabular}
\caption{Skóre modelov v~prvom experimente}
\label{tab:exp1_table}
\end{table}




Na základe nameraných hodnôt môžeme vyvodiť dva závery -- buď sú naše modely nadpriemerne efektívne a dokážu klasifikovať vstupy s~viac ako 96\% úspešnosťou, alebo je tento dataset príliš jednoduchý, resp. obsahuje \textit{bias} (dosl. zaujatosť). Po dôkladnom skúmaní dát a diskusií používateľov s~podobnými presnosťami (dokopy 512 príspevkov, väčšinou s~\textbf{BERT} a \textbf{LSTM} modelmi s~úspešnosťami nad 95\%) na tomto súbore sa táto hypotéza potvrdila -- dáta sú aj napriek svojej rozsiahlosti príliš jednoduché na klasifikáciu a to hlavne kvôli dvom nedostatkom \cite{Josué}: 

\begin{itemize}
    \item Štruktúra textu a tokenov -- falošné správy obsahujú rádovo viac unikátnych slov (rôznych tokenov) než pravdivé správy, a to aj kvôli duplikácií niektorých záznamov . 
    \item Relevantnosť slov -- falošné správy obsahujú často značky používateľov Twitteru (kvôli majorite správ braných práve odtiaľ), a to hlavne účet Donalda Trumpa. Záznamy pravdivých správ obsahujú často názov spravodajskej služby Reuters.
\end{itemize}


Modely boli neskôr testované na článkoch \textit{EU diverts road-building funds into £1.7bn Ukraine ammunition plan } (tabuľka \ref{tab:tab_exp1_telegraph}) a \textit{Was the Drone Attack on the Kremlin a False Flag Operation?} (tabuľka \ref{tab:tab_exp1_infowars})

\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{Pravda}               & \textbf{Lož} \\ \hline
NB                     & {\color[HTML]{34FF34} 64.00\%} & 36.00\%       \\ \hline
DT                     & {\color[HTML]{34FF34} 95.00\%} & 5.00\%       \\ \hline
SVM                    & {\color[HTML]{34FF34} 60.88\%} & 39.12\%       \\ \hline
SNN                    & {\color[HTML]{34FF34} 59.25\%} & 40.75\%       \\ \hline
\end{tabular}
\caption{Evalvácia \href{https://www.telegraph.co.uk/world-news/2023/05/03/eu-brussels-ukraine-weapons-arms-building-roads/}{článku z~portálu The Telegraph}}
\label{tab:tab_exp1_telegraph}
\end{table}


\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{Pravda}                & \textbf{Lož}                   \\ \hline
NB                     & {\color[HTML]{000000} 21.81\%} & {\color[HTML]{FE0000} 78.19\%} \\ \hline
DT                     & {\color[HTML]{000000} 10.00\%} & {\color[HTML]{FE0000} 90.00\%} \\ \hline
SVM                    & {\color[HTML]{000000} 10.75\%}  & {\color[HTML]{FE0000} 89.25\%} \\ \hline
SNN                    & {\color[HTML]{000000} 9.97\%}  & {\color[HTML]{FE0000} 90.03\%} \\ \hline
\end{tabular}
\caption{Evalvácia \href{https://www.infowars.com/posts/was-the-drone-attack-on-the-kremlin-a-false-flag-operation-more-likely-the-ukrainians-were-behind-it/}{článku z~portálu Infowars.com}}
\label{tab:tab_exp1_infowars}
\end{table}

Online klasifikátor zaradil oba články do kategórie \uv{False} s~hodnotou istoty 0.41 pre prvý článok a 0.29 pre druhý článok.


\section{Experiment 2 -- WELFake Dataset}
\label{sec::Experiment 2.}

Ďalší experiment bol prevedený na dátach zo súboru WELFake Dataset. Jedná sa o~novší súbor, ktorý je často upravovaný a aktualizovaný rôznymi používateľmi. Popis zámeru a postupu jeho vytvorenia je dostupný v~oficiálnom dokumente IEEE (Institute of Electrical and Electronics Engineers). Jedná sa o~spojenie viacero dostupných datasetov do jedného celku o~veľkosti 72 134 záznamov ( 35 028 reálnych a 37 106 falošných správ) \cite{WELFake}.

Jeho štruktúra je podobná ako v~predošlom experimente -- na spracovanie sa taktiež použil titulok a obsah správy. Správy už obsahovali triedu pravdivosti ako jednu hodnotu záznamu (stĺpec 'label'), teda nebolo potrebné vykonávať spájanie rámcov. Po vykonaní spracovania záznamov vieme taktiež vizualizovať ich zloženie: 

\begin{figure}[H]
	\centering
	\includegraphics[width=0.4\textwidth]{Wordclouds/WC_welfake.png}
	\caption{Slovná mapa druhého experimentu }
	\label{fig::Exp. 2 - Wordcloud}
\end{figure}

Po tréningu a testovaní boli výsledky modelov nasledujúce:

\begin{table}[h]
\centering
\begin{tabular}{|c|c|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{\begin{tabular}[c]{@{}c@{}}Precision\\ (Fake/True)\end{tabular}} & \textbf{\begin{tabular}[c]{@{}c@{}}Recall\\ (Fake/True)\end{tabular}} & \textbf{\begin{tabular}[c]{@{}c@{}}F1-score\\ (Fake/True)\end{tabular}} & \textbf{Accuracy} \\ \hline
NB                     & 0.93/0.86                                                                & 0.86/0.93                                                             & 0.90/0.89                                                               & 0.90              \\ \hline
SVM                    & 0.97/0.98                                                                & 0.98/0.97                                                             & 0.97/0.98                                                               & 0.98              \\ \hline
DT                     & 0.93/0.95                                                                & 0.95/0.94                                                             & 0.94/0.95                                                               & 0.94              \\ \hline
SNN                    & 0.98/0.98                                                                & 0.98/0.98                                                             & 0.98/0.98                                                               & 0.98              \\ \hline
\end{tabular}
\caption{Skóre modelov v~druhom experimente.}
\label{tab:exp2_table}
\end{table}



Tieto hodnoty sú bližšie k~očakávaným výsledkom modelov na základe všeobecnej úspešnosti, avšak modely stále nadobúdajú vysokú úspešnosť. V~sekcí s~kódmi ľudí používajúcich WELFake dataset nna stránke Kaggle.com \footnote{\url{https://www.kaggle.com/code/anubhabkhanra/fake-news-classification}, sekcia \uv{Code}} bola priemerná úspešnosť modelov niekde okolo 95\% pre BERT modely a o~čosi menej pre klasické modely. Najlepšie si viedol model podporných vektorov a model neurónovej siete.  

Testovanie prebehlo na textoch s~názvami \textit{Pakistan school shooting leaves several teachers dead} (tabuľka \ref{tab:tab_exp2_bbc}) a \textit{Obama officials 'met with Jeffrey Epstein,' unearthed docs reveal} (tabuľka \ref{tab:tab_exp2_wnd}).

\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{Pravda}               & \textbf{Lož} \\ \hline
NB                     & {\color[HTML]{32CB00} 70.00\%} & 30.00\%       \\ \hline
DT                    & {\color[HTML]{34FF34} 47.30\%} & 52.70\%       \\ \hline
SVM                    & {\color[HTML]{34FF34} 51.10\%} & 48.90\%       \\ \hline
SNN                    & {\color[HTML]{34FF34} 84.00\%} & 16.00\%       \\ \hline
\end{tabular}
\caption{Evalvácia \href{https://www.bbc.com/news/world-asia-65480770}{článku z~portálu BBC News}.}
\label{tab:tab_exp2_bbc}
\end{table}


\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{Pravda}                & \textbf{Lož}                   \\ \hline
NB                     & {\color[HTML]{000000} 45.81\%} & {\color[HTML]{FE0000} 55.19\%} \\ \hline
DT                     & {\color[HTML]{000000} 35.50\%} & {\color[HTML]{FE0000} 64.50\%} \\ \hline
SVM                    & {\color[HTML]{000000} 16.55\%}  & {\color[HTML]{FE0000} 83.45\%} \\ \hline
SNN                    & {\color[HTML]{000000} 5.80\%}  & {\color[HTML]{FE0000} 94.20\%} \\ \hline
\end{tabular}
\caption{Evalvácia \href{https://www.wnd.com/2023/05/obama-officials-met-jeffrey-epstein-unearthed-docs-reveal/}{článku z~portálu WorldNetDaily.com}.}
\label{tab:tab_exp2_wnd}
\end{table}

Online klasifikátor zaradil oba články do kategórie \uv{False} s~hodnotou istoty 0.20 pre prvý článok a 0.19 pre druhý článok.
\pagebreak

\section{Experiment 3 -- Výber príspevkov z~Twitter-u}

Zvolený dataset je prevzatý z~verejne zdieľaného repozitáru na stránke GitHub od používateľa KaiDDML \footnote{\url{https://github.com/KaiDMML/FakeNewsNet/tree/master/dataset}}, tiež \cite{shu2018fakenewsnet}. Jedná sa o~minimalistický výpis záznamov príspevkov z~Twitter-u v~štyroch súbory typu .csv. Rozdelené sú podľa zdroja a triedy -- časť je zo stránok Politifact\footnote{\url{https://www.politifact.com/}} a Gossipcop \footnote{Stránka od septembra roku 2022 nie je viac dostupná.} 

Jeho štruktúra je odlišná od predchádzajúcich datasetov, na naše účely budeme potrebovať záznamy \uv{title} a jednotlivé triedy musíme priradiť manuálne. Následne boli jednotlivé súbory pre zachovanie konzistencie a kompatibility spojené do jedného dátového rámca.  \footnote{Tento úkon bol prevedený manuálne v~externom skripte, ktorý nie je súčasťou výsledného projektu.}. Po týchto úpravách vieme súbory zlúčiť a pracovať s~nimi ako s~jedným rámcom podobným spôsobom ako v~predošlých experimentoch. Vizualizácia záznamov:

\begin{figure}[H]
	\centering
	\includegraphics[width=0.8\textwidth]{Wordclouds/WC_gossip_polit.png}
	\caption{Slovná mapa tretieho experimentu.}
	\label{fig::Exp. 3 - Wordcloud}
\end{figure}

Výsledky trénovania a následného testovania sú nasledovné:

\begin{table}[h]
\centering
\begin{tabular}{|c|c|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{\begin{tabular}[c]{@{}c@{}}Precision\\ (Fake/True)\end{tabular}} & \textbf{\begin{tabular}[c]{@{}c@{}}Recall\\ (Fake/True)\end{tabular}} & \textbf{\begin{tabular}[c]{@{}c@{}}F1-score\\ (Fake/True)\end{tabular}} & \textbf{Accuracy} \\ \hline
NB                     & 0.28/0.99                                                                & 0.86/0.81                                                             & 0.43/0.89                                                               & 0.81              \\ \hline
SVM                    & 0.53/0.95                                                                & 0.76/0.86                                                             & 0.63/0.90                                                               & 0.84              \\ \hline
DT                     & 0.53/0.86                                                                & 0.56/0.85                                                             & 0.54/0.86                                                               & 0.78              \\ \hline
SNN                    & 0.63/0.89                                                                & 0.66/0.88                                                             & 0.64/0.88                                                               & 0.82              \\ \hline
\end{tabular}
\caption{Skóre modelov v~treťom experimente.}
\label{tab:exp3_table}
\end{table}



Môžeme vidieť, že najlepšie si opäť viedol model podporných vektorov. Tento krát je však možné všimnúť si veľký rozdiel medzi triedami, čo je čiastočne zapríčinené nerovnomerným rozložením hodnôt a taktiež kvôli zaujatosti vloženej do týchto ukážok, a to práve v~záznamoch \uv{true} (politifact aj gossipcop), ktoré obsahujú viac textu než záznamy 'fake'. V~porovnaní s~výsledkami tejto zbierky dát uvedených priamo v~publikácii \cite{shu2018fakenewsnet} si autorove modely viedli horšie zhruba o~15\%. Táto skutočnosť môže byť následkom či už nekompletnosťou dát (v~publikácii bol použitý celý súbor príspevkov, nie len jeho časť) alebo už spomínaným nevhodným rozložením.

Online prípevky \textit{Millions of Americans could suffer if debt showdown isn’t solved in next 30 days} (tabuľka \ref{tab:tab_exp3_cnn}) a \textit{Biden Troop Deployment to Border Won’t Deter Illegal Migrants – Texas Governor} (tabuľka \ref{tab:tab_exp3_infowars}) dosiahli nasledujúce ohodnotenia:

\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{Pravda}               & \textbf{Lož} \\ \hline
NB                     & {\color[HTML]{32CB00} 44.70\%} & 55.30\%       \\ \hline
DT                     & {\color[HTML]{34FF34} 72.98\%} & 27.02\%       \\ \hline
SVM                    & {\color[HTML]{34FF34} 69.58\%} & 30.42\%       \\ \hline
SNN                    & {\color[HTML]{34FF34} 89.20\%} & 11.80\%       \\ \hline
\end{tabular}
\caption{Evalvácia \href{https://edition.cnn.com/2023/05/02/politics/debt-showdown-biden-mccarthy/index.html}{článku z~portálu CNN}}
\label{tab:tab_exp3_cnn}
\end{table}


\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{Pravda}                & \textbf{Lož}                   \\ \hline
NB                     & {\color[HTML]{000000} 14.88\%} & {\color[HTML]{FE0000} 85.12\%} \\ \hline
DT                     & {\color[HTML]{000000} 20.00\%} & {\color[HTML]{FE0000} 80.00\%} \\ \hline
SVM                    & {\color[HTML]{000000} 15.05\%}  & {\color[HTML]{FE0000} 84.95\%} \\ \hline
SNN                    & {\color[HTML]{000000} 2.77\%}  & {\color[HTML]{FE0000} 97.23\%} \\ \hline
\end{tabular}
\caption{Evalvácia \href{https://www.infowars.com/posts/biden-troop-deployment-to-border-wont-deter-illegal-migrants-texas-governor/}{článku z~portálu Infowars.com}}
\label{tab:tab_exp3_infowars}
\end{table}

Online klasifikátor zaradil článok CNN do kategórie \uv{True} s~hodnotou istoty -0.08 a článok Infowars do kategórie \uv{False} s~istotou 0.20.


\pagebreak

\section{Experiment 4 -- Real\&Fake News dataset}

Posledný dataset je opäť zo stránky kaggle.com, tentokrát od používateľa \textit{nop.ai} \footnote{\url{https://www.kaggle.com/datasets/nopdev/real-and-fake-news-dataset}}. Obsahuje 6060 unikátnych záznamov, čo je celkovo menej než doposiaľ využívané súbory, avšak na rozdiel od nich má omnoho rovnomernejší pomer reálnych a falošných správ (50:50). Je štrukturovaný podobne ako väčšina datasetov z~tejto oblasti -- obsahuje index, titulok, text a označenie true / fake. Tak ako v~\hyperlink{Experiment 2.}{druhom experimente} na klasifikáciu využijeme stĺpce ''label'' a ''text''. Vizualizácia pred spracovaním:  

\begin{figure}[H]
	\centering
	\includegraphics[width=0.4\textwidth]{Wordclouds/WC_news.png}
	\caption{Slovná mapa štvrtého experimentu }
	\label{fig::Exp. 4 - Wordcloud}
\end{figure}

Výsledky trénovania a následného testovania sú nasledovné:


\begin{table}[h]
\centering
\begin{tabular}{|c|c|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{\begin{tabular}[c]{@{}c@{}}Precision\\ (Fake/True)\end{tabular}} & \textbf{\begin{tabular}[c]{@{}c@{}}Recall\\ (Fake/True)\end{tabular}} & \textbf{\begin{tabular}[c]{@{}c@{}}F1-score\\ (Fake/True)\end{tabular}} & \textbf{Accuracy} \\ \hline
NB                     & 0.67/0.99                                                                & 0.99/0.77                                                             & 0.80/0.87                                                               & 0.84              \\ \hline
SVM                    & 0.95/0.92                                                                & 0.92/0.96                                                             & 0.94/0.94                                                               & 0.94              \\ \hline
DT                     & 0.82/0.84                                                                & 0.84/0.82                                                             & 0.83/0.83                                                               & 0.83              \\ \hline
SNN                    & 0.95/0.95                                                                & 0.95/0.95                                                             & 0.95/0.95                                                               & 0.95              \\ \hline
\end{tabular}
\caption{Skóre modelov v~štvrtom experimente.}
\label{tab:exp4_table}
\end{table}




Model neurónovej siete opäť nadobudol najlepšie výsledky spomedzi všetkých modelov. Výsledky používateľov tohoto datasetu trénujúci modely transfotmátorov boli porovnateľné, s~priemernou presnosťou okolo 95\%. Následne bola prevedená klasifikácia online správ. Výsledky evalvácie článkov \textit{Sudan Erupts in Chaos: Who Is Battling for Control and Why It Matters} (tabuľka \ref{tab:tab_sudan}) a \textit{'Jaw dropping:' Now 2nd member of Congress warns of Biden 'prostitution'} (tabuľka \ref{tab:tab_wnd}):

\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{Pravda}               & \textbf{Lož} \\ \hline
NB                     & {\color[HTML]{32CB00} 78.00\%} & 22.00\%       \\ \hline
DT                     & {\color[HTML]{34FF34} 90.00\%} & 10.00\%       \\ \hline
SVM                    & {\color[HTML]{34FF34} 63.18\%} & 36.19\%       \\ \hline
SNN                    & {\color[HTML]{34FF34} 57.20\%} & 42.80\%       \\ \hline
\end{tabular}
\caption{Evalvácia \href{https://www.nytimes.com/article/sudan-khartoum-military.html}{článku z~portálu New York Times.}}
\label{tab:tab_sudan}
\end{table}


\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{Pravda}                & \textbf{Lož}                   \\ \hline
NB                     & {\color[HTML]{000000} 71.81\%} & {\color[HTML]{FE0000} 28.19\%} \\ \hline
DT                     & {\color[HTML]{000000} 0.00\%} & {\color[HTML]{FE0000} 100.00\%} \\ \hline
SVM                    & {\color[HTML]{000000} 6.25\%}  & {\color[HTML]{FE0000} 93.75\%} \\ \hline
SNN                    & {\color[HTML]{000000} 0.37\%}  & {\color[HTML]{FE0000} 99.63\%} \\ \hline
\end{tabular}
\caption{Evalvácia \href{https://www.wnd.com/2023/04/jaw-dropping-now-2nd-member-congress-warns-biden-prostitution/}{článku z~portálu WorldNetDaily.com}}
\label{tab:tab_wnd}
\end{table}

Vyslovene \uv{mimo} očakávanú hodnotu sa dostal len model Naive Bayes. Ďalšou prekvapivou hodnotou je aj 100\% istota modelu rozhodovacieho stromu, čo však môže byť vysvetlené jeho nedostatočným rozvetvením v~listových uzloch. Na základe výsledkov testovania nie je tento výsledok veľmi presvedčivý. Online klasifikátor zaradil článok New york Times do kategórie \uv{True} s~hodnotou istoty -0.12 a článok WND do kategórie \uv{False} s~istotou 0.29.

\pagebreak
\section{Experiment 5 -- Dezinfo SK}
\label{sec::Experiment_5}

Posledný experiment bol vykonaný na zbierke dát Dezinfo SK, ktorý bol vytvorený ako súčasť tejto baklárskej práce. Jeho štruktúra je rovnako štandardná, ako pri predošlých datasetoch. Obsahuje články z~rôznych slovenských novinových portálov, ktoré boli manuálne zozbierané a ohodnotené. Viac informácii o~postupe jeho vytvorenia a štruktúry je uvedených v~prílohe \nameref{appendix:dezinfo}.
Najčastejšie vyskytujúce sa slová môžeme vidieť na tomto obrázku:

\begin{figure}[H]
	\centering
	\includegraphics[width=0.4\textwidth]{Wordclouds/WC_dezinfo.png}
	\caption{Slovná mapa piateho experimentu. }
	\label{fig::Exp. 5 - Wordcloud}
\end{figure}


Modely natrénované a otestované na týchto dátach nadobudli nasledujúce hodnotenia:

\begin{table}[ht]
\centering
\resizebox{\columnwidth}{!}{%
\begin{tabular}{|c|c|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{\begin{tabular}[c]{@{}c@{}}Precision\\ (Fake/True)\end{tabular}} & \textbf{\begin{tabular}[c]{@{}c@{}}Recall\\ (Fake/True)\end{tabular}} & \textbf{\begin{tabular}[c]{@{}c@{}}F1-score\\ (Fake/True)\end{tabular}} & \textbf{Accuracy} \\ \hline
NB                     & 0.88/0.79                                                                & 0.82/0.85                                                             & 0.85/0.81                                                               & 0.83              \\ \hline
SVM                    & 0.85/0.88                                                                & 0.85/0.88                                                             & 0.85/0.88                                                               & 0.87              \\ \hline
DT                     & 0.86/0.81                                                                & 0.80/0.87                                                             & 0.83/0.84                                                               & 0.83              \\ \hline
SNN                    & 0.94/0.85                                                                & 0.89/0.92                                                             & 0.91/0.88                                                               & 0.90              \\ \hline
\end{tabular}
}
\caption{Skóre jednotlivých modelov v~experimente.}
\label{tab:exp5_table}
\end{table}


Na základe týchto testov nevieme dopredu s~istotou prehlásiť, že dáta sú bezchybné a nevedú k~zaujatosti modelov, avšak výsledky naznačujú, že ich štruktúra a obsah je vhodne ucelený a modely sa na ňom trénujú adekvátne. Vzniknuté modely boli v~ďalšom kroku boli s~využitím uložených modelov z~trénovacej fáze odskúšané priamo na článkoch \textit{Kyjev kupuje od Varšavy ďalšiu techniku} (tabuľka \ref{tab:tab_ta3}) a \textit{Démonom posadnutá umelá inteligencia sa učí ako použiť syntetickú biológiu, aby si vytvorila super ľudské telo} (tabuľka \ref{tab:tab_badatel}), ktoré sa nenachádzajú v~pôvodnom datasete.


\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{Pravda}               & \textbf{Lož} \\ \hline
NB                     & {\color[HTML]{32CB00} 55.53\%} & 44.47\%       \\ \hline
DT                     & {\color[HTML]{34FF34} 68.75\%} & 31.25\%       \\ \hline
SVM                    & {\color[HTML]{34FF34} 86.09\%} & 13.91\%       \\ \hline
SNN                    & {\color[HTML]{34FF34} 76.30\%} & 23.70\%       \\ \hline
\end{tabular}
\caption{Evalvácia \href{https://www.ta3.com/clanok/263221/transportery-minomety-aj-protilietadlove-strely-kyjev-kupuje-od-varsavy-dalsiu-techniku}{článku z~portálu TA3}.}
\label{tab:tab_ta3}
\end{table}


\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Použitý model} & \textbf{Pravda}                & \textbf{Lož}                   \\ \hline
NB                     & {\color[HTML]{000000} 36.61\%} & {\color[HTML]{FE0000} 63.39\%} \\ \hline
DT                     & {\color[HTML]{000000} 36.36\%} & {\color[HTML]{FE0000} 63.64\%} \\ \hline
SVM                    & {\color[HTML]{000000} 1.29\%}  & {\color[HTML]{FE0000} 98.71\%} \\ \hline
SNN                    & {\color[HTML]{000000} 2.56\%}  & {\color[HTML]{FE0000} 97.44\%} \\ \hline
\end{tabular}
\caption{Evalvácia \href{https://www.badatel.net/demonom-posadnuta-umela-inteligencia-sa-uci-ako-pouzit-synteticku-biologiu-aby-si-vytvorila-super-ludske-telo/}{článku z~portálu Badatel.net}.}
\label{tab:tab_badatel}
\end{table}

Tieto výsledky korešpondujú s~očakávaným zaradením týchto článkov. Ich hodnotenie však nie je možné porovnať s~online nástrojom, ktorý bol trénovaný na sade anglických textov a cudzojazyčné výrazy by mohli byť interpretované ako chybné či zavádzajúce.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%===============================================================================
\pagebreak
\section{Návrh na rozšírenie tejto práce}
V~tejto časti sú popísané ďalšie návrhy na rozšírenie programovej časti bakalárskej práce a datasetu.

\subsection*{Programová časť}
Ako pri každom projekte v~oblasti informačných technológii, možnosti na úpravu a zlepšenie kódu je vždy možné nájsť. Keďže v~práci bolo použité predspracovanie textu, existujú varianty pre jeho vylepšenie -- úprava minimálneho či maximálneho počtu príznakov extrahovaných z~textu, lepšia lematizácia a podobne. Tento krok priamo ovplyvňuje výslednú presnosť a výpočetnú náročnosť celého projektu.
V~ďalšom rade sa ponúka zväčšiť výber dostupných modelov strojového učenia. V~dnešnej dobe existuje mnoho klasifikátorov založených či už to na matematických modeloch, neurónových sieťach či predtrénovaných transformátoroch, ako napríklad 
Passive Agressive Classifier\footnote{\url{https://vitalflux.com/passive-aggressive-classifier-concepts-examples/}}, 
Metódy najbližších susedov \footnote{\url{https://scikit-learn.org/stable/modules/neighbors.html}},
LSTM \footnote{\url{https://keras.io/api/layers/recurrent_layers/lstm/}} alebo
BERT modely \footnote{\url{https://www.tensorflow.org/text/tutorials/classify_text_with_bert}}.
Pre výskumné účely je taktiež možné vrámci jednotlivých krokov trénovania a vyhodnocovania ukladať či vypisovať priemerné a aktuálne presnosti modelov, odhadovaný výpočtový čas či iné štatistické údaje.

\subsection*{Dataset}
Tvorba súboru dát implicitne poskytuje príležitosť jeho rozšírenia a zvýšenia kvality. Jeho momentálny rozsah poskytuje minimálnu funkcionalitu a svojou rozsiahlosťou nemôže konkurovať tým bežne využívaným. Napriek tomu poskytuje potrebný základ pre účely klasifikácie a eventuálnu automatizáciu pridávania ďalších článkov. Hlavným úskalím však naďalej zostáva potreba externej validácie priraďovania tried --  ak má byť dataset relevantný, nepostačuje len jeho kvantita, ale aj kvalita.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Záver}
Cieľom tejto práce bolo vytvoriť a poskytnúť začínajúcim programátorom jednoduchú knižnicu pre klasifikáciu novinových článkov na základe ich spoľahlivosti. Tento cieľ bol dosiahnutý -- Balíček obsahujúci všetky nástroje je voľne dostupný a umožňuje jednoduchú prácu s~rôznymi modelmi strojového učenia. Je možné ho nainštalovať priamo do virtuálneho prostredia pre jazyk \textbf{python} alebo stiahnuť jeho zdrojové kódy (viď. sekcia \ref{sec:package}). Používateľovi stačí definovať zdroj dát na klasifikáciu v~štandardnom formáte a model ktorý chce použiť. Celé trénovanie a predspracovanie dát prebieha na pozadí a nie je potrebné ho implementovať. Poskytnuté sú taktiež predtrénované modely vhodné na priamu evalváciu článkov z~daného odkazu. Ďalším výstupom tejto práce je zbierka slovenských \uv{Fake News} spolu s~pravdivými správami z~online spravodajských portálov. Tento dataset je taktiež voľne prístupný a ponúka rozmanité uplatnenie nie len pre slovenský jazyk, ale taktiež pre všeobecné klasifikátory článkov v~rôznych jazykoch. Hlavným zámerom jeho vytvorenia bolo to,že prístup k~takýmto dátam v~slovenčine
je veľmi náročný -- aj keď’ existujú spoločnosti, ktoré
sa klasifikácii textu venujú, ich zdroje sú často proprietárne a nedostupné. Vytvorenie takéhoto súboru dát bolo zložité hlavne z~časového hľadiska, no vo výsledku je možné ho ľahko a intuitívne používať. Zvolené modely sa pri ich vytváraní preukázali ako dostatočne spoľahlivé a vierohodné pre túto činnosť aj napriek ich \uv{zastaralosti}. Hlavným zistením tejto práce je celková závislosť presnosti vyhodnocovania na kvalite a kvantite vstupných dát -- aj pri najmodernejších prístupoch sa zakladá práve na týchto aspektoch a aj tie najrozsiahlejšie transformátory potrebujú kvantá dát na ich natrénovanie. Avšak vďaka neustále platnému Moorovmu pravidlu \cite{moore_exponential} počet tranzistorov v~procesoroch a s~tým spojená výpočetná sila  moderných počítačov neustále rastie, čo sa priamo odráža aj v~odvetviach ako je spracovanie prirodzeného jazyka, kde sú stroje schopné efektívne spracovať enormné množstvá textu. 
Táto práca bola súčasťou študentskej konferencie inovácií, technológií a vedy v~IT Excel@FIT2023.