Strychowski2004

Transkrypt

Strychowski2004
Jakub Strychowski
Rodan Systems S.A
Zastosowanie metod uczenia maszynowego w analizie morfologicznej
języka polskiego
Słowa kluczowe: analiza morfologiczna, sieci neuronowe, algorytmy
genetyczne, stemmer, lematyzator, NLP, przetwarzanie języka naturalnego, fleksja,
odmiana wyrazów, ICONS, uczenie maszyn.
Streszczenie: Praca prezentuje budowę i sposób działania analizatora
morfologicznego z uwzględnieniem fleksji polskiej. Zadaniem analizatora jest
konwersja słów języka polskiego do ich formy podstawowej oraz określenie
właściwości gramatycznych wyrazu (część mowy, przypadek, liczba itp.). W celu
wytworzenia analizatora opracowano podejście polegające na wykorzystaniu wielu
metod z dziedziny uczenia maszyn: wzorce pojęć, sieci neuronowe, algorytmy
genetyczne. Zastosowanie tych mechanizmów pozwoliło na wytworzenie analizatora
morfologicznego języka polskiego o wysokiej jakości, charakteryzującego się
zdolnością do generalizacji – odmienianie wyrazów nie występujących w słowniku
np. nazwy geograficzne, nazwiska osób. Powstałe narzędzie cechuje stosunkowo
niskie wykorzystanie zasobów komputera oraz zadowalająca wydajność.
Architekturę i metody funkcjonowania analizatora zaprezentowano na przykładzie
języka polskiego, ale bez większych problemów rozwiązanie to można dostosować
do analizy morfologicznej tekstów napisanych w innych językach.
Wstęp
Na fali wielu dzieł kultury sc­fi w latach 60­tych rodziły się ambitne
projekty badawcze mające na celu stworzenie rozwiązań pozwalających na
komunikację komputera z człowiekiem za pomocą języka naturalnego. Dość
szybko okazało się, że osiągnięcie celów stawianych wizjonerskim projektom
sztucznej inteligencji będzie niezwykle trudne, a wiele prac zostało po prostu
zamrożonych. Nie mniej badania wciąż trwają, a dzisiaj, gdy moce
komputerów domowych znacznie przewyższają moce dawnych
superkomputerów, przyszłość wydaje się bardziej optymistyczna. W wyniku działań, mających na celu stworzenie tzw. „silnej sztucznej
inteligencji”, powstało wiele rozwiązań mających zastosowanie we
współczesnych systemach komputerowych. Naukowcy zajmujący się
problemami analizy i przetwarzania języka naturalnego stworzyli dyscyplinę
naukową zwaną lingwistyką komputerową (ang. Computational Lingustic) z
jej bardziej pragmatycznym odłamem zwanym przetwarzaniem języka
naturalnego (ang. Natural Language Processing). Do głównych zadań NLP należą: • rozpoznawanie mowy, • synteza mowy,
• generacja języka naturalnego, • wyszukiwanie informacji (ang. information retrieval),
• ekstrahowanie informacji z tekstu (ang. information extraction),
• automatyczne tłumaczenie pomiędzy różnymi językami, 2
•
systemy odpowiadające na pytania (ang. question answering
systems). Największe trudności w dziedzinie NLP związane są najczęściej z
problemami automatyzacji podejmowania decyzji np.: jak wydzielić wyrazy
z zapisu dźwiękowego wypowiedzi, jaką formę morfologiczną reprezentuje
dane słowo, które znaczenie danego wyrazu użyć w danym kontekście, które
drzewo rozbioru gramatycznego jest prawidłowe itp. Optymalne rozwiązanie
wszystkich problemów tego rodzaju związane jest ze stworzeniem silnej
sztucznej inteligencji. Na dzień dzisiejszy przeważają prace związane z
wykorzystaniem metod tzw. „słabej” sztucznej inteligencji do rozwiązywania
określonych problemów z możliwie wysoką jakością. Wiele metod przetwarzania języka naturalnego znajduje dziś
zastosowanie w systemach zarządzania informacją. Najbardziej znanym
przykładem może być powszechne w Internecie wyszukiwanie informacji.
Systemy stają się coraz bardziej inteligentne, coraz bardziej samodzielne,
dąży się do tego, aby maszyna mówiła i rozumiała co się do niej mówi [7]. W
pewnym momencie może się jednak okazać, że przeciętny Polak znów będzie
musiał poczekać kilka lat na możliwość „rozmowy z maszyną” w ojczystym
języku. Powodem tego może być jego unikalność. Wiele metod przetwarzania
języka naturalnego, które dobrze sprawdzają się dla języka angielskiego lub
niemieckiego, zupełnie nie zdaje egzaminu w przypadku innych języków. Tak
też jest w przypadku analizy fleksji. Język polski ma o wiele bardziej
fleksyjny charakter od języka angielskiego, dla którego to opracowywana jest
większość metod NLP. Celowe jest więc prowadzenie prac z dziedziny
Lingwistyki Komputerowej ukierunkowanej na język polski. Specjalnie dla języka polskiego powstały odrębne rozwiązania
dokonujące analizy morfologicznej [8][12][15][17]. Analiza morfologiczna ma
na celu określenie właściwości gramatycznych wyrazu oraz ewentualne
wytworzenie jego formy podstawowej. Jest ona wstępnym etapem
przetwarzania tekstów, a jej jakość wpływa na jakość kolejnych kroków
przetwarzania ­ błędy w danym kroku implikują powstawanie błędów w
kolejnych krokach. W przypadku języka polskiego, ze względu na jego bogatą
fleksje, forma wyrazu niesie bardzo wiele informacji gramatycznych takich
jak część mowy, liczba, przypadek, czas, rodzaj itp. [1]. Takie bogactwo
informacyjne w języku angielskim osiągane jest przez właściwy szyk zdania i
tzw. operatory. W przypadku języka polskiego szyk zdania ma dużo większy
wpływ na stylistykę wypowiedzi niż na jego gramatykę. Można więc przyjąć,
że analiza morfologiczna ma zasadnicze znaczenie dla procesów
przetwarzania tekstu w języku polskim. Celem tego opracowania jest zaprezentowanie komponentu łączącego
zalety wielu istniejących obecnie rozwiązań. Zaprezentowany analizator
morfologiczny języka polskiego powstał na potrzeby modułu Text
Categorization Engine projektu ICONS (Intelligent CONtent Management
System/IST­2001­32429). Element ten pełnił tam rolę stemmera w
3
zadaniach pełno­tekstowej kategoryzacji dokumentów. Stemming
wykorzystywany jest we wszelkiego rodzaju zadaniach gdzie wiele różnych
form tego samego słowa powinno być traktowane jako jeden wyraz np. przy
wyszukiwaniu i kategoryzacji dokumentów. Zadaniem stemmera jest
wydzielenie z wyrazu jego niepowtarzalnego rdzenia (tematu) [11][13][18][19]
[20]. W zależności od przyjętego rozwiązania temat może być rozumiany jako
rdzeń wynikający z morfologicznej budowy wyrazu, ale może to być również
dowolny ciąg znaków. Istotne jest to, aby wyrazy będące różnymi formami
tego samego słowa były konwertowane do jednej, wspólnej reprezentacji
słowa. Do tej reprezentacji nie powinny być konwertowane formy innych
słów. W przyjętym rozwiązaniu stemming polega na utworzeniu formy
podstawowej wyrazu poprzez wykorzystanie analizatora morfologicznego. Zaprezentowany analizator charakteryzuje się zdolnością
generalizowania czyli możliwością poprawnej analizy wyrazów, które nie są
zawarte w dostępnym słowniku. Osiągnięto to poprzez zastosowanie metod
uczenia reguł odmiany na bazie istniejących słowników języka polskiego. W
wyniku procesu uczenia powstaje zbiór wzorców odmiany. Analiza
morfologiczna polega więc na wybraniu spośród wielu wzorców odmiany tego
właściwego dla badanej formy wyrazu. Bogata fleksja języka polskiego
powoduje, że do jednej formy wyrazu można zastosować wiele wzorców
odmiany. Problemem jest więc wybór właściwego wzorca spośród wszystkich
kandydatów. Rozwiązanie tego problemu możliwe jest przez zastosowanie
mechanizmów uczenia maszyn co szczegółowo zostało omówione w dalszej
części pracy. Morfologia języka polskiego
„Język polski uważa się za wybitnie trudny nie tyle z uwagi na
fonetykę, gdyż istnieje wiele języków o bardziej zawikłanej i trudniejszej
wymowie, ile raczej z uwagi na jego morfologię. (...). Większość wyrazów
złożona jest z pewnej liczby cząstek zwanych morfemami, z których każda
niesie odrębne znaczenie. Wśród morfemów wyróżniamy morfemy
leksykalne, będące najczęściej rdzeniami wyrazów i niosące znaczenia
słownikowe, oraz morfemy gramatyczne, wiążące tamte w pewne całości.
Istnieją również tzw. morfemy słowotwórcze, których zadaniem jest łączenie
pozostałych morfemów w wyrazy. Niekiedy nie udaje się odróżnić morfemów
gramatycznych od słowotwórczych, dlatego objęte są one wspólną nazwą:
afiksy. Wśród nich wyróżnia się prefiksy (przedrostki) poprzedzające rdzeń
wyrazu, sufiksy (przyrostki słowotwórcze, końcówki gramatyczne)
następujące po rdzeniu, interfiksy (łączniki) łączące dwa rdzenie ze sobą,
postfiksy następujące po końcówkach (np. ~ś w ktoś). Na przykład w wyrazie
językoznawstwo możemy wyróżnić kolejno: morfem leksykalny język, morfem
słowotwórczy (interfiks) o, morfem leksykalny zna, morfem słowotwórczy (bez
określonego znaczenia) w, morfem słowotwórczy (tworzący pojęcia oderwane)
4
stw, morfem gramatyczny (końcówka) o.” [1].
Język polski posiada złożoną budowę morfologiczną, ale istnieją pewne
reguły, którym podlega większość polskich wyrazów. Nie jest on również tak
skomplikowany morfologicznie jak język arabski, w którym morfem
gramatyczny „wpleciony” jest w rdzeń wyrazu [4]. Poloniści zaproponowali
pewne wzorce odmiany rzeczowników, czasowników, przymiotników tzw.
grupy deklinacji i koniugacji [6]. Tabela 1. Fragment klasycznej grupy deklinacyjnej „m IV”
Przypadek
D.
B.
Zakończenia
Liczba pojedyncza
M.
bez końcówki
żywotne
~a
nieżywotne
~a (~u)
C.
~owi
żywotne
jak d.
nieżywotne
jak m.
W.
jak Ms.
N.
~kiem
~giem
~chem
Ms.
~u
Przykłady
robotnik
robotnika
stołka (stogu)
robotnikowi
robotnika
stołek
robotniku
robotnikiem
stogiem
mchem
robotniku
Tabela 1 przedstawia fragment przykładowej klasycznej grupy
deklinacyjnej. Zapis wszystkich klasycznych wzorców odmiany w pamięci
komputera nie jest zadaniem zbyt pracochłonnym, ale klasyczna deklinacja
czy też koniugacja nie obejmują wielu wyjątków. Ponadto same wzorce nie są
wystarczającą informacją dla komputera do dokonania poprawnej odmiany.
Problem polega na tym, że większość końcówek – afiksów ­ występuje w
wielu wzorcach odmiany. Przykładowo afiks ”~a” występuje w większości
grup deklinacyjnych. Widać więc, że przyporządkowanie formy wyrazu do
właściwego wzorca odmiany, a co za tym idzie poprawna analiza
morfologiczna, nie jest możliwa wyłącznie na podstawie afiksów. Dlatego też
klasyczne rozwiązania stemmera dla języka angielskiego polegające na
usuwaniu, lub zastępowaniu końcówek [19] nie sprawdzają się dla języka
polskiego. Pewnym rozwiązaniem jest przechowywanie pełnego słownika
polskiego zawierającego wszystkie odmiany. Znakomicie zadanie to spełnia
rozwiązanie Dawida Weissa, którego stemmer to dobrze skompresowany
słownik form wyrazów polskich [5]. Wadą takiego rozwiązania jest to, że jego
działanie ogranicza się tylko do znanych wyrazów, a pełna analiza
morfologiczna możliwa będzie dopiero po opisaniu wszystkich form wyrazów
odpowiednimi informacjami gramatycznymi. Słownik taki miałby stosunkowo
duże rozmiary. Konieczne wydaje się więc zastosowanie innych rozwiązań.
Algorytm analizy morfologicznej
Załóżmy, że posiadamy odpowiedni zbiór wzorców odmiany. Wzorzec
5
odmiany składa się ze zbioru końcówek opisanych właściwościami
gramatycznymi. Analiza morfologiczna dowolnej formy wyrazu polega na
wyborze właściwego wzorca odmiany spośród zbioru wszystkich dostępnych
wzorców. Po wybraniu właściwego wzorca wyraz przyjmuje takie właściwości
morfologiczne jakie posiada odpowiadająca mu końcówka we wzorcu. Może
się zdarzyć sytuacja, w której dana forma posiada wiele odrębnych cech
gramatycznych (np. forma może być jednocześnie dopełniaczem, lub
biernikiem). Może się również zdarzyć, że jedna forma wyrazu dotyczy wielu
wzorców odmiany, dla języka polskiego jest to jednak stosunkowo rzadkie.
Utworzenie formy podstawowej polega na podmianie dopasowanej końcówki
wyrazu na końcówkę podstawową w danym wzorcu odmiany (końcówka
odpowiadająca mianownikowi liczby pojedynczej rzeczownika, formy
bezokolicznikowej czasownika itp.).
Zasadniczym problemem jest wybór odpowiedniego wzorca odmiany dla
analizowanego wyrazu. Poprzez dopasowanie końcówki wyrazu do końcówek
zawartych we wzorcach możemy ograniczyć liczbę kandydatów branych pod
uwagę przez algorytm decyzyjny. Końcówka nie determinuje jednak użycia
właściwego wzorca odmiany, a jedynie redukuje liczbę kandydatów, dlatego
konieczne są odpowiednie mechanizmy, które pomogą podjąć właściwą
decyzję. Analizując budowę wyrazów odmieniających się zgodnie z określonym
wzorcem odmiany można zauważyć, że mają one pewne cechy wspólne tzn.
istnieje możliwość podziału grupy wyrazów przynależnych do wzorca odmiany
na podgrupy wyrazów o podobnych tematach. Dla każdej takiej podgrupy
tworzony jest szablon tematów. Wyraz przynależy do wzorca odmiany tylko
wtedy, gdy jego temat jest zgodny z którymś z szablonów tematów
skojarzonych ze wzorcem. Przykładowy szablon tematów można zapisać jako wyrażenie (*k | *g |
*h) co oznacza, że do wzorca odmiany pasują wyrazy których tematy kończą
się na którąś z liter k, g, lub h.
W literaturze omawiającej gramatykę języka polskiego, opis
klasycznych grup deklinacji, czy też koniugacji wzbogacony jest o pewne
wymagania dotyczące tematów wyrazów wchodzących w skład danej grupy.
Są to niestety informację szczątkowe i nie wystarczające do zastosowań
praktycznych w lingwistyce komputerowej. Konieczne jest więc wytworzenie
odpowiednich szablonów tematów dla każdego wzorca odmiany. Sposób ich
generacji opisany jest w dalszej części pracy. Przyjmijmy, że algorytm analizy
morfologicznej dysponuje zbiorem wzorców odmiany wraz z odpowiednimi
zbiorami szablonów tematów.
Bogata polska fleksja pokazała jednak swoją „siłę” – okazuje się, że
zastosowanie szablonów tematów, co prawda redukuje listę potencjalnych
wzorców odmiany dla danej formy wyrazu, ale nadal lista ta zawiera kilku
kandydatów. Za pomocą algorytmu genetycznego wykazano, że wybieranie
wzorców odmiany, w których wyraz dopasowywany jest do możliwie długiej
6
końcówki i możliwie długiego szablonu tematów, zwiększa współczynnik
jakości analizy morfologicznej. W ten sposób osiągnięto jakość na poziomie
70% (70% testowych form wyrazów języka polskiego sprowadzona jest do
właściwej formy podstawowej).
Po zastosowaniu szablonów tematów pozostaje konflikt pomiędzy
dwoma lub trzema wzorcami odmiany, a wybór właściwego generuje
poprawną formę i dostarcza odpowiedniej informacji morfologicznej o wyrazie.
Wydaje się, że wyczerpane zostały już możliwości analizy wyrazu. W jaki
sposób wybrać więc właściwy wzorzec? Pomocne okazują się sztuczne sieci
neuronowe [14][16]. Odpowiednio nauczona sieć neuronowa rozstrzyga o
wyborze i zwiększa jakość analizy morfologicznej. Jako dane wejściowe takiej
sieci możemy przyjąć wektor binarnych wartości 0 lub 1. Każde wejście
odpowiada odpowiedniemu wzorcowi odmiany. Podejmowanie decyzji polega
na aktywowaniu odpowiednich wejść sieci odpowiadających wzorcom
odmiany z listy kandydatów. Wyjściem sieci jest wektor liczb rzeczywistych.
Każdy element wyjściowy odpowiada określonemu wzorcowi odmiany.
Wybieramy ten wzorzec, dla którego sieć neuronowa dostarcza najwyższą
wartość na wyjściu. Do realizacji omówionej tu funkcji wystarczy zwykła
jednowarstwowa sieć neuronowa, dla której liczba neuronów odpowiada
liczbie wzorców odmiany.
Do wyznaczenia wag sieci neuronowej wykorzystano algorytm
wstecznej propagacji błędów. W ten sposób udało się uzyskać jakość na
poziomie 83%. Zastosowanie słownika form podstawowych, którego skompresowana
postać nie zajmuje wiele pamięci, pozwala na jednoznaczne określanie wzorca
odmiany – z listy kandydatów wybierany jest ten wzorzec, który produkuje
formę znajdującą się w słowniku form podstawowych. Jeśli żaden z
kandydatów nie generuje formy ze słownika to wybierany jest kandydat
najwyżej oceniony przez sieć neuronową. Dla wszystkich form wyrazów, których forma podstawowa znajduje się
w słowniku, uzyskujemy jakość bliską 100%. Dla form nie znajdujących się w
słowniku form podstawowych można przyjąć, że jakość jest na poziomie 83%.
Rysunek 1 ilustruje omówioną zasadę działania algorytmu analizy
morfologicznej. Należy tu jeszcze wspomnieć o wstępnej fazie analizy, gdzie
wyrazy nie podlegające żadnym regułom odmiany (np. zaimki) wyszukiwane
są w słowniku wyjątków. W ten sposób baza wzorców odmiany oraz sieć
neuronowa nie jest „zanieczyszczona” przez kilkaset wyjątkowych wyrazów. Szczegółowy opis poszczególnych etapów działania analizatora oraz
sposób wyznaczenia bazy wzorców odmiany, szablonów tematów, wag sieci
neuronowej omówiony jest w dalszej części pracy.
Wyznaczanie wzorców odmiany
Wzorce odmian można wyznaczyć poprzez analizę pełnego słownika
języka polskiego. Słownik taki zawiera większość powszechnie stosowanych
7
słów we wszystkich poprawnych formach. Możemy przyjąć, że słownik
zapisany jest w pliku w postaci listy kolejnych słów. Każde słowo opisane jest
przez wektor poprawnych form. Kolejne formy ułożone są w odpowiedniej
kolejności właściwej dla rzeczowników, czasowników i innych części mowy.
Fragment takiego słownika może wyglądać następująco:
hycel:
hycel hycla hyclowi hycla hyclem hyclu hyclu hycle hycli hyclom hycli hyclami hyclach hycle gwiazdka: gwiazdka gwiazdki gwiazdce gwiazdkę gwiazdką gwiazdce gwiazdko
gwiazdki gwiazdek gwiazdkom gwiazdki gwiazdkami gwiazdkach gwiazdki
podebrać: podebrać podebrano podebranie podbierać podebrany podebrawszy
podbiorę podbierzesz podbierze podbierzemy podbierzecie podbiorą
podbierz podbierzmy podbierzcie podebrałem podebrałam podebrałeś
podebrałaś podebrał podebrała podebrało...
Pełen słownik odmian można uzyskać przetwarzając powszechnie
dostępne, wykorzystywane do sprawdzania pisowni, słowniki np. ispell i
nowszy aspell [2]. Słowniki te są stale wzbogacane i zawierają blisko 3
miliony form fleksyjnych. Niestety obecnie nie dorównują one jeszcze
znakomitemu „Uniwersalnemu Słownikowi Języka Polskiego” [3]. Ten właśnie
słownik wydaje się najlepszym kandydatem do wytworzenia analizatora
morfologii polskiej, nie jest on jednak publicznie dostępny w formie
elektronicznej nadającej się do przetwarzania.
Wyznaczenie wzorców odmiany polega na sekwencyjnym przetwarzaniu
kolejnych słów ze słownika. Przetwarzanie to sprowadza się do wyznaczania
tematów słów. Przez temat (rdzeń) rozumiemy tutaj najdłuższą część słowa,
która występuje we wszystkich jego formach. Mając wyznaczony rdzeń
możemy utworzyć wektor końcówek danego słowa. Wektor ten składa się z
dopełnień kolejnych form wyrazu względem wyznaczonego rdzenia.
Przykładowo dla słowa gwiazdka rdzeniem jest gwiazd a wektor końcówek
przedstawia się następująco:
*ka *ki *ce *kę *ką *ce *ko *ki *ek *kom *ki *kami *kach *ki
Okazuje się, że identycznie jak słowo gwiazdka odmienia się prawie
4000 słów, między innymi: abiturientka, beczka, cyganka, egoistka, foremka,
groteska. Wszystkie słowa odmieniające się w ten sam sposób opisane są przez
wspólny wektor końcówek. Dodając do każdej takiej końcówki informacje
morfologiczne otrzymujemy pełen wzorzec odmiany. W wyniku analizy całego słownika utworzono blisko 1,5 tys. różnych
wzorców odmian, z czego ponad 97% to wzorce dla słów o wyjątkowej
odmianie. Pozostałe 3% wzorców dotyczy 99% wszystkich słów. Otrzymaliśmy
zatem duży zbiór wzorców odmiany, z których zaledwie 3% ma zasadnicze
znaczenie. Mimo to, wszystkie przypadki powinny być brane pod uwagę, aby
w sytuacjach wyjątkowych analizator morfologiczny zachowywał się
właściwie, tym bardziej, że słowa ­ wyjątki pełnią często ważne funkcje
8
gramatyczne w zdaniu. Ze względu na wydajność warto wzorce odmiany odpowiadające niskiej
liczbie słów (poniżej 5) zastąpić przez odpowiedni słowniczek zawierający
wyjątki wraz z pełną ich odmianą. Do słowniczka takiego powinny trafić
wszystkie słowa nie posiadające wartości leksykalnej, a pełniące jedynie rolę
gramatyczną w zdaniu.
Warto omówić jeszcze sposób wyznaczania rdzenia dla danego słowa. W
najprostszym przypadku można przyjąć, że rdzeniem jest fragment słowa
wspólny dla wszystkich jego form. Rdzeń taki składa się z pewnej liczby
początkowych liter. Podejście to jest jednak w pewnych sytuacjach bardzo
niekorzystne. Spójrzmy na poniższe słowa:
barwnie:
barwnie barwniej najbarwniej
dokładnie: dokładnie dokładniej najdokładniej
pies: pies psa psu psa psem psie psie psy psów psom psy psami psach psy
Jak widać dla powyższych przykładów trudno jest wydzielić rdzeń
składający się wyłącznie z początkowych liter wyrazów. Dlatego należy
przyjąć, że rdzeń może składać się z wielu fragmentów słowa rozdzielonych
afiksami. Dla przykładowych słów otrzymamy w takiej sytuacji następujące
rdzenie i afiksy:
_barwnie_ :
*
j
naj*j
_dokładnie_ : * j naj*j
p_s_ : *ie* *a *u *a *em *ie *ie *y *ów *om *y *ami *ach *y
hyc_l_ :
*e* *a *owi *a *em *u *u *e *i *om *i *ami *ach *e
Wyznaczenie rdzeni z uwzględnieniem wszystkich afiksów, a nie tylko
postfiksów redukuje liczbę wzorców odmiany i zapewnia właściwą analizę
słów poprzedzonych przedrostkami, czy też posiadających wymianę głosek w
swoim klasycznym temacie. Być może takie rozwiązanie sprawdziłoby się
również dla języka arabskiego, dla którego podział rdzenia na fragmenty
rozdzielone morfemami występuje bardzo często [4]. Zaprezentowany sposób określania rdzenia wymaga zastosowania
odpowiedniego algorytmu poszukującego możliwie najlepszy temat składający
się z wielu fragmentów słowa. Ponieważ operacja ta realizowana jest
jednokrotnie podczas budowania analizatora, można przyjąć najprostszy
możliwy sposób wyznaczania najlepszego rdzenia – analiza wszystkich
potencjalnych kandydatów. Złożoność takiego algorytmu nie przekracza
oszacowania k*2m, gdzie m to maksymalna liczba znaków danego słowa, a k
to liczba form słowa. Wybrany rdzeń powinien posiadać możliwie największą
długość, musi zawierać najdłuższy wspólny podciąg wszystkich form danego
słowa, oraz musi obejmować wszystkie te formy.
Zbiór wzorców odmiany oraz słowniczek wyjątków dostarczają
niezbędnych informacji potrzebnych do pracy analizatora morfologicznego.
Poprzez edycję wzorców możemy poprawić lub rozszerzyć możliwości analizy
fleksji. Przykładowo rozszerzając dany wzorzec o odpowiednie końcówki
9
możemy zapewnić analizę form zdrobniałych np.: p_s : *ie* *a *u *a *em *ie *ie *y *ów *om *y *ami *ach *y *ie*ek *ie*ka *ie*kowi *ie*ka *ie*kiem *ie*ku *ie*ku *ie*ki *ie*ków *ie*kom *ie*ki *ie*ami *ie*kach *ie*ki
Łatwo jest również tak zmodyfikować wzorce, żeby możliwa była analiza
tekstów polskich pisanych z pominięciem tzw. ogonków, co jest często
spotykane w korespondencji elektronicznej. Mając w pamięci komputera zbiór wzorców odmiany oraz słowniczek
wyjątków możemy dokonać analizy morfologicznej dowolnej formy słowa
polskiego przyporządkowując daną formę do odpowiedniego wzorca. Okazuje
się jednak, że przyporządkowanie takie nie jest rzeczą prostą. Wiadomo, że
dana forma słowa pasuje do wzorca odmiany jeśli jedna z jego „końcówek”
odpowiada „końcówce” badanej formy. Niestety, w większości przypadków dla
jednej formy wyrazów istnieje wiele wzorców posiadających afiksy zgodne z tą
formą. Problemem jest wybór odpowiedniego wzorca spośród wszystkich
kandydatów wybranych poprzez dopasowanie afiksów. Kolejne punkty
prezentują pewne rozwiązania tego problemu.
Wyznaczanie szablonów tematów
Afiksy pozwalają na wyznaczenie pewnego podzbioru wzorców odmiany
dopuszczalnych dla danej formy. W tym punkcie pokażemy w jaki sposób
zmniejszyć rozmiar tego podzbioru poprzez wykorzystanie szablonów
tematów.
Wybór właściwego wzorca odmiany dla danej formy wyrazu jest
typowym zadaniem klasyfikacji pojęć. Klasyfikacja polega na przypisaniu do
konkretnego pojęcia odpowiedniej kategorii. W zadaniu analizy morfologicznej
zbiór pojęć składa się ze wszystkich form słów języka polskiego, natomiast
zbiór kategorii zawiera wszystkie wzorce odmiany. W celu wykonania klasyfikacji pojęcia niezbędna jest wiedza
pozwalająca na podjęcie odpowiedniej decyzji. Wykorzystaliśmy już
informacje niesione przez afiksy, ale nadal możliwe jest wykorzystanie
informacji zawartych w rdzeniach wyrazów. Jeśli przyjrzymy się tematom
wyrazów przynależnych do pewnego wzorca odmiany, okaże się, że mają one
pewne wspólne cechy – często końcowe znaki tematów są identyczne. Taki
wspólny ciąg znaków pojawiający się w wielu tematach nazywać będziemy
szablonem grupy tematów. Jeden wzorzec odmiany może posiadać wiele
szablonów tematów. Znając szablony tematów danego wzorca odmiany
możemy automatycznie ustalać, czy badana forma wyrazu może odmieniać
się z wykorzystaniem tego wzorca. Tym sposobem można znacznie
zredukować listę potencjalnych wzorców odmiany odrzucając te, dla których
szablony tematów nie obejmują badanej formy wyrazu. Problemem może być wyznaczenie zbioru szablonów dla każdego ze
wzorców odmiany. Można to zrobić analizując słownik języka polskiego.
10
Liczba elementów zbioru szablonów tematów zależy od przyjętego algorytmu
wyznaczania tych szablonów. Najprostszy szablon składa się z pojedynczej
litery, na którą to literę kończy się pewien podzbiór tematów. Z takiego
szablonu można utworzyć wiele innych dołączając kolejne znaki z tematów.
Widać więc, że zbiór szablonów może mieć różną liczbę elementów w
zależności od tego z jaką dokładnością szablony mają opisywać tematy. Zbyt
duża szczegółowość nie jest zalecana, ponieważ zmniejsza ona możliwości
uogólnienia działania analizatora na przypadki, które nie znalazły się w
zbiorze uczącym. W skrajnym przypadku zbiór szablonów to po prostu zbiór
wszystkich tematów przynależnych do wzorca, ale w takiej sytuacji mamy do
czynienia z pełnym słownikiem języka polskiego i całkowicie tracimy
możliwość generalizacji. Mniejsza liczba bardziej ogólnych szablonów
zwiększa nam możliwości generalizacji analizy fleksyjnej, ale zmniejsza jakość
algorytmu klasyfikacji. Zachowanie odpowiednich proporcji pomiędzy
uogólnianiem, a jakością klasyfikacji odgrywa tutaj kluczową rolę.
Najprostszy algorytm wyznaczający zbiór szablonów tematów dla
pewnego wzorca odmiany może działać w następujący sposób:
1.
2.
3.
Jako początkową zawartość tymczasowego zbioru rozwiązań przyjmij
zbiór szablonów jednoliterowych pokrywający cały zbiór tematów.
Dla kolejnych szablonów z tymczasowego zbioru rozwiązań:
a. Sprawdź, czy można dany szablon zastąpić przez kilka bardziej
szczegółowych.
b. Jeśli szablon można zastąpić, to dodaj na koniec tymczasowego
zbioru rozwiązań szablony bardziej szczegółowe i usuń ze zbioru
szablon zastępowany.
Przyjmij zawartość tymczasowego zbioru rozwiązań jako rozwiązanie
problemu.
Zasadniczy wpływ na działanie powyższego algorytmu ma decyzja, czy
szablon powinien być zastąpiony przez kilka szablonów bardziej
szczegółowych. Można tutaj posłużyć się kilkoma warunkami
uwzględniającymi następujące parametry:
A = Liczba szablonów uszczegóławiających.
B = Średnia liczba tematów pokrywanych przez szablony
Przyjmując odpowiednie progi dla parametrów A, B lub ich kombinacji
możemy decydować, czy dany szablon należy „rozdrabniać”. Przy budowie
analizatora morfologicznego przyjęto następujące warunki, które muszą być
spełnione, aby odbywało się uszczegóławianie szablonu tematów: A < 9,
B>2,
A<5 lub B>4.
Najliczniej reprezentowanym wzorcem odmiany dla języka polskiego
jest wzorzec zawierający następujące końcówki:
*y *ego *emu *ym *ym *a *ej *ą *ą *ej *e *ego *emu *e *ym *ym *i *ych *ym *ych *ymi *ych
11
Poniżej znajdują się przykładowe szablony wyznaczone dla tego wzorca
odmiany (w nawiasach podano liczbę tematów pokrywanych przez dany
szablon):
kow_(3235) żow_(197) #ian_(1543) #onn_(85) kaw_(29) man_(107) #ędn_(48) #atn_(31) #ywn_(146) żan_(284) sow_
(824) aln_(1007) cow_(513) łow_(536) gow_(523) łan_(144) dan_(307) enn_(243) odn_(101) #liw_(122) can_(313) kan_
(637) now_(1593) chan_(236) wan_(9733) mow_(457) fow_(74) #iln_(33) tan_(526) jow_(234)...
Każdy z powyższych szablonów jest zakończeniem tematów przez niego
pokrywanych. Znak podkreślenia oznacza miejsce występowania afiksów.
Znak # oznacza, że na danej pozycji w temacie powinna znajdować się
spółgłoska. W ten sposób dodatkowo wzbogacamy możliwości klasyfikacji.
Podobnie znak @ oznacz samogłoskę na danej pozycji. Jak widać wszystkie
powyższe szablony można zastąpić przez dwa bardziej ogólne:
w_ n_
W naszym przykładzie tematy wyrazów należących do wzorca odmiany
kończą się na literę ‘n’, lub ‘w’. Właśnie z tych początkowych szablonów
tematów zostały wyznaczone te bardziej szczegółowe.
Zastosowanie szablonów tematów ułatwia przypisanie danej formy
wyrazu do odpowiedniego wzorca odmiany. Niestety w większości
przypadków, po odrzuceniu wielu kandydatów poprzez analizę afiksów i
rdzeni nadal pozostaje kilka wzorców odmiany do wyboru. Doświadczalnie
wykazano, że wybierając wzorzec o najdłuższej dopasowanej końcówce oraz
najdłuższym dopasowanym szablonie tematów istnieją duże szanse na
uzyskanie poprawnego rezultatu. Pewne znaczenie ma również liczba słów
odmieniających się zgodnie z danym wzorcem odmiany. Suma ważona tych
trzech parametrów jest wartością, która pozwala nam dość skutecznie
wybierać właściwy wzorzec odmiany. Wartość tą można przedstawić jako
następującą funkcję:
(Wk) = wa*La + wsz*Lsz + wW*count(Wk)
gdzie: (W k) Wk La
Lsz
count(Wk)
wa
wsz
wW
ocena k­tego wzorca odmiany
k­ty wzorzec odmiany dopasowany do badanego wyrazu
długość dopasowanych afiksów
długość dopasowanego szablonu tematów
całkowita liczba wyrazów odmienianych według k­tego wzorca
waga dla afiksów
waga dla szablonów
waga dla ilości wyrazów odmienianych według wzorca
W procesie analizy morfologicznej należy wybierać wzorzec o najwyższej
wartości powyższej funkcji. W ten sposób można osiągnąć jakość bliską
70,5% (przy testowaniu za pomocą wszystkich form ze słownika). Wartości
wag powinny wynosić odpowiednio: wa=22, wsz=11, wW=1. Do wyznaczenia
wartości tych wag wykorzystano omówiony poniżej algorytm genetyczny. Algorytm genetyczny ustalający wagi funkcji
oceniającej wzorce odmiany
Zadaniem algorytmu genetycznego jest znalezienie możliwie dobrego
12
rozwiązania pewnego problemu poprzez zastosowanie mechanizmów
naśladujących ewolucję naturalną. Zasada działania takiego algorytmu jest
stosunkowo prosta:
1. Utwórz początkową populację rozwiązań.
2. Oceń każdego osobnika (rozwiązanie) z populacji za pomocą
ustalonej funkcji oceniającej.
3. Wybierz pewien zbiór osobników tworzących nową populację –
osobniki o lepszej ocenie mają większą szansę wyboru.
4. Z pewnym prawdopodobieństwem dokonaj krzyżowania
osobników z wyselekcjonowanej populacji, tak aby nowo
utworzone osobniki posiadały cechy swych przodków.
5. Z pewnym prawdopodobieństwem dokonaj mutacji losowo
wybranych osobników.
6. Powtarzaj algorytm począwszy od punktu 2 dla nowo utworzonej
populacji do chwili osiągnięcia określonego warunku stopu.
O ile zasada działania algorytmów genetycznych jest stosunkowo
prosta to na jego działanie ma wpływ wiele elementów, między innymi:
sposób kodowania osobników, wielkość populacji, liczba pokoleń, operator
selekcji (sposób wyboru osobników do nowej populacji), operator
krzyżowania, operator mutacji, prawdopodobieństwo krzyżowania i mutacji,
funkcja oceniająca. Omówienie tych zagadnień można znaleźć w wielu
publikacjach [9]. W następnych podpunktach omówiono rozwiązania przyjęte
dla analizatora morfologicznego.
Genotyp
Każdy osobnik przetwarzany w ramach algorytmu genetycznego
reprezentowany jest przez zestaw chromosomów stanowiących genotyp
osobnika. Zazwyczaj kodowanie polega na przekształceniu danych osobnika
do odpowiedniego ciągu binarnego. W naszym zadaniu danymi osobnika jest
zestaw wag funkcji oceniającej wzorce odmiany. Poszczególne wagi kodowane
są jako ciągi 8 bitów reprezentujących wartości wag z zakresu <0,255>.
Kolejność zapisu wag nie jest istotna, ale powinna być ona niezmienna, tak
aby można było zakodować i zdekodować ich wartości. Chromosom
zbudowany jest więc z 24 bitowego ciągu binarnego.
Wybór populacji początkowej
Dobór odpowiedniej liczby osobników w populacji ma wpływ na czas
działania algorytmu. Zbyt duża liczba osobników wymaga więcej czasu na
wykonanie obliczeń, natomiast zbyt mała liczba osobników może powodować
zbyt małą różnorodność genetyczną, przez co znalezienie lepszego
rozwiązania może okazać się niemożliwe. Ze względu na długi czas
wykonywania funkcji oceniającej, rozmiar populacji ograniczono do 30
osobników.
Populacja początkowo składa się z zestawów wag o losowych
wartościach.
13
Funkcja oceniająca
Zadaniem funkcji oceniającej jest wygenerowanie liczbowej oceny
przystosowania danego osobnika do rozwiązywania określonego problemu. W
przypadku analizatora morfologicznego funkcją oceniającą jest miara jakości
analizy morfologicznej. Poprawność ta jest określana poprzez sprawdzenie
działania analizatora ze źródłowym słownikiem języka polskiego. Każdy wyraz
ze słownika poddawany jest analizie mającej na celu wygenerowanie formy
podstawowej tego wyrazu. Procentowa liczba poprawnie odmienionych form
stanowi wartość funkcji oceniającej. Czas analizy morfologicznej wielu
milionów form (dla jednego osobnika) jest stosunkowo długi, dlatego dla
pierwszych kilku populacji warto oceniać tylko losowo wybrany podzbiór
całego słownika. W późniejszych populacjach można wykorzystywać cały
dostępny słownik w celu poprawy jakości rozwiązania.
Selekcja osobników
Selekcja osobników jest funkcją wybierającą osobniki do nowej
populacji. Wybrane osobniki zostaną poddane operacji krzyżowania i mutacji
tworząc nową populację. Funkcja selekcji ma charakter losowy, więc nawet
najsłabsze osobniki mają szanse trafić do nowej populacji choć ich szanse są
mniejsze. W zadaniu doboru wag funkcji oceniającej wzorce posłużono się
metodą ruletki. Każdy osobnik z populacji macierzystej otrzymuje swój
wycinek koła wielkością odpowiadający względnej wartości funkcji
przystosowania. Wybieranie osobników polega na n­krotnym (n–wielkość
populacji) „kręceniu kołem ruletki”. W praktyce odpowiada to losowaniu
wartości z zakresu 0­360. Wartość ta reprezentuje określoną pozycję na kole
wyrażoną w stopniach. Wybrany zostaje ten osobnik, którego wycinek
znajduje się w wylosowanym fragmencie koła. Tym sposobem osobniki o
najwyższej funkcji przystosowania mają większe szanse na wybór do nowej
populacji. Ponadto pojedynczy osobnik może być wybrany wielokrotnie, co
przekłada się na większą liczbę potomków w procesie krzyżowania.
Dodatkowo w ramach selekcji automatycznie dodawane są trzy
najlepsze osobniki (tzw. selekcja elitarna), co zapobiega utracie dobrych
rozwiązań.
Operator krzyżowania
Operacja krzyżowania ma na celu wytworzenie nowych osobników
poprzez skrzyżowanie osobników macierzystych. Istnieje wiele metod
krzyżowania ciągów binarnych. Najpopularniejsze jest krzyżowanie poprzez
podział ciągu binarnego. Rozcinamy chromosom w losowo wybranym punkcie
ciągów binarnych dwóch osobników, otrzymaną lewą stronę chromosomu
pierwszego osobnika łączymy z prawą stroną chromosomu drugiego
osobnika. Podobnie łączymy pozostałe dwie części. W ten sposób powstają
dwa nowe osobniki posiadające cechy swych przodków. Taką metodę
krzyżowania zastosowano do rozwiązywania omówionego tu problemu.
14
Operacja mutacji
Mutacja ma zabezpieczyć algorytm przed zbyt wczesną zbieżnością. Źle
skonstruowane algorytmy genetyczne mogą mieć tendencję do znajdowania
rozwiązań lokalnych tzn. optymalnych w danym fragmencie przestrzeni
rozwiązań. Operacja mutacji pozwala wyjść poza tą przestrzeń.
W zaprezentowanym problemie operacja mutacji polega na losowej
zmianie losowo wybranego bitu chromosomu.
Warunek stopu
Warunek stopu określa kiedy algorytm genetyczny ma zakończyć swoje
zadanie. Przyjęto najprostszy możliwy warunek stopu – algorytm zatrzymuje
się po przetworzeniu 30 pokoleń.
Zastosowanie zaprezentowanego algorytmu genetycznego pozwala na
wyznaczenie optymalnych wag z dość dużą dokładnością. Reprezentując wagi
za pomocą większej ilości bitów możemy zwiększyć dokładność działania
analizatora morfologicznego.
Wybór wzorca odmiany za pomocą sztucznej sieci
neuronowej
Po zredukowaniu liczby potencjalnych wzorców odmiany nadal
pozostaje problem wyboru tego właściwego dla określonej formy wyrazu.
Omówione wcześniej rozwiązanie polegające na zastosowaniu funkcji
oceniającej wzorce jest stosunkowo dobrej jakości, ale najwyższą jakość
analizy morfologicznej może przynieść odpowiednio skonstruowana sieć
neuronowa. Sieć neuronowa składa się ze zbioru neuronów przetwarzających
sygnał wejściowy na odpowiedni sygnał wyjściowy. Neurony oraz połączenia
pomiędzy nimi posiadają określone wagi mające wpływ na sposób
przetwarzania sygnałów. Dla uproszczenia w sztucznych sieciach
neuronowych przyjmuje się zazwyczaj warstwową budowę sieci. Sieć składa
się z wielu warstw neuronów. Każda warstwa posiada wektor wejść oraz
wektor wyjść. Liczba neuronów w warstwie odpowiada liczbie wyjść warstwy.
Kolejne warstwy łączone są szeregowo – wejściem kolejnej warstwy jest
wyjście warstwy poprzedniej. Wejście pierwszej warstwy jest wejściem sieci, a
wyjście warstwy ostatniej stanowi wyjście sieci neuronowej. Wejścia warstwy
tworzą połączenia z każdym z jej neuronów, tak więc liczba połączeń w
warstwie wynosi n*i, gdzie n – liczba neuronów w warstwie sieci, i – liczba
wejść warstwy.
Każdy neuron posiada jedno wyjście i przyłączony jest do wszystkich
wejść warstwy, w której się znajduje. Połączenia te posiadają określone wagi.
Działanie neuronu polega na obliczeniu sumy ważonej sygnałów wejściowych
oraz dodaniu do tej sumy wagi neuronu jako progu aktywacji. Otrzymana
15
wartość stanowi sygnał wyjściowy neuronu (na wyjściu może znaleźć się
otrzymana wartość, lub też wynik działania dowolnej funkcji, której
argumentem jest ta wartość). Kluczem do sukcesu jest ustalenie w procesie
uczenia sieci odpowiednich wag połączeń oraz wag neuronów.
Zaprezentowany zarys budowy sieci neuronowych należy traktować
jako bardzo skrótowy. Temat ten jest bardzo szeroko omawiany w literaturze
[9][14][16] i w dalszej części pracy uwagę ukierunkowano na rozwiązanie
konkretnego problemu przy użyciu sieci neuronowych. Do rozwiązania zadania wyboru wzorca odmiany wystarczy jedna
warstwa sieci neuronowej. Wejściem sieci jest wektor aktywacji wzorców
odmiany. Każde wejście odpowiada jednemu wzorcowi odmiany. Wejścia
przyjmują wartości 0, jeśli dany wzorzec nie jest brany pod uwagę dla
badanego wyrazu. Wejście przyjmuje przeskalowaną wartość funkcji oceny
wzorca jeśli wzorzec jest na liście kandydatów. Wyjściem sieci jest wektor
ocen sieci neuronowej poszczególnych wzorców odmiany. Wybierając wzorzec
najwyżej oceniony przez sieć neuronową otrzymujemy rozwiązanie problemu.
Wyboru dokonujemy tylko spośród tych wzorców, które są kandydatami –
pozostałe sygnały wyjściowe mogą być ignorowane. Informacją pozwalającą na wybór przez sieć neuronową odpowiedniego
wzorca odmiany jest pewien zbiór wzorców kandydujących. Takie podejście
może być niewłaściwe w sytuacjach, gdy przy takich samych zbiorach
kandydatów powinien być wybierany odmienny wzorzec odmiany. Dlatego też
zbiór wejść sieci neuronowej został rozszerzony o wejścia odpowiadające
określonym literom alfabetu. Jeśli dana litera znajduje się w analizowanym
wyrazie, to aktywowane jest wejście odpowiadające tej literze. W ten sposób
sieć neuronowa posiada dostateczną ilość informacji, aby podjąć właściwą
decyzję.
Rysunek 2 ilustruje budowę omówionej sieci neuronowej. Wejścia
odpowiadające wzorcom odmiany oznaczone są jako WO1 – WOW (W – liczba
wzorców odmiany). Symbolami A – Z oznaczono wejścia odpowiadające
znakom występującym w wyrazach (polskie znaki powinny być również
uwzględnione w implementacji). N1 – NW to poszczególne neurony, a w1 – w2
to wagi tych neuronów. Wyjścia sieci oznaczono symbolami W1 – WW. Wagi
połączeń wejść z neuronami oznaczane są symbolami wij gdzie i – to numer
wejścia, a j – to numer neuronu.
Wartość sygnału wyjściowego neuronu x wynosi:
WX = wx * ( (wix * WEi) )
i = 1..liczba wejść
WEi – wartość sygnału na wejściu i
Implementacja działającej sieci neuronowej jest rzeczą prostą, dużo
trudniejsze jest ustalenie wag sieci neuronowej. Wagi sieci zazwyczaj
ustalane są w procesie uczenia, gdzie na wejścia sieci podaje się określone
przykłady trenujące. Znając oczekiwaną wartość sygnału wyjściowego
odpowiednio modyfikuje się wagi sieci dla danych przykładów trenujących. Do nauczenia sieci wykorzystano standardowy algorytm wstecznej
16
propagacji błędów [14]. Jako przykłady trenujące służyły kolejne pozycje z
pełnego słownika języka polskiego. Wartość optymalną osiągnięto już po
pierwszym zaprezentowaniu wszystkich przykładów. Kolejne iteracje
nieznacznie zmieniały jakość sieci neuronowej, a przy zbyt dużym
współczynniku modyfikacji wag dalsze trenowanie powodowało spadek
jakości.
Realizowane były również próby nauczenia sieci za pomocą algorytmu
genetycznego [9][10], ale jakość otrzymywanych rozwiązań nie przekraczała
72%. Wyznaczenie jakości analizatora morfologicznego odbywało się poprzez
analizę wszystkich form wyrazów znajdujących się w słowniku języka
polskiego. Jeśli forma wyrazu sprowadzana była do właściwej formy
podstawowej analiza uznawana był za poprawną ­ wybrany został właściwy
wzorzec odmiany. Miarą jakości jest procentowy stosunek liczby form
poprawnie odmienionych do liczby wszystkich analizowanych form.
Oczywiście wyznaczona miara jakości obarczona jest błędami słownika.
Algorytm wstecznej propagacji błędów pozwolił osiągnąć jakość na
poziomie 83%. Zapewne wartość tą można zwiększyć stosując bardziej
zaawansowane techniki uczenia lub inną architekturę sieci neuronowej (sieci
wielowarstwowe). Zastosowanie słownika form podstawowych zapewnia
prawie 100% poprawność przy analizie dowolnych form słów znajdujących się
w tym słowniku. Zakończenie
Zaprezentowane rozwiązanie analizy morfologicznej języka polskiego,
choć w pełni funkcjonalne, należy traktować jako prototypowe. Na pewno
istnieje możliwość poprawy jakości analizy poprzez zastosowanie lepszych
słowników języka polskiego, zaawansowanych metod uczenia sieci
neuronowej, ręczną modyfikację wzorców odmiany. W procesie uczenia i
badania jakości analizatora powinien być uwzględniony rozkład
występowania słów w rzeczywistych tekstach. Proces podnoszenia jakości
analizatora morfologicznego ma charakter ciągły, a zaprezentowane tu
podejście oparte o metody uczenia maszyn daje wiele możliwości rozwoju.
Bibliografia.
1. Jagodziński G. ­ Gramatyka Języka Polskiego. ­
http://grzegorj.w.interia.pl/gram/isopl/gram1.html (2004) 2. Prywata M., Gackiewicz P., Macewicz W. ­ Polish dictionary for aspell/ispell/myspell. ­
http://www.kurnik.pl/slownik http://ispell­pl.sourceforge.net/ (2004) 3. Dubisz S. (red.) ­ Uniwersalny słownik języka polskiego. ­ Wydawnictwo Naukowe
PWN, ISBN: 83­01­12837­2 (2003) 4. Chen A, Gey F. ­ Building an Arabic Stemmer for Information Retrieval. ­ University of
California at Berkeley (2002) 5. Weiss D. ­ Polski lematyzator. ­ http://www.cs.put.poznan.pl/dweiss/ (2002) 6. Tokarski J. ­ Fleksja polska. ­ Wydawnictwo Naukowe PWN (2001) 7. Jurafsky D., Martin J.H. ­ Speech and Language Processing: An Introduction to
17
Natural Language Processing, Computational Linguistics and Speech Recognition. ­
Prentice Hall (2000) 8. Suszczańska N., Forczek M., Migas A. ­ Wieloetapowy analizator morfologiczny. ­
Speech and Language Technology, vol4, 155­165 (2000) 9. Rutkowska D., Piliński M., Rutkowski L. ­ Sieci neuronowe, algorytmy genetyczne i
systemy rozmyte. ­ Wydawnictwo Naukowe PWN (1999) 10. Xin Yao ­ Evolving Artificial Neural Networks. ­ Proceedings of the IEEE, vol 87, No 9
(1999) 11. XU J., Croft B. ­ Corpus­Based Stemming using CO­occurrence of Word Variants. ­
ACM Translations on Information Systems, 16(1) (1998) 12. Mośny G. ­ Zastosowanie bazy danych do analizy morfologicznej języka polskiego. ­
Praca magisterska, Politechnika Śląska, Gliwice (1998) 13. Hull D. ­ Stemming algorithms: A case study for detailed evaluation. ­ Journal of the
American Society for Information Science, 47(1), 70­84 (1996) 14. Osowski S. ­ Sieci Neuronowe w ujęciu algorytmicznym. ­ Wydawnictwo Naukowo­
Techniczne, Warszawa (1996) 15. Szafran K. ­ Analizator morfologiczny SAM­95, opis użytkowy. ­ Raport Instytutu
Informatyki Uniwersytetu Warszawskiego LTW, TR 96­05(226) (1996) 16. Korbicz J., Obuchowicz A., Uciński D. ­ Sztuczne Sieci Neuronowe. Podstawy i
Zastosowania. ­ Akademicka Oficyna Wydawnicza PLJ (1994) 17. Szafran K. ­ Automatyczna analiza fleksyjna tekstu polskiego (na podstawie
schematycznego indeksu a tergo Jana Tokarskiego). ­ Rozprawa doktorska, Wydział
Polonistyki UW, Warszawa (1993) 18. Frakes W.B., Baeza­Yates, R. ­ Stemming Algorithms. ­ Information Retrieval – Data
Structures and Algorithms. Rentice Hall, London, 131­160 (1992) 19. Porter M. ­ An algorithm, for suffix stripping. ­ Program., 14(3), 130­137 (1980) 20. Lovins J.B. ­ Development of a Stemming Algorithm. ­ Mechanical Translation and
Computational Linguistics, 11 (1968) 18
Rysunek 1 Algorytm analizy morfologicznej.
19
Rysunek 2 Sieć neuronowa wybierająca wzorzec odmian.

Podobne dokumenty