U ovom članku ću predstaviti model koji je razvijen u tvrtki Poslovna Inteligencija za potrebe analize mišljenja. O analizi mišljenja je bilo govora u ranijim člancima, a ovdje ćemo se bazirati na jedan od pristupa analize mišljenja dok ćemo drugi odraditi u jednom od sljedećih članaka. Dakle, analizu mišljenja možemo provoditi na razne načine, a Poslovna Inteligencija je izabrala dva: analiza mišljenja pomoću rječnika i pomoću algoritama za klasifikaciju (strojno učenje). U ovom članku će se predstaviti pojednostavljena metoda analize mišljenja pomoću rječnika. Za naš primjer koristit će se model koji analizira tvitova. Dakle, podaci se uzimaju s Twittera, uz pomoć određene ključne riječi (npr. hotels) te se pune u Hbase. Zatim se ti podaci učitavaju iz Hbase u alatu KNIME preko posebnog noda, koji je napravljen posebno za ove potrebe od strane Poslovne Inteligencije. Ovo radimo s razlogom da možemo konstantno razvijati s istim setom podataka, a kasnije možemo raditi i direktno na Twitter streamu. Nakon što su podaci učitanu u KNIME-u, zabava može početi.
Sljedeći korak je svaki tvit pretvoriti u dokument (čitaj kao samo drugi „format“ istog) koji sadrži neke dodatne atribute koji su skriveni, ali su uključeni unutar dokumenta (datum, ključna riječ …). Kad sve tvitove imamo u obliku dokumenata možemo uključiti rječnike u analizu. Za potrebe ove analize pozitivne i negativne riječi su odvojene te se pronalaze u tvitovima uz pomoću noda u KNIME pod nazivom Dictionary tagger. Prvo pronalazimo sve pozitivne riječi iz rječnika u tvitovima, te zatim sve negativne riječi iz rječnika u tvitovima. Dakle, pronašli smo samo one riječi koje uopće možemo analizirati tj. koje se nalaze u našem rječniku te smo svaku riječ koju smo pronašli označili s pozitivno ili negativno ovisno o tome u kojem smo je rječniku pronašli. Sljedeći korak je sve tvitove rastaviti na riječi pomoću noda BoW creator (Bag of words) te smo, s obzirom na to da smo u prethodnom nodu označili sve riječi koje smo pronašli s odgovarajućim tagom, u mogućnosti vidjeti točno koja je riječ pozitivna/negativna te u kojem smo je tvitu pronašli.
Sad kad smo napravili naš BoW slijede nodovi koji nam služe za „preprocessing“. Ovi koraci nam pomažu kako bi normalizirali dobiveni tekst u odgovarajuću formu kako bi ih lakše koristili kasnije u analizi. Korišteni su nodovi Number Filter, Punctuation Erasure, N Chars Filter, case converter, Stop words Filter, te stemmer.
• Prva dva su dakle brisanje brojeva, točki, zareza itd. No, bitno je naglasiti da su npr. smajlići također bitni za analizu te se mogu koristiti za predviđanje sentimenta, no u ovoj metodologiji nisu korišteni.
• Zatim brišemo sve riječi koje sadrže manje od 3 slova (pomoću N Chars filter), pomoću case convertera sve riječi prebacujemo u mala slova, gdje pomažemo računala da riječi poput GOOD i good prepozna kao jednu riječ, a ne dvije kao do sada.
• Stop words uklanjaju česte riječi iz engleskog jezika poput the, on, at, is .
• Stemmer nam pomaže da riječi poput hotel, hotels pretvorimo u riječ hotel. Dakle nećemo imati dvije riječi koje zapravo znače isto, ako gledamo u kontekstu analize mišljenja nego samo jednu.
• Ono što smo također uračunali je i važnost riječi koja dolazi prije određene riječi. Tako ako prije riječi good imamo not, dakle not good, naznačimo računalu da riječi good promijeni polaritet (iz pozitivne u negativno). Ovaj korak je veoma važan i pomaže nam bolje uhvatiti mišljenje određene osobe. Osim riječi not tu su very, great,never itd.
U fazi preprocessinga možemo koristiti ove nodove, a i ne moramo, ali trebamo znati da to sve utječe na daljnji tijek analize.
Ok, nakon ovih koraka prelazi se na dodavanje vrijednosti riječima i pri tome se koristi veoma popularna formula u svijetu tekst analitike, a to je tf x idf. Dakle, za svaku riječ (koja je preživjela naš proces „preprecessinga“) računamo tf (term frequency) i idf (inverse document frequency) te umnožak to dvoje.
I. korak
TF= broj pojavljivanja određene riječi u određenom tvitu / broj riječi u tom tvitu
Na primjer riječ beauftiful se pojavljuje 1 u tvitu kojima ima 8 riječi :
TF = 1/8 = 0,125 ili 12,5 %
II. korak
IDF= log(ukupan broj tvitova / ukupan broj tvitova s određenom riječi)
Na primjer ako se riječ beauftiful pojavi u 500 tvitova od njih 50 000, IDF je:
IDF= log (50 000 / 500 ) = 2
III. korak
TF x IDF
Dakle, što broj spominjanja riječi beautiful u određenim tvitovima pada, tf x idf raste. Nama za potrebe analize trebaju one riječi koje su važne za određivanje sentimenta i zato nam tf x idf itekako pomaže.
Kao rezultat dobijemo vrijednost koja nam govori koliko je određena riječ bitna u odnosu na našu kolekciju dokumenata (tvitova). Nakon toga računamo tzv. Sentiment Score koji zapravo glasi:
attitude x changePolarity x (TF x IDF)
Atitude je vrijednost koja ovisi o oznaci koju riječ nosi (ako je riječ o pozitivnoj riječi radi se o vrijednosti; 1, negativna ima vrijednost; -1, a neutralna – dakle ona koja nije dobila oznaku; 0). ChangePolarity je ona promjena koja se dogodila ako se ispred te riječi nalazi riječ not, very itd. (npr. riječ not doprinosi s vrijednosti -1, a riječ perfect s vrijednost 2). Zamislite ih kao proizvodno određene težinske faktore.
Finalni korak je grupirati dokumente po dokumentima (tvitovima), a vrijednost pridodana za svaki tvit je prosječna vrijednost Sentiment Scora kojeg smo izračunali ranije. Dakle, prema formuli možemo vidjeti da će tvitovi neutralnog značenja imati SentimentScore 0, a svi oni koji imaju vrijednost manju od nula su negativni, a oni koji imaju veću pozitivni i ovdje završava naš dio analize mišljenja.
Naravno, iz samog modela se mogu vidjeti neki nedostatci koji dovode do nemogućnosti točne analize mišljenja u situacijama sarkazma ili u situacijama kada nam riječi not, very, never, koji se nalaze ispred neke riječi poremete sentiment te riječi, iako ne bi trebali. No, unatoč nekim nedostacima i dalje predstavlja veoma dobar način analize mišljenja i model je pokazao uistinu neloše rezultate. Neloše s razlogom što nam se model strojnog učenja tj. klasifikacije pokazao boljim, ali o njemu sljedeći put. Osim ta dva pristupa, u hrpi mogućih rješenja i varijacija na temu nekako mi se najviše dopada kombinacija ova dva pristupa tj. kombinacija analize rječnikom i strojnog učenja. No, to je područje u koje tek treba zakoračiti, ali smatram da bi rezultati bili i više nego zanimljivi.