Information Retrieval joost.vennekens@kuleuven.be
Zoekterm...
Data retrieval <> IR uit gestructureerde gegevens <-> ongestructureerde documenten Bv. html, doc, txt, jpg,... artificiële vraagtaal <-> natuurlijk taal exacte overeenkomst <-> relevantie monothetische <-> polythetische classificatie
Positie van IR information management information retrieval text retrieval image retrieval presentation of information
Hoe werkt het?
Twee fases Vooraf Alle documenten analyseren Minder relevante info weggooien Compacte, efficiënte voorstelling: index Op het moment zelf Beste matches uit index gaan halen
Indexering Gemakkelijker toegankelijke voorstelling: index Verwijderen markup Tokenizatie Filtering informatie probleem voorstelling zoekvraag tekst documenten voorstelling geïndiceerde documenten Lemmatizatie Weging evaluatie en terugkoppeling vergelijking teruggevonden, gesorteerde documenten
Verwijderen markup <body> <p> Databanken worden gebruikt voor het opslaan van <b>informatie</b>. Dat is wel tof. Databanken worden gebruikt voor het opslaan van informatie. Dat is wel tof. </p> </body>
Tokenizatie Zinnen -> verzameling van woorden (bag of words) Databanken worden gebruikt voor het opslaan van informatie. Dat is wel tof. databanken worden gebruikt voor het opslaan van informatie dat is wel tof
Belangrijke woorden www.wordle.net
Filteren Verwijderen van stopwoorden Woorden die frequent voorkomen in elke Nederlandse/Engelse tekst Voorbeeld: www.wordle.net
Zonder stopwoorden
Lemmatizatie Herleiden van woorden tot stammen Eenvoudig: afkappen computer, computing, compute -> comput Beter: intelligente lemmatizatie zagen -> zien / zaag
Weging (document, lemma) > gewicht Belang van lemma voor document inschatten Des te hoger gewicht, des te beter beschrijft dat lemma het document Veel voorkomen in dit document Weinig voorkomen in de andere documenten
Weging Hoog gewicht aan karakteristieke lemma s Term frequency: tf(w,d) Document frequency: df(w) Totaal aantal documenten: N Inverse document frequency: idf(w) = log(n/df(w)) tf-idf gewicht: tf(w,d) * idf(w)
Bijvoorbeeld inform inform inform inform inform inform idf = log(6/3) = 1 tf = 3 gewicht = 3 * 1
Resultaat Gewicht: tf * idf = tf * log(n / df) Doc1 inform 24 retriev 23 table 12...... voeg 100 documenten toe met inform inform 22 retriev 23 table 12...... zonder inform 26 retriev 23 table 12......
Index inform 24 retriev 23 table 12...... inform 5 retriev 0 table 34...... inform 0 retriev 0 table 52......
inform 1 retriev 1 table 0...... inform 24 retriev 23 table 12...... inform 5 retriev 0 table 34...... inform 0 retriev 0 table 52......
infor 1 retrie 1 table 0...... infor 24 retrie 23 table 12......
infor 1 retrie 1 table 0...... (d, q) = s X (d i q i ) 2? i infor 24 retrie 23 table 12...... Gevoelig voor absolute waarde van query gewichten
d q = X i d i q i infor 1 retrie 1 table 0...... infor 24 retrie 23 table 12...... Gevoelig voor lengte van documenten
infor 1 retrie 1 table 0...... d q d q = P i d iq i pp pp i d2 i i q2 i infor 24 retrie 23 table 12...... Cosinus normalisatie
Google pagerank Kijk niet enkel naar woorden in document Maar ook naar kwaliteit van document Te meten via het aantal links naar pagina Gewogen volgens kwaliteit Iteratief algoritme
IR methodes vergelijken
Performantie van algoritme Confusion matrix 4 categorieen van documenten: relevant TP & in resultaat irrelevant FP & in resultaat in + relevant FN & uit resultaat irrelevant TN & uit resultaat uit = goed + slecht = N
Maatstaven P recision = Recall = TP TP+FN TP TP + FP = P (goed in) trade-off = P (in goed) TP FP FN TN goed + slecht in + uit = = N F allout = FP TN+FP = P (in slecht) Perfect algoritme: Precision = Recall = 1; Fallout = 0 Slechtste algoritme: Precision = Recall = 0; Fallout=1
Maatstaven P recision = Recall = TP TP+FN TP TP + FP = P (goed in) = P (in goed) TP FP FN TN goed + slecht in + uit = = N F allout = FP TN+FP = P (in slecht) Alles in: Precision = goed/n; Recall = 1; Fallout = 1; generality Alles uit: Precision 1; Recall = 0; Fallout=0;
Verband Recall = TP / (TP + FN) Precision = TP / (TP + FP) Fallout = FP / (FP + TN) Generality = Goed / N = (TP + FN) / N P = R G (R G)+F (1 G)
Vergelijking score > grens, voor grens = g1, g2,... 1.0 0.9 0.8 0.7 IR1 0.6 0.5 0.4 precision IR2 F = 2PR / (R + P) 0.3 0.2 0.1 0.0 recall 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
Problemen: natuurlijke taal computer machine desktop... woorden vs. concepten
Problemen: natuurlijke taal Door mismatch woorden <> concepten Meerdere woorden voor hetzelfde concept -> lage recall Zelfde woord heeft meerdere betekenissen -> lage precision
Performantie verhogen Gebruiker Recall Synoniemen, spellingsvarianten, Precision Dubbelzinnigheden weghalen, gebruik van classificatiecodes (cfr. UDC) Of systeem
Dus, geavanceerde tekstzoeksystemen: informatie probleem tekst documenten voorstelling voorstelling zoekvraag geïndiceerde documenten evaluatie en terugkoppeling natuurlijke taal verwerking van zowel documenten als zoektermen beide vergelijken en matchen teruggevonden, gesorteerde documenten Time flies like an arrow. Fruit flies like a banana.
IR in Oracle DB
Tekst in DB Verschillende opties Veld met als waarde bestandsnaam varchar2: maximum 4000 tekens clob (character large object): meer dan 4000 tekens (tot 4 GB) blob (binary large object): binaire informatie (beeld, geluid,...)
Voorbeeld create table boek ( bnr integer primary key, titel char(20), auteur char(20), datum date, tekst varchar2(1000) ); insert into boek values (1,'fruit eten', 'mie groen', '24/10/2008', 'Het is zeer belangrijk om veel fruit te eten. Appelen en peren zijn de meest gekende inlandse soorten. Daarnaast is er ook heel wat uitheems fruit, bijvoorbeeld bananen. Ook apen en beren lusten sommige fruitsoorten.');
Indexeren Twee soorten index CTXCAT Voor kleine documenten Update zichzelf CONTEXT Voor grote documenten Manueel updaten
Indexeren CONTEXT create index boek_content on boek(tekst) indextype is ctxsys.context; Voor grote documenten Gebruik contains Syncronizeren: begin ctx_ddl.sync_index('boek_content'); end;
Indexeren CTXCAT Voor kleinere fragmenten (varchar2) create index boek_content on boek(tekst) indextype is ctxsys.ctxcat; Gebruik catsearch Krachtiger zoeken Past zich automatisch aan
Gebruik Voor df = 1, score =100 als: contains/catsearch geven score terug score(d,t) idf(t)*tf(t,d) Getal tussen 0 en 100 N T 1 34 5 20 10 17 50 13 100 12 500 10 1000 9 10000 7 100000 5 1000000 4
Gebruik in queries ctxcat index: select titel from boek where catsearch(tekst, 'bananen') > 0; context index: select titel, score(5) from boek where contains(tekst, 'bananen', 5) > 0; of: score(0)... contains(tekst, bananen ) score kan ook in group by of order by
Meerdere woorden Apart vergelijken, dus min of max select titel, score(5) from boek where contains(tekst, 'bananen and peren', 5) > 0; select titel, score(5) from boek where contains(tekst, 'bananen or peren', 5) > 0; select titel, score(5) from boek where contains(tekst, 'bananen not peren', 5) > 0;
Scoreveranderend select titel, score(5) from boek where contains(tekst, 'bananen accum peren', 5) > 0; select titel, score(5) from boek where contains(tekst, 'bananen minus peren', 5) > 0;
Symbolen Woord and Symbool & or accum + minus - not ~
Einde
Tot slot Leerstof: alles behalve hoofdstuk 1 http://www.cs.kuleuven.be/~joost/dn/ Examen: gesloten boek ± 33% theorie, mondeling ± 66% oefeningen, schriftelijk