Download as pdf or txt
Download as pdf or txt
You are on page 1of 31

SVEUČILIŠTE U ZAGREBU

FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

ZAVRŠNI RAD br. 5302

Usporedba metoda za klasifikaciju


tekstualnih dokumenata
Renato Bošnjak

Zagreb, lipanj 2017.


iii
S ADRŽAJ

1. Uvod 1

2. Klasifikacija teksta 2
2.1. Uvod u klasifikaciju tekstualnih dokumenata . . . . . . . . . . . . . . . . . 2
2.2. Metode klasifikacije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.1. Modeli nadziranog učenja . . . . . . . . . . . . . . . . . . . . . . 5
2.2.2. Naivni Bayesov klasifikator . . . . . . . . . . . . . . . . . . . . . 7
2.2.3. Klasifikator najbližih susjeda . . . . . . . . . . . . . . . . . . . . . 8

3. Programska knjižnica Apache Lucene 11


3.1. Indeksiranje i pretraga pomoću Lucenea . . . . . . . . . . . . . . . . . . . 11
3.1.1. Stvaranje dokumenta . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.2. Analiza dokumenta . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.3. Indeksiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.4. Pretraga indeksa . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4. Klasifikacija tekstualnih dokumenata korištenjem programske knjižnice Apache


Lucene 19
4.0.1. Naivni Bayesov klasifikator . . . . . . . . . . . . . . . . . . . . . 19
4.0.2. Klasifikator najbližih susjeda . . . . . . . . . . . . . . . . . . . . . 22

5. Zaključak 24

Literatura 25

iv
1. Uvod

Prikupljanje informacija (engl. Information retrieval, IR) je postupak prikupljanja infor-


macijskih resursa (engl. Information resources) koji odgovaraju potrebi za informacijama
(engl. Information need) iz skupa informacijskih resursa. Prikupljanje, odnosno pretraga vrši
se nad skupom nestrukturiranih dokumenata (npr. tekstualni dokumenti). Nestrukturiranost
dokumenta je odred̄ena manjkom pravila zapisivanja, koja otežavaju računalu neposrednu
obradu istih.
Razvoj računalom upravljane pretrage podataka potaknuo je Vannevar Bush, napisavši
članak sredinom prošlog stoljeća pod nazivom As We May Think. U tom članku prvi put se
koristi pojam memex, ured̄aj koji bi imao sposobnost pohrane, povezivanja i brze pretrage
knjiga, zapisa i ostalih dokumenata od kojih bi ljudi imali koristi. Postupni razvoj sustava
temeljenih na toj ideji doveo je do pojave World Wide Weba, bez kojeg bi napredak znanosti
bio znatno usporen.
Klasifikacija kao vrsta nadziranog strojnog učenja primjenjiva je u raznim domenama, a
neke od njih su: računalni vid (analiza medicinskih slika, optičko prepoznavanje znakova na
slici (engl. Optical Character Recognition, OCR)), prepoznavanje govora, rukopisa, obrada
prirodnog jezika . . .
Pomoću klasifikacije možemo riješiti probleme organiziranja podataka u kategorije prema
zajedničkim svojstvima, temeljem podataka kojima je već utvrd̄eno pripadanje pojedinoj ka-
tegoriji.
U ovom radu bit će obrad̄ena teorija vezana uz vrste nadziranog strojnog učenja i pos-
tupke klasifikacije na koje se nadovezuje opis programskog dijela rješenja napisanog u pro-
gramskom jeziku Java uz korištenje Apache Lucenea, najpopularnije IR programske knjiž-
nice otvorenog koda koju razvija Apache Software Foundation.

1
2. Klasifikacija teksta

Postupci klasifikacije se primjenjuju za različite svrhe, od prepoznavanja neželjene elek-


troničke pošte, razvrstavanja iste na kategorije poput "Primarno", "Promocije", "Društvene
mreže". . . , odred̄ivanja rubrike članka (politika, sport, crna kronika. . . ), analizu sentimenta i
autorstva. Primjerice, moguće je provod̄enjem postupka klasifikacije odrediti jesu li komen-
tari na neki proizvod, film ili članak pozitivni ili negativni, utvrditi je li neki tekst napisao
muškarac ili žena, starija ili mlad̄a osoba te utvrditi autora teksta.
U ovom poglavlju dotaknut ćemo se teorijske pozadine klasifikacije teksta. Započet ćemo
s definiranjem pojma klasifikacije, opisa najopćenitijih klasifikacijskih postupaka, a zatim
prijeći na usporedbu konkretnih metoda.

2.1. Uvod u klasifikaciju tekstualnih dokumenata


Klasifikaciju možemo definirati kao postupak dodjeljivanja klase c iz skupa s konačnim bro-
jem elemenata C, prema odred̄enom pravilu, neoznačenom dokumentu d koji pripada skupu
dokumenata D.

Slika 2.1: Klasifikacija

Klasifikator definiramo kao funkciju:

γ:D→C

Metode klasifikacije se razlikuju prema pravilima koja odred̄uju klasu dokumenta. U


najjednostavnijim slučajevima će osoba pregledati dokument i zaključiti kojoj klasi on pri-
pada. Primjer je razvrstavanje knjiga u knjižnici. Takav pristup je pouzdan, ali nije efikasan.

2
Cilj je postići automatizirani postupak u kojem će računalo primjenjujući pravila odrediti
klasu. Kako se radi o računalima, potrebno je pravila zapisati njima razumljivom sintaksom,
primjerice Booleovim izrazima. Osoba koja poznaje područje primjene mogla bi napisati ta-
kav skup pravila koji bi vrlo precizno odredio klase, ali problem takvog pristupa je skupoća
i održavanje. Bilo bi potrebno zaposliti mnogo stručnjaka koji bi svakodnevno, npr. zbog
pojave novih izraza, ažurirali skup pravila tako da preciznost ostaje na istoj razini.
Rješenje problema održavanja, efikasnosti i skupoće nalazi se u metodama temeljim na
strojnom učenju. Ideja je vrlo jednostavna, želimo da klasifikator temeljem unaprijed pri-
premljenog skupa dokumenata, kojima je odred̄ena klasa, nauči pravila te ih primjeni na
nepoznate dokumente i odredi im klasu. Zbog zahtjeva postojanja pripremljenih dokume-
nata klasifikacija pripada nadziranoj vrsti strojnog učenja (engl. supervised learning). Pri-
premljene dokumente nazivamo skup za učenje (engl. training set). Temeljem tih podataka
generira se model koji mora biti odgovarajuće složenosti kao funkcija koju pokušavamo na-
učiti kako bi se izbjegla prenaučenost (engl. overfitting) i podnaučenost (engl. underfitting).
Prenaučenost se dogad̄a u slučaju kada je naučeni model koji opisuje podatke za učenje pre-
više složen što uzrokuje lošu generalizaciju. Druga krajnost je podnaučenost koja se dogad̄a
kada je model previše jednostavan što rezultira lošim provod̄enjem klasifikacije. Skup doku-
menata koji nisu označeni nazivamo ispitni skup (engl. test set).
Prije primjene klasifikatora potrebno je provjeriti njegova svojstva na skupu za provjeru
(engl. validation set) postupkom koji nazivamo unakrsna provjera (engl. cross-validation)
kojim sprječavamo prenaučenost i podnaučenost.

