szövegbányászatberendg/docs/dm/irdm.pdf · szövegbányászat információ visszakeresés és...
TRANSCRIPT
SzövegbányászatInformáció Visszakeresés és egyéb alkalmazások
A diák nagyban támaszkodnak a Stanford Egyetem „Information Retrieval and Web-mining” kurzusának anyagára:
http://www-csli.stanford.edu/~schuetze/information-retrieval-book.html
Áttekintés• Mi az IR?
• Indexelés– Egyszerű index– Invertált index, Gamma-kódolás
• Rangsorolás– TF-IDF rangsor– PageRank
• Egyéb alkalmazások és feladatok
Információ Visszakeresés• IR alapprobléma
– Adott egy korpusz(dokumentumok halmaza, internet)
– Felhasználó az információigényét leginkább kielégítő dokumentumokat keresi
• Lekérdezést fogalmaz meg
– Cél a lekérdezésnek megfelelő dokumentumok listájának visszaadása
Egy IR rendszer legfontosabb jellemzői
• Indexelés sebessége– Kevésbé fontos
• Lekérdezés sebessége– Kritikus szempont
• Lekérdező nyelv kifejezőereje– Mi kérdezhető meg és mi nem?
• Pontosság– A legfontosabb, de mérése összetett feladat
Egy keresőmotor sémája
Egyszerű index• Szó-dokumentum mátrix (Di,j : i. szó
szerepel-e a j. dokumentumban)
Antony and Cleopatra Julius Caesar The Tempest Hamlet Othello Macbeth
Antony 1 1 0 0 0 1
Brutus 1 1 0 1 0 0
Caesar 1 1 0 1 1 1
Calpurnia 0 1 0 0 0 0
Cleopatra 1 0 0 0 0 0
mercy 1 0 1 1 1 1
worser 1 0 1 1 1 0
Egyszerű indexelés• Gyors
• Az élet nem ilyen szép– Kivitelezhetetlen
– 1 millió dokumentum, ~1000 token/dok, ~6byte/token
• ~6GB korpusz
– Legyen 500K különböző szóalak– 500K x 1M mátrix
• ~60 GB index!
Invertált index
• ~1 milliárd egyest tartalmaz csupán a szó-dokumentum mátrix– Rendkívül ritka
• Egyszerűbb, és jobb reprezentáció, ha csak az 1-esek pozícióit tároljuk– ekkor invertált indexről beszélünk
Invertált index• Minden T tokenre, tároljuk a T-t
tartalmazó dokumentumok listáját.
• Miben tároljuk?– Tömb?
Brutus
Calpurnia
Caesar
1 2 3 5 8 13 21 34
2 4 8 16 32 64128
13 16
Mi van akkor ha a Caesar szó bekerül a 14-es dokumentumba?
Listás megvalósítás jobb• Dinamikus helyfoglalás (különböző
gyakoriságú szavak!!!)
• Könnyű beszúrás
• Pointerek extra helyfoglalás
Brutus
Calpurnia
Caesar
2 4 8 16 32 64 128
2 3 5 8 13 21 34
13 16
1
Szótár Napló Dokumentum ID szerint rendezve!
Invertált index létrehozása
Tokenizáló
Token stream Friends Romans Countrymen
Nyelvi modulok
Normalizált tokenek friend roman countryman
Indexelő
Invertált index
friend
roman
countryman
2 4
2
13 16
1
Dokumentumok Friends, Romans, countrymen.
Az index használata• Hogyan dolgozunk fel 1 lekérdezést?
– Milyen jellegű lekérdezéseket kezelünk?
• Mit indexelünk?– Mindent, vagy csak fontos szavakat? (Mi fontos?)
• Stopword lista: a leggyakoribb szavak elhagyhatók az indexből (sok hely, kevés haszon)– pl., the, a, an, of, to …– Nyelvfüggő elem, minden nyelvre kell stopword lista.
34
1282 4 8 16 32 64
1 2 3 5 8 13 21
Lekérdezés (naplólisták egyesítése)
• Párhuzamosan megyünk végig a két naplólistán, időigény így arányos a listák összhosszával
128
34
2 4 8 16 32 64
1 2 3 5 8 13 21
BrutusCaesar2 8
Ha a két lista hossza m és n, az összefésülés időigényeO(m+n)Fontos: a listák dokID szerint rendezve legyenek!!
Mit kapunk, milyen áron?• Logikai (igen/nem) keresésre
– Csak pontos egyezést ad vissza– Nincs rangsorolás
• Sokáig ez volt az uralkodó technológia• Becslés a méretre?
Vegyük az előző példát:– 1M dokumentum, átl. 1000 token hossz,
átlalában 6 byte/szó, ~500K különböző token
Becslés az invertált index méretére
• Két különálló tényező szabja meg a méretet– Szótár mérete– Naplók mérete
• Különböző dolgok jönnek szóba a méret optimalizálásakor– Szótárnál: pl. szótövezés (magyarban
különösen fontos!)– Naplónál: dokID-ket tárolunk, tömörítés!
Napló tárolása• Tároljuk rendezve a dokumentum ID listát!
• Ekkor elegendő csak az ID-k különbségeit tárolni („lyukak”)
– ezek várhatóan átlagosan sokkal kisebb számok
– Brutus: 33, 47, 154, 159, 202, …
– Brutus: 33, 14, 107, 5, 43, …• Használjunk változó kódhosszúságú kódolást!
– Calpurnia szó átlag minden egymilliomodik dokumentumban fordul elő, akkor azt log2 1M = ~20 biten szeretnénk tárolni
– Az az szó szinte minden dokumentumban benne van, ezt az infot jó lenne ~1 bit helyen tárolni
γ kódolás• K számot egy <hossz, eltolás> párral írjuk le• hossz érték unáris kódolású
(a számot leíró kód (eltolás) hosszát adja meg)• az eltolás bináris kódolású
(megadja magát a számot)
• K kódja– bites unáris kód – bites bináris kód– ahol:
1log 2 +K
K2log KKeltolás 2log2−=
γ kódolás• Példák:
– 9 = <1110,001> (7 bit)
– 23 = <11110, 0111> (9 bit)
– 1040 = <11111111110,0000010000> (21 bit)
• Ennél számottevően jobb tömörítést csak úgy érhetünk el, ha rendelkezünk információval a számok eloszlásáról– V.ö. Huffman-kód
Zipf törvénye• A k-adik leggyakoribb szó
gyakorisága nagyságrendileg ~1/k
Becslés Zipf törvénye alapján
• A leggyakoribb szó N dokumentumban fordul elő (minden lyuk 1-es)2. leggyakoribb N/2 dokumentumban (lyukak átlagosan 2 nagyságúak)…
k-adik leggyakoribb N/k dokumentumban (átlagos lyuk nagyság N/k), bit tárolásra
• Összegezve k = 1 … 500 ezerig• Összegzést végezzük úgy, hogy k darab csoportot tekintünk:
– az i-edik csoportra , elemű, egyenként max .
– N = 1 millió, i = 1 … 19-re szummázva kb 340 millió bit, azaz ~45 MB az index Napló részének mérete.
k2log2
ii k 22 1 <≤− 12 −i
12/2 −iNi
Szótár mérete, első gondolat• Fix hosszú bejegyzések tömbje
– 500K token; 28 byte/token = ~14MB.
Terms Freq. Postings ptr.
a 999,712
aardvark 71
…. ….
zzzz 99
20 byte Egyenként 4 byte
Szótár tömörítése
….systilesyzygeticsyzygialsyzygyszaibelyiteszczecinszomo….
Gyakoiság Napló ptr Szó ptr.
33
29
44
126
Binary searchthese pointers
Teljes hossz =500KB x 8 = 4MB
Pointerek 4Mpozícióra log24M =
22bits = 3bytes
• A szótár egyetlen karakterlánc– Pointer a szó kezdetére
– Köv. pointer mutatja a szó végét
Index mérete• Napló
– Kb 45 MB
• Szótár– 4 byte gyakoriságra
– 4 byte a Napló pointer
– 3 byte a szó pointer
– Átl. 8 byte szavanként a szóláncban– 500K token ~9.5MB
• Index– ~55 MB
Indexméret• Szótövezés / kis-nagybetűs alak
– Tokenek számát ~40%-al– Pointerek számát 10-20%-al– Méretet ~30%-al
• Stopwords– 30-as szabály: ~30 szó tesz ki ~30%-ot
az írott szövegekben!– A leggyakoribb szavak kivágása ~25%
helyspórolást hozhat
Pár szó a lekérdezés sebességéről
• Napló-listák lineáris időben egyesíthetők
• Optimalizálás:– Célszerű a rövid listákkal kezdeni a műveletek
elvégzését – Ugrólisták használata (index mérete növekszik)
Feldolgozás ugrólistákkal
1282 4 8 16 32 64
3711 2 3 5 8 130
2113718
16 128
Invertált index vége• Célszerű tárolni a dokumentumban a szóalak
helyét– Kifejezés alapú lekérdezés támogatására– Ezzel az előbb nem törődtünk– Nagyobb index, de ezt használják a
gyakorlatban• Alternatívája a bi- trigram alapú indexelés
Rangsorolás• Általában jó sok dokumentum
illeszkedik 1-1 lekérdezésre
– Több milliárdos korpuszból milliós nagyságrendű találat
– Fontos, hogy a dokumentumokat rangsoroljuk, relevancia szerint!
• Megoldás: pl. PageRank
• Elosztott számítások– Hadoop, Mahout, NoSQL, stb...
tf-idf rangsorolás• Szavak súlya a tf, és idf szorzata:
–
• Index készítésekor legyártható a súlyozás• „Ezt tároljuk el a szó-dokumentum
mátrixban”• A lekérdezést is egy mini dokumentumra
nézve a 2 vektor koszinusza adja a hasonlóságot:
–
( )tdtdt dfntfw log,, ∗=
∑∑∑
==
==⋅
=n
i ki
n
i ji
n
i kiji
kj
kjkj
ww
ww
dd
ddddsim
1
2,1
2,
1 ,,),(
Kiértékelés• Precízió, fedés
• Precízió-fedés görbe– Kitüntetett fedésértékhez tartozó precíziók
meghatározása, majd interpoláció
• MAP
IR rokonteületek• Információ kivonatolás
– Kivonat: az eredetinél rövidebb, emellett pontos reprezentánsa a dokumentum tartalmának
• „Olvastam a Háború és Békét… Oroszországról szól…”
• Kérdésmegválaszolás– Természetes nyelven megfogalmazott
kérdésre a releváns oldal visszaadása helyett a releváns információ visszaadása
Egyéb szövegbányászati alkalmazások és feladatok
Alkalmazások
•Dokumentumosztályozás
•Véleménykinyerés
•Információkinyerés– X Y cég W áron fölvásárolta QR céget. gépi tanulás
Feladatok•Lemmatizálás (szótövesítés)
•Jelentésegyértelműsítés
•Legvalószínűbb szófaji kódsorozatok, szövegbeli névelemek meghatározása
•Elemzési fák felállítása