This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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
• 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?
• 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
• 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