Slika 2.2: Prikaz različitih složenosti modela (podnaučenost, prenaučenost, ispravna složenost)

Sva tri navedena skupa moraju biti med̄usobno disjunktni kako bi se mogle utvrditi prave
vrijednosti pogrešaka klasifikatora.
Klasifikator možemo ocijeniti koristeći četiri osnovne mjere: preciznost (engl. preci-
sion), odziv (engl. recall), točnost (engl. accuracy) i specifičnost (engl. specificity). Kako
bismo mogli definirati ove mjere potrebno je prvo podijeliti klasificirane dokumente teme-
ljem ispravnosti odred̄ivanja pripadnosti klasi.
Dokumente kojima klasifikator odredi pripadnost klasi ci , a to je ujedno i ispravna klasa,
nazivamo točno pozitivnima (engl. true positives) i označavamo ih s TP.
Ako klasifikator odredi dokumentu klasu ci , a on njoj ne pripada, tada takve nazivamo

3
lažno pozitivnima (engl. false positives) i označavamo oznakom FP.
Kada je dokumentu nije odred̄ena klasa ci , a on niti ne pripada njoj nazivamo ga točno
negativnim (engl. true negatives) i označavamo s TN.
Lažno negativni dokumenti (engl. false negatives) su oni kojima je klasifikator odredio
klasu različitu od ci , a oni upravo pripadaju njoj. Označavamo ih oznakom FN.
Preciznost definiramo kao udio dokumenata kojima je ispravno odred̄ena klasa ci u broju
dokumenata kojima je ona odred̄ena. Primijetimo kako ukupni broj ne odgovara broju doku-
menata koji stvarno pripadaju klasi ci .
TP
P = (2.1)
TP + FP
Odziv definiramo kao udio dokumenata kojima je ispravno odred̄ena klasa ci u ukupnom
broju dokumenata koji stvarno pripadaju klasi ci .
TP
R= (2.2)
TP + FN
Točnost se definira kao omjer ispravno klasificiranih dokumenata i ukupnog broja doku-
menata.
TP + TN
A= (2.3)
TP + FP + TN + FN
Specifičnost je omjer dokumenata kojima je ispravno odred̄eno nepripadnost klasi ci i
broja dokumenata koji stvarno ne pripadaju toj klasi.
TN
S= (2.4)
TN + FP
Prosud̄ivati klasifikator samo temeljem navedenih mjera je pogrešno, potrebno je pozna-
vati i područje primjene kako bi se one mogle prilagoditi i tako ostvariti dobar klasifikator.
Takod̄er je bitno naglasiti kako je visoka razine jedne od mjera nedovoljna za proglašavanje
klasifikatora kvalitetnim. Primjerice ako testiramo klasifikator na skupu dokumenata koji će
velikom većinom pripadati klasi ci i klasifikator svima odredi nepripadnost toj klasi tada će
točnost biti vrlo visoka, ali će odziv biti jednak nuli.
(Bašić i Šnajder, 2011)

2.2. Metode klasifikacije


U ovom potpoglavlju bit će napravljena podjela modela nadziranog učenja, vrsti strojnog
učenja kojem klasifikacija pripada. Takod̄er ćemo opisati dvije metode klasifikacije koje
su se koristile u izradi programskog rješenja, to su naivni Bayesov klasifikator (engl. Naive
Bayes Classifier) i klasifikator najbližih susjeda (engl. k-Nearest Neighbors Classifier) često
kraće nazivanim k-NN.

4
2.2.1. Modeli nadziranog učenja
Generativni i diskriminativni modeli

Prema načinu odred̄ivanja pripadnosti klasi postupke klasifikacije možemo podijeliti na ge-
nerativne i diskriminativne modele. Generativni model uči zajedničku razdiobu primjera x
i klase c P (x, c), iz koje se može primjenom Bayesove formule doći do vjerojatnosti pripa-
danja primjera x klasi c P (c|x), koju koristi prilikom klasifikacije. Diskriminativni modeli,
ovisno o tome jesu li probabilistički ili ne, izravno uče uvjetnu razdiobu P (c|x), odnosno
modeliraju funkciju ovisnu o primjeru x koja dodjeljuje klasu c. Generativni modeli poku-
šavaju naučiti kako primjeri iz neke klase nastaju te to znanje primjenjuju u klasifikaciji dok
diskriminativni modeli odred̄uju klasu samo temeljem pitanja koliko je vjerojatno da se radi
o nekoj klasi uz zadane pojmove iz dokumenta. Razliku izmed̄u ova dva pristupa možemo
vidjeti na slici 2.3.

Slika 2.3: Diskriminativan model(lijevo) i generativan model(desno)

Možemo reći da diskriminativni modeli uče granicu izmed̄u klasa, a generativni modeli-
raju raspodjelu klasa. Iz tog razloga se diskriminativni modeli nazivaju i metodama temelje-
nim na granici (engl. boundary-oriented methods).

Slika 2.4: Diskriminativan model(lijevo) i generativan model(desno)

Odluka o korištenju modela može se donijeti temeljem broja dostupnih primjera za uče-
nje, pokazalo se da generativni modeli zahtijevaju vrlo velik broj kako bi pogreška bila
prihvatljiva. Za postupke klasifikacije primjereniji je diskriminativni model jer izbjegava
složene izračune, ne zahtijeva toliko primjera za učenje i vrlo dobro odrad̄uje klasifikaciju.

5
Probabilistički i neprobabilistički modeli

Probabilistički modeli postupak klasifikacije dijele na fazu zaključivanja, u kojoj se računa


P (c|x) i fazu odlučivanja u kojoj se izračunatu vjerojatnost koristi za klasificiranje primjera.
Neprobabilistički modeli objedinjuju navedene faze u jednu.

Parametarski i neparametarski modeli

Temeljem odnosa broja primjera za učenje i parametara modela, nadzirane postupke strojnog
učenja dijelimo na parametarske i neparametarske. Kod parametarskih na složenost modela
ne utječe broj primjera za učenje, nego se pretpostavlja teorijska razdioba podataka pa je
iz tog razloga broj parametara konačan i odred̄en razdiobom (npr. za normalnu razdiobu to
su očekivanje i standardna devijacija). Neparametarski modeli, iako im ime može drugačije
sugerirati, imaju parametre, ali njihov broj ovisi o broju primjera za učenje pa samim time i
složenost modela raste povećanjem skupa za učenje. Oni ne pretpostavljaju nikakvu razdiobu
primjera za učenje.

