Jakub Strychowski. Rodan Systems S.A

Jakub Strychowski Rodan Systems S.A Zastosowanie metod uczenia maszynowego w analizie morfologicznej języka polskiego Słowa kluczowe: analiza morfolo...
Author: Nina Górecka
18 downloads 0 Views 548KB Size
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_ : 





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 2, A4. 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 . 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.