előadó : kecskeméti gábor , ph.d. elérhetőség : a/1 336. szoba
DESCRIPTION
Invertált indexek. Indexek hatékonysági kérdései. Közelítő keresési módszerek, szerkesztési távolság. Előadó : Kecskeméti Gábor , Ph.D. Elérhetőség : A/1 336. szoba Gyakorlat : Szerda 8-10, A/1 204 labor Előadás : Szerda 10-12, A/5 202 vegyipari gépek tsz . - PowerPoint PPT PresentationTRANSCRIPT
Invertált indexek. Indexek hatékonysági kérdései. Közelítő keresési módszerek, szerkesztési
távolság
Előadó: Kecskeméti Gábor, Ph.D.Elérhetőség: A/1 336. szoba
Gyakorlat: Szerda 8-10, A/1 204 laborElőadás: Szerda 10-12, A/5 202 vegyipari gépek tsz.
Konzultáció: Szerda 12-14, A/1 336Elérhetőség: [email protected]
Weboldal: http://www.iit.uni-miskolc.hu/iitweb/opencms/users/kecskemetig
Keresőkifejezés• Shakespeare mely darabjai tartalmazzák a Brutus
ÉS Caesar szavakat azok közül, amelyek a Calpurnia szót nem tartalmazzák?
• grep-pelhetjük az összes Shakespeare darabot Brutus és Caesar feltétellel és kivághatjuk a Calpurnia-t tartalmazó sorokat.– Nagy korpuszra lassú (korpusz =
dokumentumgyűjtemény)– NOT Calpurnia nem triviális– Más operátorok (pl. Romans ÉS countrymen kifejezés
keresése) nem megoldható
Szó-dokumentum előfordulás
Ha 1 akkor a darab tartalmazza a szót, egyébként 0
Antonius és Kleopátra Julius Caesar A vihar 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
Előfordulásvektorok
• Tehát van egy 0/1 vektor minden szóhoz.• Keresőkifejezés megválaszolása: vegyük a
következő szavak vektorát Brutus, Caesar ÉS Calpurnia (komplementer) bitenkénti AND művelet
• 110100 AND 110111 AND 101111 = 100100.
Válasz a keresőkifejezésre
• Antonius és Kleopátra, III. felvonás, 2. szín• Agrippa [Aside to DOMITIUS ENOBARBUS]: Why, Enobarbus,• When Antony found Julius Caesar dead,• He cried almost to roaring; and he wept• When at Philippi he found Brutus slain.
• Hamlet, III. felvonás, 2. szín• Lord Polonius: I did enact Julius Caesar I was killed i' the• Capitol; Brutus killed me.
Nagyobb korpusz
• Vegyük n = 1M dokumentum, mindegyik kb. 1000 szót tartalmaz
• Átlag 6 bytes/szó, beleszámolva szóközöket és írásjeleket – 6 GB adatot jelent ez korpusz
• Nagyságrendileg m = 500K különböző szó van ezek között
A mátrix nem építhető fel
• 500K x 1M mátrixban fél billió 0 és 1-es van• De nincs benne több, mint 1 milliárd 1-es
– A mátrix nagyon ritka• Hogyan lehetne jobban reprezentálni?
– Csak az 1-eseket tároljuk
Invertált index• Minden T terminus (angolul term: általában szó, de lehet
többszavas kifejezés is) esetén tároljuk az olyan dokumentumok listáját,a melyik tartalmazza T-t
• Tömböt vagy láncolt listát használjunk?
Brutus
Calpurnia
Caesar
1 2 3 5 8 13 21 34
2 4 8 16 32 64 128
13 16
Invertált index
• Általában a láncolt lista jobb a tömbnél– Dinamikus tárfoglalás– Dokumentum beszúrás könnyebb– Tárhelytöbblet a pointerek tárolásával
Brutus
Calpurnia
Caesar
2 4 8 16 32 64 128
2 3 5 8 13 21 34
13 16
1
Szótár ElőfordulásdocID szerint rendezve (részletek később).
Szóindexek hatékonyság javítása • Fix keretű pointer tárolás: rossz helykihasználás
• Változó keretű pointer tárolás: jobb helykihasználás
– Aktuális hossz jelzése:• speciális végjel • hossz megadása
• Változó keretű pointer tárolás: köztes helykihasználás
Invertált index létrehozása
Tokenizáló
Token folyam Friends Romans Countrymen
Nyelvi modulok
Módosított tokenek friend roman countryman
Indexelő
Invertált index
friend
roman
countryman
2 4
2
13 16
1
Részletekkésőbb.
Indexelendő dokumentumok
Friends, Romans, countrymen.
• Párok (Módosított tokenek, dokumentum ID) szekvenciája
I did enact JuliusCaesar I was killed
i' the Capitol; Brutus killed me.
Doc 1
So let it be withCaesar. The noble
Brutus hath told youCaesar was ambitious
Doc 2
Term Doc #I 1did 1enact 1julius 1caesar 1I 1was 1killed 1i' 1the 1capitol 1brutus 1killed 1me 1so 2let 2it 2be 2with 2caesar 2the 2noble 2brutus 2hath 2told 2you 2caesar 2was 2ambitious 2
Indexelő lépés
• Szavak szerinti rendezés Term Doc #ambitious 2be 2brutus 1brutus 2capitol 1caesar 1caesar 2caesar 2did 1enact 1hath 1I 1I 1i' 1it 2julius 1killed 1killed 1let 2me 1noble 2so 2the 1the 2told 2you 2was 1was 2with 2
Term Doc #I 1did 1enact 1julius 1caesar 1I 1was 1killed 1i' 1the 1capitol 1brutus 1killed 1me 1so 2let 2it 2be 2with 2caesar 2the 2noble 2brutus 2hath 2told 2you 2caesar 2was 2ambitious 2
Fő indexelő lépés
• A többszörös, egy dokumentumon belüli szóelőfordulásokat egyesítjük
• Frekvencia (avagy gyakoriság) érték hozzá adódik
Term Doc # Freqambitious 2 1be 2 1brutus 1 1brutus 2 1capitol 1 1caesar 1 1caesar 2 2did 1 1enact 1 1hath 2 1I 1 2i' 1 1it 2 1julius 1 1killed 1 2let 2 1me 1 1noble 2 1so 2 1the 1 1the 2 1told 2 1you 2 1was 1 1was 2 1with 2 1
Term Doc #ambitious 2be 2brutus 1brutus 2capitol 1caesar 1caesar 2caesar 2did 1enact 1hath 1I 1I 1i' 1it 2julius 1killed 1killed 1let 2me 1noble 2so 2the 1the 2told 2you 2was 1was 2with 2
Miért frekvencia?Hamarosan kiderül
• Az eredményt szétválasztjuk szótár és előfordulás fájlba
Doc # Freq2 12 11 12 11 11 12 21 11 12 11 21 12 11 11 22 11 12 12 11 12 12 12 11 12 12 1
Term N docs Tot Freqambitious 1 1be 1 1brutus 2 2capitol 1 1caesar 2 3did 1 1enact 1 1hath 1 1I 1 2i' 1 1it 1 1julius 1 1killed 1 2let 1 1me 1 1noble 1 1so 1 1the 2 2told 1 1you 1 1was 2 2with 1 1
Term Doc # Freqambitious 2 1be 2 1brutus 1 1brutus 2 1capitol 1 1caesar 1 1caesar 2 2did 1 1enact 1 1hath 2 1I 1 2i' 1 1it 2 1julius 1 1killed 1 2let 2 1me 1 1noble 2 1so 2 1the 1 1the 2 1told 2 1you 2 1was 1 1was 2 1with 2 1
• Hol fizetünk a tárkapacitásban? Doc # Freq
2 12 11 12 11 11 12 21 11 12 11 21 12 11 11 22 11 12 12 11 12 12 12 11 12 12 1
Term N docs Tot Freqambitious 1 1be 1 1brutus 2 2capitol 1 1caesar 2 3did 1 1enact 1 1hath 1 1I 1 2i' 1 1it 1 1julius 1 1killed 1 2let 1 1me 1 1noble 1 1so 1 1the 2 2told 1 1you 1 1was 2 2with 1 1
Pointerek
Szavak
A tárhelyigényt később hatá-rozzuk meg
Felépítettük az indexeket
• Hogyan dolgozzuk fel a keresőkifejezést?– Milyen keresőkifejezéseket tudunk feldolgozni?
• A dokumentum mely szavait indexeljük?– Az összeset, vagy csak a fontosakat?
• Stopszólista: olyan gyakori szavak, melyeket kihagyunk az indexelésből– pl. angol esetén the, a, an, of, to …– Általában: kötőszavak, határozók, névelők, stb.– Nyelvspecifikus (építsünk magyar stopszó-listát!)
Keresőkifejezés feldolgozása
• Dolgozzuk fel a következő keresőkifejezést:Brutus ÉS Caesar– Megkeressük Brutus-t a szótárban;
• Visszakeressük az előfordulásait– Megkeressük Caesar-t a szótárban;
• Visszakeressük az előfordulásait– “Összefűzzük” a két előfordulás listát
128
34
2 4 8 16 32 64
1 2 3 5 8 13 21
Brutus
Caesar
34
1282 4 8 16 32 64
1 2 3 5 8 13 21
Az összefűzés
• Sétáljuk végig a két előfordulás láncon párhuzamosan, a szükséges idő arányos az összes előfordulások számával
128
34
2 4 8 16 32 64
1 2 3 5 8 13 21
Brutus
Caesar2 8
Ha hosszúságok m és n, az összefűzés O(m+n) műveletből áll.Kritikus: Az előfordulások docID szerint vannak rendezve
Boole-keresés: Pontos egyezés
• AND-et, OR-t és NOT-ot használó keresések keresőkifejezésekkel– Minden dokumentumot szavak halmazának tekint– Precíz: a dokumentum vagy megfelel, vagy nem
• Elsődleges üzleti keresési eszköz 4 évtizede• Professzionális keresők (pl. Lawyers) Még
mindig a Boole-keresést részesítik előnyben:– Pontosan tudod mit kapsz.
Példa: WestLaw http://www.westlaw.com/
• Legnagyobb üzleti (fizető felhasználós) jogi keresőrendszer (1975 indulás; 1992 rangsorolás hozzáadása)
• Kb. 7 TB adat; 700.000 felhasználó• A legtöbb felhasználó még mindig Boole-keresést végez• Példa keresőkifejezésre:
– What is the statute of limitations in cases involving the federal tort claims act?
– LIMIT! /3 STATUTE ACTION /S FEDERAL /2 TORT /3 CLAIM
• Hosszú, precíz keresőkifejezések; szomszédosság operátorok; inkrementális fejlődés, ellentétben az internetes keresőkkel
Keresőkifejezések optimalizálása
• Mi a legjobb sorrend a keresőkifejezés feldolgozására?
• Vegyünk a szavak ÉS-eléséből álló kifejezést• Vegyük minden T szó előfordulását és ÉS-
eljük együtt:Brutus
Calpurnia
Caesar
1 2 3 5 8 13 21 34
2 4 8 16 32 64 128
13 16
Keresőkifejezés: Brutus AND Calpurnia AND Caesar
Optimalizálás, példa• Dolgozzuk fel a frekvencia szerinti növekvő
sorrendben– Kezdjünk a legkisebb halmazzal, és folyamatosan
rövidül a művelet egyik tagja
Brutus
Calpurnia
Caesar
1 2 3 5 8 13 21 34
2 4 8 16 32 64 128
13 16
Ezért tároljuk a frekvenciát a szótárban
Dolgozzuk fel: (Caesar AND Brutus) AND Calpurnia.
Általánosabb optimalizáció
• Pl. (madding OR crowd) AND (ignoble OR strife)• Vegyük az összes szó gyakoriságát (freq)• Becsüljük meg az összes OR méretét a
gyakoriságok összegével• Dolgozzuk fel az OR mérete szerint növekvő
sorrendben
25
(Karakter) N-grammok
• Definíció: N egymás utáni karakterből álló része egy hosszabb karakterláncok (sztring)
• Példa: TEXT⊔ ⊔– Bigrammok: T, TE, EX, XT, T⊔ ⊔– Trigrammok: TE, TEX, EXT, XT , T ⊔ ⊔ ⊔⊔– 4-grammok: TEX, TEXT, EXT , XT , T ,⊔ ⊔ ⊔⊔ ⊔⊔⊔
• Általánosan: k (k≥3) hosszú stringnek k+1 bi-, tri, és 4-grammja van.
Keresés
• A *-keresések kezelése. • Ha a * a szó végén van, visszavezethető a B+-fára
– w = alma* – alma ≤ w < almb
• A fenti megoldás problémája:– nem kezeli a szó eleji csillagjelet – nagy költség, ha a kicsi a prefix rész O(N)
• w = al*ma*
• Célszerű lenne olyan index, amely a figyelembe tudja venni az összes megadott szóelemet
Permuterm Index
• Egy szónál az összes lehetséges kezdetet figyelembe veszi, bárhol lehet a csillag a szón belül.
• Egy szóhoz több bejegyzés készül – alma: alma$ lma$a ma$al a$alm a$lma
• Keresés igazítása a permuterm indexhez: • w = al*ma• w = ma$al*
– A csillag továbbra is a keresett minta végére kerül• Permuterm probléma: ≈ sokszoros lexikon- méret
Bigram index• A több szóból álló kifejezések esetén nagy halmazok metszetét
kell venni Költséges a tényleges illeszkedés ellenőrzése • Bigram index: karakter párokhoz az illeszkedő szavak
hozzárendelés Lépések • Szöveg felbontása bigramokra
– Fa alatt a kosár– fa, a$, $a, al, la, at, tt, t$, $a, a$, $k, ko
• A bigramok szavakhoz rendelése – fa
• fa, fazék,falap,... – a$
• fa, kapa,haza,...
29
n-gram wildcard feldolgozása
• mon* keresés futtatható– $m AND mo AND on
• Gyors, tárhatékony.• De visszaadja moon-t is.• Szükséges egy utólagos szűrés is a keresésben.
30
Zipf törvénye
• Az n-edik leggyakoribb szó egy természetes nyelvű szövegben n-nel fordítottan arányos gyakorisággal fordul elő.
• Az átmenet a ritka és gyakori szavak között folytonos
• Ugyanez a törvényszerűség fennáll N-grammokra is.
Zipf tötvénye folytatás
• Az emberi viselkedés (beleértve a nyelvet) egyik irányelve a befektetett összmunka minimalizálása
• A tétel következmény a természetes nyelvi elemekre (szavakra):
– f = egy szó gyakorisága a nyelvben– r = egy szó pozíciója a gyakoriság szerinti sorrendben – k = konstans
• Elvek: – a beszélő minél kevesebb fogalmat kíván használni– a hallgató minél színesebb, egyértelműbb leírást szeretne
32
Zipf-törvénye a gyakorlatban (1)
• Reuters-21578 korpuszra
33
Zipf-törvénye a gyakorlatban (2)
• Web 2.2 korpuszra (http://mokk.bme.hu/resources/webcorpus/index_html)
34
Zipf-törvénye n-grammokra
Zipf törvénye és a szavak egyértelműsége
• A gyakoriság mellett a jelentések egyértelműségére is létezik egy gyakorlati megfigyelés:
– m = egy szó jelentéseinek száma a nyelvben– r = egy szó pozíciója a gyakoriság szerinti sorrendben– k = konstans
• 30-as szabály: az első 30 gyakori szó lefedi a szóelőfordulások 30%-át
36
Zipf törvénye
• A k-dik leggyakoribb terminus gyakoriság- részesedése 1/k.
• Használjuk ezt a jelölő fájlunk pointerei által elfoglalt hely egy nyer analíziséhez.– Még nem vagyunk készen a szótár helyigényének a
analízisére.
37
Durva analízis Zipf alapján• A leggyakoribb terminus n dokumentumban
szerepel– n ugrás, mindegyik doc
• A második leggyakoribb terminus n/2 dokumentumban– n/2 ugrás, minden 2. doc …
• K-adik leggyakoribb terminus n/k dokumentumban– n/k ugrás, minden k. doc. - 2log2k +1 bit minden ugrás;– ~(2n/k)*log2k bit a k-adik leggyakoribb terminus
tárigénye.
38
Mekkora a V szótár mérete?• Lassan nő a korpusz méretével• Empirikus modell:
V = kNb
• ahol b ≈ 0.5, k ≈ 30–100; N = # token• Például TREC 1 és 2 CD-k (2 Gb; 750,000 híranyag): ~ 500,000
terminus• V csökkenthető a kisbetűs átalakítással, szótövezéssel• Ha minden számot indexelünk, az nagyon megnövelheti a szótár
méretét (ezért nem tesszük*)• Helyesírási hibák és elírások is jelentékenyen növelhetik a méretét
39
Szótár tárolása – első megközelítés
• Fix szélességű elemek tömbje– 500,000 terminus; 28 bytes/term = 14MB.
Terms Freq. Postings ptr.
a 999,712
aardvark 71
…. ….
zzzz 99
Gyors bináris keresést tesz lehetővé a szótárban
20 byte4 byte
40
A fix terminushossz pazarlás
• A tár nagy részét nem használjuk ki, hiszen a legtöbb terminus nincs 20 byte (akár 1 betűs szavakra is ennyit pazarolhatunk)– És még mindig nem lehet a „megszentségteleníthetetlenségeitekért”
szót letárolni
• Írott angol átlagosan ~4.5 karakter– Feladat: jó ez az érték arra, hogy a szótár méretét
becsüljük vele?– A tokenekben a rövid szavak dominálnak Átlagos
angol szóhossz: ~8 karakter.
41
Terminus listát alkalmazunk
Freq. Postings ptr. Term ptr.
33
29
44
126
A pointereken bináris keresés
A gigastring hossza=500KB x 8 = 4MB
4M-nyi pointert kell tárolni: log24M =
22bits = 3bytes
Tároljuk a szótárat egy hosszú stringként: A következő szóra mutató pointer mutatja az aktuális szó végét Ezen mintegy 60%-ot nyerünk
….7systile9syzygetic8syzygial6syzygy11szaibelyite8szczecin9szomo….
Szerkesztési távolság• A szerkesztési lépéseket és sorrendjét egy
transzformációs mátrixon keresztül határozzuk meg
• Elemi transzformációk
a b l a kalma
induló állapot
cél állapot
Elemi transzformáció
induló szó
cél szó
Karakter törlés
Karakter beszúrás
Karakter csere
Szerkesztési távolság• Szerkesztések költsége
• Törlés: 1; Beszúrás: 1; Csere, ha azonos : 0; Csere, ha különböző: 1.
• Induló állapot költsége: 0 • Adott (i,j) ponthoz meghatározzuk a (i+1,j) (i,j+1),
(i+1,j+1) pontok költségeit • Egy adott pont költsége az odavezető elemi átalakítások
eredményeként kapott költségek minimuma lesz • Az optimum értéket adó útvonal adja keresett távolság
értéket
44
Szerkesztési távolság
• gyors vs. gyros: két csere, dist = 2.• Különböző hosszú stringekre is működik• Egy stringre O(L1*L2). Kimerítő keresést a
szótáron nem lehet végezni.
N-Gram távolság• Minden szót az n-gramok halmazának tekintjük
• alma• {$a,al, lm, a$}
– Két szó távolsága a két halmaz Jaccard mértéke:
• Minden szót az n-gramok vektorának tekintjük• alma• (1,0,0,...,1,..0,1) • 1, ahol tartalmazott az n-gram, különben 0
– Két szó távolsága a két vektor által bezát szög koszinusza:
46
Soundex
• Olyan heurisztikák gyűjteménye, amelyek kibővítik a keresést kiejtés szerinti írásmódokkal:– Nyelvspecifikus– Pl. chebyshev tchebycheff
• Hogyan használjuk a tezauruszt/soundexet?– “kibővíthetjük” a keresőkifejezést az ekvivalensekkel:
• Keresés: car tyres car tyres automobile tires– Lehetséges az indexeléskori bővítés is
• Ha az indexelt dok tartalmazza kutyá-t, indexeljük az eb alatt is