Analiza mišljenja pomoću rječnika

Big data / Poslovna analitika / Rudarenje podataka

Analiza mišljenja pomoću rječnika

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.

modelstr

Glavni model u KNIME-u

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.

tagging

Tagiranje riječi iz rječnika

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.

preprocessing

Faza “preprocessinga”

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.

frequenices

Izračunavanje SentimentScore-a

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.