Linearni i nelinearni modeli

Prema granici klasa modele možemo podijeliti na linearne i nelinearne.


Kod linearnih modela klase se moraju moći razgraničiti (n − 1)-dimenzionalnim prosto-
rom koji nazivamo hiperravnina, dok nelinearni ne postavljaju takav uvjet.
Za primjer uzmimo dvodimenzionalni prostor, ako je moguće pravcem odvojiti primjere
koji pripadaju različitim klasama tada se radi o linearnom, a inače o nelinearnom modelu.
Jednostavni primjer nelinearnog modela je funkcija XOR (isključivo ili) prikazana na
slici 2.5. Vidimo da nije nikako moguće povući pravac koji bi razdvojio točke koje pripadaju
različitim klasama.

Slika 2.5: Nelinearni model

Linearni modeli su ograničeni i koristeći ih nije moguće riješiti neke teže klasifikacij-
ske probleme koji se pojavljuju u slučajevima kada je primjera značajno više od dimenzije

6
prostora što rezultira većom gustoćom naseljenosti.

2.2.2. Naivni Bayesov klasifikator


Bayesov klasifikator pripada generativnom, probabilističkom, parametarskom, linearnom
modelu nadziranog učenja. Svi Bayesovi klasifikatori temeljeni su na Bayesovoj formuli
koja definira uvjetnu vjerojatnost dogad̄aja.

Teorem 1 Bayesova formula: Neka je {H1 , H2 , . . . , Hn } potpun sustav dogad̄aja na vje-


rojatnosnom prostoru (Ω, P (Ω) , P ) i neka je A ∈ P (Ω) takav da je P (A) > 0. Tada
∀i ∈ {1, 2, . . . , n} vrijedi:

