390 likes | 525 Views
Indeksowanie. Seminarium: Wyszukiwarki internetowe Marta Cylkowska. Indeksowanie. Cel: usprawnienie wyszukiwania Chcemy odpowiadać na pytania: czy dany term jest w dokumencie? jeśli jest, to gdzie? Zakładamy, że użytkownik chce wyszukać informację, a nie wyszukać wzorzec w tekście.
E N D
Indeksowanie Seminarium: Wyszukiwarki internetowe Marta Cylkowska
Indeksowanie • Cel: usprawnienie wyszukiwania • Chcemy odpowiadać na pytania: • czy dany term jest w dokumencie? • jeśli jest, to gdzie? • Zakładamy, że użytkownik chce wyszukać informację, a nie wyszukać wzorzec w tekście
Przygotowanie słownika • Konwersja do jednolitego formatu • Spacje, interpunkcja itp. • Usunięcie zbyt częstych słów • Słowa w podstawowej formie (stemming) • Term jako złączenie kilku słów • Thesaurus, Soundex
tekst Dokument struktura metadane Konwersja formatu • Dokumenty w postaci plików o różnych formatach • Dokument zawiera nie tylko treść, ale też strukturę i metadane
Litery i inne znaki • Białe znaki • Wielkie i małe litery • Bush, SOS, IDEA (International Data Encryption Standard) • Myślniki • co-education razem • Hewlett-Packardrazem lub osobno • state-of-the-art. osobno • San Francisco-Los Angeles osobno
Litery i inne znaki • Znaki interpunkcyjne: • a.out -> „a out” czy „aout” ? Ale aoűt to sierpień po francusku! • U.S.A. -> „U S A” ? • Poland’s -> Poland’s, Poland s, Poland, Polands? • Inne znaki z reguły pomijane • wyjątki: C++, J#, i++ (++i inaczej), $10 • Znaki diakrytyczne
Cyfry • Zwykle same w sobie niosą mało informacji, mogą być pomijane • Niektóre termy z cyframi więcej znaczą: • 340B.C. • 2003-10-03 • 166.249.71.3 • My PGP key is 324a3df234cb23e
Stop-lista • Stop-lista zawiera bardzo częste słowa a, the, it, to, on, of, and, be, ..., can(?) • Przy wyszukiwaniu te słowa prawie nie eliminują dokumentów, więc nie indeksujmy ich • Wtedy nie można wyszukać „to be or not to be”, „the who”, ... • Indeksujmy, ale z zapytania usuńmy. Chyba że zapytanie zawiera tylko słowa ze stop-listy
Stemming • Chcemy wyznaczyć rdzeń słowa programming, programmable, programmers, programmed program • Mniej różnych termów - oszczędność miejsca • Być może użytkownikowi nie zależy na dokładnej formie, a być może zależy... university vs. universal
Stemming • Jak wyszukać rdzeń słowa? • zbudować słownik jak do gry Scrabble • automatycznie (algorytm Portera): • Porównanie najdłuższego suffiksu słowa ze wzorcem: • sses -> ss • s -> ε • ator -> ate • Algorytm ma 5 faz i wiele takich reguł... Szczegóły algorytmu Portera: http://tartarus.org/~martin/PorterStemmer/def.txt
Rozbicie słów • Słowa mogą być złożone, nawet bardzo: • w języku niemieckim jest wiele takich słów • w polskim: polioksyetylenoalkiloamoniohydroksypropylomaleinian • można rozbić na: poli, oksy, etyleno, alkilo, amonio, hydroksy, propylo, maleinian
Łączenie grup słów • Można kilka słów traktować jako term • Rzeczowniki niosą najwięcej treści, dlatego grupy rzeczowników będą termami computer science • Szukamy rzeczowników, które często są blisko w tekście • Traktujemy je razem jako jeden term
Thesaurus, Soundex • Grupowanie termów podobnych, aby je ujednolicić • Thesaurus: podobne w znaczeniu • Soundex: podobne w brzmieniu chebyshev tchebycheff • Soundex można zrobić automatycznie Szczegóły algorytmu Soundex: http://www.creativyst.com/Doc/Articles/SoundEx1/SoundEx1.htm
Modyfikacja zapytania • Zapytanie może być modyfikowane dokładnie tak jak dokumenty • wtedy mniej dokładne wyniki wyszukiwania • Może nie być modyfikowane (lub częściowo) • jest możliwe dokładnie wyszukanie • zależy to od struktury indeksu
Indeksowanie • Już wiemy, co chcemy umieć wyszukiwać • Nie wiemy jeszcze jak • Indeks to struktura, która ma umożliwiać szybkie znajdowanie dokumentów zgodnych z zapytaniem
Struktura indeksu • Żadna - przeglądanie wszystkich dokumentów • Pliki odwrócone (inverted files) • Drzewa suffiksowe, tablice suffiksowe • Signature files • Baza danych - dla dynamicznych zbiorów
Pliki odwrócone • Mamy dane w postaci: [dokument (pozycja), term] • Chcemy mieć je w postaci: [term, częstość, lista dokumentów (pozycji)]
A 2 4 5 12 B 2 14 C 12 14 28 Pliki odwrócone • Słownik - wszystkie termy • Lista wystąpień - dla każdego termu • Słownik i listy są posortowane słownik listy wystąpień • Rozmiar słownika ok. n - łączny rozmiar wszystkich dokumentów
Lista wystąpień • Zawiera nr dokumentu, w którym występuje term • Może zawierać też dokładne miejsce występowania w tym dokumencie Dla termu wielokrotnie występującego w tekście musimy pamiętać wszystkie jego wystąpienia
Wyszukiwanie • Odnalezienie wszystkich termów z zapytania w słowniku • Odzyskanie list wystąpień dla każdego termu • Manipulacja listami wystąpień • Przeglądanie dokumentów dla zapytań z frazami, gdy adresem jest dokument Dopiero w ostatniej fazie zaglądamy do tekstu!
Wyszukiwanie • Zapytanie proste tylko wyszukanie w liście wystąpień • Zapytanie złożone AND wyznaczenie części wspólnej • Zapytanie złożone OR scalenie posortowanych list wystąpień • Czas liniowy względem długości list wystąpień
A 2 4 5 12 B 2 14 14 22 3 4 5 C 14 22 23 24 Wyszukiwanie • A AND B AND C - czy kolejność jest istotna? • Tak, lepiej zacząć od najrzadziej występującego termu • Mamy częstości wystąpień w słowniku! • Najlepsza kolejność to (A AND B) AND C
128 31 17 2 4 8 16 32 64 1 2 3 5 8 21 Skip pointers 128 16 • W pierwszej liście po 16 jest 32 • W drugiej można przeskoczyć dodatkowym wskaźnikiem • 17, 21 nie muszą być przeglądane 31 8
Skip pointers • Ile powinno być dodatkowych wskaźników? • Dużo • często będziemy po nich skakać • dużo porównań na wskaźnikach • Mało • mniejsza szansa na skoki • mniej porównań • Optimum: , gdzie L to długość listy wystąpień • odpowiednie dla niezmieniającej się listy
Budowanie indeksu • Cały indeks nie mieści się w pamięci RAM • Algorytm budowania indeksu: • Zbuduj indeksy dla mniejszej liczby dokumentów, tak by się mieściły w RAM • Scalaj te indeksy
Budowanie indeksu • Dla każdego dokumentu, dla każdego termu • szukaj termu w słowniku • jeśli nie znaleziono, to dodaj do słownika i dokument do listy wystąpień • jeśli znaleziono, to jeśli trzeba dodaj do listy wystąpień adres dokumentu na właściwą pozycję
Budujemy indeksów o wielkości M • Scalamy je w fazach Scalanie indeksów Faza III Faza II Faza I
Dynamiczne zbiory • Update jest kosztowny • Wykonywany raz na jakiś czas • Dokumenty dodawane, usuwane pamiętane osobno
kot 12 29 Plik odwrócony ala 1 22 ma 9 26 nie nie 5 5 Tablice suffiksowe • Listy uporządkowane w kolejności leksyko-graficznej tekstu znajdującego się po termie • Łatwiejsze wyszukiwanie fraz 1 5 9 12 22 26 29 Ala nie ma kota, czy Ala ma kota? Tablica suffiksowa ala 22 1 kot 29 12 ma 26 9
Wyszukiwanie fraz • Znajdź pierwszy term w słowniku • Przejdź do jego listy wystąpień • Zaglądając do tekstu wyszukaj binarnie frazę
Signature files • Dane w postaci: [dokument, „podpis dokumentu”] • Podpis to ciąg m-bitowy • Każdy term ma też swój podpis • Podpis dokumentu to OR wszystkich termów, które zawiera Niech t1, t2, ..., tr - różne termy dokumentud, wtedy
Podpis dla termów • Podpis to ciąg m-bitowy • Mamy k funkcji haszujących: hk: termy{1..m} • Ustawiamy i-ty bit podpisu termu t na 1 tylko wtedy gdy któraś funkcja h(t) = i • Przykład dla k = 3, m = 8 S(A) = 0010 0110 S(B) = 1010 0001 S(C) = 1000 0010 S(D) = 0101 0100
Podpis dla dokumentu • Logiczny OR na podpisach termów, które zawiera: dokument: podpis: d1 =[A, B]1010 0111 d2 = [A, B, D]1111 0110 d3 = [B, C, D]1111 0111 d4 = [A, D] 0111 0110 • S(A) = 0010 0110 • S(B) = 1010 0001 • S(C) = 1000 0010 • S(D) = 0101 0100
Wyszukiwanie w SF • Oblicz podpis dla t, sprawdź które dokumenty zawierają podpis dla t • Te dokumenty być może zawierają t • dopuszczamy pomyłki lub • skanujemy wszystkie dokumenty aby to sprawdzić • Pozostałe dokumenty na pewno nie zawierają t
Wyszukiwanie w SF • Przykład dokument: podpis: d1 = [A, B]1010 0111 d2 = [A, B, D]1111 0110 d3 = [B, C, D]1111 0111 d4 = [A, D] 0111 0110 • S(A) = 0010 0110 • S(B) = 1010 0001 • S(C) = 1000 0010 • S(D) = 0101 0100 • Uzyskane wyniki dla poszczególnych termów: A: d1, d2, d3, d4 C: d1, d2, d3 B: d1, d2, d3 D: d2, d3, d4
Wyszukiwanie w SF • Złożone zapytania typu t1 AND t2: • oblicz podpis S(d) dla d = [t1, t2] • znajdź dokumenty zawierające S(d) • Tak samo szybkie jak dla pojedynczych termów • Mniejsze prawdopodobieństwo pomyłki
pdb pomyłki 5 0.092 10 0.008 12 0.003 Ile pomyłek się zdarzy? • To zależy od parametrów • k - liczba funkcji haszujących • m - liczba bitów (ustalamy na ile nas stać) • n - liczba termów w dokumencie • Optymalnie jest • Prawdopodobieństwo pomyłki wynosi:
Porównanie metod • Rozmiar w stosunku do oryginalnego tekstu (n) • Pliki odwrócone 0.05n - 0.4n • Tablice suffiksowe 0.4n • Signature files 0.1n - 0.2n • Wspomaganie wyszukiwania fraz • Tablice suffiksowe