Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
SVEUCILIŠTE U ZAGREBUFAKULTET ELEKTROTEHNIKE I RACUNARSTVA
ZAVRŠNI RAD br. 5302
Usporedba metoda za klasifikacijutekstualnih dokumenata
Renato Bošnjak
Zagreb, lipanj 2017.
iii
SADRŽAJ
1. Uvod 1
2. Klasifikacija teksta 22.1. Uvod u klasifikaciju tekstualnih dokumenata . . . . . . . . . . . . . . . . . 2
2.2. Metode klasifikacije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.1. Modeli nadziranog ucenja . . . . . . . . . . . . . . . . . . . . . . 5
2.2.2. Naivni Bayesov klasifikator . . . . . . . . . . . . . . . . . . . . . 7
2.2.3. Klasifikator najbližih susjeda . . . . . . . . . . . . . . . . . . . . . 8
3. Programska knjižnica Apache Lucene 113.1. Indeksiranje i pretraga pomocu 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 ApacheLucene 19
4.0.1. Naivni Bayesov klasifikator . . . . . . . . . . . . . . . . . . . . . 19
4.0.2. Klasifikator najbližih susjeda . . . . . . . . . . . . . . . . . . . . . 22
5. Zakljucak 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 odredena manjkom pravila zapisivanja, koja otežavaju racunalu neposrednu
obradu istih.
Razvoj racunalom upravljane pretrage podataka potaknuo je Vannevar Bush, napisavši
clanak sredinom prošlog stoljeca pod nazivom As We May Think. U tom clanku prvi put se
koristi pojam memex, uredaj 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 ucenja primjenjiva je u raznim domenama, a
neke od njih su: racunalni vid (analiza medicinskih slika, opticko prepoznavanje znakova na
slici (engl. Optical Character Recognition, OCR)), prepoznavanje govora, rukopisa, obrada
prirodnog jezika . . .
Pomocu klasifikacije možemo riješiti probleme organiziranja podataka u kategorije prema
zajednickim svojstvima, temeljem podataka kojima je vec utvrdeno pripadanje pojedinoj ka-
tegoriji.
U ovom radu bit ce obradena teorija vezana uz vrste nadziranog strojnog ucenja 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 razlicite svrhe, od prepoznavanja neželjene elek-
tronicke pošte, razvrstavanja iste na kategorije poput "Primarno", "Promocije", "Društvene
mreže". . . , odredivanja rubrike clanka (politika, sport, crna kronika. . . ), analizu sentimenta i
autorstva. Primjerice, moguce je provodenjem postupka klasifikacije odrediti jesu li komen-
tari na neki proizvod, film ili clanak pozitivni ili negativni, utvrditi je li neki tekst napisao
muškarac ili žena, starija ili mlada osoba te utvrditi autora teksta.
U ovom poglavlju dotaknut cemo se teorijske pozadine klasifikacije teksta. Zapocet cemo
s definiranjem pojma klasifikacije, opisa najopcenitijih klasifikacijskih postupaka, a zatim
prijeci na usporedbu konkretnih metoda.
2.1. Uvod u klasifikaciju tekstualnih dokumenata
Klasifikaciju možemo definirati kao postupak dodjeljivanja klase c iz skupa s konacnim bro-
jem elemenata C, prema odredenom pravilu, neoznacenom dokumentu d koji pripada skupu
dokumenata D.
Slika 2.1: Klasifikacija
Klasifikator definiramo kao funkciju:
γ : D → C
Metode klasifikacije se razlikuju prema pravilima koja odreduju klasu dokumenta. U
najjednostavnijim slucajevima ce osoba pregledati dokument i zakljuciti kojoj klasi on pri-
pada. Primjer je razvrstavanje knjiga u knjižnici. Takav pristup je pouzdan, ali nije efikasan.
2
Cilj je postici automatizirani postupak u kojem ce racunalo primjenjujuci pravila odrediti
klasu. Kako se radi o racunalima, potrebno je pravila zapisati njima razumljivom sintaksom,
primjerice Booleovim izrazima. Osoba koja poznaje podrucje primjene mogla bi napisati ta-
kav skup pravila koji bi vrlo precizno odredio klase, ali problem takvog pristupa je skupoca
i održavanje. Bilo bi potrebno zaposliti mnogo strucnjaka 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 skupoce nalazi se u metodama temeljim na
strojnom ucenju. Ideja je vrlo jednostavna, želimo da klasifikator temeljem unaprijed pri-
premljenog skupa dokumenata, kojima je odredena klasa, nauci pravila te ih primjeni na
nepoznate dokumente i odredi im klasu. Zbog zahtjeva postojanja pripremljenih dokume-
nata klasifikacija pripada nadziranoj vrsti strojnog ucenja (engl. supervised learning). Pri-
premljene dokumente nazivamo skup za ucenje (engl. training set). Temeljem tih podataka
generira se model koji mora biti odgovarajuce složenosti kao funkcija koju pokušavamo na-
uciti kako bi se izbjegla prenaucenost (engl. overfitting) i podnaucenost (engl. underfitting).
Prenaucenost se dogada u slucaju kada je nauceni model koji opisuje podatke za ucenje pre-
više složen što uzrokuje lošu generalizaciju. Druga krajnost je podnaucenost koja se dogada
kada je model previše jednostavan što rezultira lošim provodenjem klasifikacije. Skup doku-
menata koji nisu oznaceni 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 sprjecavamo prenaucenost i podnaucenost.
Slika 2.2: Prikaz razlicitih složenosti modela (podnaucenost, prenaucenost, ispravna složenost)
Sva tri navedena skupa moraju biti medusobno disjunktni kako bi se mogle utvrditi prave
vrijednosti pogrešaka klasifikatora.
Klasifikator možemo ocijeniti koristeci cetiri osnovne mjere: preciznost (engl. preci-
sion), odziv (engl. recall), tocnost (engl. accuracy) i specificnost (engl. specificity). Kako
bismo mogli definirati ove mjere potrebno je prvo podijeliti klasificirane dokumente teme-
ljem ispravnosti odredivanja pripadnosti klasi.
Dokumente kojima klasifikator odredi pripadnost klasi ci, a to je ujedno i ispravna klasa,
nazivamo tocno pozitivnima (engl. true positives) i oznacavamo 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 oznacavamo oznakom FP.
Kada je dokumentu nije odredena klasa ci, a on niti ne pripada njoj nazivamo ga tocno
negativnim (engl. true negatives) i oznacavamo s TN.
Lažno negativni dokumenti (engl. false negatives) su oni kojima je klasifikator odredio
klasu razlicitu od ci, a oni upravo pripadaju njoj. Oznacavamo ih oznakom FN.
Preciznost definiramo kao udio dokumenata kojima je ispravno odredena klasa ci u broju
dokumenata kojima je ona odredena. Primijetimo kako ukupni broj ne odgovara broju doku-
menata koji stvarno pripadaju klasi ci.
P =TP
TP + FP(2.1)
Odziv definiramo kao udio dokumenata kojima je ispravno odredena klasa ci u ukupnom
broju dokumenata koji stvarno pripadaju klasi ci.
R =TP
TP + FN(2.2)
Tocnost se definira kao omjer ispravno klasificiranih dokumenata i ukupnog broja doku-
menata.
A =TP + TN
TP + FP + TN + FN(2.3)
Specificnost je omjer dokumenata kojima je ispravno odredeno nepripadnost klasi ci i
broja dokumenata koji stvarno ne pripadaju toj klasi.
S =TN
TN + FP(2.4)
Prosudivati klasifikator samo temeljem navedenih mjera je pogrešno, potrebno je pozna-
vati i podrucje primjene kako bi se one mogle prilagoditi i tako ostvariti dobar klasifikator.
Takoder je bitno naglasiti kako je visoka razine jedne od mjera nedovoljna za proglašavanje
klasifikatora kvalitetnim. Primjerice ako testiramo klasifikator na skupu dokumenata koji ce
velikom vecinom pripadati klasi ci i klasifikator svima odredi nepripadnost toj klasi tada ce
tocnost biti vrlo visoka, ali ce odziv biti jednak nuli.
(Bašic i Šnajder, 2011)
2.2. Metode klasifikacije
U ovom potpoglavlju bit ce napravljena podjela modela nadziranog ucenja, vrsti strojnog
ucenja kojem klasifikacija pripada. Takoder cemo 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) cesto
krace nazivanim k-NN.
4
2.2.1. Modeli nadziranog ucenja
Generativni i diskriminativni modeli
Prema nacinu odredivanja pripadnosti klasi postupke klasifikacije možemo podijeliti na ge-
nerativne i diskriminativne modele. Generativni model uci zajednicku razdiobu primjera x
i klase c P (x, c), iz koje se može primjenom Bayesove formule doci do vjerojatnosti pripa-
danja primjera x klasi c P (c|x), koju koristi prilikom klasifikacije. Diskriminativni modeli,
ovisno o tome jesu li probabilisticki ili ne, izravno uce uvjetnu razdiobu P (c|x), odnosno
modeliraju funkciju ovisnu o primjeru x koja dodjeljuje klasu c. Generativni modeli poku-
šavaju nauciti kako primjeri iz neke klase nastaju te to znanje primjenjuju u klasifikaciji dok
diskriminativni modeli odreduju klasu samo temeljem pitanja koliko je vjerojatno da se radi
o nekoj klasi uz zadane pojmove iz dokumenta. Razliku izmedu ova dva pristupa možemo
vidjeti na slici 2.3.
Slika 2.3: Diskriminativan model(lijevo) i generativan model(desno)
Možemo reci da diskriminativni modeli uce granicu izmedu 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 uce-
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 izracune, ne zahtijeva toliko primjera za ucenje i vrlo dobro odraduje klasifikaciju.
5
Probabilisticki i neprobabilisticki modeli
Probabilisticki modeli postupak klasifikacije dijele na fazu zakljucivanja, u kojoj se racuna
P (c|x) i fazu odlucivanja u kojoj se izracunatu vjerojatnost koristi za klasificiranje primjera.
Neprobabilisticki modeli objedinjuju navedene faze u jednu.
Parametarski i neparametarski modeli
Temeljem odnosa broja primjera za ucenje i parametara modela, nadzirane postupke strojnog
ucenja dijelimo na parametarske i neparametarske. Kod parametarskih na složenost modela
ne utjece broj primjera za ucenje, nego se pretpostavlja teorijska razdioba podataka pa je
iz tog razloga broj parametara konacan i odreden razdiobom (npr. za normalnu razdiobu to
su ocekivanje i standardna devijacija). Neparametarski modeli, iako im ime može drugacije
sugerirati, imaju parametre, ali njihov broj ovisi o broju primjera za ucenje pa samim time i
složenost modela raste povecanjem skupa za ucenje. Oni ne pretpostavljaju nikakvu razdiobu
primjera za ucenje.
Linearni i nelinearni modeli
Prema granici klasa modele možemo podijeliti na linearne i nelinearne.
Kod linearnih modela klase se moraju moci razgraniciti (n− 1)-dimenzionalnim prosto-
rom koji nazivamo hiperravnina, dok nelinearni ne postavljaju takav uvjet.
Za primjer uzmimo dvodimenzionalni prostor, ako je moguce pravcem odvojiti primjere
koji pripadaju razlicitim klasama tada se radi o linearnom, a inace o nelinearnom modelu.
Jednostavni primjer nelinearnog modela je funkcija XOR (iskljucivo ili) prikazana na
slici 2.5. Vidimo da nije nikako moguce povuci pravac koji bi razdvojio tocke koje pripadaju
razlicitim klasama.
Slika 2.5: Nelinearni model
Linearni modeli su ograniceni i koristeci ih nije moguce riješiti neke teže klasifikacij-
ske probleme koji se pojavljuju u slucajevima kada je primjera znacajno više od dimenzije
6
prostora što rezultira vecom gustocom naseljenosti.
2.2.2. Naivni Bayesov klasifikator
Bayesov klasifikator pripada generativnom, probabilistickom, parametarskom, linearnom
modelu nadziranog ucenja. Svi Bayesovi klasifikatori temeljeni su na Bayesovoj formuli
koja definira uvjetnu vjerojatnost dogadaja.
Teorem 1 Bayesova formula: Neka je H1, H2, . . . , Hn potpun sustav dogadaja 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|A) =P (Hi · P (A|Hi)∑n
j=1 P (Hj) · P (A|Hj)=P (Hi) · P (A|Hi)
P (A). (2.5)
(Benšic i Šuvak, 2014)
Ona opisuje vjerojatnost dogadanja hipoteza u slucaju kada unaprijed znamo da se os-
tvario neki dogadaj. Vjerojatnost P (Hi) nazivamo a priori vjerojatnostima hipoteze Hi, a
P (Hi|A) a posteriori vjerojatnostima hipoteze Hi.
U našem slucaju izracunavamo vjerojatnost klase za zadani dokument pa formulu mo-
žemo zapisati na sljedeci nacin:
P (c|d) =P (c) · P (d|c)
P (d)(2.6)
Najvjerojatnija klasa c iz skupa svih klasa C je ona s najvecom a posteriori vjerojatnosti
(engl. maximum a posteriori), krace MAP. Odnosno, tražimo takav c ∈ C za koji ce P (c|d)
biti maksimalan:
cMAP = arg maxc∈C
P (c|d) (2.7)
Iz 2.6 uocavamo 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 :
cMAP = arg maxc∈C
P (c) · P (d|c) (2.8)
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:
cMAP = arg maxc∈C
P (c) · P (t1, t2, . . . , tn|c) (2.9)
Vjerojatnost klase P (c) racuna se kao omjer broja dokumenata te klase u ukupnom broju
dokumenata, medutim vjerojatnost P (t1, t2, . . . , tn|c) nije moguce jednostavno izracunati.
7
Zato uvodimo pojednostavljenje u kojem ne pazimo na redoslijed pojmova, nego samo broj
pojavljivanja. Takav model nazivamo vreca rijeci (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 znacajnog pojednostavljenja izracuna.
Nakon primjene navedenog slijedi:
P (t1, t2, . . . , tn|c) = P (t1|c) · P (t2|c) · . . . · P (tn|c) (2.10)
P (ti|c) racunamo kao omjer broja pojavljivanja pojma ti i ukupnog broja pojmova u
dokumentima s klasom c.
Iz 2.9 i 2.10 dolazimo do konacnog izraza za odredivanje klase:
cNB = arg maxc∈C
P (c) ·∏t∈T
P (t|c). (2.11)
Naivni Bayesov klasifikator, kao i ostali jednostavni modeli, ima problem visoke pristra-
nosti (engl. high bias), koja je definirana kao razlika izmedu predvidenog i stvarnog modela.
Vecinom je dobar odabir u slucajevima kada imamo vrlo malo primjera za ucenje.
2.2.3. Klasifikator najbližih susjeda
Algoritam najbližih susjeda jedna je od najjednostavnijih metoda strojnog ucenja. Pripada
diskriminativnom, neparametarskom, nelinearnom modelu nadziranog ucenja, a odredivanje
klase nepoznatog dokumenta svodi se na odredivanje vecinske klase najbližih dokumenata iz
skupa za ucenje. Za udaljenost izmedu podataka mogu se koristiti razlicite 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
Moguce je, cesto i poželjno, bližim susjedima pridijeliti veci znacaj, odnosno težinu.
Cesto se koristi težinski faktor d−1 gdje je d udaljenost do susjeda.
Kažemo da k-NN pripada vrsti strojnog ucenja koju nazivamo ucenje zasnovano na slu-
cajevima (engl. instance-based) cesto nazivanim i memory-based jer prilikom odredivanja
klase prolazi po svim instancama iz skupa za ucenje koje pohranjuje u memoriji. Vremenska
8
složenost same pretrage i odredivanja klase ne ovisi o broju klasa, nego iskljucivo o broju
primjera za ucenje pa je k-NN pogodniji za rješavanje problema s velikim brojem klasa. Iako
je vecinom poželjno imati velik broj primjera za ucenje kod k-NN-a takav pristup znacajno
usporava postupak klasifikacije.
Vrijednost k odreduje se heuristicki, primjerice provodenjem cross-validation postupka
kako bi se utvrdio najbolji k za konkretan slucaj.
Povecanje vrijednosti k povecava pristranost, ali smanjuje varijancu, odnosno varijaciju
kvalitete predvidanja modela. Suprotno navedenom, smanjenje vrijednosti k povecava vari-
jancu, ali smanjuje pristranost. Cilj je odabrati takav k za koji ce pristranost i varijanca biti
minimizirani.
Na slici 2.7 središte svakog grafa predstavlja savršeni model, a zelene tocke predstavljaju
izgradene modele prema razlicitim skupovima za ucenje.
Slika 2.7: Ilustracija pristranosti i varijance
Pokazalo se da je k koji je jednak kvadratnom korijenu broja primjera za ucenje dobar
pocetak za pronalazak najbolje vrijednosti. Valja izbjegavati parne vrijednosti kako bi se
smanjila mogucnost pojave situacija kada se dvije klase pojavljuju jednak broj puta što je
posebno važno kod binarnog klasifikatora kod kojeg su moguce samo dvije klase.
9
Slika 2.8: 3-NN primjer
Slika 2.8 ilustrira postupak klasifikacije za k = 3, crvena tocka predstavlja podatak iz
skupa za ispitivanje kojem treba odrediti klasu. U skupu za ucenje nalaze se podaci koji
pripadaju klasi K1 (zelena boja) te K2 (narancasta boja). Nakon pronalaska tri najbliža
susjeda zakljucuje se da novi podatak pripada klasi K1.
Kod 1-NN klasifikatora novom podatku pridjeljujemo klasu najbližeg susjeda. Ako se ve-
licina skupa za ucenje približava beskonacnosti, 1-NN postiže dvostruki minimalni moguci
stupanj pogreške (Bayes error rate). Problem 1-NN-a je nedostatak robusnosti, odnosno
osjetljiv je na postojanje podataka koji iskacu od ostalih iz svoje klase te tako pridonose
šumu. Navedeno pokazuje slika 2.9 na kojoj vidimo da je podatku iz ispitnog skupa, ozna-
cenom 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 uociti k-NN je vrlo jednostavan za shvacanje i implementaciju što
je jedna od prednosti. Takoder se pokazao otpornim na šum (osim 1-NN) te se zbog brzine
izvodenja namece kao izbor u situacijama kada je skup klasa jako velik.
Neke od mana k-NN-a su sporo odredivanje susjeda u slucaju velikog broja dokumenata,
ogranicenost memorijom te potreba za utvrdivanjem najbolje vrijednosti za k.
10
3. Programska knjižnica Apache Lucene
Za implementaciju prakticnog dijela korišten je Apache Lucene, programska knjižnica otvo-
renog koda u potpunosti napisana u Javi koja nudi mogucnosti indeksiranja i pretrage do-
kumenata. Iako je napisana u programskom jeziku Java, omogucena je integracija u drugim
jezicima kao što su C, C++, C#, Perl, Python, PHP. . .
Lucene je 1999. godine poceo 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 sucelja moguce je ostvariti osnovne funkcije pretrage
brzo i lako koristeci 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 izvuci tekst. Tako
primjerice možemo uz pomoc drugih alata izvuci tekst iz MS Word, XML, HTML ili PDF
dokumenata te ih indeksirati i pretražiti.
U sljedecim potpoglavljima bit ce opisan nacin rada Lucenea uz primjere.
3.1. Indeksiranje i pretraga pomocu Lucenea
Kako je temelj svih radnji s Luceneom indeks i pretraga nad njime u ovom potpoglavlju bit
ce objašnjeni postupci izgradnje indeksa i mogucnosti pretrage.
Neka pitanja na koja cemo odgovoriti u nastavku su: što je indeks, kako se gradi i zašto
bi ga uopce koristili?
Zamislimo situaciju u kojoj trebamo pronaci odredeni pojam u knjizi. Navedeni problem
možemo riješiti na dva nacina. Prvi je citanje knjige po redu sve dok ne nademo pojam
koji nas zanima. Drugi nacin je pretraga kazala pojmova na kraju knjige u kojem možemo
pronaci stranice na kojima se on pojavljuje. Ocigledno je drugi nacin brži i jednostavniji, ali
zahtijeva postojanje kazala pojmova.
11
Ovaj primjer možemo preslikati i na racunalnu pretragu tekstualnih datoteka. Ako smo
odredenim postupkom u stanju napraviti strukturu podataka koja ce omoguciti brzi pogled i
odredivanje lokacije pojma unutar dokumenta, tada možemo izbjeci slijedno citanje 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 odredeno rednim brojem rijeci u dokumentu. Zbog efikas-
nosti pojmovi su sortirani abecednim redom, a oznake dokumenata rastucim redoslijedom.
Slika 3.1: Komponente aplikacija za pretragu
(McCandless et al., 2010)
Slika 3.1 prikazuje potrebne komponente za ostvarivanje pretrage. U nastavku ce neke
od njih biti dodatno pojašnjene.
3.1.1. Stvaranje dokumenta
Kako bismo mogli napraviti indeks prvo moramo pomocu Lucenea napraviti dokumente
predstavljene razredom org.apache.lucene.document.Document.
Gradivne jedinice dokumenta su polja (engl. fields). Obicno su to naslov, autori, saže-
12
tak, URL, sadržaj. Lucene omogucuje razlicito vrednovanje pojedinih polja (engl. boosting)
dokumenata koje postavlja programer, ali ostvaruje i automatsko povecanje vrijednosti polja
koja su kraca 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 obicno sprema u indeks te mu kasnije iz programa
možemo pristupiti koristeci Lucene API. Takva polja se obicno ne tokeniziraju, odnosno ne
provodi se leksicka analiza jer se njihov sadržaj promatra kao cjelina1. Suprotno tome, polja
koja sadrže više teksta (sadržaj clanka, poglavlje knjige. . . ) se tokeniziraju, ali se ne spre-
maju u indeks pa im nije moguce pristupiti koristeci Luceneov API2. Postoje i specificne im-
plementacije koje nasljeduju osnovnu klasu org.apache.lucene.document.Field,
no u njih necemo 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 vec gotovo analizatore te mogucnost stvaranja vlastitih. Njegova zadaca je
stvaranje niza tokena iz tekstova unutar polja. Neki od problema koje analizatori rješavaju
jesu prepoznavanje složenica, izvlacenje korijena rijeci (razlikuje se od jezika do jezika)
kako bi se izbjeglo višestruko spremanje istih rijeci u razlicitim oblicima, prepoznavanje
rijeci u nelatinicnim pismima, pretvorba svih tokena u mala slova kako bi se izbjegla pretraga
osjetljiva na velicinu slova i uklanjanje ucestalih rijeci koje ne pridonose znacenju (engl. stop
words).1primjer je razred org.apache.lucene.document.StringField2primjer je razred org.apache.lucene.document.TextField
13
3.1.3. Indeksiranje
Niz tokena dobivenih u prethodnom koraku koristi se za izgradnju indeksa, tocnije inver-
tiranog indeksa (engl. inverted index). Ova struktura podataka uzima tokene kao kljuceve,
a listu identifikatora dokumenata u kojima se oni pojavljuju kao vrijednost, za razliku od
obicnog indeksa koji bi dokumente definirao kao kljuceve, a listu pojmova iz dokumenta kao
vrijednosti. Prednost se ocituje u brzini pretrage, kod obicnog 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 omogucuje brisanje i ažuriranje. Prilikom brisanja
dokumenata koristimo metodu deleteDocuments koja može primati varijabilan broj
instanci razreda Term ili Query. Metoda ce tada obrisati sve dokumente koji sadrže za-
dane pojmove ili odgovaraju zadanim upitima. Takoder 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
(kljuceve) 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, moguce je ostvariti
isto ponašanje koristeci 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 znaci da ce se sve promjene koje na indeksu radi IndexWriter
dogoditi u cijelosti ili se u slucaju pogreške nece obaviti niti jedna izmjena; indeks ce iz-
mjenom prijeci 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 izvodenja metode commit nad tim objektom; ako se do-
gode neuhvacene iznimke, pad operacijskog sustava, gubitak napajanja ili bilo koji drugi
uzroci rušenja programa indeks ce 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 koristeci klase: IndexSearcher, Query, TopDocs
i ScoreDoc iz paketa org.apache.lucene.search.
Potrebno je instancirati objekt razreda IndexSearcher u ciji se konstruktor najcešce
14
prosljeduje objekt razreda IndexReader koji se otvara nad direktorijem u kojem se nalazi
indeks. Koristeci taj objekt cemo vršiti pretragu nad indeksom pa cemo ga u nastavku zvati
pretraživac. Zatim se izgradi upit koji je predstavljen razredom Query ili nekim od mnoštva
razreda koji ga nasljeduju, a pogodni su za specificnije korištenje.
Jedan od jednostavnijih oblika upita je TermQuery koji se gradi temeljem pojmova.
Pojam je predstavljen razredom Term i odreden je poljem dokumenta te tekstom koji ce se
pretraživati po zadanom polju.
Metoda search pozvana nad pretraživacem kao rezultat vraca objekt TopDocs koji
sadrži dokumente koji odgovaraju pretrazi. Iz njega možemo dobiti polje objekata razreda
ScoreDoc koji predstavljaju pojedine rezultate pretrage.
Sljedeci jednostavni primjer prikazuje korištenje pretrage. Nakon što se pronade pet
dokumenata koji najbolje zadovoljavaju upit, ispisuje se njihova ocjena, odnosno vrijednost
koja odreduje 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 sljedecim dijagramom:
Slika 3.2: Pretraga u Luceneu
(McCandless et al., 2010)
Rangiranje dokumenata
Lucene koristi tf-idf nacin ocjenjivanja dokumenata uz mogucnost povecanja važnosti odre-
denih polja dokumenta. To znaci da je ocjena dokumenta odredena 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-
ceno 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 specificnosti dokumenta. Primjer mogu
biti veznici, prijedlozi, prilozi, clanovi u stranim jezicima (a, an, the). . .
Idf za pojam t u kolekciji od N dokumenata se racuna prema jednadžbi
idft = logN
dft(3.1)
16
Sada možemo definirati i jednadžbu za izracun 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
score(q, d)∑
t∈qtf-idft,d (3.3)
(Manning et al., 2008)
Konceptualno ocjenjivanje u Luceneu
Lucene definira nešto drugaciju formulu za izracun 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 odredenih frekvencijom pojmova koje sadrže, u
vektorskom prostoru kojem su osi odredene svim pojmovima iz kolekcije. Svaki vektor je
zapravo zasebni invertirani indeks s pojmovima koje sadrži.
Kako bi se izbjeglo drugacije ocjenjivanje dokumenata koji sadrže jednake pojmove, ali
s razlicitim frekvencijama obavlja se normiranje vektora, odnosno za svaki ~V (d) se racuna
jedinicni vektor ~v(d) prema
~v(d) =~V (d)∣∣∣~V (d)
∣∣∣ (3.4)
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 ce u postupku normiranja
odrediti je li duljina vektora jednaka jedinicnom ili ce biti dulja od njega.
Kako Lucene omogucava odredivanje važnosti dokumenta (document boost) uvodi se i
mjera doc-boost(d). Isto vrijedi i za odredivanje vrijednosti pojmova unutar upita pa je nužno
uvesti mjeru query-boost(q).
Zbog vrsta upita u kojima je moguce djelomicno podudaranje potrebno je omoguciti
izracun ocjene temeljem omjera broja pronadenih i ukupnog broja pojmova unutar upita.
Zato se uvodi mjera coord-factor(q,d).
Tako dolazimo do konceptualne formule za izracun ocjene u Luceneu
score(q,d) =
coord-factor(q,d) · query-boost(q) ·~V (q) · ~V (d)∣∣∣~V (q)
∣∣∣ · doc-len-norm(d) · doc-boost(d)
(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 utjece na ocjenu dokumenta jer jednaka
za sve dokumente koji se traže upitom. Ona samo omogucava usporedbu ocjena dokumenata
dobivenih pretragom prema razlicitim 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 racuna kao kvadratni korijen frekvencije pojma u dokumentu
i oznacit cemo ga s tf(t in d).
Racunanje idf vrijednosti je izmijenjeno u odnosu na jednadžbu 3.1 iz teorije
idf(t) = 1 + log
(docCount + 1
docFreq + 1
)(3.6)
gdje je docCount broj dokumenata unutar kolekcije, a docFreq broj dokumenata unutar kojih
se pojam t pojavljuje.
Naposljetku dolazimo do formule
score(q,d) =
coord(q,d) · queryNorm(q) ·∑
t∈q
(tf(t in d) · idf(t)2 · t.getBoost() · norm(t,d)
)(3.7)
(TFIDFSimilarity, 2017)
18
4. Klasifikacija tekstualnih dokumenatakorištenjem programske knjižniceApache 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 nacinu rada.
U programskom rješenju klasifikator najbližih susjeda je dodatno izveden na "zaobilazni"
nacin 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 ucenje, ako
želimo koristiti sve dokumente iz indeksa tada možemo proslijediti null. Polje dokumenta
u koje želimo upisati dodijeljenu klasu prosljedujemo na mjestu classFieldName, a va-
rijabilan broj polja temeljem kojih ce se odredivati klasa na mjesto textFieldNames.
Parametar field2analyzer mapira željenu vrstu analizatora na pojedino polje doku-
menta.
Isjecak 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 ciji se pojmovi koriste za odredivanje 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 pocinje i završava (offset)
– setStoreTermVectors(true) koji sprema vektore kojima su dokumenti pred-
20
stavljeni zbog cega iz njih može izvuci tokene koje ce koristi u postupku klasifikacije
Zbog mogucnosti pojavljivanja vrlo malih vjerojatnosti prema teorijskoj formuli 2.8 koje
bi izazvale gubitak prave vrijednosti zbog nemogucnosti spremanja vrlo malih brojeva u
memoriji (engl. underflow) Lucene koristi logaritamske vrijednosti tih vjerojatnosti pa se ta
formula pretvara u:
log(cMAP ) = arg maxc∈C
log(P (c)) + log(P (d|c)) (4.1)
Metoda assignClass vraca listu mogucih klasa koje su ocijenjene te se bira ona s
najvecom ocjenom. Ocjenjivanje klasa možemo prikazati sljedecim 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 slicnih zadanom.
Princip korištenja slican je i opisanom Bayesovom klasifikatoru iz prethodnog potpo-
glavlja, potrebno je stvoriti objekt pomocu 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 moguce 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 ce pronaci sve slicne dokumente
i temeljem rezultata pretrage odreduju klasu.
Glavna mana zbog koje ovaj razred nije uvijek pogodno koristiti je nemogucnost korište-
nja u slucajevima kada polja dokumenata prema kojim želimo klasificirati stvaramo pozivom
konstruktora koji primaju objekt java.io.Reader, otvoren nad tekstualnim dokumen-
tom, što želimo u slucajevima velikih dokumenata.
Problem se dogodi kada se u jednoj od metoda pokuša pozivom metode String[]
getValues(String name) doci 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 koristeci razred MoreLikeThis.
Ostvarenje klasifikatora pomocu razreda MoreLikeThis
Potrebno je stvoriti objekt tog razreda koristeci konstruktor koji prima objekt razreda
IndexReader, postaviti analizator koji želimo koristiti te ogranicenja na najmanji broj po-
javljivanja pojma unutar svih dokumenata i broja dokumenata u kojima se pojam pojavljuje
cime izdvajamo pojmove koji se ne pojavljuju željeni broj puta. Zatim je potrebno pozivom
metode like nad stvorenim objektom napraviti upit cijom ce se pretragom dobiti slicni
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 odreduje klasa.
23
5. Zakljucak
U ovom radu dan je teoretski uvod u podrucje klasifikacije tekstualnih dokumenata, objaš-
njeni su temeljni konpcepti korišteni u praksi te osnovne funkcionalnosti programske knjiž-
nice Apache Lucene korištene za izradu prakticnog dijela.
Napravljena je podjela modela nadziranog strojnog ucenja 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 slucaju, ali postoje smjernice koje bi trebale pomoci
prilikom odabira.
Tako se preporuca odabir k-NN-a u slucajevima kada je skup mogucih 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 izracuna udaljenosti izmedu susjeda i
ogranicenosti memorijom (pripada memory-based strojnom ucenju). Šum u skupu za ucenje
znatno ne umanjuje preciznost pa kažemo da je robustan.
Kako pripada parametarskom modelu, naivni Bayesov klasifikator ima ogranicenu pri-
mjenu jer se pretpostavlja teorijska razdioba podataka, ali zato vrijeme ucenja ne ovisi o
broju primjera. S obzirom na to da se radi o linearnom modelu, postoje ogranicenja 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
LITERATURA
Bojana Dalbelo Bašic i Jan Šnajder. Vrednovanje klasifikatora, 2011.
Mirta Benšic i Nenad Šuvak. Uvod u vjerojatnost i statistiku. Sveuciliš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 kolicine tekstualnih dokumenata potrebno ih je, radi brže,
jeftinije i lakše obrade, organizirati, odnosno podijeliti prema zajednickim 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 ce najbolje odrediti pripadnost klasi. Odluka se temelji na teorijskim saz-
nanjima o pojedinim metodama i usporedbi dobivenih rezultata. Moguce je da iste metode,
primijenjene na razlicite skupove podataka, rezultiraju vrlo razlicitom tocnosti odredivanja
klasa. U radu su opisana dva klasifikatora koji pripadaju razlicitim vrstama strojnog ucenja.
To su klasifikator najbližih susjeda i naivni Bayesov klasifikator.
Za primjenu klasifikacije moguce je koristiti Apache Lucene, programsku knjižnicu otvo-
renog koda.
Kljucne rijeci: 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