P (Hi · P (A|Hi ) P (Hi ) · P (A|Hi )


P (Hi |A) = Pn = . (2.5)
j=1 P (Hj ) · P (A|Hj ) P (A)

(Benšić i Šuvak, 2014)


Ona opisuje vjerojatnost dogad̄anja hipoteza u slučaju kada unaprijed znamo da se os-
tvario neki dogad̄aj. Vjerojatnost P (Hi ) nazivamo a priori vjerojatnostima hipoteze Hi , a
P (Hi |A) a posteriori vjerojatnostima hipoteze Hi .
U našem slučaju izračunavamo vjerojatnost klase za zadani dokument pa formulu mo-
žemo zapisati na sljedeći način:

P (c) · P (d|c)
P (c|d) = (2.6)
P (d)
Najvjerojatnija klasa c iz skupa svih klasa C je ona s najvećom a posteriori vjerojatnosti
(engl. maximum a posteriori), kraće MAP. Odnosno, tražimo takav c ∈ C za koji će P (c|d)
biti maksimalan:

cM AP = arg max P (c|d) (2.7)


c∈C

Iz 2.6 uočavamo da je vrijednost iz nazivnika jednaka za sve klase za zadani dokument


pa ga možemo zanemariti. Iz tog razloga 2.7 možemo pretvoriti u :

cM AP = arg max P (c) · P (d|c) (2.8)


c∈C

Možemo se pitati što zapravo predstavlja vjerojatnost P (d|c). Kako dokument možemo
predstaviti skupom pojmova {t1 , t2 , . . . , tn }, možemo 2.8 zapisati kao:

cM AP = arg max P (c) · P (t1 , t2 , . . . , tn |c) (2.9)


c∈C

Vjerojatnost klase P (c) računa se kao omjer broja dokumenata te klase u ukupnom broju
dokumenata, med̄utim vjerojatnost P (t1 , t2 , . . . , tn |c) nije moguće jednostavno izračunati.

7
Zato uvodimo pojednostavljenje u kojem ne pazimo na redoslijed pojmova, nego samo broj
pojavljivanja. Takav model nazivamo vreća riječi (engl. bag of words). Nadalje, pretposta-
vimo da su vjerojatnosti pojmova uz zadanu klasu P (ti , cj ) nezavisne. Iako obje pretpostavke
nisu u potpunosti ispravne koristimo ih zbog značajnog pojednostavljenja izračuna.
Nakon primjene navedenog slijedi:

P (t1 , t2 , . . . , tn |c) = P (t1 |c) · P (t2 |c) · . . . · P (tn |c) (2.10)

P (ti |c) računamo kao omjer broja pojavljivanja pojma ti i ukupnog broja pojmova u
dokumentima s klasom c.
Iz 2.9 i 2.10 dolazimo do konačnog izraza za odred̄ivanje klase:
Y
cN B = arg max P (c) · P (t|c). (2.11)
c∈C
t∈T

Naivni Bayesov klasifikator, kao i ostali jednostavni modeli, ima problem visoke pristra-
nosti (engl. high bias), koja je definirana kao razlika izmed̄u predvid̄enog i stvarnog modela.
Većinom je dobar odabir u slučajevima kada imamo vrlo malo primjera za učenje.

2.2.3. Klasifikator najbližih susjeda


Algoritam najbližih susjeda jedna je od najjednostavnijih metoda strojnog učenja. Pripada
diskriminativnom, neparametarskom, nelinearnom modelu nadziranog učenja, a odred̄ivanje
klase nepoznatog dokumenta svodi se na odred̄ivanje većinske klase najbližih dokumenata iz
skupa za učenje. Za udaljenost izmed̄u podataka mogu se koristiti različite metrike. Neke od
najpoznatijih su euklidska i Manhattan udaljenost, a izbor ovisi o problemu koji treba riješiti.

Slika 2.6: Euklidska (puna linija) i Manhattan (iscrtkana linija) udaljenost

Moguće je, često i poželjno, bližim susjedima pridijeliti veći značaj, odnosno težinu.
Često se koristi težinski faktor d−1 gdje je d udaljenost do susjeda.
Kažemo da k-NN pripada vrsti strojnog učenja koju nazivamo učenje zasnovano na slu-
čajevima (engl. instance-based) često nazivanim i memory-based jer prilikom odred̄ivanja
klase prolazi po svim instancama iz skupa za učenje koje pohranjuje u memoriji. Vremenska

8
složenost same pretrage i odred̄ivanja klase ne ovisi o broju klasa, nego isključivo o broju
primjera za učenje pa je k-NN pogodniji za rješavanje problema s velikim brojem klasa. Iako
je većinom poželjno imati velik broj primjera za učenje kod k-NN-a takav pristup značajno
usporava postupak klasifikacije.
Vrijednost k odred̄uje se heuristički, primjerice provod̄enjem cross-validation postupka
kako bi se utvrdio najbolji k za konkretan slučaj.
Povećanje vrijednosti k povećava pristranost, ali smanjuje varijancu, odnosno varijaciju
kvalitete predvid̄anja modela. Suprotno navedenom, smanjenje vrijednosti k povećava vari-
jancu, ali smanjuje pristranost. Cilj je odabrati takav k za koji će pristranost i varijanca biti
minimizirani.
Na slici 2.7 središte svakog grafa predstavlja savršeni model, a zelene točke predstavljaju
izgrad̄ene modele prema različitim skupovima za učenje.

Slika 2.7: Ilustracija pristranosti i varijance

Pokazalo se da je k koji je jednak kvadratnom korijenu broja primjera za učenje dobar


početak za pronalazak najbolje vrijednosti. Valja izbjegavati parne vrijednosti kako bi se
smanjila mogućnost pojave situacija kada se dvije klase pojavljuju jednak broj puta što je
posebno važno kod binarnog klasifikatora kod kojeg su moguće samo dvije klase.

9
Slika 2.8: 3-NN primjer

Slika 2.8 ilustrira postupak klasifikacije za k = 3, crvena točka predstavlja podatak iz


skupa za ispitivanje kojem treba odrediti klasu. U skupu za učenje nalaze se podaci koji
pripadaju klasi K1 (zelena boja) te K2 (narančasta boja). Nakon pronalaska tri najbliža
susjeda zaključuje se da novi podatak pripada klasi K1.
Kod 1-NN klasifikatora novom podatku pridjeljujemo klasu najbližeg susjeda. Ako se ve-
ličina skupa za učenje približava beskonačnosti, 1-NN postiže dvostruki minimalni mogući
stupanj pogreške (Bayes error rate). Problem 1-NN-a je nedostatak robusnosti, odnosno
osjetljiv je na postojanje podataka koji iskaču od ostalih iz svoje klase te tako pridonose
šumu. Navedeno pokazuje slika 2.9 na kojoj vidimo da je podatku iz ispitnog skupa, ozna-
čenom crvenom bojom, dodijeljena klasa K2 iako se prema okolini u kojoj se nalazi jasno
vidi da bi trebao pripadati klasi K1.

Slika 2.9: Problem 1-NN klasifikacije

Kao što smo mogli uočiti k-NN je vrlo jednostavan za shvaćanje i implementaciju što
je jedna od prednosti. Takod̄er se pokazao otpornim na šum (osim 1-NN) te se zbog brzine
izvod̄enja nameće kao izbor u situacijama kada je skup klasa jako velik.
Neke od mana k-NN-a su sporo odred̄ivanje susjeda u slučaju velikog broja dokumenata,
ograničenost memorijom te potreba za utvrd̄ivanjem najbolje vrijednosti za k.

10
3. Programska knjižnica Apache Lucene

Za implementaciju praktičnog dijela korišten je Apache Lucene, programska knjižnica otvo-


renog koda u potpunosti napisana u Javi koja nudi mogućnosti indeksiranja i pretrage do-
kumenata. Iako je napisana u programskom jeziku Java, omogućena je integracija u drugim
jezicima kao što su C, C++, C#, Perl, Python, PHP. . .
Lucene je 1999. godine počeo razvijati Doug Cutting koji joj je i nadjenuo ime prema
svojoj supruzi. Uskoro se pridružuje Jakarta Projectu, a 2005. godine postaje samostalni
Apache projekt. Godine 2010. spaja se sa Solr projektom koji koristi Lucene kao temelj za
izgradnju samostalne aplikacije za pretragu cijelog teksta (engl. full-text search). Posljednja
verzija koja je izašla 27. travnja 2017. godine je 6.5.1 dok je za izradu programskog rješenja
korištena verzija 6.5.0 objavljena 25. ožujka 2017. godine.
Zbog jednostavnog programskog sučelja moguće je ostvariti osnovne funkcije pretrage
brzo i lako koristeći nekoliko klasa. Upravo zbog tih obilježja Lucene je jedna od najpo-
pularnijih besplatnih IR (Information Retrieval) knjižnica. Dodatno, Lucene ne postavlja
uvjete na format ili jezik dokumenata, jedino je bitno da se iz njih može izvući tekst. Tako
primjerice možemo uz pomoć drugih alata izvući tekst iz MS Word, XML, HTML ili PDF
dokumenata te ih indeksirati i pretražiti.
U sljedećim potpoglavljima bit će opisan način rada Lucenea uz primjere.

3.1. Indeksiranje i pretraga pomoću Lucenea


Kako je temelj svih radnji s Luceneom indeks i pretraga nad njime u ovom potpoglavlju bit
će objašnjeni postupci izgradnje indeksa i mogućnosti pretrage.
Neka pitanja na koja ćemo odgovoriti u nastavku su: što je indeks, kako se gradi i zašto
bi ga uopće koristili?
Zamislimo situaciju u kojoj trebamo pronaći odred̄eni pojam u knjizi. Navedeni problem
možemo riješiti na dva načina. Prvi je čitanje knjige po redu sve dok ne nad̄emo pojam
koji nas zanima. Drugi način je pretraga kazala pojmova na kraju knjige u kojem možemo
pronaći stranice na kojima se on pojavljuje. Očigledno je drugi način brži i jednostavniji, ali
zahtijeva postojanje kazala pojmova.

11
Ovaj primjer možemo preslikati i na računalnu pretragu tekstualnih datoteka. Ako smo
odred̄enim postupkom u stanju napraviti strukturu podataka koja će omogućiti brzi pogled i
odred̄ivanje lokacije pojma unutar dokumenta, tada možemo izbjeći slijedno čitanje datoteka
te ostvariti efikasnu pretragu.
Taj postupak naziva se indeksiranje (engl. indexing), a dobivena struktura podataka in-
deks (engl. index). Indeks se sastoji od pojmova (engl. terms) kojima je pridružena lista
jedinstvenih oznaka dokumenata u kojima se pojavljuju (engl. postings list) te u naprednijim
izvedbama mjesto pojavljivanja odred̄eno rednim brojem riječi u dokumentu. Zbog efikas-
nosti pojmovi su sortirani abecednim redom, a oznake dokumenata rastućim redoslijedom.

Slika 3.1: Komponente aplikacija za pretragu


(McCandless et al., 2010)

Slika 3.1 prikazuje potrebne komponente za ostvarivanje pretrage. U nastavku će neke
od njih biti dodatno pojašnjene.

3.1.1. Stvaranje dokumenta


Kako bismo mogli napraviti indeks prvo moramo pomoću Lucenea napraviti dokumente
predstavljene razredom org.apache.lucene.document.Document.
Gradivne jedinice dokumenta su polja (engl. fields). Obično su to naslov, autori, saže-

12
tak, URL, sadržaj. Lucene omogućuje različito vrednovanje pojedinih polja (engl. boosting)
dokumenata koje postavlja programer, ali ostvaruje i automatsko povećanje vrijednosti polja
koja su kraća u odnosu na druga. Izgradnja dokumenta prepuštena je programeru koji može
odrediti svojstva svakog od polja. Na primjer sadržaj polja s relativno malo teksta (naslov,
autori, godina izdanja, email, URL. . . ) se obično sprema u indeks te mu kasnije iz programa
možemo pristupiti koristeći Lucene API. Takva polja se obično ne tokeniziraju, odnosno ne
provodi se leksička analiza jer se njihov sadržaj promatra kao cjelina1 . Suprotno tome, polja
koja sadrže više teksta (sadržaj članka, poglavlje knjige. . . ) se tokeniziraju, ali se ne spre-
maju u indeks pa im nije moguće pristupiti koristeći Luceneov API2 . Postoje i specifične im-
plementacije koje nasljed̄uju osnovnu klasu org.apache.lucene.document.Field,
no u njih nećemo dublje ulaziti.
Pozivom metode void add(IndexableField field) nad objektom razreda
Document ostvarujemo dodavanje polja u dokument.
Primjer izgradnje dokumenta:

File file = new File("D:/books/Crime and Punishment.txt");


Document document = new Document();

document.add(new StringField("Title", "Crime and Punishment",


Store.YES));
document.add(new StringField("Author", "Fyodor Dostoyevsky",
Store.YES));
document.add(new TextField("Content", new FileReader(file)));

3.1.2. Analiza dokumenta


Lucene nudi već gotovo analizatore te mogućnost stvaranja vlastitih. Njegova zadaća je
stvaranje niza tokena iz tekstova unutar polja. Neki od problema koje analizatori rješavaju
jesu prepoznavanje složenica, izvlačenje korijena riječi (razlikuje se od jezika do jezika)
kako bi se izbjeglo višestruko spremanje istih riječi u različitim oblicima, prepoznavanje
riječi u nelatiničnim pismima, pretvorba svih tokena u mala slova kako bi se izbjegla pretraga
osjetljiva na veličinu slova i uklanjanje učestalih riječi koje ne pridonose značenju (engl. stop
words).
1
primjer je razred org.apache.lucene.document.StringField
2
primjer je razred org.apache.lucene.document.TextField

13
3.1.3. Indeksiranje
Niz tokena dobivenih u prethodnom koraku koristi se za izgradnju indeksa, točnije inver-
tiranog indeksa (engl. inverted index). Ova struktura podataka uzima tokene kao ključeve,
a listu identifikatora dokumenata u kojima se oni pojavljuju kao vrijednost, za razliku od
običnog indeksa koji bi dokumente definirao kao ključeve, a listu pojmova iz dokumenta kao
vrijednosti. Prednost se očituje u brzini pretrage, kod običnog indeksa bi morali pretraživati
liste pojmova za svaki dokument zasebno dok se kod invertiranog indeksa svi dokumenti koji
sadrže pojam nalaze u istoj listi koja je pridijeljena tom pojmu.
Dokument se u index dodaje pozivom metode addDocument nad instancom razreda
org.apache.lucene.index.IndexWriter koja prima objekt razreda Document.
Uz dodavanje dokumenata Lucene omogućuje brisanje i ažuriranje. Prilikom brisanja
dokumenata koristimo metodu deleteDocuments koja može primati varijabilan broj
instanci razreda Term ili Query. Metoda će tada obrisati sve dokumente koji sadrže za-
dane pojmove ili odgovaraju zadanim upitima. Takod̄er imamo na raspolaganju metodu
deleteAll() koja briše sve dokumente iz indeksa. Prilikom korištenja navedenih me-
toda treba biti oprezan i koristiti one pojmove koji su jedinstveni u svakom od dokumenata
(ključeve) kako se ne bi dogodila neželjena brisanja. Metoda updateDocument prima
pojam i dokument kao argumente, a implementirana je tako da prvo obriše stari dokument
iz indeksa te zatim doda izmijenjeni. Iz tog razloga se ne mora koristiti, moguće je ostvariti
isto ponašanje koristeći metode za brisanje i dodavanje dokumenta.
Promjene u indeksu zadovoljavaju svojstva transakcije - ACID, odnosno: nedjeljivost
(engl. Atomicity), konzistentnost (engl. Consistency), izolacija (engl. Isolation) te izdržlji-
vost (engl. Durability). To znači da će se sve promjene koje na indeksu radi IndexWriter
dogoditi u cijelosti ili se u slučaju pogreške neće obaviti niti jedna izmjena; indeks će iz-
mjenom prijeći iz jednog konzistentnog stanja u drugo; ako je istovremeno otvoreno više
IndexWriter objekata nad istim indeksom tada se promjene napravljene u jednom od
njih ne vide u drugima sve do izvod̄enja metode commit nad tim objektom; ako se do-
gode neuhvaćene iznimke, pad operacijskog sustava, gubitak napajanja ili bilo koji drugi
uzroci rušenja programa indeks će ostati u stanju koje je bilo nakon zadnjeg poziva metode
commit.

3.1.4. Pretraga indeksa


Ostvarivanje pretrage

Pretraga u Luceneu se može ostvariti koristeći klase: IndexSearcher, Query, TopDocs


i ScoreDoc iz paketa org.apache.lucene.search.
Potrebno je instancirati objekt razreda IndexSearcher u čiji se konstruktor najčešće

14
prosljed̄uje objekt razreda IndexReader koji se otvara nad direktorijem u kojem se nalazi
indeks. Koristeći taj objekt ćemo vršiti pretragu nad indeksom pa ćemo ga u nastavku zvati
pretraživač. Zatim se izgradi upit koji je predstavljen razredom Query ili nekim od mnoštva
razreda koji ga nasljed̄uju, a pogodni su za specifičnije korištenje.
Jedan od jednostavnijih oblika upita je TermQuery koji se gradi temeljem pojmova.
Pojam je predstavljen razredom Term i odred̄en je poljem dokumenta te tekstom koji će se
pretraživati po zadanom polju.
Metoda search pozvana nad pretraživačem kao rezultat vraća objekt TopDocs koji
sadrži dokumente koji odgovaraju pretrazi. Iz njega možemo dobiti polje objekata razreda
ScoreDoc koji predstavljaju pojedine rezultate pretrage.
Sljedeći jednostavni primjer prikazuje korištenje pretrage. Nakon što se pronad̄e pet
dokumenata koji najbolje zadovoljavaju upit, ispisuje se njihova ocjena, odnosno vrijednost
koja odred̄uje koliko je dobro dokument zadovoljio upit.

Directory directory = FSDirectory.open(Paths.get("D:/index"));


IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);

