Wyszukiwanie w repozytoriach tekstowych w języku polskim inż. Maciej Klubiński Opiekun pracy: prof. dr hab. Henryk Rybiński
Plan prezentacji Sens tworzenia wyszukiwarek Budowa wyszukiwarki Zasada działania wyszukiwarki Miary jakości wyszukiwania Problemy natury językowej
Po co nam wyszukiwarki? Eksplozja informacyjna Internet jako najpopularniejszy kanał dystrybucji informacji Większość ludzkiej wiedzy zapisana jest w postaci dokumentów w języku naturalnym „Potrafimy liczyć znacznie szybciej niż na początku XX wieku, ale czy potrafimy szybciej czytać?”
Budowa wyszukiwarki tułów -> repozytorium dokumentów, korpusy, zbiory danych, sieć WWW serce -> indekser głowa -> moduł budowy zapytań mózg -> moduł wyszukujący
Jak zbudować indeks? (1/7) Rozpoznanie języka Na podstawie: unikalnych dla danego języka ciągów znaków (np. eux - Francuski, cchi - Włoski, der - Niemiecki) występowanie określonych znaków np. ü - Niemiecki, ć - Polski wykorzystując cechy składniowe sylab danego języka wykorzystanie rozkładu prawdopodobieństwa występowania liter oraz dłuższych ciągów znaków (n-gramów) porównywanie dokumentów ze słowami ze stop-listy
Jak zbudować indeks? (2/7) Tokenizacja Podział tekstu na: akapity zdania -> język chiński, znaki interpunkcyjne wyrażenia (związki frazeologiczne) słowa –> skróty, apostrof, myślnik wybór termów – Prawo Zipfa Jeżeli weźmiemy wystarczający zbiór dokumentów z typowymi angielskimi słowami i posortujemy te słowa według częstości występowania, to iloczyn częstości występowania słowa i numeru w tym uporządkowaniu będzie stały.
Jak zbudować indeks? (3/7) Usunięcie STOP WORDS – 30% wszystkich słów a, an, and, are, as, at, be, but, by, for, if, in, into, is, it, no, not, of, on, or, such, that, the, their, then, there, these, they, this, to, was, will, with a, aby, ale, bardziej, bardzo, bez, bo, bowiem, był, była, było, były, będzie, co, czy, czyli, dla, dlatego, do, gdy, gdzie, go, i, ich, im, innych, iż, jak, jako, jednak, jego, jej, jest, jeszcze, jeśli, już, kiedy, kilka, która, które, którego, której, który, których, którym, którzy, lub, ma, mi, między, mnie, mogą, może, można, na, nad, nam, nas, naszego, naszych, nawet, nich, nie, nim, niż, o, od, oraz, po, pod, poza, przed, przede, przez, przy, również, się, sobie, swoje, są, ta, tak, takie, także, tam, te, tego, tej, ten, też, to, tu, tych, tylko, tym, u, w, we, wiele, wielu, więc, wszystkich, wszystkim, wszystko, właśnie, z, za, zawsze, ze, że
Jak zbudować indeks? (4/7) Stemming Trzy podejścia: stemmer algorytmiczny Pierwszy skuteczny algorytm dla angielskiego - Lovin’s stemmer (1968) – stemmer jednoprzebiegowy, wykorzystujący tablicę 250 możliwych podstawień końcówek oraz dodatkowy etap postprocessingu – był projektowany jako uniwersalny Obecnie najpopularniejszy stemmer – Porter’s stemmer, specjalizowany dla IR, wieloprzebiegowy, nie generuje poprawnych językowo rdzeni Inne – Krovets (1993) – trójprzebiegowy stemmer wyłącznie fleksyjny, Dawson (1974) – poprawiona wersja stemmera Lovins, zawiera tablicę 1200 podstawień, Paice/Husk (1990) – stemmer oparty na dopasowywaniu reguł, nie ma ograniczenia na liczbę kroków podstawień
Jak zbudować indeks? (5/7) Stemming stemmer słownikowy wykorzystuje słownik zawierający znaczną liczbę różnych form gramatycznych poszczególnych słów oraz odpowiadającej każdej z nich formę podstawową (lemat lub rdzeń) bezbłędne znajdywanie rdzeni słów zawartych w słowniku brak wyników w przypadku, gdy słowa w słowniku brakuje konieczność przechowywania i przeszukiwania słownika o dużych rozmiarach stemmer mieszany (hybrydowy) dla słów występujących w słowniku – stemmer słownikowy dla słów spoza słownika – stemmer algorytmiczny i próba dopasowania rdzenia do rdzeni zesłownikowanych w przypadku poprawnej klasyfikacji – uzupełnienie słownika
Jak zbudować indeks? (6/7) Usuwanie synonimów - użycie tezaurusa Zastąpienie terminów bardziej ogólnymi - np. pies -> ssak (użycie ontologii) Rozbijanie zlepków wyrazowych - np. nazw chemicznych, związków frazeologicznych Obliczanie wag dla słów kluczowych - np. miejsce wystąpienia słowa w tytule, streszczeniu, bibliografii
Jak zbudować indeks? (7/7) Tworzenie indeksu o czym trzeba pamiętać? – częste przeszukiwanie, rozmiar fizyczny, szybki i bezpośredni dostęp co zapamiętać? – id dokumentu, klucz (słowo, leksem, rdzeń), położenie w tekście, położenie fizyczne (adres URL), częstość występowania słowa, słowo po inwersji, … jak zorganizować? – budowa logiczna (podział na rekordy, segmentacja itp.), sortowanie alfabetyczne (statystyczne, częstotliwościowe), optymalizacja, kompresja jak przeszukiwać? – zależnie od organizacji danych w indeksie, byle szybko i wydajnie
Jak szukać? po słowach kluczowych Boolowskie (zbiory odwrócone) koncepcyjne (tezaurus) szukanie frazy szukanie z określeniem odległości pomiędzy słowami szukanie z zastosowaniem masek szukanie dokumentów podobnych do już znalezionych szukanie dokumentów po statystykach odwiedzin inne
Miary jakości wyszukiwania Legenda ds - znalezione dokumenty przez system dr - dokumenty w bazie uznane za relewantne (arbitralnie) DB - liczebność bazy danych precyzja – wyszukane relewantne do znalezionych (|ds dr|) / |ds| odzysk – wyszukane relewantne do relewantnych (|ds dr|) / |dr| dokładność – uznane za nierelewantne do wszystkich (|ds dr| + |DB – (ds dr )|) / |DB| szum – wyszukane nierelewantne do wszystkich nierelewantnych |ds - dr| / |DB –dr|
Problemy Fleksja – np. umią zamiast umieją Pojęcia wielowyrazowe – np. kwas dezoksyrybonukleinowy Homonimia – np. ranny (zraniony, o poranku), zamek (budowla, mechanizm w drzwiach, suwak) Synonimia – np. problem, zagadnienie, zadanie Niezgodność semantyki słów z semantyką tekstu (brak analizy składniowej i semantycznej) – np. potoczne określenie policjanta i radiowozu, „zakręcony jak słoik na zimę” Błędy ortograficzne Swobodna składnia – np. Wczoraj kupiłem auto, Kupiłem wczoraj auto, Kupiłem auto wczoraj
Pytania? Dziękuję za uwagę.
Co robię w ramach pracy mgr? używam Apache Lucene buduję polski stemmer hybrydowy implementuję moduł do analizy tekstów w języku polskim przeprowadzam testy dla różnych rozwiązań postać i zawartość indeksu modyfikacja zapytań wykorzystanie słownika w stemmingu
Pytania? Dziękuję za uwagę.