Term term = new Term("fieldName", "textToSearch");


Query query = new TermQuery(term);
TopDocs searchResults = searcher.search(query, 5);
ScoreDoc[] scoreDocs = searchResults.scoreDocs;

int n = scoreDocs.length;
for(int i = 0; i < n; i++) {
System.out.println("Score: " + scoreDocs[i].score);
}

15
Navedeni kod možemo opisati sljedećim dijagramom:

Slika 3.2: Pretraga u Luceneu


(McCandless et al., 2010)

Rangiranje dokumenata

Lucene koristi tf-idf način ocjenjivanja dokumenata uz mogućnost povećanja važnosti odre-
d̄enih polja dokumenta. To znači da je ocjena dokumenta odred̄ena brojem pojavljivanja
traženog pojma unutar tog dokumenta (engl. term frequency), brojem dokumenata unutar
kojih se taj pojam nalazi (engl. document frequency) te važnosti tog polja.

Ocjenjivanje u teoriji

Korištenjem inverzne frekvencije dokumenata (engl. inverse document frequency) ili skra-
ćeno idf izbjegnuto je pridjeljivanje visoke ocjene pojmovima koji se pojavljuju unutar ve-
likog broja dokumenata zbog pretpostavke gubljenja važnosti pojma s porastom broja doku-
menata unutar kojih se pojavljuje jer ne pridonosi specifičnosti dokumenta. Primjer mogu
biti veznici, prijedlozi, prilozi, članovi u stranim jezicima (a, an, the). . .
Idf za pojam t u kolekciji od N dokumenata se računa prema jednadžbi
N
idft = log (3.1)
dft

16
Sada možemo definirati i jednadžbu za izračun tf-idf vrijednosti za pojam t unutar doku-
menta d
tf-idft,d = tft,d × idft (3.2)

Ocjenu dokumenta možemo dobiti zbrajanjem svih tf-idf vrijednosti za pojmove t unutar
upita q
X
score(q, d) tf-idft,d (3.3)
t∈q

(Manning et al., 2008)

Konceptualno ocjenjivanje u Luceneu

Lucene definira nešto drugačiju formulu za izračun ocjene koja se temelji na 3.3. Svaki
dokument d je predstavljen vektorom (engl. term vector) V~ (d), stoga kolekciju dokume-
nata možemo promatrati kao skup vektora odred̄enih frekvencijom pojmova koje sadrže, u
vektorskom prostoru kojem su osi odred̄ene svim pojmovima iz kolekcije. Svaki vektor je
zapravo zasebni invertirani indeks s pojmovima koje sadrži.
Kako bi se izbjeglo drugačije ocjenjivanje dokumenata koji sadrže jednake pojmove, ali
s različitim frekvencijama obavlja se normiranje vektora, odnosno za svaki V~ (d) se računa
jedinični vektor ~v (d) prema
V~ (d)
~v (d) = (3.4)
V~ (d)

Ponekad je ipak važno imati informaciju o duljini dokumenta, odnosno vektora kojim
je predstavljen, zato se uvodi nova mjera doc-len-norm(d) koja će u postupku normiranja
odrediti je li duljina vektora jednaka jediničnom ili će biti dulja od njega.
Kako Lucene omogućava odred̄ivanje važnosti dokumenta (document boost) uvodi se i
mjera doc-boost(d). Isto vrijedi i za odred̄ivanje vrijednosti pojmova unutar upita pa je nužno
uvesti mjeru query-boost(q).
Zbog vrsta upita u kojima je moguće djelomično podudaranje potrebno je omogućiti
izračun ocjene temeljem omjera broja pronad̄enih i ukupnog broja pojmova unutar upita.
Zato se uvodi mjera coord-factor(q,d).
Tako dolazimo do konceptualne formule za izračun ocjene u Luceneu

score(q,d) =
V~ (q) · V~ (d)
coord-factor(q,d) · query-boost(q) · ~ · doc-len-norm(d) · doc-boost(d)

V (q)
(3.5)

(TFIDFSimilarity, 2017)

17
Ocjenjivanje u praksi

U implementaciji se ipak koristi druga formula koja je izvedena iz 3.5.


Oznaka coord-factor se naziva coord.
Mjere doc-len-norm(d) i doc-boost(d) su poznate tijekom indeksiranja te se zbog efikas-
nosti u indeks pohranjuje samo njihov umnožak koji se naziva norm(t,d).
Uvodi se nova vrijednost, queryNorm(q) koja ne utječe na ocjenu dokumenta jer jednaka
za sve dokumente koji se traže upitom. Ona samo omogućava usporedbu ocjena dokumenata
dobivenih pretragom prema različitim upitima.
Query-boost iz 3.5 se razlaže na pojedine komponente za svaki pojam iz upita, tako se
definira metoda getBoost() koja se poziva nad svakim pojmom t iz upita q.
Tf vrijednost se u Luceneu računa kao kvadratni korijen frekvencije pojma u dokumentu
i označit ćemo ga s tf(t in d).
Računanje idf vrijednosti je izmijenjeno u odnosu na jednadžbu 3.1 iz teorije
 
docCount + 1
idf(t) = 1 + log (3.6)
docFreq + 1

gdje je docCount broj dokumenata unutar kolekcije, a docFreq broj dokumenata unutar kojih
se pojam t pojavljuje.
Naposljetku dolazimo do formule

score(q,d) =
X  
2
coord(q,d) · queryNorm(q) · tf(t in d) · idf(t) · t.getBoost() · norm(t,d)
t∈q

(3.7)

(TFIDFSimilarity, 2017)

18
4. Klasifikacija tekstualnih dokumenata
korištenjem programske knjižnice
Apache Lucene

Implementacije naivnog Bayesovog klasifikatora i klasifikatora najbližih susjeda nalaze se u


paketu org.apache.lucene.classification.document.
Oba koriste indeksirane dokumente kako bi odredili klasu novima. Korištenje ovih klasa
gotovo da i ne zahtijeva nikakvo teorijsko znanje o njihovom načinu rada.
U programskom rješenju klasifikator najbližih susjeda je dodatno izveden na "zaobilazni"
način objašnjen u 4.0.2

4.0.1. Naivni Bayesov klasifikator


Razredom SimpleNaiveBayesDocumentClassifier implementirano je ponašanje
ovog klasifikatora. Korištenje je vrlo jednostavno, potrebno je instancirati objekt navedenog
razreda konstruktorom:

SimpleNaiveBayesDocumentClassifier(indexReader, query,
classFieldName, field2analyzer, textFieldNames)

Atribut query služi za prepoznavanje i izdvajanje dokumenata korištenih za učenje, ako


želimo koristiti sve dokumente iz indeksa tada možemo proslijediti null. Polje dokumenta
u koje želimo upisati dodijeljenu klasu prosljed̄ujemo na mjestu classFieldName, a va-
rijabilan broj polja temeljem kojih će se odred̄ivati klasa na mjesto textFieldNames.
Parametar field2analyzer mapira željenu vrstu analizatora na pojedino polje doku-
menta.
Isječak izvornog koda kojim je ostvarena klasifikacija:

private static void naiveBayesAlgorithm(Document document,


IndexReader indexReader) throws IOException {
Map<String, Analyzer> field2Analyzer = new HashMap<>();

19
// Pridjeljivanje analizatora svakom od polja
field2Analyzer.put(FieldNames.CLASS.getValue(), new
StandardAnalyzer());
field2Analyzer.put(FieldNames.CONTENTS.getValue(), new
StandardAnalyzer());
field2Analyzer.put(FieldNames.FILENAME.getValue(), new
StandardAnalyzer());
field2Analyzer.put(FieldNames.ID.getValue(), new
StandardAnalyzer());
field2Analyzer.put(FieldNames.PATH.getValue(), new
StandardAnalyzer());
field2Analyzer.put(FieldNames.TITLE.getValue(), new
StandardAnalyzer());

// Kreiranje klasifikatora
SimpleNaiveBayesDocumentClassifier naiveBayesClassifier = new
SimpleNaiveBayesDocumentClassifier(indexReader, null,
FieldNames.CLASS.getValue(), field2Analyzer,
FieldNames.CONTENTS.getValue());

// Odredivanje klase
ClassificationResult<BytesRef> assignedClass =
naiveBayesClassifier.assignClass(document);
String docClass =
assignedClass.getAssignedClass().utf8ToString();
String docName = document.get(FieldNames.FILENAME.getValue());
System.out.println("Dokument " + docName + " pripada klasi: " +
docClass);
}

Za korištenje metode assignClass potrebno je dokumente pretvoriti u vektore. Stoga


se prilikom stvaranja dokumenta nad poljima čiji se pojmovi koriste za odred̄ivanje klase
moraju pozvati metode:
– setIndexOptions(IndexOptions.
DOCS_AND_FREQS_AND_POSITIONS_AND_ OFFSETS) koja uz dokument in-
deksira i broj pojavljivanja pojmova unutar dokumenta, mjesta pojavljivanja te mjesto
na kojem pojam počinje i završava (offset)
– setStoreTermVectors(true) koji sprema vektore kojima su dokumenti pred-

20
stavljeni zbog čega iz njih može izvući tokene koje će koristi u postupku klasifikacije
Zbog mogućnosti pojavljivanja vrlo malih vjerojatnosti prema teorijskoj formuli 2.8 koje
bi izazvale gubitak prave vrijednosti zbog nemogućnosti spremanja vrlo malih brojeva u
memoriji (engl. underflow) Lucene koristi logaritamske vrijednosti tih vjerojatnosti pa se ta
formula pretvara u:

log(cM AP ) = arg max log(P (c)) + log(P (d|c)) (4.1)


c∈C

Metoda assignClass vraća listu mogućih klasa koje su ocijenjene te se bira ona s
najvećom ocjenom. Ocjenjivanje klasa možemo prikazati sljedećim pseudokodom:

ocijeniKlase(Dokument d) {
foreach(Klasa c : C) {
foreach(Polje f : F) {
// P(c)
pC = vjerojatnostKlase(d.klasa);
// P(d | c)
p_d_c = vjerojatnostPripadanjaKlasi(d, c, f);
ocjenaPolja += pC + p_d_c;
ocjenaKlase += ocjenaPolja;
}
ocjene.spremiOcjenu(c, ocjenaKlase);
}
return ocjene;
}

vjerojatnostKlase(Klasa c) {
N = ukupniBrojDokumenata();
n = brojDokumenataKlase(c);
return log(n) − log(N )
}

vjerojatnostPripadanjaKlasi(Dokument d, Klasa c, Polje f) {


foreach(Pojam t : d) {
n = brojDokumenataKojiSadrzePojam(t);
d = prosjecanBroJedinstvenihPojmovaPoljaUKlasi(c, f);
d *= brojDokumenataKlase(c);
d += brojDokumenataKojiPripadajuNekojKlasi();
// vjerojatnost pojavljivanja pojma
p_t = n/d;
rezultat += log(pt );

21
}
// normiranje
rezultat /= duljina(d);
return rezultat;
}

4.0.2. Klasifikator najbližih susjeda


Razred KNearestNeighborDocumentClassifier predstavlja ponašanje klasifika-
tora najbližih susjeda. Trenutna implementacija temelji se na
org.apache.lucene.queries.mlt.MoreLikeThis, vrlo korisnom razredu ko-
jim se vrlo jednostavno može ostvariti pretraga dokumenata sličnih zadanom.
Princip korištenja sličan je i opisanom Bayesovom klasifikatoru iz prethodnog potpo-
glavlja, potrebno je stvoriti objekt pomoću konstruktora:

KNearestNeighborDocumentClassifier\\(IndexReader indexReader,
Similarity similarity, Query query, int k, int minDocsFreq, int
minTermFreq, String classFieldName, Map<String,Analyzer>
field2analyzer, String... textFieldNames)

Umjesto atributa similarity moguće je proslijediti null vrijednost kako bi se koris-


tio ClassicSimilarity. Atributi minDocFreq i minTermFreq postavljaju uvjet na
najmanji broj dokumenata unutar kojih se pojam pojavljuje, odnosno najmanji broj pojavlji-
vanja pojmova unutar svih dokumenata. Ako se za neki pojam ne nadmaše zadani brojevi taj
pojam se ignorira. Atribut k izravno je vezan uz algoritam najbližih susjeda, a ostali atributi
imaju istu ulogu kao kod Bayesovog klasifikatora iz prethodnog potpoglavlja.
Pozivom metode assignClass(Document document) nad kreiranim klasifika-
torom poziva se niz privatnih metoda koje stvaraju upit koji će pronaći sve slične dokumente
i temeljem rezultata pretrage odred̄uju klasu.
Glavna mana zbog koje ovaj razred nije uvijek pogodno koristiti je nemogućnost korište-
nja u slučajevima kada polja dokumenata prema kojim želimo klasificirati stvaramo pozivom
konstruktora koji primaju objekt java.io.Reader, otvoren nad tekstualnim dokumen-
tom, što želimo u slučajevima velikih dokumenata.
Problem se dogodi kada se u jednoj od metoda pokuša pozivom metode String[]
getValues(String name) doći do svih pojmova iz polja dokumenta koja su odabrana
za klasifikaciju, a kako ona nisu spremljena u indeks povratna vrijednost bude prazno polje
znakovnih nizova te algoritam ne može ispravno odrediti klasu. Iz tog razloga klasifikator

22
sam ostvario i koristeći razred MoreLikeThis.

Ostvarenje klasifikatora pomoću razreda MoreLikeThis

Potrebno je stvoriti objekt tog razreda koristeći konstruktor koji prima objekt razreda
IndexReader, postaviti analizator koji želimo koristiti te ograničenja na najmanji broj po-
javljivanja pojma unutar svih dokumenata i broja dokumenata u kojima se pojam pojavljuje
čime izdvajamo pojmove koji se ne pojavljuju željeni broj puta. Zatim je potrebno pozivom
metode like nad stvorenim objektom napraviti upit čijom će se pretragom dobiti slični
dokumenti.

MoreLikeThis mlt = new MoreLikeThis(reader);


mlt.setAnalyzer(new StandardAnalyzer());
mlt.setFieldNames(new String[] {FieldNames.CONTENTS.getValue()});
mlt.setMinTermFreq(1);
mlt.setMinDocFreq(1);

Query query = mlt.like(documentId);

// k+1 jer ce biti pronaden i dokument za koji


// trazimo slicne (on ce biti najslicniji samom sebi)
TopDocs similarDocs = searcher.search(query, k + 1);

Nakon pretrage analizirao sam dobivene rezultate i odredio klasu dokumenta.


Ova implementacija zahtijeva prethodno indeksiranje dokumenata kojima se odred̄uje klasa.

23
5. Zaključak

U ovom radu dan je teoretski uvod u područje klasifikacije tekstualnih dokumenata, objaš-
njeni su temeljni konpcepti korišteni u praksi te osnovne funkcionalnosti programske knjiž-
nice Apache Lucene korištene za izradu praktičnog dijela.
Napravljena je podjela modela nadziranog strojnog učenja te su temeljem te podjele po-
sebno objašnjeni naivni Bayesov klasifikator i klasifikator najbližih susjeda (k-NN). Odabir
klasifikatora uvelike ovisi o pojedinom slučaju, ali postoje smjernice koje bi trebale pomoći
prilikom odabira.
Tako se preporuča odabir k-NN-a u slučajevima kada je skup mogućih klasa vrlo velik,
ali ne i u situacijama kada imamo vrlo velik broj dokumenata kojima treba odrediti klasu
zbog potrebe za velikim brojem operacija tijekom izračuna udaljenosti izmed̄u susjeda i
ograničenosti memorijom (pripada memory-based strojnom učenju). Šum u skupu za učenje
znatno ne umanjuje preciznost pa kažemo da je robustan.
Kako pripada parametarskom modelu, naivni Bayesov klasifikator ima ograničenu pri-
mjenu jer se pretpostavlja teorijska razdioba podataka, ali zato vrijeme učenja ne ovisi o
broju primjera. S obzirom na to da se radi o linearnom modelu, postoje ograničenja na
primjenu (primjer XOR funkcije).
Uz teorijski uvod u radu je opisana i programska knjižnica Apache Lucene te su de-
monstrirani jednostavni primjeri korištenja osnovnih funkcionalnosti stvaranja i analize do-
kumenata, izgradnja i pretraživanje indeksa te ocjenjivanje dokumenata koji su bili preduvjet
ostvarivanju klasifikacije. Objašnjen je temeljni princip ocjenjivanja primjenom tf-idf mjere
te su opisani nešto složeniji izrazi za ocjenjivanje koje Lucene koristi.
Pokazane su implementacije prethodno objašnjenih klasifikatora u verziji Lucene 6.5.0.
Ukazani su nedostatci implementacije klasifikatora najbližih susjeda, koji za razliku od naiv-
nog Bayesovog, zahtjeva pohranu polja dokumenata temeljem kojih želimo klasificirati. Za
navedeni nedostatak predloženo je rješenje korištenjem razreda na kojem se i temelji gotova
implementacija.

24
L ITERATURA

Bojana Dalbelo Bašić i Jan Šnajder. Vrednovanje klasifikatora, 2011.

Mirta Benšić i Nenad Šuvak. Uvod u vjerojatnost i statistiku. Sveučilište JJ Strossmayera,


Odjel za matematiku, 2014.

Christopher D Manning, Prabhakar Raghavan, Hinrich Schütze, et al. Introduction to infor-


mation retrieval, svezak 1. Cambridge university press Cambridge, 2008.

Michael McCandless, Erik Hatcher, i Otis Gospodnetic. Lucene in Action: Covers Apache
Lucene 3.0. Manning Publications Co., 2010.

TFIDFSimilarity. Class tfidfsimilarity. http://lucene.apache.org/


core/6_5_0/core/org/apache/lucene/search/similarities/
TFIDFSimilarity.html, 2017. Datum nastanka: 25.3.2017., Datum pristupa:
17.5.2017.

25
Usporedba metoda za klasifikaciju tekstualnih dokumenata

Sažetak

Zbog postojanja vrlo velike količine tekstualnih dokumenata potrebno ih je, radi brže,
jeftinije i lakše obrade, organizirati, odnosno podijeliti prema zajedničkim svojstvima na
zadane klase. Takav postupak nazivamo klasifikacija koja je, osim na tekstualne dokumente,
primjenjiva i na druge vrste podataka.
S obzirom na svojstva podataka koje organiziramo, potrebno je odabrati onu metodu
klasifikacije koja će najbolje odrediti pripadnost klasi. Odluka se temelji na teorijskim saz-
nanjima o pojedinim metodama i usporedbi dobivenih rezultata. Moguće je da iste metode,
primijenjene na različite skupove podataka, rezultiraju vrlo različitom točnosti odred̄ivanja
klasa. U radu su opisana dva klasifikatora koji pripadaju različitim vrstama strojnog učenja.
To su klasifikator najbližih susjeda i naivni Bayesov klasifikator.
Za primjenu klasifikacije moguće je koristiti Apache Lucene, programsku knjižnicu otvo-
renog koda.

Ključne riječi: klasifikacija teksta, klasifikator najbližih susjeda, naivni Bayesov klasifika-
tor, Apache Lucene
A Comparison of Text-Classification Techniques

Abstract

In order to efficiently process large number of textual documents it is necessary to or-


ganize them by assigning a class for each document. Because of that we use classification
methods which can be applied to other types of data as well.
Considering the properties of documents set, it is necessary to use a classification method
which will result with the best classification result. The decision has to be made based on
theoretical knowledge and regarding the given set of documents because the quality of the
same method can vary regarding the properties of given set of documents. Two classification
methods with different properties are described in this thesis. These are k-Nearest Neighbor
classification and Naive Bayes classifier.
Apache Lucene, an open source information retrieval library, can be used for implemen-
ting text classification.

Keywords: text classification, k-nearest neighbors classification, naive Bayes classifier,


Apache Lucene

You might also like