Automatyczna analiza semantyczna tekstu w j zyku naturalnym, studium przypadku

Uniwersytet Warszawski Wydziaª Matematyki, Informatyki i Mechaniki Dariusz Leniowski Nr albumu: 236088 Automatyczna analiza semantyczna tekstu w j¦z...
12 downloads 2 Views 5MB Size
Uniwersytet Warszawski Wydziaª Matematyki, Informatyki i Mechaniki

Dariusz Leniowski Nr albumu: 236088

Automatyczna analiza semantyczna tekstu w j¦zyku naturalnym, studium przypadku Praca magisterska na kierunku INFORMATYKA

Praca wykonana pod kierunkiem prof. Krzysztofa Diksa

Instytut Informatyki Uniwersytetu Warszawskiego

Wrzesie« 2010

O±wiadczenie kieruj¡cego prac¡ Potwierdzam, »e niniejsza praca zostaªa przygotowana pod moim kierunkiem i kwalikuje si¦ do przedstawienia jej w post¦powaniu o nadanie tytuªu zawodowego.

Data

Podpis kieruj¡cego prac¡

O±wiadczenie autora (autorów) pracy ‘wiadom odpowiedzialno±ci prawnej o±wiadczam, »e niniejsza praca dyplomowa zostaªa napisana przeze mnie samodzielnie i nie zawiera tre±ci uzyskanych w sposób niezgodny z obowi¡zuj¡cymi przepisami. O±wiadczam równie», »e przedstawiona praca nie byªa wcze±niej przedmiotem procedur zwi¡zanych z uzyskaniem tytuªu zawodowego w wy»szej uczelni. O±wiadczam ponadto, »e niniejsza wersja pracy jest identyczna z zaª¡czon¡ wersj¡ elektroniczn¡.

Data

Podpis autora (autorów) pracy

Streszczenie

Praca dotyczy automatycznej analizy semantycznej tekstu napisanego w j¦zyku naturalnym (angielskim). Opracowano i przedstawiono nowy formalizm, który jest podstaw¡ do autorskiego algorytmu przetwarzania j¦zyka naturalnego, korzystaj¡cego z typów semantycznych, teorii krat i idei programowania funkcyjnego. Algorytm zostaª zaimplementowany i przetestowany na zbiorze zda« zaczerpni¦tych z formularzy 10-K Ameryka«skiej Komisji Papierów Warto±ciowych.

Sªowa kluczowe

parsowanie semantyczne, przetwarzanie j¦zyka naturalnego, semantyka j¦zyka naturalnego, sztuczna inteligencja

Dziedzina pracy (kody wg programu Socrates-Erasmus)

11.3 Informatyka 11.4 Sztuczna inteligencja

Klasykacja tematyczna

I.2.7 [Articial Intelligence]: Natural Language Processing  Language parsing and understanding; F.4.2 [Mathematical Logic and Formal Languages]: Grammars and Other Rewriting Systems  Parsing; D.3.2 [Programming Languages]: Language Classications  Specialized application languages;

Tytuª pracy w j¦zyku angielskim

Automatic semantic analysis of text in natural language, a case study

Podzi¦kowania

Serdeczne podzi¦kowania chciaªbym zªo»y¢ Panu Profesorowi Krzysztofowi Diksowi, promotorowi i wielkiemu entuzja±cie algorytmiki, za jego niewyczerpan¡ cierpliwo±¢ i okazane mi zaufanie. Chciaªbym podzi¦kowa¢ dr. Wojciechowi Jaworskiemu za cenne rady i dyskusje, które cho¢ nieliczne, okazaªy si¦ brzemienne w skutkach. Ma¢kowi D¡browskiemu, Sean-owi O'Riain-owi oraz Šukaszowi Porwolowi za wszelk¡ pomoc jak¡ od nich otrzymaªem podczas mojego pobytu w Irlandii. Za pi¦¢ wspaniale sp¦dzonych lat wspólnych studiów  Šukaszowi BieniaszowiKrzywiec, Kubie Š¡ckiemu i Grzegorzowi Ziemia«skiemu. Za nieprzerwane przypominanie mi, co jest naprawd¦ wa»ne  Ma¢kowi Doª¦dze, Joannie Fili, Konradowi Kaplicie i Joannie Karskiej. Za trosk¦, wsparcie i do±wiadczenie  Lucynie i Ryszardowi Leniowskim, kochanym Rodzicom.

Spis tre±ci Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

1. Przetwarzanie j¦zyka naturalnego . . . . . . . . . . . . . . . . . . . . . . . . .

7 7 7 7 8 8 12 13 13 13 13 15 15 16

1.1. Poj¦cia podstawowe . . . . . . . . . . . . . . . . . 1.1.1. Parsowanie . . . . . . . . . . . . . . . . . . 1.1.2. Przetwarzanie pªytkie i gª¦bokie . . . . . . 1.1.3. Przetwarzanie syntaktyczne i semantyczne . 1.1.4. Ogólne informacje o budowie zda« w j¦zyku 1.1.5. Znakowanie ról semantycznych . . . . . . . 1.1.6. Ontologie . . . . . . . . . . . . . . . . . . . 1.2. Dotychczasowe badania . . . . . . . . . . . . . . . 1.2.1. Korpusy Penn Treebank i PropBank . . 1.2.2. Formalizm HPSG . . . . . . . . . . . . . . . 1.2.3. Gramatyka kategorialna . . . . . . . . . . . 1.2.4. Formalizm CCG . . . . . . . . . . . . . . . 1.2.5. Gramatyka Montague . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . angielskim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

2. Podstawowe informacje o istotnych cechach tekstów . . . . . . . . . . . . . 2.1. Przykªady zda« . . . 2.1.1. Korpusy . . . 2.1.2. Zdania z prac 2.1.3. Zdania ró»ne 2.2. Formularze 10-K . . 2.3. Typy semantyczne .

. . . . . . . . . . . . . . naukowych . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

3. Podstawy teoretyczne algorytmu . . . . . . . . . . . . . . . . . . . . . . . . . 3.1. Kraty . . . . . . . . . . . . . . . . . . . . . 3.1.1. Kraty rozdzielne . . . . . . . . . . . 3.1.2. Kraty dwuresztkowe . . . . . . . . . 3.1.3. Wielomiany kratowe . . . . . . . . . 3.1.4. Rozwi¡zywanie równa« w kratach . 3.1.5. Kraty a ontologia . . . . . . . . . . . 3.2. Rachunek lambda . . . . . . . . . . . . . . . 3.2.1. Denicje . . . . . . . . . . . . . . . . 3.2.2. Rachunek lambda z typami prostymi 3.2.3. Polimorzm . . . . . . . . . . . . . . 3

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

19 19 19 19 21 22 24 27 27 28 28 29 30 31 32 32 33 34

3.3. Algorytm CKY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35

4. Sªaba semantyka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37 38 40 41 41 42 47

5. Algorytm parsowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

49 49 50 50 51 51 52 52 53 53 54 59 59

6. Wyniki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

61 61 63 67 69

Podsumowanie i wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

73

Bibliograa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

78

4.1. 4.2. 4.3. 4.4. 4.5. 4.6.

Konstrukcje statyczne . . . . . Zmienne i aplikacja . . . . . . . Wªa±ciwo±ci . . . . . . . . . . . Operatory supremum i inmum Formalna denicja . . . . . . . Klasa j¦zyków rozpoznawalnych

. . . . . .

5.1. Idea algorytmu . . . . . . . . . . 5.2. Rezolucja . . . . . . . . . . . . . 5.2.1. Normalizacja . . . . . . . 5.2.2. Obsªuga kwantykatorów 5.2.3. Speªnialno±¢ . . . . . . . 5.2.4. Graf zale»no±ci . . . . . . 5.3. Analiza zªo»ono±ci . . . . . . . . 5.4. Implementacja . . . . . . . . . . 5.4.1. Architektura . . . . . . . 5.4.2. Wybrane fragmenty kodu 5.4.3. Obsªuga ontologii . . . . . 5.4.4. Uwagi dodatkowe . . . . . 6.1. 6.2. 6.3. 6.4.

. . . . . .

. . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . .

Wyj±cie z algorytmu . . . . . . . . . . Testy ukªadane . . . . . . . . . . . . . Przykªady instancji problematycznych Testy na podstawie formularzy 10-K .

4

. . . . . . . . . . . . . . . . . .

. . . .

. . . . . . . . . . . . . . . . . .

. . . .

. . . . . .

. . . . . . . . . . . .

. . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . .

. . . .

. . . . . .

. . . . . . . . . . . .

. . . .

. . . . . .

. . . . . . . . . . . .

. . . .

. . . . . .

. . . . . . . . . . . .

. . . .

. . . . . .

. . . . . . . . . . . .

. . . .

. . . . . .

. . . . . . . . . . . .

. . . .

. . . . . .

. . . . . . . . . . . .

. . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . . . .

Wprowadzenie Ogromna ilo±c informacji przechowywanych w postaci elektronicznej wymaga sprawnych narz¦dzi przeszukiwania. Na specjaln¡ uwag¦ zasªuguj¡ teksty w j¦zyku naturalnym, gdy» s¡ najwygodniejszym i najbardziej popularnym sposobem wyra»ania, przechowywania i przekazywania informacji przez ludzi. To w j¦zyku naturalnym powstaj¡ wa»ne zestawienia, raporty, korespondencja, ogªoszenia, recenzje, opinie i tym podobne dokumenty. Wszystkie te formy zawieraj¡ dane, istotne z punktu widzenia szerokiej rzeszy u»ytkowników komputerów. Niestety wydobycie potrzebnych informacji z ogólnie nieuporz¡dkowanych zbiorów, nie jest zadaniem ªatwym. Szeroki wachlarz potencjalnych zastosowa« odpowiednio wyselekcjonowanych danych skªania do podj¦cia prób skonstruowania wszechstronnego narz¦dzia, tªumacz¡cego tre±ci napisane w j¦zyku naturalnym na posta¢ zrozumiaª¡ dla komputerów. Otworzy to zupeªnie nowe mo»liwo±ci, od czysto informacyjnych poczynaj¡c, poprzez reklamowe, statystyczne, badawcze, a» po powa»ne, strategiczne projekty biznesowe, czy nawet zwi¡zane z kwestiami bezpiecze«stwa mi¦dzynarodowego. W tym kontek±cie wydaje si¦, »e rozwi¡zania dost¦pne do tej pory jedynie dla bohaterów powie±ci fantastycznych, mog¡ si¦ urzeczywistni¢, a wyszukiwanie precyzyjnej i wiarygodnej informacji w g¡szczu wszechobecnego w internecie chaosu stanie si¦ o wiele efektywniejsze. Celem niniejszej pracy jest zaprojektowanie algorytmu, który potraªby przetworzy¢ tekst napisany w j¦zyku naturalnym charakteryzuj¡cy si¦ skomplikowan¡ struktur¡ zda« i wysokim stopniem poprawno±ci gramatycznej. Bezpo±rednim powodem rozpocz¦cia prac nad problemem byªo zagadnienie wydobywania informacji z formularzy 10-K Ameryka«skiej Komisji Papierów Warto±ciowych (SEC, ang. Securities and Exchange Commision ). Najlepsze z dost¦pnych narz¦dzi zawodziªy przy dªugich i skomplikowanych w budowie sformuªowaniach, wi¦c postanowiªem spróbowa¢ innego podej±cia. W trakcie pracy nad algorytmem sformuªowaªem now¡ teori¦ dotycz¡c¡ opisu znaczenia poszczególnych sªów, fraz i caªych zda« w j¦zyku naturalnym. Na jej podstawie zaprojektowaªem algorytm, który ma du»e szanse sprosta¢ postawionym wymaganiom. Poszczególne etapy pracy zostaªy przedstawione w kolejnych rozdziaªach. W rozdziale pierwszym omówiªem podstawowe zagadnienia zwi¡zane z przetwarzaniem j¦zyka naturalnego. Rozdziaª drugi zawiera przykªady, na podstawie których wskazuj¦ istotne cechy tekstów, które pomogªy mi przy tworzeniu teorii i projektowaniu algorytmu. Narz¦dzia wykorzystywane przy opisie teorii i zasady dziaªania procedury przetwarzania zostaªy opisane w rozdziale trzecim. Najwa»niejszy pomysª tej pracy, sªaba semantyka, zostaª przedstawiony w rozdziale czwartym. Ostatnie dwie cz¦±ci, rozdziaª pi¡ty i szósty dotycz¡ opracowanego algorytmu oraz wyników jego implementacji.

5

Rozdziaª 1

Przetwarzanie j¦zyka naturalnego J¦zyki naturalne, to j¦zyki u»ywane przez ludzi do komunikacji mi¦dzy sob¡. Najcz¦±ciej ewaluowaªy one z biegiem historii (np. polski, angielski, ªacina), ale s¡ te» znane j¦zyki stworzone sztucznie (np. esperanto). Przetwarzanie j¦zyka naturalnego (NLP, ang. Natural Language Processing ) zajmuje si¦ szeroko poj¦tymi algorytmami operuj¡cymi na tych j¦zykach. Robi si¦ to najcz¦±ciej w celu ekstrakcji informacji, jednak s¡ te» inne zastosowania, takie jak sterowanie gªosem, automatyczni tªumacze, czy semantic web. Korzenie NLP si¦gaj¡ poªowy XX wieku, kiedy to Alan Turing zaproponowaª test badaj¡cy sztuczn¡ inteligencj¦ w 1950 roku [58] i do tej pory jest to bardzo dynamicznie rozwijaj¡ca si¦ gaª¡¹ informatyki. Szczegóªowe informacje dotycz¡ce przetwarzania j¦zyków naturalnych mo»na znale¹¢ w ksi¡»kach [9] oraz [39].

1.1. Poj¦cia podstawowe 1.1.1. Parsowanie

Parsowanie jest to proces ukªadania liniowego ci¡gu sªów (lub innych jednostek, np. leksemów) analizowanego tekstu w struktur¦ logiczn¡, najcz¦±ciej poprzez nawiasowanie odpowiednich podwyra»e«. Analogicznie, parser j¦zyka naturalnego to algorytm, który przetwarza zdania tekstu pisanego na drzewa ich rozkªadu, np. które sªowa ª¡cz¡ si¦ w frazy, które stanowi¡ podmiot, a które orzeczenie. Podstawowe podej±cia u»ywaj¡ ró»nego rodzaju gramatyk czytanego j¦zyka, lecz od lat 90 rdzeniem najlepszych programów s¡ metody probabilistyczne. Przykªadem biblioteki zawieraj¡cej taki wªa±nie algorytm parsuj¡cy mo»e by¢ Stanford Parser rozwijany przez The Stanford Natural Language Processing Group na Uniwersytecie Stanford, którego skuteczno±¢ na Penn Treebank (por. roz. 1.2.1) wynosi ponad 85% [33]. 1.1.2. Przetwarzanie pªytkie i gª¦bokie

Algorytmy przetwarzaj¡ce tekst napisany w j¦zyku naturalnym mo»na podzieli¢ na przetwarzaj¡ce pªytko (lub powierzchniowo, ang. shallow ) i przetwarzaj¡ce gª¦boko (ang. deep ). Przetwarzanie gª¦bokie polega na analizie struktury tekstu lub zdania, w przeciwie«stwie do przetwarzania pªytkiego, które najcz¦±ciej polega na metodach statystycznych czy dopasowywaniu wzorców (np. wyra»e« regularnych). Ka»da z nich ma swoje wady i zalety, 7

w szczególno±ci przetwarzanie pªytkie jest du»o szybsze i lepiej sobie radzi z tekstami nieformalnymi czy zawieraj¡cymi du»o bª¦dów (np. komentarzami internetowymi), ma jednak gorsze wyniki przy zdaniach dªugich lub zªo»onych. Przetwarzanie gª¦bokie jest du»o dokªadniejsze i potra wydoby¢ znacznie wi¦cej informacji z tego samego tekstu, cz¦sto jednak wychodzi poza mo»liwo±ci obliczeniowe dzisiejszych komputerów (pojedyncze skomplikowane zdanie mo»e by¢ przetwarzane w czasie jednej godziny lub nawet dªu»ej). 1.1.3. Przetwarzanie syntaktyczne i semantyczne

Przetwarzanie syntaktyczne i semantyczne ró»ni¡ si¦ w sposobie traktowania sªów z j¦zyka i ró»nica ta jest analogiczna do ró»nicy pomi¦dzy analiz¡ syntaktyczn¡ i semantyczn¡ j¦zyków programowania. Niestety zdarza si¦, »e jest bardzo trudna do uchwycenia, gdy» w wielu miejscach rozkªad syntaktyczy pokrywa si¦ z rozkªadem semantycznym. Rozwa»my zdanie Choose the form of payment. Rozkªady syntaktyczny i semantyczny tego zdania mógªby wygl¡da¢ na przykªad nast¦puj¡co: XXX  X  X

N

V

( ((((

V

!aa !! a ! a

N

P

ZZ

"b " b

Choose the

form

of

Choose

((hhhh

N

R

!aa a !!

the

form

hhh

of

payment

payment

Je»eli natomiast potraktujemy fraz¦ the form of syntaktycznie, jako zbitk¦ wyrazów (por. roz. 1.1.4), to rozkªad semantyczny i syntaktyczny nie b¦d¡ si¦ wcale ró»ni¢. 1.1.4. Ogólne informacje o budowie zda« w j¦zyku angielskim

J¦zyk angielski nale»y do grupy j¦zyków zachodnio-germa«skich, jednak liczne naleciaªo±ci z ªaciny, francuskiego, j¦zyków norma«skich i skandynawskich spowodowaªy spore zmiany w jego strukturze. W budowie zda« dominuje porz¡dek SVO (ang. subject verb object ), ale zdarzaj¡ si¦ te» przykªady innych:  Is this your car? ,  Once upon a time, there was a man, who. . . ,  The bird watched the cat and so did the dog. W j¦zyku wyst¦puj¡ cztery gªówne czasy: tera¹niejszy (ang. present ), przeszªy (ang. past ), przyszªy (ang. future ) i tryb przypuszczaj¡cy (dosªownie czas przyszªy w przeszªo±ci, ang. future in the past ), z których ka»dy posiada cztery odmiany (ang. simple, continuous, perfect, perfect continuous ). Rozró»nia si¦ pi¦¢ form czasowników: bezokolicznik (np. to be ), form¦ podstawow¡ (np. am, are, is ), przeszª¡ (np. was, were ), perfektu (np. been ) i gerundium (np. being ). Odmiana czasowników przez osoby wyst¦puje, ale tylko dla by¢ (to be ) pojawiaj¡ si¦ znaczne ró»nice, pozostaªe czasowniki zmieniaj¡ si¦ w formie jedynie dla trzeciej osoby liczby pojedynczej. W j¦zyku angielskim istniej¡ wprawdzie trzy przypadki: mianownik, dopeªniacz i celownik/biernik, ale odmiana przez nie jest bardzo ograniczona. W peªni odmieniaj¡ si¦ tylko zaimki, natomiast pozostaªe cz¦±ci mowy ró»ni¡ si¦ tylko w liczbie mnogiej oraz w przypadku dopeªniacza. To wszystko sprawia, »e gramatyka j¦zyka angielskiego jest do±¢ maªo elastyczna. 8

Przegl¡d gramatyki Cz¦±ci zdania w j¦zyku angielskim mo»na podzieli¢ nast¦puj¡co1 : podmiot (S, ang. subject ), orzeczenie (V, ang. verb,predicate ), dopeªnienie (O, ang. object ), uzupeªnienie (C, ang. complement ), okolicznik (A, ang. adverbial ). Budowa zdania zale»y wprawdzie od trybu, ale dla okre±lonych rodzajów czasownika przewa»aj¡ nast¦puj¡ce schematy:  czasowniki nieprzechodnie  SV,  czasownik

by¢

(ang.

to be )

 SVC, SVA,

 czasowniki przechodnie  SVO, SVOO, SVOC i SVOA. Poszczególne role w zdaniu przyjmuj¡ wyra»enia, których w j¦zyku angielskim jest pi¦¢: wyra»enie rzeczownikowe (ang. noun phrase ), czasownikowe (ang. verb phrase ), wyra»enie przymiotnikowe (ang. adjecitval phrase ), wyra»enie przysªówkowe (ang. adverbial phrase ) oraz wyra»enie przyimkowe (ang. prepositional phrase ). Budowa tych wyra»e« ma najwi¦kszy wpªyw na struktur¦ zdania, dla czytelno±ci przedstawiono j¡ w formie diagramów2 .

. . . modalny (can, may, will, should ) . . . perfektu (have, has, had, having ) Czasownik

. . . gerundium

posiªkowy. . .

(are, is, was, been, being ) . . . strony biernej (am, is, were, been, being )

Wyra»enie czasownikowe

. . . pomocniczy (do, does, did, done, doing ) Gªowa

Czasownik (see, walk, go )

wyra»enia

Premodykator  wyra»enie przysªówkowe ( ) Przymiotnik ( Gªowa wyra»enia czynny ( Imiesªów Imiesªow Imiesªow bierny ( extremely, very happily, too

rich, poor, beautiful

Wyra»enie przymiotnikowe

) ) )

)

interesting

faded, tired

Postmodykator

Przysªówek ( Wyra»enie przyimkowe ( ) Uzupeªnienie Konstrukcja bezokolicznikowa ( )

enough, indeed

for me

to see

1

W j¦zyku polskim uzupeªnienie jest zawarte w poj¦ciu dopeªnienia, natomiast dodatkowo wyró»nia si¦

przydawk¦ (ang. attribute ).

2

Diagramy, jak i wi¦kszo±¢ przedstawionych w tej cz¦±ci informacji zostaªa opracowana na podstawie

ksi¡»ki Daniela Kiesa pt. Modern English Grammar [32].

9

Premodykator  wyra»enie przysªówkowe ( ) Gªowa wyra»enia Przysªówek ( ) Przysªówek ( ) Wyra»enie przyimkowe Postmodykator ( ) Uzupeªnienie Konstrukcja bezokolicznikowa ( ) extremely, quite, too, very

Wyra»enie przysªówkowe

honestly,frankly,brightly enough, indeed

for me

to see

Przyimek pojedynczy (under, with, to, in, for, by )

Przyimek

Przyimek zªo»ony (next to, instead of, due to )

Wyra»enie

Przysªówek (now, then )

przyimkowe

Wyra»enie rzeczownikowe (her, the books ) Uzupeªnienie

Konstrukcja imiesªowowa czynna (winning the election )

Zdanie podrz¦dne

Zdanie wzgl¦dne (whoever wants it )

Kwantykator (all, both, half ) Krotno±¢ (double, twice )

Przedokre±lnik

Uªamek (one-third, one-fth ) Przedimek

Przedimek okre±lony (the ) Przedimek nieokre±lony (a, an ) Zaimek wskazuj¡cy (that, those )

Okre±lnik

Okre±lnik wªa±ciwy

Zaimek

Zaimek osobowy (my, her ) Zaimek nieokre±lony (any, some ) Zaimek pytajny (which, what ) Okre±lnik negatywny (no )

Numeraª Pookre±lnik

Liczebnik (one, two, three ) Liczebnik porz¡dkowy (rst, second ) Kwantykator (few, several, much )

Rzeczownik (science [ction] ) Wyra»enie rzeczownikowe

Premodykator

Gªowa wyra»enia

Wyra»enie przymiotnikowe (very big ) Imiesªów czynny (-ing, walking )

Imiesªów

Imiesªów bierny (-ed, painted )

Rzeczownik (Marie, information, children ) Przymiotnik (rich,poor,beautiful ) Zaimek osobowy (I, she, they ) Wyra»enie przyimkowe (in the afternoon ) Zdanie wzgl¦dne (who was reading that book )

Postmodykator

Konstrukcje imiesªowowe czynne (writing a letter )

Zdanie podrz¦dne

Konstrukcje imiesªowowe bierne (shocked by the news ) Konstrukcje bezokolicznikowe (to see ) Uzupeªnienie (than I, than that )

10

Przegl¡d podstawowych tematycznych ról sªów W lingwistyce i dziedzinie przetwarzania j¦zyka naturalnego wykorzystuje sie poj¦cie ról tematycznych (ang. thematic role ). Nie nale»y ono do ±cisªych terminów i jest u»ywane w wielu kontekstach. Ogólnie mo»na by je okre±li¢ jako rol¦, któr¡ mo»e speªnia¢ grupa wyrazów wzgl¦dem pewnego, wyró»nionego czasownika. Niestety, nie wiadomo jak zdeniowa¢ j¡ formalnie, ani nie ma ogólnie uznanej listy takich ról [26]. Z drugiej strony, role tematyczne s¡ bardzo u»yteczne, co pokazuje skuteczno±¢ analizatorów opartych o znakowanie ról semantycznych (ang. semantic role labeling, por. roz. 1.1.5). Spo±ród wielu list ról i znacze« pasuj¡cych do ró»norakich denicji, mo»na wyró»ni¢ dwana±cie gªównych, które ze zwi¦kszon¡ cz¦sto±ci¡ przewijaj¡ si¦ w artykuªach naukowych: rola agent

znaczenie aktywny wykonawca czynno±ci

author

pasywny wykonawca czynno±ci

instrument theme patient benefactive experiencer source goal locative reason purpose

przyrz¡d u»yty do wykonania czynno±ci

przykªad

John broke the window. Liquor killed him.

Ellen opened the door with a key. jednostka, której dotyczy czynno±¢ lub wydarzenie (pozostaje niezmieniona) John rolled the ball across the oor. jednostka, na której wykonywana jest czynno±¢ (mo»e zosta¢ zmieniona) The man cleaned the car. jednostka, która zyskuje na czynno±ci lub wydarzeniu Mary made lunch for John. jednostka, która odczuwa czynno±¢ lub wydarzenie John felt happy. ¹ródªo z którego jednostka pochodzi Mary walked out from the room. cel do którego jednostka d¡»y John went home. specykacja miejsca w którym czynno±¢ lub wydarzenie jest umiejscowione The cloud oated the sky. powód wykonania czynno±ci lub zaj±cia zdarzenia He ran from fear. cel u»ycia jednostki I use it for shing.

Wyra»enia wielowyrazowe Wyra»enia wielowyrazowe s¡ to ci¡gi sªów tekstu pisanego w j¦zyku naturalnym, które w swoim zestawieniu posiadaj¡ inne znaczenie (np. bardziej specyczne, jak trac light czy zupeªnie ró»ne, jak kick the bucket ) ni» to wynikaªo by ze znaczenia samych sªów. Jest to jeden z wi¦kszych problemów automatycznego przetwarzania tekstów, gdy» podlegaj¡ one innym reguªom skªadniowym i semantycznym ni» reszta tekstu. Ich podziaª na podstawie budowy i zachowania w zdaniu [51] wraz z charakterystycznymi cechami zostaª przedstawiony w poni»szej tabeli: 11

 Frazy zleksykalizowane

 staªe:

in short, by and large, ad hoc, ad libitum

nie podlegaj¡ modykacjom (np. in very short)

 ª¡czliwe

spill the beans (spill = reveal, beans = secret);  nierozkªadalne: kick the bucket, shoot the breeze (nie da si¦ powiedzie¢ the breeze was shot);  rzeczowniki zªo»one: car park;  nazwy wªasne: San Francisco;

 rozkªadalne:

 swobodne

look up (mo»na dowolnie modykowa¢);  poª¡czenia: make a mistake, ale nie do a mistake.  czasowniki zªo»one:

 Frazy zinstytucjonalizowane

 semantycznie i syntaktycznie niczym si¦ nie ró»ni¡,  natomiast statystycznie s¡ idiomami,

trac light, ale nie trac director, intersection regulator,  dodatkowo trac light (sygnalizacja) mogªoby oznacza¢ ±wiatªo do przekazywania

 np.

informacji pomi¦dzy uczestnikami ruchu,

 istnienie wyra»enia turn signal (kierunkowskaz) ogranicza trac light do znaczenia sygnalizacja.

1.1.5. Znakowanie ról semantycznych

Znakowanie ról semantycznych (ang. Semantic Role Labeling ) to proces polegaj¡cy na okre±laniu i przypisywaniu frazom w zdaniu ról semantycznych (np. wykonawca, instrument, benecjent) wzgl¦dem odpowiadaj¡cego im czasownika. Na przykªad

[A0 John] [V gave] [A1 Mary] [A2 the book] [TMP on Christmas]

gdzie A0 reprezentuje daj¡cego, V reprezentuje czasownik, A1 reprezentuje benecjenta, A2 reprezentuje obiekt dawany, natomiast TMP reprezentuje chwil¦, w której czynno±¢ nast¡piªa. Jest to wa»ny problem w dziedzinie przetwarzania j¦zyka naturalnego, posiadaj¡cy liczne zastosowania, przede wszystkim w wydobywaniu informacji. Niestety jest to zadanie trudne; dotychczasowe metody s¡ powolne, a i tak nie charakteryzuj¡ si¦ wysok¡ skuteczno±ci¡. Z aktualnych implementacji na uwag¦ zasªuguje projekt rozwijany przez Cognitive Computation Group3 na Uniwersytecie Illinois w Urbana-Champaign [48]. 3

http://cogcomp.cs.illinois.edu/

12

1.1.6. Ontologie

Ontologia to dziaª lozoi zajmuj¡cy si¦ m.in istot¡ bytu, istnienieniem przedmiotów, a tak»e natur¡ rzeczywisto±ci. Ontologowie rozwa»aj¡ o jakich jednostkach mo»na powiedzie¢, »e istniej¡ i jak one mog¡ by¢ klasykowane w grupy i hierarchie. W informatyce i teorii informacji ontologia jest rozumiana jako wybór poj¦¢, znacze« i relacji, za pomoc¡ których reprezentowana jest wiedza systemu. Je±li poj¦cia (ang. concept ), obiekty i inne jednostki, które nale»¡ do opisywanego fragmentu rzeczywisto±ci, a tak»e relacje, które wyst¦puj¡ pomi¦dzy nimi, okre±limy mianem upoj¦ciowienia (ang. conceptualization ), to jego formalne przedstawienie nazwiemy wªa±nie ontologi¡ [28]. Wa»nym terminem dotycz¡cym ontologii s¡ tzw. kategorie ontologiczne, w które s¡ organizowane poj¦cia nale»¡ce do ontologi. Do jednej kategorii mo»e nale»e¢ wiele poj¦¢ (w tym podkategorii), a dwa poj¦cia A i B nale»¡ do tej samej (pewnej) kategorii je»eli dla pewnego zdania P(A), P(B) te» jest zdaniem. W informatyce, jedyn¡ kategori¦ najogólniejsz¡ (tak¡, która zawiera wszystkie poj¦cia), je»eli istnieje, zwyczajowo nazywa si¦ Thing, natomiast kategori¦ do niej dualn¡, najbardziej szczegóªow¡ (tak¡, która zawiera si¦ w ka»dej innej kategorii) nazywa si¦ Nothing.

1.2. Dotychczasowe badania 1.2.1. Korpusy Penn Treebank i PropBank

Penn Treebank [40] jest du»ym (ponad 4.5 miliona sªów) korpusem j¦zyka angielskiego oznakowanego cz¦±ciami mowy (POS, ang. part-of-speech ) i nawiasowaniem syntaktycznym. Rozpocz¦ty w 1989 roku, szeroko rozpowszechniony 4 , jest u»ywany do tej pory, mimo »e od ko«ca lat 90 nie jest ju» rozwijany. PropBank [44] jest ci¡gle rozszerzanym5 korpusem j¦zyka angielskiego zbudowanym na bazie Penn Treebank. R¦czne dodane oznaczenia, poza cz¦±ciami mowy i nawiasowaniem, zawieraj¡ dodatkowo role semantyczne fraz u»ytych w zdaniu. Ponadto zaª¡czona jest lista czasowników zawieraj¡ca opis ich argumentów. Jak pisz¡ autorzy: Otrzymany zbiór danych mo»e si¦ wydawa¢ niekompletny, gdy» nie zawiera koreferencji, kwantykacji i innych fenomenów wysokich rz¦dów, ale tak»e wyczerpuj¡cy w tym, »e pokrywa wszystkie przypadki wszystkich czasowników u»ytych w korpusie i pozwala na wyliczanie reprezentatywnych statystyk. 1.2.2. Formalizm HPSG

Head-Driven Phrase Structure Grammar to teoria modeluj¡ca j¦zyk naturalny za pomoc¡ ukªadu wi¦zów, w której kluczow¡ rol¦ peªni¡ typowane wªa±ciwo±ci. Zapocz¡tkowana przez Carla Pollarda i Ivana A. Saga w 1987 na podstawie Generalized Phrase Structure Grammar, zostaªa uporz¡dkowana w 1994 roku [47]. Skªada si¦ z dwóch cz¦±ci: ustrukturyzowanej reprezentacji kategorii gramatycznych oraz zbioru wi¦zów charakteryzuj¡cych zale»no±ci panuj¡ce w j¦zyku [38]. Przykªadowy opis sªowa put mógªby wygl¡da¢ nast¦puj¡co6 : 4

Serwisy CiteSeerX (http://citeseerx.ist.psu.edu) oraz ACM Portal (http://portal.acm.org) podaj¡

odpowiednio po 1341 oraz 702 cytowa«.

5 6

Stan na rok 2010. Ten i nast¦pny przykªad zostaªy zaczerpni¦te z [38].

13

 PHON             S|L         







"

HEAD      VAL

   CAT            CONT  

7

verb

#

AUX   SUBJ <  COMPS <   put-relation   PUTTER 1   THING-PUT 2   DESTINATION 3

4

NP 1 >

5

NP 2 ,

6

PP 3

           >            

Lingwistyczne wªasno±ci wyrazu zostaªy umieszczone w sekcji CATEGORY, z której mo»emy wyczyta¢, »e put jest czasownikiem (ang. verb ), którego podmiotem jest wyra»enie rzeczownikowe (NP, ang. Noun Phrase ), a dopeªnieniami s¡ wyra»enie rzeczownikowe i wyra»enie przyimkowe (PP, ang. Preposition Phrase ). Wªa±ciwo±ci semantyczne opisane w sekcji CONTENT przypisuj¡ sªowu put relacj¦ put-relation wraz z odpowiednimi funkcjami, które s¡ poª¡czone z reszt¡ opisu za pomoc¡ przypisanych im numerów. Skrót S|L odpowiada SYNSEM|LOCAL co znaczy lokalna cz¦±¢ wªasno±ci syntaktyczno-semantycznej. Odno±niki o numerach 4,5,6,7 ª¡cz¡ struktur¦ z reszt¡ tekstu, co wida¢ na przykªadowym rozkªadzie zdania John put a book on the table korzystaj¡cym z HPSG7 (opis czasownika put nie zostaª powtórzony ze wzgl¦dów estetycznych): S



 HEAD 7  "   SYNSEM|LOC|CAT  VAL SUBJ  COMPS

 #    

(((hhhhhh (((( hhh ( ( hhh ( ((

VP

NP

"

PHON



 HEAD 7  "   SYNSEM|LOC|CAT VAL SUBJ  COMPS

#

SYNSEM 4

((hhhh hhhh (((( ( ( ( hhh hh ((((

John

V

"

NP

PHON



S|L

[· · · ]

#

" # PHON SYNSEM 5

put 7

 #  < 4 NP>   

a book

PP

"

PHON SYNSEM 6 on the table

Przykªadem parsera korzystaj¡cego z HPSG mo»e by¢ program Enju rozwijany na wydziale informatyki

Uniwersytetu w Tokyo,

http://www-tsujii.is.s.u-tokyo.ac.jp/enju/.

14

#

1.2.3. Gramatyka kategorialna

Wymy±lona przez polskiego logika, Kazimierza Ajdukiewicza w 1934 roku [7, 8], pó¹niej rozwini¦ta przez Yehoshua'e Bar-Hillel w 1953 oraz Joachima Lambeka w [35], gramatyka kategorialna (CG, ang. Categorial Grammar ) jest systemem formalnym, który uchwyca relacje pomi¦dzy kategoriami (por. roz. 1.1.6) za pomoc¡ zale»no±ci funkcyjnych. Dla przykªadu, je»eli gramatyka generuj¡ca wyra»enia dla czasowników przechodnich podana w BNF wygl¡daªaby nast¦puj¡co: S !aa !! a

VP

NP

S ::= NP VP VP ::= TV NP

John

TV ::= {like, see, . . .}

Q  Q

TV

NP

likes

Mary

to analogiczna gramatyka w CG sprowadza si¦ do8 : like, see, . . . = (NP 7→ S) ←[ NP natomiast wyprowadzenie przeksztaªca si¦ w:

likes Lex (NP 7→ S) ←[ NP NP 7→ S S

John Lex NP

Mary Lex NP >App App X

Y Y 7→ X C X ←[ Z

X 7→ Y Y 7→ Z T Y ←[ (X 7→ Y)

X f(1, 0, . . . , 0)

f(x1 , . . . , xh−1 , 0, . . .) ? g(x1 , . . . , xh−1 , 0, 1, . . .) ≤ xh

xh ≤ g(x1 , . . . , xh−1 , 1, . . .) > f(x1 , . . . , xh−1 , 1, 0, . . .)

f(x1 , . . . , xn−1 , 0) ? g(x1 , . . . , xn−1 , 0) ≤ xn

xn ≤ g(x1 , . . . , xn−1 , 1) > f(x1 , . . . , xn−1 , 1)

Wynika z tego, »e istnieje algorytm wielomianowy ze wzgl¦du na liczb¦ zmiennych, który sprawdza speªnialno±¢ równania, a nawet podaje rozwi¡zanie. Niestety problem ukªadu równa« lub nierówno±ci jest NP-zupeªny ju» dla kraty dwuelementowej {0, 1}. Niech L b¦dzie krat¡ dwuelementow¡ L = h{0, 1}, ∨, ∧, 0, 1i, P(x1 , . . . , xn )  dowoln¡ formuª¡ logiczn¡ w postaci CNF, a P 0 (x1 , y1 , . . . , xn , yn )  formuª¡ logiczn¡ utworzon¡ z P poprzez syntaktyczn¡ zamian¦ literaªów ¬xk na yk . Wtedy P jest speªnialna wtedy i tylko wtedy, gdy speªnialny jest ukªad równo±ci

P 0 (x1 , y1 , . . . , xn , yn ) = 1 x 1 ∨ y1 = 1 x 1 ∧ y1 = 0 .. . x n ∨ yn = 1 x n ∧ yn = 0 Z tego powodu algorytm przedstawiony w rozdziale 5 b¦dzie korzystaª z metod heurystycznych. 3.1.5. Kraty a ontologia

Standardowo hierarchia klas w ontologii jest grafem skierowanym i acyklicznym (DAG, ang. Directed Acyclic Graph ) z super-¹ródªem i super-uj±ciem, wobec czego w naturalny sposób posiada struktur¦ kraty ograniczonej. W tej pracy korze«, czyli superkoncept wszystkich poj¦¢ (Thing ) b¦dzie okre±lany jako element najwi¦kszy, natomiast poj¦cie do niego dualne (Nothing ) jako element najmniejszy. Dalej ∨ (supremum) b¦dzie operacj¡ najni»szego wspólnego przodka3 (LCA), a ∧ najwy»szego wspólnego potomka (GCD). Poniewa» algorytm z rozdziaªu 5 b¦dzie potrzebowaª, aby hierarchia poj¦¢ ontologii byªa krat¡ rozdzieln¡, zostanie ona uzupeªniona o dodatkowe elementy, tak aby dla ka»dych dwóch poj¦¢ istniaªo ich bezpo±rednie inmum. Na przykªad, gdyby w ontologii istniaªy obiekty ‘winka, Skarbonka oraz ObiektCzerwony, to zostan¡ dodane obiekty [Skarbonka,‘winka], [ObiektCzerwony,‘winka], [Skarbonka,ObiektCzerwony] i [Skarbonka,‘winka,ObiektCzerwony]. Szczegóªy implementacyjne zostan¡ omówione w cz¦±ci 5.4.3. 3

W tym przypadku najni»szy wspólny przodek to najbardziej szczegóªowe poj¦cie, które jest superkoncep-

tem ka»dego z argumentów.

31

3.2. Rachunek lambda Rachunek lambda to formalizm zapocz¡tkowany przez Alonzo Churcha w latach 30 XX wieku, którego centralnym poj¦ciem jest funkcja. Rozwijany w celach stworzenia nowych formalnych podstaw matematyki, okazaª si¦ wewn¦trznie sprzeczny [18]. Pomimo tego, notacja i semantyka λ-rachunku, wraz z rozwini¦tym pó¹niej rachunkiem lambda z typami prostymi (ang. simply typed λ-calculus ) [19] staªa si¦ podstaw¡ j¦zyków programowania nazywanych funkcyjnymi, w tym Lispa, MLa i Haskella. 3.2.1. Denicje

Niech V = {x, y, z, . . .} b¦dzie niesko«czonym, przeliczalnym zbiorem zmiennych.

Denicja 3.2.1  x

Wyra»eniem nazwiemy ci¡g znaków, który jest postaci

je»eli

x∈V

 (λx.M)

je»eli

 (MN)

je»eli i

x∈V M

i

i

N

M

jest wyra»eniem

s¡ wyra»eniami.

Aby upro±ci¢ notacj¦, stosuje si¦ dodatkowe reguªy zapisu:  opuszcza si¦ niepotrzebne nawiasy, przy czym aplikacja ª¡czy si¦ w lewo, ((MN)P) = MNP, ale (M(NP)) = M(NP), λx.(λy.(λz.MNP)) = λx.λy.λz.MNP;  λ wi¡»e tak daleko, jak to mo»liwe, (λx.MNP) = λx.MNP, ale (λx.MN)P nie da si¦ upro±ci¢;  skleja si¦ powtarzaj¡ce si¦ λ, λx.λy.λz.MNP = λxyz.MNP. Zbiór wszystkich wyra»e« b¦dzie oznaczany T . Wyra»enia rozwa»a si¦ z dokªadno±ci¡ do nazw zmiennych, tzn. λxy.x ∼ λyz.y, a zbiór rozwa»anych termów jest tak naprawd¦ zbiorem T /[∼]. Proces zamiany nazw zmiennych okre±lany jest mianem α-konwersji.

Denicja 3.2.2

Zmienne wolne

cyjne wzgl¦dem budowy

FV

wyra»enia

M

to zbiór, który jest okre±lony rekuren-

M:

 FVx = {x}  FVλx.M = FVM − {x}  FVMN = FVM ∪ FVN

Denicja 3.2.3 funkcj¦

Niewi¡»¡cym podstawieniem wyra»enia

SxM : T → T

okre±lon¡ przez:

 SxM (x) = M  SxM (y) = y  SxM (NP) = SxM (N)SxM (P) 32

M

na zmienn¡

x

nazwiemy

 SxM (λx.N) = λx.N  SxM (λy.N) = λy.SxM (N)

Denicja 3.2.4 β-redukcj¡ staci

(λx.M)N

je»eli

y∈ / FVM .

nazwiemy transformacj¦, która dowolne podwyra»enie poSxN (M).

przeksztaªca na

Niech y ∈ / FVM , wtedy (λxy.x)MN →β (λy.M)N →β M, lub w skrócie (λxy.x)MN →∗β M (symbol ∗ oznacza dowoln¡ liczb¦ kroków redukcji). Rachunek lambda jest konuentny wzgl¦dem β-redukcji, tzn. je»eli A →∗β B i A →∗β C, to istnieje takie D, »e B →∗β D i C →∗β D [20]. Nie jest niestety ani silnie, ani sªabo normalizowalny, tzn. istniej¡ takie wyra»enia, które nie posiadaj¡ postaci normalnej (takiej, z której nie da si¦ wykona¢ »adnej redukcji). Przykªadem mo»e by¢ wyra»enie Ω = (λx.xx)(λx.xx), które redukuje si¦ do siebie samego. Aby nie dopuszcza¢ do takich patologicznych sytuacji, Church wprowadziª do λ-rachunku typy proste. 3.2.2. Rachunek lambda z typami prostymi

Niech A b¦dzie zbiorem typów atomowych. Wtedy dowolne τ ∈ A nazywamy typem, oraz je»eli α i β s¡ typami, to wyra»enie (α → β) te» jest typem. Zb¦dne nawiasy s¡ opuszczane, przy czym operator → ª¡czy w prawo, tzn. ((α → α) → (α → α)) = (α → α) → α → α. Niech VA b¦dzie zbiorem zmiennych indeksowanych typami zbudowanymi na podstawie typów atomowych A, tzn. je»eli A = {τ, σ}, wtedy VA = {xτ , yτ , zτ , . . . , xσ , yσ , zσ , . . . , xτ→τ , . . . , xτ→σ , . . . , xσ→τ . . . , xσ→σ , . . . , xτ→τ→τ , . . .}. Wtedy wyra»eniom zbudowanym na bazie zmiennych z VA mo»na przypisa¢ typy, wedªug reguª  xα jest typu α,  je»eli M jest typu β, to (λxα .M) jest typu α → β,  je»eli M jest typu α → β i N jest typu α, to (MN) jest typu β.  wyra»enia, które nie posiadaj¡ typu uwa»amy za niepoprawne. Dla przykªadu wyra»enie (λxτ .xτ xτ ) jest niepoprawne, gdy» nie posiada typu (poniewa» xτ xτ nie posiada typu). Znowu (λxτ .xτ→τ xτ ) posiada typ τ → τ, ale xτ 6= xτ→τ s¡ ró»nymi zmiennymi, w szczególno±ci FV(λxτ .xτ→τ xτ ) = {xτ→τ }. Gdy b¦dziemy rozwa»a¢ tylko wyra»enia, dla których typ jest okre±lony, to taki system b¦dzie silnie normalizowalny, tzn. ka»de wyra»enie b¦dzie posiadaªo posta¢ normaln¡ [55]. Wªasno±¢ silnej normalizacji w poª¡czeniu z konuencj¡ daje bardzo po»¡dan¡ w informatyce wªasno±¢, a mianowicie warto±¢ wyra»enia nie zale»y od kolejno±ci jego obliczania. Niestety, silna normalizacja implikuje te» brak zupeªno±ci w sensie Turinga. Ciekaw¡, cho¢ niezwi¡zan¡ wªasno±ci¡ jest odpowiednio±¢ pomi¦dzy rachunkiem lambda z typami prostymi, a dowodami w logice intuicjonistycznej, zauwa»ona przez Haskella Curry i Williama Alvina Howarda. Wraz z rozszerzeniem [36] o kategorie kartezja«sko-domkni¦te, zwana jest teraz popularnie odpowiednio±ci¡ Curry'ego-Howarda-Lambeka. Wi¦cej informacji na temat typowanego rachunku lambda i jego wariantów mo»na znale¹¢ w [12]. 33

3.2.3. Polimorzm

Polimorzm pojawia si¦ w informatyce w wielu kontekstach, a najwa»niejsze z nich to: polimorzm w programowaniu obiektowym4 , ad-hoc polimorzm5 oraz polimorzm parametryczny, którym chciaªbym si¦ zaj¡¢ w tej cz¦±ci. Poniewa» jest to temat bardzo szeroki, zagadnienie to b¦dzie tutaj zaledwie naszkicowane. Rozwa»my ci¡g termów λxτ .xτ , λxσ .xσ , λxτ→τ .xτ→τ ,. . . W oczywisty sposób termy te ª¡cz¡ si¦ ze sob¡, jednak w rachunku lambda z typami prostymi nie da si¦ tego wyrazi¢. Polimorzm parametryczny wprowadza zmienne typowe (parametry), które znacznie uªatwiaj¡ sytuacj¦, np. poprzednia rodzina mogªaby by¢ przedstawiona jako ∀α λxα .xα , a rodzina termów o kodzie λxy.x jako ∀αβ λxα yβ .xα . Trzeba zaznaczy¢, »e sygnatury ∀αβ (α → α) → β → β i ∀α (α → α) → ∀β β → β s¡ izomorczne tzn. je»eli kod pasuje do pierwszej sygnatury, to pasuje te» do drugiej. Znowu sygnatury ∀αβ (β → α) → α oraz ∀α (∀β β → α) → α (kwantykator wyst¦puje po lewej, kontrawariantnej stronie operatora →) izomorczne nie s¡. Na przykªad funkcja λx.xx mogªaby mie¢ drug¡ z wymienionych sygnatur, ale nie istnieje kod, o sygnaturze pierwszej6 . Warto zwróci¢ uwag¦ tak»e, »e gdyby istniaªa funkcja f o pierwszej sygnaturze7 f : ∀αβ (β → α) → α, to f(λx.x) byªoby poprawnym wyra»eniem typu α. Z drugiej strony wyra»enie g(λx.x) dla g : ∀α (∀β β → α) → α nie posiada typu, gdy» β wyciekªaby poza zakres kwantykatora, którym jest zwi¡zana. Zaskakuj¡cym faktem mo»e by¢, »e w wielu przypadkach z typu gªównego8 funkcji da si¦ odtworzy¢ tre±¢ funkcji, np. program Lennarta Augustssona Djinn 9 potra z typu

callCC : ∀abr ((a → (b → r) → r) → (a → r) → r) → (a → r) → r odtworzy¢ kod (po zmienieniu nazw zmiennych)

callCC = λ f k . f (λ x y . k x)(λ z . k z) Zagadnienie to wi¡»e si¦ z systemami wspomagania dowodzenia10 , typami zale»nych (ang. dependent types ) i izomorzmem Curry'ego-Howarda-Lambeka. Temat polimorzmu zostaª szeroko opisany w literaturze [41, 17, 12, 56]. Warta uwagi jest praca [60], w które zawarto pewne praktyczne aspekty tego zagadnienia.

4

Polimorzm w programowaniu obiektowym oznacza w uproszczeniu mo»liwo±¢ podstawiania instancji

jednej klasy w miejsce innej, wi¡»e si¦ to z zagadnieniem dziedziczenia, a tak»e z tzw. duck typing, sposobem typowania dynamicznego.

5

Polimorzm ad-hoc nie ma ±cisªej denicji, w przybli»eniu jest to zestaw technik, które pozwalaj¡ m.in

na rzutowania czy na przeci¡»anie operatorów i nazw funkcji.

6

Formuªa logiczna

∀ a b (b =⇒ a) =⇒ a

nie jest prawdziwa dla

a=

faªsz i

b=

faªsz, a wi¦c z izomorzmu

Curry'ego-Howarda, funkcja o danej sygnaturze nie istnieje.

7

8 9 10

Na przykªad gdyby±my wprowadzili do sytemu warto±¢

nil : ∀ α.α,

Typ gªówny to najogólniejszy typ dla danego ciaªa funkcji.

http://www.augustsson.net/Darcs/Djinn/ Na przykªad Coq, http://coq.inria.fr/.

34

to

λx.nil

byªoby tak¡ funkcj¡.

3.3. Algorytm CKY Algorytm CKY (lub te» CYK, od Cocke-Kasami-Younger) to algorytm parsowania gramatyk bezkontekstowych dziaªaj¡cy w trybie bottom-up. Zostaª opisany w latach 60 XX wieku niezale»nie trzy razy [21, 31, 62]. Czas jego dziaªania wynosi O(kn3 ), gdzie n jest liczb¡ przetwarzanych sªów (tokenów), a k jest rozmiarem gramatyki11 . Idea algorytmu oparta jest na zasadzie programowania dynamicznego. Niech G b¦dzie gramatyk¡ w postaci normalnej Chomskiego, a α1 , . . . , αn danymi wej±ciowymi algorytmu. Kluczow¡ cz¦±ci¡ algorytmu jest tablica dwuwymiarowa trójk¡tna, która w polu (i, j) przechowuje zbiór symboli nieterminalnych, z których mo»na wyprowadzi¢ ci¡g symboli terminalnych αi , . . . , αi+j−1 (zaczynaj¡cy si¦ w i i dªugo±ci j). Na przykªad pole (i, 1) b¦dzie przechowywa¢ wszystkie nieterminale A, dla których (A → αi ) ∈ G. Wyliczenie pola reprezentuj¡cego wyprowadzenie dªugo±ci j korzysta tylko od wyprowadze« mniejszej dªugo±ci (i, j) = {A|(A → BC) ∈ G, B ∈ (i, k), C ∈ (i + k, j − k)}, co prowadzi do prostej implementacji za pomoc¡ trzech p¦tli iteruj¡cych odpowiednio indeksy j, i, k oraz czwartej p¦tli przechodz¡cej reguªy gramatyki. Testy B ∈ (i, k) i C ∈ (i + k, j − k) realizuje si¦ w czasie staªym, zapisuj¡c zbiory symboli w postaci ich wektora charakterystycznego.

S → NP VP NP → JJ NP NP → NP PP NP → DT NN VP → VB NP PP → IN NN Ze wzgl¦du na ªatwo±¢ modykacji, rozszerzenia tego algorytmu maj¡ szerokie zastosowania, w tym do przetwarzania bezkontekstowych gramatyk probabilistycznych (PCFG), gramatyk umiarkowanie kontekstowych, HPSG i innych [34, 25, 22].

11

Trzeba zaznaczy¢, »e podana zªo»ono±¢ dotyczy gramatyk w postaci normalnej Chomskiego lub analogiczO(k2 n3 ) [37].

nych, dla dowolnej CFG zªo»ono±¢ wynosi

35

Rozdziaª 4

Sªaba semantyka Algorytm przedstawiony w rozdziale 5 opiera si¦ na nowym sposobie opisu znacze«, który na potrzeby tej pracy zostanie nazwany sªab¡ semantyk¡. Jest to pomysª autorski i najwa»niejsza ró»nica pomi¦dzy prezentowanym algorytmem, a dotychczas stosowanymi rozwi¡zaniami w dziedzinie przetwarzania j¦zyka naturalnego. Sªaba semantyka przede wszystkim b¦dzie form¡ semantyki j¦zyka naturalnego. Sªowom b¦d¡ przypisywane znaczenia, a te b¦d¡ ª¡czone w znaczenia fraz i wreszcie caªych zda«. Z drugiej strony podstawow¡ jednostk¡ b¦d¡ typy semantyczne, czyli tylko przybli»enia znacze« zamiast zamiast konkretnych poj¦¢. Dla przykªadu zdanie:  A dog ate an apple  b¦dzie miaªo znaczenie wydarzenie polegaj¡ce na tym, »e pewien pies zjadª pewne jabªko, co nie jest zaskakuj¡ce, ale zdanie:  Christopher Columbus discovered America  b¦dzie miaªo znaczenie wydarzenie polegaj¡ce na tym, »e pewien czªowiek odkryª pewne miejsce. Nie jest to jednak problemem, gdy» przy wystarczaj¡co dokªadnej ontologii znaczenie tego zdania mogªoby si¦ przedstawia¢ jako wydarzenie polegaj¡ce na tym, »e pewna osoba z grupy ludzi o nazwisku Krzysztof Kolumb odkryªa pewne miejsce z grupy kontynentów o nazwie Ameryka,

czyli wystarczaj¡co

dokªadnie aby zidentykowa¢ konkretne obiekty. Dodatkowym uzasadnieniem okre±lenia sªaba jest fakt, »e zostanie wprowadzony pewien element syntaktyki. Otó» inaczej b¦dzie traktowane poª¡czenie AB ni» BA. Wywodzi si¦ to st¡d, »e w j¦zyku naturalnym kolejno±¢ wyrazów gra du»¡ rol¦ (np. The man killed the dragon versus The dragon killed the man ). Nie jest to jednak tylko rozró»nienie skªadniowe. Dla przykªadu operacja odejmowania − inaczej traktuje argument lewostronny ni» prawostronny. Mogªoby si¦ wydawa¢, »e przedstawienie − w notacji polskiej jako −(a, b) rozwi¡zuje problem i »e stosowanie notacji inksowej jest tylko tzw. lukrem syntaktycznym. Nie jest to jednak prawda. Gdyby operator odejmowania przyjmowaª zmienn¡ liczb¦ argumentów i z prawej i z lewej strony, to odpowiedni zapis musiaªby je rozró»nia¢, np. ±rednikiem −(a1 , . . . , an ; b1 , . . . , bm ). Wprowadza to jednak sztuczne granice tam, gdzie istnieje naturalny podziaª na lewostronne i prawostronne argumenty1 . 1

Gdyby pomy±le¢ o ontologii jako o klasykatorze argumentów, to ilo±¢ ich rodzajów b¦dzie du»o wi¦ksza,

w dodatku zmienna zale»nie od rozwa»anego operatora. Bior¡c to pod uwag¦, naturalnym pomysªem byªoby wprowadzanie oddzielnych typów semantycznych dla prawych i lewych argumentów.

Rozwi¡zanie to byªo

rozwa»ane, jednak w pewnym sensie zewn¦trzny podziaª na argumenty prawo i lewostronne zdecydowanie zwi¦kszaª czytelno±¢ zapisu.

37

Sªaba semantyka jest syntez¡ wielu zagadnie«, w±ród nich:  gramatyki kategorialnej  z której wywodzi si¦ gªówny pomysª, w szczególno±ci CG da si¦ naturalnie zanurzy¢ w sªab¡ semantyk¦;  gramatyki Montague  która traktuje sªowa jako funkcje;  programowania funkcyjnego  gdy» znaczeniami sªów b¦d¡ programy, a sªaba semantyka jest w rzeczywisto±ci funkcyjnym j¦zykiem programowania zupeªnym w sensie Turinga;  rachunku lambda  poniewa» semantyka tego j¦zyka programowania (sªabej semantyki) b¦dzie w znacznej mierze oparta na rachunku lambda i jego modykacjach;  teorii typów  gdy» przetwarzanymi obiektami b¦d¡ typy. Z tego powodu poszczególne konstrukcje b¦d¡ najpierw przedstawiane intuicyjnie w kolejnych podrozdziaªach, natomiast formalna specykacja caªo±ci znajduje si¦ w cz¦±ci 4.5. Na ko«cu, w punkcie 4.6 zaª¡czona jest przykªadowa gramatyka rozpoznaj¡ca j¦zyk {bn cn dn en , n ≤ 1} oraz wyprowadzenie ci¡gu bbccddee.

4.1. Konstrukcje statyczne Dla obiektów konkretnych takich jak pies lub jabªko przypisanie sªabego znaczenia nie sprawia trudno±ci  w tym przypadku b¦dzie to po prostu najbardziej szczegóªowa kategoria ontologiczna opisuj¡ca dany obiekt. Poniewa» ontologia mo»e zawiera¢ dowolnie abstrakcyjne terminy, wi¦c podobne znaczenie mo»na przypisa¢ równie» czynno±ciom czy okre±leniom i b¦dzie to dalej nazywane znaczeniem podstawowym. Pojedyncze sªowo mo»e posiada¢ wiele znacze« podstawowych, tak jak pojedyncze sªowo mo»e nale»e¢ do ró»nych kategorii gramatycznych. Jednak gdy porównamy znaczenie wyra»e« apple i an apple, to mo»na uzna¢, »e jest ono dosy¢ podobne2 (np. Fruit). W zwi¡zku z tym mo»na byªoby t¡ fraz¦ potraktowa¢ jako aplikacj¦ an(apple) i przypisa¢ an znaczenie f, gdzie f jest jedyn¡ funkcj¡ o sygnaturze f : {Fruit} → {Fruit}. Podobnie mo»na byªoby post¡pi¢ z sªowem go i fraz¡ go back, przypisuj¡c back znaczenie g : {Go} → {Return}. Zauwa»my jednak, »e aplikacja biegnie w tym przypadku jakby w drug¡ stron¦, tzn. trzeba by byªo napisa¢ (go)back. Z tego powodu wprowadzamy funkcje prawostronne i lewostronne oraz takie» same operatory aplikacji3 . Res ←[ Arg oznacza prawostronn¡ (przyjmuj¡c¡ argument z prawej strony) wersj¦ jedynej funkcji o sygnaturze {Arg} → {Res}, natomiast Arg 7→ Res jej lewostronn¡ siostr¦. Wyra»enia te mo»na ª¡czy¢, tzn. (A ←[ B) 7→ A oznacza jedyn¡ funkcj¦ g o sygnaturze g : {f} → {A}, gdzie f jest zdeniowana jako A ←[ B. Odpowiednie wersje aplikacji b¦d¡ zapisywane jako f ≪ Arg i Arg ≫ f, na przykªad: 2 3

Zbyt podobne, aby chcie¢ je rozró»nia¢. Podobie«stwo z notacj¡ z rozdziaªu 1.2.3 jest zamierzone.

38

apple = Fruit an = Fruit ←[ Fruit an ≪ apple = Fruit go = Go back = Go 7→ Return go ≫ back = Return john = Person ate = Person 7→ EventOfEating ←[ Fruit ate ≪ apple = Person 7→ EventOfEating john ≫ ate = EventOfEating ←[ Fruit john ≫ ate ≪ apple = EventOfEating X = ((Y ←[ C) ←[ B) ←[ A X ≪ A = Y ←[ C ←[ B X ≪ A ≪ B = Y ←[ C X≪A≪B≪C=Y Jak zostaªo przedstawione powy»ej, sªowu ate przypisano pewne znaczenie, nie jest to jednak znaczenie podstawowe (nie jest kategori¡ ontologiczn¡). Nazwiemy je znaczeniem pobocznym, pomimo tego, »e to ono tworzy szkielet gramatyki. Uzasadnieniem jest fakt, »e w sªabej semantyce ka»dy wyraz b¦dzie miaª znaczenie podstawowe (cho¢by Unknown), ale nie ka»dy b¦dzie miaª znaczenie poboczne. Dodatkowo znaczenia poboczne b¦d¡ zale»e¢ od znacze« podstawowych, np.

drive = Drive01 | Drive02 | Drive03 Drive01 = (Driver 7→ Process) ←[ Vechicle Drive02 = (Driver 7→ Event) ←[ Object Drive03 = ((Causer 7→ Event) ←[ Feeling) ←[ Patient | ((Causer 7→ Event) ←[ Patient) ←[ Feeling Z czego mo»na wyczyta¢, »e sªowo drive ma 3 znaczenia podstawowe4 , przy czym pierwsze dwa maj¡ po jednym znaczeniu pobocznym5 , a znaczenie trzecie ma dwa znaczenia poboczne6 . W gramatykach zdarzaj¡ si¦ produkcje, które przeksztaªcaj¡ jeden nieterminal na jeden nieterminal np. Actor → Person|Animal|Company|..., co tworzy pewnego rodzaju hierarchi¦. W przypadku sªabej semantyki rozwi¡zane jest to przez ontologi¦, np. gdyby apple byªo sklasykowane jako Apple, natomiast an = Fruit ←[ Fruit, to aplikacja an(apple) byªaby nadal poprawna. Aby by¢ ±cisªym znaczenie Fruit ←[ Fruit trzeba rozszerzy¢ do jedynej funkcji o sygnaturze {x|x ≤ Fruit} → {Fruit}. Dotyczy to równie» wyra»e« zªo»onych, przy 4 5 6

Wybrane znaczenia odpowiadaj¡ kierowaniu, uderzaniu i wprowadzaniu w pewien stan uczucia. Na przykªad John drives a bus i John drove a ball far away. Odpowiednio John drives me mad i John drives mad everyone.

39

czym R1 ←[ A1 ≤ R2 ←[ A2 wtedy i tylko wtedy, gdy R1 ≤ R2 i A2 ≤ A1 (uwaga na zamian¦ kolejno±ci przy argumentach). Podobnie A1 7→ R1 ≤ A2 7→ R2 wtedy i tylko wtedy R1 ≤ R2 i A2 ≤ A1 . Na przykªad najbardziej ogólne funkcje (te, których kategoria jest najbardziej obszerna i zarazem najmniej szczegóªowa) to Nothing 7→ Thing i Thing ←[ Nothing. Šatwo sprawdzi¢, »e otrzymane wyra»enia tworz¡ krat¦ rozdzieln¡, a tak»e ograniczon¡, je»eli si¦ przyjmie, »e Thing jest wi¦ksze i Nothing mniejsze od ka»dego typu (ª¡cznie z funkcyjnym). Sªowem, które szczególnie mogªoby skorzysta¢ na wprowadzonej hierarchii jest spójnik and, gdy» mo»na by mu byªo przypisa¢ znaczenie And = Thing 7→ (Thing ←[ Thing). Powoduje to jednak do±¢ istotny problem, a mianowicie zbyt du»¡ utrat¦ informacji. Dla zwykªych sªów udaje si¦ go prosto rozwi¡za¢ tworz¡c szereg wyra»e« AndFruit = Fruit 7→ Fruit ←[ Fruit. Zauwa»my, »e nie potrzebujemy rozró»nienia na AndAFO = Apple 7→ Fruit ←[ Orange, gdy» poprzednia reguªa mo»e zosta¢ zastosowana dzi¦ki wprowadzonej hierarchii, a otrzymana utrata informacji jest dokªadnie taka, jakiej potrzebujemy7 . Niestety nie rozwi¡zuje to przypadków takich jak John bought an apple and ate it, poniewa» potencjalnie musieliby±my utworzy¢ niesko«czenie wiele reguª dla and (dla A 7→ A, dla A 7→ A 7→ A, . . . ). Problem ten pojawiª si¦ równie» w CCG i zostaª rozwi¡zany poprzez wprowadzenie dodatkowego operatora Φ = X CONJ X (por. roz. 1.2.4), tutaj za± zostanie rozwi¡zany za pomoc¡ polimorzmu.

4.2. Zmienne i aplikacja Wzoruj¡c si¦ na wyra»eniach przedstawionych w rozdziale 3.2.3 wprowadzimy do systemu ` zmienne8 , np. and = α α 7→ α ←[ α. Pomimo oczywistych korzy±ci rozwi¡zanie to posiada pewne minusy. Pierwszym z nich jest pogª¦biaj¡ca si¦ zªo»ono±¢ zagadnienia. Odtworzenie porz¡dku cz¦±ciowego ≤ na termach ze zmiennymi jest du»o trudniejsze, tym bardziej, »e pod zmienne mo»emy podstawia¢ nie tylko wyra»enia statyczne, ale caªe termy równie» zawieraj¡ce zmienne. Samo rozszerzenie relacji ≤ nie jest trywialne i zostanie przedstawione w rozdziale 4.5. ` Drugim problemem s¡ wyra»enia rodzaju a very, dla a = α α ←[ α. Aby nie dopu±ci¢ do takich zbitek wyrazowych, wprowadzamy ograniczenia na zbiory warto±ci jakie mo»e ` przyjmowa¢ zmienna. Np. a = α ∈ [Nothing, Object] α ←[ α. Nazywa si¦ to kwantykacj¡ ograniczon¡ (ang. bounded quantication ) i niestety prowadzi do pewnych powa»nych problemów obliczeniowych, które b¦d¡ poruszone w rozdziale 5.3. Wprowadzenie zmiennych otwiera nowe mo»liwo±ci, a wyra»enia staj¡ si¦ bardzo podobne do zwykªego rachunku lambda  brakuje jedynie aplikacji. Okazuje si¦ jednak, »e aplikacja staje si¦ niezb¦dna, aby sensownie przetwarza¢ stron¦ biern¡ bez uciekania si¦ do zewn¦trznych, dodatkowych operatorów jak w CCG. Jak ªatwo si¦ domy±li¢, oznaczana b¦dzie przez ≪ i ≫, a przykªad zastosowania znajduje si¦ poni»ej. 7

W przybli»eniu fraza

jak i

B,

A and B

ma najbardziej szczegóªowe znaczenie, które jest zarówno znaczeniem

np. w Gary Kasparov and Deep Blue performed really well poª¡czenie daje

Wykonawca,

A

natomiast

dla podwyra»enia w John and the piano were both the same age mo»emy opisa¢ wiek, ale nie mo»e ono okre±la¢ wykonawcy czynno±ci (tak jak John), ani na instrumentu, na którym si¦ gra.

8

Zamiast symbolu



zostaª u»yty symbol

kwantykator, ponadto znak



`

, gdy» jak si¦ oka»e w rozdziale 4.5 nie b¦dzie to dokªadnie

b¦dzie u»ywany tak»e w innym kontek±cie.

40

was =

h

α ∈ [Nothing, Thing]

h

γ ∈ [Nothing, Thing]

h

β ∈ [Nothing, Actor 7→ γ ←[ α]

α 7→ (PassiveVoiceActor ≫ (β ≪ α)) ←[ β was ≪ eaten = Fruit 7→ EventOfEating (an ≪ apple) ≫ (was ≪ eaten) = EventOfEating

4.3. Wªa±ciwo±ci Kolejn¡ konstrukcj¡ sªabej semantyki s¡ wªa±ciwo±ci. Rozszerzamy krat¦ kategorii o typy postaci A[ident = t], gdzie A nale»y do kraty kategorii, t jest dowolnym typem, a ident nale»y do pewnego dowolnego sko«czonego, ale ustalonego zbioru identykatorów. Dodatkowo okre±lamy, »e je»eli pewien identykator (w szczególno±ci gdy »aden) nie jest okre±lony, to wªa±ciwo±¢ ma warto±¢ Thing, tzn. A = A[ident = Thing] = A[ident1 = Thing[ident2 = Thing]][ident3 = Thing], ponadto h h ( α t1 )[ident = t2 ] = α (t1 [ident = t2 ])

(t1 7→ t2 )[ident = t3 ] = t1 7→ t2 [ident = t3 ] (t1 ←[ t2 )[ident = t3 ] = t1 [ident = t3 ] ←[ t2 Wªa±ciwo±ci pozwalaj¡ na wygodne specykowanie szczegóªowych kategorii, np. Loss[net = True][diluted = True], ale tak»e upraszczaj¡ ekstrakcj¦ informacji, np. h Drive01 = α ∈ [Nothing, Actor] h β ∈ [Nothing, Vechicle]

α 7→ Process[rel = Drive01][driver = α][vechicle = β] ←[ β john ≫ drive ≪ (a ≪ bus) = Proces[rel = Drive01][driver = John][vechicle = Bus] Aby wygodnie korzysta¢ z wªa±ciwo±ci dodatkowo wprowadzone zostaªy wyra»enia t1 .ident, takie, »e (t1 [ident = t2 ]).ident = t2 .

4.4. Operatory g i f Z powodu niskiej efektywno±ci i problemów implementacyjnych dotycz¡cych powy»ej przedstawionej teorii, uproszczono obsªug¦ zmiennych i w zamian wprowadzono dwa nowe operatory. Kªopotliw¡ operacj¡ byªo porównanie dwóch zmiennych, oraz zmiennej i wyra»enia. Utrzy` mywanie wyra»e« postaci α ∈ [Nothing, β]t1 dla pewnej zmiennej β byªo nieefektywne, 41

z tego powodu okre±lono now¡ relacj¦ porz¡dku cz¦±ciowego 4∗ , w której dla dwóch zmiennych α i β zachodzi α 4∗ β ⇐⇒ α = β. Problem ze zbyt du»¡ dowolno±ci¡ przy warto±ciowaniu α w wyra»eniach, takich jak and = α 7→ α ←[ α, zostaª rozwi¡zany poprzez jeszcze bardziej restryktywn¡ wersj¦ porz¡dku cz¦±ciowego 4◦ , dla której α 4◦ t1 ⇐⇒ α = t1 i t1 4◦ α ⇐⇒ α = t1 . Aby odzyska¢ poprzednie znaczenie and, zostaªy wprowadzone operatory g i f, odpowiednio supremum i inmum z kraty wyra»e«, odpowiednio rozszerzone na zmienne, np. and = α 7→ αgβ ←[ β. Wprowadzenie operatorów kratowych do wyra»e« spowodowaªo wyra¹ny wzrost efektywno±ci, ale niestety powa»ne problemy teoretyczne, gdy» relacje9 4 musz¡ by¢ okre±lone równie» na wielomianach kratowych (por. roz. 3.1), co prowadzi do ukªadów równa« na kratach opisanych w rozdziale 3.1.4.

4.5. Formalna denicja Niech Onto b¦dzie zbiorem wszystkich kategorii opisanych w ontologii, a ≤, ∨, ∧ odpowiednio porz¡dkiem cz¦±ciowym, supremum i inmum okre±lonymi na Onto. Niech c =Onto t b¦dzie oznaczaªo, »e jakie± znaczenie podstawowe c wedªug ontologi Onto posiada znaczenie poboczne t. Niech V b¦dzie niesko«czonym i przeliczalnym zbiorem zmiennych {a, b, c, . . .}, a C odpowiadaj¡cym mu zbiorem staªych Skolema {α, β, γ, . . .}. Niech I b¦dzie pewnym sko«czonym zbiorem identykatorów. Niech T b¦dzie zbiorem termów typowych, a B zbiorem termów Boole'owskich, okre±lonych rekurencyjnie jak poni»ej:  V, C, Onto ⊂ T  zmienne i staªe  t1 , t2 ∈ T =⇒ (t1 7→ t2 ) ∈ T , (t1 ←[ t2 ) ∈ T  funkcje  t1 , t2 ∈ T , =⇒ (t1 ≪ t2 ), (t1 ≫ t2 ) ∈ T  aplikacja  t1 , t2 ∈ T , ident ∈ I =⇒ t1 [ident = t2 ] ∈ T  wªa±ciwo±ci  t1 ∈ T , ident ∈ I =⇒ t1 .ident ∈ T  pobieranie wªa±ciwo±ci  t1 , t2 ∈ T , =⇒ (t1 g t2 ), (t1 f t2 ) ∈ T  supremum i inmum `  t1 , t2 , t3 ∈ T , p1 ∈ B, x1 ∈ V =⇒ ( {x1 ∈ [t1 , t2 ] : p1 }t3 ) ∈ T  zakres zmiennych  t∗ ∈ T , ti ∈ T dla i ∈ I, =⇒ ht∗ ; ti , . . .i ∈ T  pomocnicze krotki dªugo±ci 1 + |I|  tt, ff ∈ B  prawda i faªsz  p1 , p2 , . . . , pk ∈ B =⇒ [p1 , p2 , . . . , pk ] ∈ B  koniunkcja  t1 , t2 ∈ T =⇒ (t1 4∗ t2 ), (t1 4◦ t2 ), (t1 = t2 ) ∈ B  równania  t1 , t2 ∈ T , p1 , p2 ∈ B, x1 ∈ V =⇒ (∀{x1 ∈ [t1 , t2 ] : p1 }p2 ) ∈ B  kwantykacja ogólna  t1 , t2 ∈ T , p1 , p2 ∈ B, x1 ∈ V szczegóªowa 9

Zapis

4

=⇒

(∃{x1 ∈ [t1 , t2 ] : p1 }p2 ) ∈ B  kwantykacja

oznacza, »e opisywana wªasno±¢ zachodzi dla

42

4∗

i

4◦ .

Formuªy logiczne p1 przy kwantykatorach dodatkowo ograniczaj¡ warto±ci, jakie mo»e przyjmowa¢ kwantykowana zmienna. Alternatywa jest uzyskiwana poprzez przetwarzanie wielu wyprowadze«, po jednej dla ka»dego skªadnika. Zbiór zmiennych wolnych FV(t) jest zdeniowany analogicznie do denicji 3.2.2.  FV(a) = {a}, FV(α) = {α}  FV(t) = ∅ dla t ∈ Onto ∪ {tt, ff}  FV(t.ident) = FV(t)  FV(t1 [ident = t2 ]) = FV(t1 ) ∪ FV(t2 )  FV(t1 R t2 ) = FV(t1 ) ∪ FV(t2 ) dla R ∈ {7→, ←[, ≫, ≪, g, f, 4∗ , 4◦ , =}  FV([p1 , . . . , pk ]) = FV(p1 ) ∪ . . . ∪ FV(pk ) S  FV(ht∗ ; ti , . . .i) = FV(t∗ ) ∪ i∈I FV(ti ) `  FV( {x1 ∈ [t1 , t2 ] : p1 }t3 ) = (FV(t3 ) − {x1 }) ∪ FV(t1 ) ∪ FV(t2 ) ∪ FV(p1 )  FV(∀{x1 ∈ [t1 , t2 ] : p1 }p2 ) = (FV(p2 ) − {x1 }) ∪ FV(t1 ) ∪ FV(t2 ) ∪ FV(p1 )  FV(∃{x1 ∈ [t1 , t2 ] : p1 }p2 ) = (FV(p2 ) − {x1 }) ∪ FV(t1 ) ∪ FV(t2 ) ∪ FV(p1 ) Niewi¡»¡ce podstawienie jest równie» zdeniowane analogicznie do 3.2.3:  Sxt (x) = t  Sxt (y) = y  Sxt (c) = c dla c ∈ Onto ∪ {tt, ff}  Sxt (t1 .ident) = (Sxt (t1 )).ident  Sxt (t1 [ident = t2 ]) = (Sxt (t1 ))[ident = Sxt (t2 )]  Sxt (t1 R t2 ) = Sxt (t1 ) R Sxt (t2 ) dla R ∈ {7→, ←[, ≫, ≪, g, f, 4∗ , 4◦ , =}  Sxt ([p1 , . . . , pk ]) = [Sxt (p1 ), . . . , Sxt (pk )]  Sxt (ht∗ ; ti , . . .i) = hSxt (t∗ ); Sxt (ti ), . . .i

`  Sxt (Q{x ∈ [t1 , t2 ] : p1 }t3 ) = Q{x ∈ [t1 , t2 ] : p1 }t3 dla Q ∈ { , ∀, ∃} `  Sxt (Q{y ∈ [t1 , t2 ] : p1 }t3 ) = Q{y ∈ [Sxt (t1 ), Sxt (t2 )] : Sxt (p1 )}Sxt (t3 ) dla Q ∈ { , ∀, ∃} je»eli y∈ / FV(t) Semantyk¦ wyra»e« T i B okre±laj¡ przedstawione poni»ej reguªy. Ze wzgl¦du na wªa±ciwo±ci semantyka b¦dzie rozwa»ana przy u»yciu pomocniczych krotek ht∗ ; ti , . . .i. Dla `A,φ · · · oznacza, »e je»eli czytelno±ci wprowadzamy dodatkowe meta-reguªy. Indeks φ w `B,φ · · · zaªo»enie nale»y do jakiej± klasy reguª oprócz wymienionej A, to teza te» b¦dzie nale»e¢ do tej samej klasy (b¦dzie oczywi±cie nale»e¢ tak»e do B). 43

Γ `main,φ t∗ ; t∗0 Γ `all,φ ht∗ ; ti , . . .i ; ht∗0 ; ti , . . .i Γ `all,φ t∗ ; t∗0 Γ `all,φ ht∗ ; ti , . . .i ; ht∗0 ; ti , . . .i

Tupall1

Tupmain

Γ `all,φ tj ; tj0 Γ `all,φ ht∗ ; ti , . . . , tj . . .i ; ht∗ ; ti , . . . , tj0 , . . .i

Γ `all,tup hht∗ ; ti , . . .i; ui . . .i ; ht∗ ; ti f ui , . . .i

Tupall2

TupTup

Γ `all,tup ht1 7→ t2 ; ti . . .i ; t1 7→ ht2 ; ti , . . .i

TupLamL

Γ `all,tup ht1 ←[ t2 ; ti . . .i ; ht1 ; ti , . . .i ←[ t2

TupLamR

` ` TupVar Γ `all,tup h {x1 ∈ [t1 , t2 ] : p1 }t3 ; ti . . .i ; {x1 ∈ [t1 , t2 ] : p1 }ht3 ; ti , . . .i

tident = t2 ti = Thing dla i 6= ident TupSProp Γ `all,tup t1 [ident = t2 ] ; ht1 ; ti , . . . , tident , . . .i Γ `all,tup ht∗ ; ti , . . . , tident , . . .i.ident ; tident

TupGProp

c ∈ Onto c nie posiada »adnych wªa±ciwo±ci TupOnto1 Γ `none,tup c ; hc; Thing, Thing, . . .i

Γ `none,tup

c ∈ Onto c.i1 =Onto t1 . . . c.in =Onto tn TupOnto2 c ; hc; tk umieszczone na wspóªrz¦dnej odpowiadaj¡cej ik , na reszcie Thing i a∈V TupV Γ `none,tup a ; ha∗ ; ai , . . .i

Γ `tup t1 ; t10 Γ `none,tup t1 7→ t2 ; t10 7→ t2 Γ `tup t1 ; t10 Γ `none,tup t1 ←[ t2 ; t10 ←[ t2

α∈C TupC Γ `none,tup α ; hα∗ ; αi , . . .i

Γ `tup t2 ; t20

TupInLamL1

Γ `none,tup t1 7→ t2 ; t1 7→ t20 Γ `tup t2 ; t20

TupInLamR1

c =Onto t Onto Γ `main c ; t

Γ `none,tup t1 ←[ t2 ; t1 ←[ t20

Γ ` t1 ; t10 Γ `all t1 .ident ; t10 .ident 44

GProp

TupInLamL2

TupInLamR2

Γ ` t1 ; t3 ←[ t4 Γ ` t2 ; t20 Γ ` t20 4◦ t4 AppR Γ `all t1 ≪ t2 ; t3 Γ ` t1 ; t4 7→ t3 Γ ` t2 ; t20 Γ ` t20 4◦ t4 AppL Γ `all t2 ≫ t1 ; t3 Γ ` t1 ;

Γ `all Γ `all

` {a ∈ [u1 , u2 ] : p1 }t10 ` AppVR t1 ≪ t2 ; {a ∈ [u1 , u2 ] : p1 }(t10 ≪ t2 ) ` Γ ` t1 ; {a ∈ [u1 , u2 ] : p1 }t10 ` AppVL t2 ≫ t1 ; {a ∈ [u1 , u2 ] : p1 }(t2 ≫ t10 )

Γ` τ jest kontekstem nowych zmiennych wprowadzonych w τ τ∈T −{ } FV(τ) ∈ Γ ∪ Γτ Γ ∩ Γτ = ∅ a a Γ, Γτ `bool t1 4∗ τ Γ, Γτ `bool τ 4∗ t2 Γ, Γτ `bool Sτ (p1 ) Γ, Γτ ` Sτ (t3 ) ; t4 Γ `gen Γτ , t4 ; t5 ` Inst Γ `all {a ∈ [t1 , t2 ] : p1 }t3 ; t5 {a ∈ [t2 , t3 ] : p1 } ∈ Γ2 Γ1 `bool ∃{a ∈ [t2 , t3 ] : tt}p1 ` Gen Γ1 `gen Γ2 , t1 ; {a ∈ [t2 , t3 ] : p1 }Sαa (t1 )

Γ ` t1 ; c1 Γ ` t2 ; c2 c1 ∨ c2 = c3 LcaC Γ `all t1 g t2 ; c3 Γ `all ht∗ ; ti , . . .i g hu∗ ; ui , . . .i ; ht∗ g u∗ ; ti g ui , . . .i

LcaTup

Γ ` t1 ; t10 7→ t100 Γ ` t2 ; t20 7→ t200 t3 = (t10 f t20 ) 7→ (t100 g t200 ) LcaLamL Γ `all t1 g t2 ; t3 Γ ` t1 ; t10 ←[ t100 Γ ` t2 ; t20 ←[ t200 t3 = (t10 g t20 ) ←[ (t100 f t200 ) LcaLamR Γ `all t1 g t2 ; t3 ` Γ ` t1 ; {a ∈ [t2 , t3 ] : p1 }t4 ` LcaVar1 Γ `all t1 g t5 ; {a ∈ [t2 , t3 ] : p1 }(t4 g t5 ) ` Γ ` t1 ; {a ∈ [t2 , t3 ] : p1 }t4 ` LcaVar2 Γ `all t5 g t1 ; {a ∈ [t2 , t3 ] : p1 }(t5 g t4 ) Γ ` t1 ; t10 g t100 Γ ` t2 ; t20 t3 = (t10 f t20 ) g (t100 f t20 ) LcaGcd Γ `all t1 f t2 ; t3 Γ ` t1 ; c1 Γ ` t2 ; c2 c1 ∧ c2 = c3 GcdC Γ `all t1 f t2 ; c3 Γ `all ht∗ ; ti , . . .i f hu∗ ; ui , . . .i ; ht∗ f u∗ ; ti f ui , . . .i 45

GcdTup

Γ ` t1 ; t10 7→ t100 Γ ` t2 ; t20 7→ t200 t3 = (t10 g t20 ) 7→ (t100 f t200 ) GcdLamL Γ `all t1 f t2 ; t3 Γ ` t1 ; t10 ←[ t100 Γ ` t2 ; t20 ←[ t200 t3 = (t10 f t20 ) ←[ (t100 g t200 ) GcdLamR Γ `all t1 f t2 ; t3 ` Γ ` t1 ; {a ∈ [t2 , t3 ] : p1 }t4 ` GcdVar1 Γ `all t1 f t5 ; {a ∈ [t2 , t3 ] : p1 }(t4 f t5 ) ` Γ ` t1 ; {a ∈ [t2 , t3 ] : p1 }t4 ` GcdVar2 Γ `all t5 f t1 ; {a ∈ [t2 , t3 ] : p1 }(t5 f t4 ) Γ ` t1 ; t10 Γ `bool t10 R t2 R ∈ {4∗ , 4◦ , 4 , =}

InEq1

Γ ` t2 ; t20 Γ `bool t1 R t20 R ∈ {4∗ , 4◦ , 4 , =}

InEq2

Γ `bool t1 R t2

Γ `bool t1 R t2

Γ `bool tt

Truth

Γ `bool p1 . . . Γ `bool pk And Γ `bool [p1 , . . . , pk ]

dla ka»dego statycznego τ ∈ T dªugo±ci |τ| ≤ 2|t1 |+|t2 |+|p1 |+|p2 | speªniaj¡cego Γ `bool t1 4∗ τ, Γ `bool τ 4∗ t2 , Γ `bool Sxτ1 (p1 ) zachodzi Γ `bool Sxτ1 (p2 ) Univ Γ `bool ∀{x1 ∈ [t1 , t2 ] : p1 }p2 istnieje statyczne τ ∈ T dªugo±ci |τ| ≤ 2|t1 |+|t2 |+|p1 |+|p2 | speªniaj¡ce Γ `bool t1 4∗ τ, Γ `bool τ 4∗ t2 , Γ `bool Sxτ1 (p1 ) dla którego zachodzi Γ `bool Sxτ1 (p2 ) Exst Γ `bool ∃{x1 ∈ [t1 , t2 ] : p1 }p2

Γ `bool t1 4 t2 Γ `bool t1 4∗ t2

Γ `bool t 4 t

LeqB

LeqEq

Γ `bool t 4 Thing

Γ `bool t1 4 t2 Γ `bool t1 4◦ t2

LeqC

Γ `bool t1 4◦ t2 Γ `bool t2 4◦ t1 Eq Γ `bool t1 = t2

{a ∈ [t1 , t2 ] : p1 }, {b ∈ [t3 , t4 ] : p2 } ∈ Γ Γ `bool α 4 β

LeqThing

Γ `bool Nothing 4 t

LeqNothing

Γ `bool t2 4∗ t3

c1 ≤Onto c2 LeqOnto Γ `bool c1 4 c2

Γ, {a ∈ [t2 , t3 ] : p1 } `bool t1 4 Saα (t4 ) α ∈ / FV(t1 ) ` Skol Γ `bool t1 4 {a ∈ [t2 , t3 ] : p1 }t4 46

LeqCC

` τ ∈ T − { } Γ `bool t1 4∗ τ Γ `bool τ 4∗ t2 Γ `bool Saτ (p1 ) Γ `bool Saτ (t3 ) 4 t4 ` Spec Γ `bool {a ∈ [t1 , t2 ] : p1 }t3 4 t4

Γ `bool t∗ 4 u∗ Γ `bool ti 4 ui · · · Γ `bool ht∗ ; ti , . . .i 4 hu∗ ; ui , . . .i

LeqTup

Γ `bool u1 4 t1 Γ `bool t2 4 u2

LeqLamL

Γ `bool t1 4 u1 Γ `bool u2 4 t2

LeqLamR

Γ `bool t1 7→ t2 4 u1 7→ u2

Γ `bool t1 ←[ t2 4 u1 ←[ u2

{a : [u1 , u2 ] : p1 } ∈ Γ dla ka»dego statycznego τ ∈ T speªniaj¡cego Γ `bool u1 4∗ τ, Γ `bool τ 4∗ u2 , Γ `bool Saτ (p1 ) zachodzi Γ `bool Saτ (t1 ) 4 Saτ (t2 ) g Saτ (t3 ) Γ `bool t1 4 t2 g t3

Γ `bool t1 4 t3 Γ `bool t2 4 t3 Γ `bool t1 g t2 4 t3

LeqLca1

Γ `bool t1 4 t2 Γ `bool t1 4 t3

LeqLca2

Γ `bool t1 4 t2 f t3

{a : [u1 , u2 ] : p1 } ∈ Γ dla ka»dego statycznego τ ∈ T speªniaj¡cego Γ `bool u1 4∗ τ, Γ `bool τ 4∗ u2 , Γ `bool Saτ (p1 ) zachodzi Γ `bool Saτ (t1 ) f Saτ (t2 ) 4 Saτ (t3 ) Γ `bool t1 f t2 4 t3

LeqGcd1

LeqGcd2

4.6. Klasa j¦zyków rozpoznawalnych Sªaba semantyka okazuje si¦ by¢ j¦zykiem programowania zupeªnym w sensie Turinga. Nie tylko posiada jako podzbiór nietypowany rachunek lambda, ale tak»e ªatwo jest zaimplementowa¢ automat dwulicznikowy. Prostym przykªadem obliczenia, które mo»e si¦ nie ko«czy¢ jest Omega ≪ Omega dla Omega = Omega ≪ Omega ←[ Omega. Poni»ej podaj¦ dodatkowy przykªad zapisu automatu, który rozpoznaje j¦zyk {bn cn dn en , n ≥ 1}, przy czym z ªatwo±ci¡ da si¦ go rozszerzy¢ na j¦zyk {an1 . . . anm } dla m ≥ 4. Zaªó»my, »e w ontologii znajduj¡ si¦ kategorie opisuj¡ce litery B, C, D, E, stany S1 , S2 , S3 , S4 , zero z nast¦pnikiem Zero, Succ oraz funkcj¦ przej±cia Loop i koniec obliczenia LoopEnd, z których »adne dwie nie s¡ porównywalne mi¦dzy sob¡. Wtedy poni»szy zestaw reguª deniuje j¦zyk {bn cn dn en , n ≥ 1}. 47

B = Loop ≪ S1 [n = Succ[n = Zero]][m = Zero] ←[ C h Loop = s ∈ [Nothing, S1 ] (Loop ≪ S1 [n = Succ[n = s.n]][m = s.m] ←[ C ←[ s) h | s ∈ [Nothing, S1 ] (Loop ≪ S2 [n = s.n.n][m = s.n] ←[ D ←[ s) h | s ∈ [Nothing, S2 ][n = Succ] (Loop ≪ S2 [n = s.n.n][m = s.m] ←[ D ←[ s) h | s ∈ [Nothing, S2 ][n = Zero] (Loop ≪ S3 [n = s.m][m = s.m] ←[ s) h | s ∈ [Nothing, S3 ][n = Succ] (Loop ≪ S3 [n = s.n.n][m = s.m] ←[ E ←[ s) h | s ∈ [Nothing, S3 ][n = Zero] (Loop ≪ S4 [n = s.m.n][m = s.m] ←[ s) h | s ∈ [Nothing, S4 ][n = Succ] ((B 7→ Loop ≪ S4 [n = s.n.n][m = s.m]) ←[ s) h | s ∈ [Nothing, S4 ][n = Zero] (LoopEnd ←[ s) Poni»ej zostaªo zamieszczone przykªadowe wyprowadzenie ci¡gu BBCCDDEE, dla czytelno±ci wprowadzono skróty 0 = Zero, 1 = Succ[n = Zero] oraz 2 = Succ[n = Succ[n = Zero]].

B

B

CCDDEE

B

(Loop ≪ S1 [n = 1][m = 0] ←[ C)

B

(Loop ≪ S1 [n = 1][m = 0])

CDDEE

B

(Loop ≪ S1 [n = 2][m = 0] ←[ C)

CDDEE

B

(Loop ≪ S1 [n = 2][m = 0])

DDEE

B

(Loop ≪ S2 [n = 1][m = 2] ←[ D)

DDEE

B

(Loop ≪ S2 [n = 1][m = 2])

DEE

B

(Loop ≪ S2 [n = 0][m = 2] ←[ D)

DEE

B

(Loop ≪ S2 [n = 0][m = 2])

EE

B

(Loop ≪ S3 [n = 2][m = 2])

EE

B

(Loop ≪ S3 [n = 1][m = 2] ←[ E)

EE

B

(Loop ≪ S3 [n = 1][m = 2])

E

B

(Loop ≪ S3 [n = 0][m = 2] ←[ E)

E

B

(Loop ≪ S3 [n = 0][m = 2])

B

(Loop ≪ S4 [n = 1][m = 2])

B

(B 7→Loop ≪ S4 [n = 0][m = 2]) (Loop ≪ S4 [n = 0][m = 2]) (LoopEnd)

48

CCDDEE

Rozdziaª 5

Algorytm parsowania Rozdziaª ten po±wi¦cono zagadnieniom zwi¡zanym z teoretycznymi aspektami opracowanego algorytmu oraz jego implementacj¡ (roz. 5.4). Algorytmiczno-teoretyczne podstawy analizy, takie jak struktury danych i analiza zªo»ono±ci opieraj¡ si¦ na [11], bardziej obszerne potraktowanie tematu mo»na znale¹¢ np. w [23]. Opisywany tutaj algorytm sªu»y do ekstrakcji informacji z tekstu jawnego, napisanego w j¦zyku naturalnym. Dane wej±ciowe stanowi¡ tekst oraz specjalnie przygotowana ontologia opisuj¡ca informacje, których ma poszukiwa¢ algorytm. Wyj±ciem z algorytmu jest zbiór relacji pomi¦dzy poj¦ciami ontologii, przedstawiony w formie drzewa. Trzeba na wst¦pie zaznaczy¢, »e ze wzgl¦du na nierozstrzygalno±¢ pewnych zagadnie« (szczegóªy s¡ przedstawione w rozdziale 5.3) zastosowano metody przybli»one i heurystyczne. Z teoretycznego punktu widzenia mog¡ istnie¢ wyprowadzenia sªabej semantyki, które nie zostan¡ przetworzone przez algorytm, a tak»e takie wyniki algorytmu, które nie s¡ poprawnymi wyprowadzeniami sªabej semantyki. Nie przeszkadza to jednak w zastosowaniach praktycznych (por. roz. 6).

5.1. Idea algorytmu Przetwarzanie wst¦pne polega na przypisaniu ka»demu sªowu jego podstawowego znaczenia. W tej chwili jest to realizowane przy pomocy sªownika. Gªówny schemat algorytmu jest drobn¡ modykacj¡ procedury CKY (por. roz. 3.3). Podobnie, jak w oryginale, w polu (i, j) przechowywany jest zbiór mo»liwych wyprowadze« frazy dªugo±ci j zaczynaj¡cej si¦ i-tym sªowem. W przeciwie«stwie do gramatyk bezkontekstowych, rozmiar zbioru mo»e by¢ dowolnie du»y, dlatego zbiory wyprowadze« przechowywane w polach s¡ umieszczane na li±cie. Obliczenie pojedynczej komórki wykonywane jest wedªug nast¦puj¡cego wzoru:

(i, j) = {t3 |t1 ∈ (i, k), t2 ∈ (i + k, j − k), t1 ≪ t2 ; t3 } ∪ {t3 |t1 ∈ (i, k), t2 ∈ (i + k, j − k), t1 ≫ t2 ; t3 } Wynikiem algorytmu jest drzewo przedstawiaj¡ce relacje pomi¦dzy poj¦ciami z wej±ciowej ontologii. Przetwarzanie ko«cowe sprowadza si¦ do wypisania wyniku w zadanej postaci. Przeksztaªcanie wyra»e« odbywa si¦ za pomoc¡ reguª sªabej semantyki, przedstawionych w rozdziale 4.5, z pewnymi zmianami. 49

Pierwsz¡ z nich jest traktowanie wªa±ciwo±ci (por. roz. 4.3) nie za pomoc¡ krotek, ale z wykorzystaniem zwykªego operatora t1 [ident = t2 ]. Powoduje to problemy przy wyliczaniu ich dla skomplikowanych termów (trzeba przej±¢ caª¡ kowariantn¡ ±cie»k¦). Mimo wszystko takie rozwi¡zanie jest efektywniejsze, gdy» zbiór identykatorów I jest zwykle du»y, a wªa±ciwo±ci u»ywanych na raz jest przewa»nie maªo. Drug¡ z ró»nic jest sposób obsªugiwania reguª Inst i Spec. Term τ budowany jest w sposób leniwy metod¡ ukonkretniania zmiennych. Aktualne warto±ciowania, ograniczenia oraz formuªy zwi¡zane ze zmiennymi s¡ przechowywane w kontek±cie podstawie«. Opis tej struktury przedstawiony jest w rozdziale 5.4.2. Trzecia ze zmian dotyczy reguª Univ oraz Exst i zostanie opisana w punkcie 5.2.2. Ostatni¡ i chyba najwa»niejsz¡ z modykacji jest sposób przetwarzania równa« kratowych (reguªy LeqGcd i LeqLca ). Poniewa» problem ten jest NP-zupeªny (por. roz. 3.1.4) stosowane s¡ metody przybli»one. Przede wszystkim obliczenie jest opó¹niane poprzez poª¡czenie nierówno±ci koniunkcj¡ z formuª¡ jednej ze zmiennych wolnych wyst¦puj¡cych w obliczanym wyra»eniu (najgª¦bszej w sensie zagnie»d»enia kwantykatorów), a gdy takiej zmiennej nie ma, caªo±¢ po prostu wylicza si¦ do termu statycznego, który mo»na obliczy¢ (kwantykatory s¡ przesuwane wcze±niej na zewn¡trz). Szczegóªy przedstawione s¡ w rozdziale 5.2.3.

5.2. Rezolucja Rezolucja jest dokonywana w trzech etapach. Pierwszy etap polega na normalizacji wyra»enia (5.2.1), jest te» przygotowaniem termu do drugiego etapu przetwarzania. Drugim etapem jest sprawdzenie nierówno±ci (5.2.3). Faza ta mo»e czasem wymaga¢ ponownej renormalizacji. Trzecim etapem jest utworzenie grafu zale»no±ci (5.2.4), który sªu»y szybkiemu wychwytywaniu cyklów w±ród nierówno±ci pomi¦dzy zmiennymi. Jest to modykacja znanego liniowego algorytmu rozwi¡zuj¡cego problem 2-SAT [10]. Cho¢ proces ten jest warto±ciow¡ cz¦±ci¡ rozwi¡zania, ze wzgl¦du na zadowalaj¡c¡ skuteczno±¢ etapu drugiego, faza ta nie zostaªa zaimplementowana. 5.2.1. Normalizacja

Normalizacja przebiega w dwóch turach. Pierwsza z nich polega na przedstawieniu wyra»enia w postaci, w której operacje s¡ uporz¡dkowane w takiej kolejno±ci, aby operatory 7→ i ←[ znajdowaªy si¦ bardziej na zewn¡trz wyra»enia ni» •[ident = •], g oraz f (reguªy TupLam , LcaLam i GcdLam ) oraz aby g znajdowaªo si¦ na zewn¡trz f (reguªa LcaGcd). Ponadto prze` noszone s¡ w dóª tak»e kwantykatory z kowariantnej ±cie»ki za pomoc¡ reguª oznaczonych indeksem Var. Aplikacje ≪ i ≫ oraz pobieranie wªa±ciwo±ci •.ident nie s¡ przenoszone, gdy» mog¡ si¦ wyliczy¢ do termu dowolnej postaci. Zadaniem drugiej tury normalizacji jest przedstawienie (w miar¦ mo»liwo±ci) wyra»enia w postaci, w której zmienne, staªe oraz wielomiany kratowe z nich zªo»one porównywane s¡ tylko z innymi zmiennymi, staªymi i wielomianami. Poza trywialnymi LeqEq , LeqThing oraz LeqNothing , reguªy LeqLam s¡ jedynymi, które umo»liwiaj¡ porównanie termów postaci t1 7→ t2 lub postaci t2 ←[ t1 , dlatego, gdy z jednej strony nierówno±ci znajduje si¦ 7→ lub ←[, to wyra»enie z drugiej strony musi zosta¢ odpowiednio przeksztaªcone. Na przykªad dla a f b ≤ C 7→ D, normalizacja b¦dzie polegaªa na skorzystaniu z reguªy GcdLam , a ta z kolei wymusi podstawienia a = a1 7→ a2 i b = b1 7→ b2 . W efekcie wej±ciowe wyra»enie 50

przyjmie posta¢ (a1 g b1 7→ a2 f b2 ) ≤ B 7→ C, co si¦ sprowadza do B ≤ a1 g b1 i a2 f b2 ≤ C. Taka transformacja jest wykonywana za pomoc¡ prostego algorytmu unikacji, podobnego do [30], z t¡ ró»nic¡, »e znaczenia podstawowe mog¡ si¦ przeksztaªca¢ w znaczenia poboczne (reguªa Onto). Niestety z powodu nierozstrzygalno±ci podtypów [61, 57], oraz kwantykatorów ograniczonych [46], proces ten mo»e si¦ nie ko«czy¢. Normalizacja formuª logicznych sprowadza si¦ do usuwania zb¦dnych formuª tt, skracania nieprawdziwych formuª do ff, upraszczania zagnie»d»onych koniunkcji [[[t1 ]]] oraz normalizacji termów w nierówno±ciach i równo±ciach. Dodatkowo normalizacja przygotowuje wyra»enie do fazy drugiej algorytmu (5.2.3). Polega to na zebraniu wszystkich nierówno±ci i równo±ci (zapisaniu w kontek±cie i zast¡pieniu ich za±lepkami  formuªami tt) oraz otworzeniu wszystkich kwantykatorów (aby nie trzeba byªo przeprowadza¢ tej operacji podczas przetwarzania równa«). Po zako«czeniu wszystkich etapów formuªy logiczne s¡ zapisywane w miejsce za±lepek, a kwantykatory s¡ zamykane, w kolejno±ci, w której zostaªy otworzone. 5.2.2. Obsªuga kwantykatorów

Trzeba zaznaczy¢, »e zastosowanie reguª Univ i Exst w postaci w jakiej s¡ przedstawione w rozdziale 4.5 jest niepraktyczne. Niemniej jednak, po drugiej fazie normalizacji, da si¦ skonstruowa¢ sko«czony zbiór wyra»e« bardzo dobrze przybli»aj¡cy poszukiwane termy. Przedziaªy warto±ci zmiennych s¡ postaci [C1 , C2 ], a wi¦c mo»liwe jest ich wyliczenie i przeltrowanie. Niestety nawet takie rozwi¡zanie okazuje si¦ zbyt wolne. Zastosowana heurystyka jest jeszcze bardziej uproszczona  dla ka»dej zmiennej rozwa»ane jest tylko jej dolne i górne ograniczenie. Przykªadem formuªy, która nie zostaªaby poprawnie przetworzona jest aksjomat posiadania negacji1 w kracie {1, 2, 3} generowanej przez porz¡dek liniowy:

∀a ∃b [a ∨ b = 1, a ∧ b = 0] Z drugiej strony test ten dobrze sprawdza si¦ w praktyce. Wi¦kszo±¢ równa« ma niewiele zmiennych wspólnych, a ka»de pojedyncze równanie da si¦ prosto sprawdzi¢ na mocy twierdze« przedstawionych w rozdziale 3.1.4. 5.2.3. Speªnialno±¢

Druga faza algorytmu polega na testowaniu speªnialno±ci równa« i nierówno±ci zebranych jeszcze w fazie pierwszej. Podstaw¡ do tego jest cz¦±¢ twierdzenia 3.1.4, a mianowicie

f(x, y, . . .) ≤ g(x, y, . . .) ⇐⇒ f(0, . . .) ≤ g(1, . . .) f(0, 0, . . .) ? g(0, 1, . . .) ≤ x ≤ g(1, 1, . . .) > f(1, 0, . . .) Korzystaj¡c z symetryczno±ci zmiennych mo»na podobne ograniczenia wyprowadzi¢ dla ka»dej z nich, dla ka»dego równania. Kolejne ograniczenia dla tej samej zmiennej mog¡ by¢ ª¡czone na podstawie nast¦puj¡cej i dualnej do niej zale»no±ci: a ≤ b i a ≤ c, która zachodzi wtedy i tylko wtedy gdy a ≤ b ∧ c. 1

Formuªa ta prawdziwa jest w algebrach Boole'a, ale nie w dowolnych kratach.

51

Bior¡c pod uwag¦ trudno±ci opisane w poprzednim rozdziale, do rozstrzygania speªnialno±ci u»ywane s¡ tylko wyliczone ograniczenia. Wynikowy algorytm jest wi¦c teoretycznie w sensie reguª 4.5 niepoprawny i niepeªny (ze wzgl¦du na kwantykatory ogólne i szczegóªowe). Šatwym do wprowadzenia usprawnieniem jest zastosowanie metody Monte Carlo, która w tym przypadku polegaªaby na wylosowaniu zbioru testowego o pewnej ustalonej liczno±ci. Okazuje si¦ jednak, »e najprostsze podej±cie jest w praktyce wystarczaj¡ce. 5.2.4. Graf zale»no±ci

Trzeci etap rezolucji sªu»y szybkiemu wychwytywaniu cykli w nierówno±ciach pomi¦dzy zmiennymi. Przetwarzane nierówno±ci s¡ przedstawiane za pomoc¡ kraw¦dzi skierowanej pomi¦dzy wierzchoªkami reprezentuj¡cymi porównywane termy. ` Operatory 7→, ←[, ≫, ≪, i •.ident s¡ traktowane jako staªe, natomiast wyra»enie t1 [ident = t2 ] jest rozkªadane na t1 f Thing[ident = t2 ] dla t1 6= Thing. Dla wielomianów zªo»onych z operacji g i f oraz nowych staªych tworzone s¡ wierzchoªki odpowiadaj¡ce caªo±ci, oraz ka»demu podwyra»eniu. Powstaªe wierzchoªki ª¡czy si¦ kraw¦dziami zgodnie z zale»no±ciami t1 , t2 ≤ t1 g t2 i t1 f t2 ≤ t1 , t2 . Wyszukiwanie podobnych wyra»e« mo»na zaimplementowa¢ za pomoc¡ tablicy mieszaj¡cej (ang. hash table ), a bezpo±rednie porównania dokonywa¢ na ich postaciach kanonicznych (np. korzystaj¡c z twierdzenia 3.1.3), lub uznawa¢, »e s¡ po prostu ró»ne, je»eli ich rozmiar przekracza pewien próg2 . W tak zbudowanym grae wyszukuje si¦ silnie-spójne skªadowe. W »adnej z nich nie mog¡ si¦ znale¹¢ dwie staªe Skolema, ponadto zmienne nie b¦d¡ce staªymi Skolema mog¡ nale»e¢ tylko do tych skªadowych, które nie zawieraj¡ ju» innych, bardziej zagnie»d»onych staªych Skolema (w sensie kwantykatorów). Na koniec, dla ka»dej skªadowej, mo»na zunikowa¢ znajduj¡ce si¦ w niej wyra»enia. Przedstawiony schemat jest modykacj¡ znanego liniowego algorytmu rozwi¡zuj¡cego problem 2-SAT [10]. Ze wzgl¦du na zadowalaj¡c¡ skuteczno±¢ poprzednich etapów procesu przetwarzania, faza ta nie zostaªa zaimplementowana.

5.3. Analiza zªo»ono±ci Algorytm zaprezentowany w tej pracy nie jest niestety algorytmem wielomianowym. Wprawdzie jego szkielet, procedura CKY (por. roz. 3.3) implikuje sze±cienn¡ zªo»ono±¢ w zale»no±ci od wej±ciowej liczby sªów, lecz ju» bior¡c pod uwag¦ liczb¦ wyra»e« sªabej semantyki przypadaj¡cych na jedno sªowo, dostajemy algorytm wykªadniczy, na przykªad dla h F = {a ∈ [Nothing, Thing] : tt}(a 7→ F[p = a]) h | {a ∈ [Nothing, Thing] : ff}(a 7→ F[q = a]) ci¡g Fn b¦dzie miaª przynajmniej 2n ró»nych wyprowadze«. Sprawa ma si¦ zdecydowanie gorzej, gdy we¹miemy pod uwag¦ rezolucj¦ wyra»e« sªabej semantyki. Niestety z powodu nierozstrzygalno±ci ograniczonej kwantykacji [46] oraz problemu podtypów [61, 57] algorytm nie musi si¦ zatrzymywa¢ dla pewnych wej±¢. Wprawdzie 2

Mo»na te» u»y¢ wspomnianej ju» metody Monte Carlo.

52

mo»na by wprowadzi¢ odpowiednie ograniczenia3 , ale nawet wtedy konstrukcja samej sªabej semantyki powoduje nierozstrzygalno±¢ rezolucji, ze wzgl¦du na nierozstrzygalno±¢ problemu stopu automatu dwulicznikowego, czy równowa»no±ci termów w nietypowanym rachunku lambda. Ta siªa wyra»ania w peªni uzasadnia okre±lenie sªabej semantyki funkcyjnym j¦zykiem programowania. Czy jednak rzeczywi±cie sªaba semantyka jest j¦zykiem dziedzinowym (DSL, ang. domainspecic language )? Bior¡c pod uwag¦, »e ontologia nale»y równie» do danych wej±ciowych, o zaprezentowanym algorytmie mo»na my±le¢ jako o kompilatorze, lub ±ci±lej interpreterze. Przy takim podej±ciu sªaba semantyka istotnie staje si¦ j¦zykiem programowania, wprowadzana ontologia okazuje si¦ uruchamianym programem4 , a przetwarzany tekst zwykªymi danymi wej±ciowymi. Taka interpretacja pozwala spojrze¢ na sªab¡ semantyk¦ i na nieelementarn¡ zªo»ono±¢ algorytmu jej rezolucji z innej perspektywy  czy to wina Javy, C++ lub Pythona, »e si¦ da w tych j¦zykach napisa¢ bª¦dny program?

5.4. Implementacja W niniejszej cz¦±ci opisana zostaªa implementacja opracowanego algorytmu, scharakteryzowano budow¦ programu i omówiono wybrane fragmenty kodu. Program napisano korzystaj¡c z j¦zyków Haskell, Java i Ruby, a otrzymana caªo±¢ jest niezale»na od systemu operacyjnego. Peªny kod ¹ródªowy znajduje si¦ na dysku zaª¡czonym do pracy. 5.4.1. Architektura

Aplikacja skªada si¦ z szeregu moduªów:  Base  zawiera podstawowe denicje: wyra»enia sªabej semantyki, podstawienia, kontekstu oraz monad i najwa»niejszych klas typów5 (ang. type class ), a tak»e podstawowe operacje manipuluj¡ce tymi obiektami.  Lattice  operacje kratowe, w tym g, f, > i ?, ponadto zawiera te» obsªug¦ wªa±ciwo±ci.  Quantifiers  instancje klasy typów Quantifiable (obsªuga kwantykatorów, ich otwierania i zamykania) oraz Lambdable (przeksztaªcanie wyra»e« do postaci t1 7→ t2 lub t1 ←[ t2 ).  Normalize  algorytm normalizacji.  Satisfiability  testowanie speªnialno±ci.  Eval  sposób wyliczania kolejnych rodzajów wyra»e«. 3

Na przykªad tzw. uniwersa dla ograniczonej kwantykacji, albo tzw. typy monomorczne dla problemu

podtypów.

4

Zapisanym wprawdzie w bardzo dziwny sposób, ale przykªady, takie jak j¦zyk Smalltalk, pokazuj¡, »e

kod liniowy nie jest jedynym sªusznym rozwi¡zaniem.

5

Typ jest instancj¡ pewnej klasy typów, je»eli na warto±ciach danego typu da si¦ wykona¢ operacje okre-

±lone przy denicji klasy.

53

 Main  modykacja procedury CKY, a tak»e obsªuga wej±cia (w tym dzielenie ci¡gu wej±ciowego na sªowa i korzystanie ze sªownika) oraz wyj±cia (formatowanie danych wyj±ciowych).  ClsType, ClsData, ClsDict  moduªy zawieraj¡ce dane dotycz¡ce ontologii oraz sªownika, automatycznie generowane. Zupeªnie zewn¦trznym komponentem jest OWLConverter, który sªu»y do przetwarzania ontologii z formatu OWL (ang. Web Ontology Language ) do danych wygodnych do u»ycia w programie. Problem ten zostanie poruszony w punkcie 5.4.3. Pomimo tego, »e szkieletem jest schemat CKY, to sercem algorytmu jest monada6 zarz¡dzaj¡ca kontekstem i wyprowadzeniami. newtype MM a~= MM ( Context → [ ( Context , a ) ] ) runMM : : ∀ t . MM t → Context → [ ( Context , t ) ] runMM (MM g ) c = g c i n s t a n c e Functor (MM) where fmap f (MM g ) = (MM $ λ c → L i s t . map ( λ ( d , x ) → ( d , f x ) ) ( g c ) ) i n s t a n c e Monad (MM) where r e t u r n x = MM $ λ c → [ ( c , x ) ] fail s = MM $ λ_ → [ ] (MM g ) >>= f = (MM ( λ c → l e t m ( d , x ) = runMM ( f x ) d i n L i s t . concatMap m ( g c ) ) ) i n s t a n c e MonadPlus (MM) where mzero = MM $ λ_ → [ ] mplus (MM f ) (MM g ) = MM ( λ c → f c ++ g c ) Struktura ta pozwala na wygodne zarz¡dzanie wieloma wyprowadzeniami i ich kontekstami jednocze±nie. Nie przeszkadza, »e w dowolnym momencie obliczenie mo»e si¦ rozgaª¦zi¢, na przykªad, gdy znaczenie podstawowe posiada w ontologii wiele znacze« pobocznych. Modykacja tej struktury spowodowaªaby globaln¡ zmian¦ zachowania programu, w szczególno±ci wprowadzanie wszelkich usprawnie« zaczynaªoby si¦ w tym miejscu. Dodatkow¡ zalet¡ jest, »e monady mog¡ reprezentowa¢ caªe ci¡gi oblicze«, co zostaªo wykorzystane w procesie normalizacji. Wad¡ takiego podej±cia jest konieczno±¢ wykorzystywania j¦zyka, który wspiera konstrukcje monad. Innym problemem jest debugowanie kodu, którego przepªyw nie sprowadza si¦ do prostych p¦tli i instrukcji warunkowych. 5.4.2. Wybrane fragmenty kodu

Poni»ej zaprezentowane s¡ najwa»niejsze i najciekawsze fragmenty kodu wraz z komentarzami. Caªo±¢ kodu ¹ródªowego znajduje si¦ na zaª¡czonej do pracy pªycie. 6

Monada jest standardowym sposobem organizowania kodu w Haskellu, niestety autor nie zna przyst¦pnego

i zarazem wiarygodnego ¹ródªa informacji na ich temat. Najbardziej aktualne dane mo»na znale¹¢ na stronie

http://en.wikibooks.org/wiki/Haskell, http://en. wikipedia.org/wiki/Monad_(functional_programming).

encyklopedii Wikipedia i jej projektów pochodnych:

54

Typy i formuªy Poni»ej zaprezentowany kod przedstawia reprezentacje wyra»e« sªabej semantyki za pomoc¡ typu algebraicznego. Pierwszy z wyci¡gów dotyczy T , a drugi B . Dla konstruktorów Lam i App warto±¢ pierwszej wspóªrz¦dnej True oznacza prawostronn¡ wersj¦ operatora, a False lewostronn¡. Var opisuje kwantykator. data Type = C l s ClsType −− k a t e g o r i e | Ref RefType −− zmienne | Lca Type Type −− supremum | Gcd Type Type −− infimum | Lam Bool Type Type −− f u n k c j e | App Bool Type Type −− a p l i k a c j a | PSet Type S t r i n g Type −− p r z y p i s a n i e w l a s c i w o s c i | PGet Type S t r i n g −− p o b r a n i e w l a s c i w o s c i | Var RefType ( Type , Type ) Formulae Type d e r i v i n g ( Eq , Ord ) Konstruktor Leq reprezentuje nierówno±¢ 4∗ dla pierwszej wspóªrz¦dnej równej False i nierówno±¢ 4◦ dla warto±ci True. W przypadku kwantykatora Qua warto±¢ True na pierwszej wspóªrz¦dnej oznacza kwantykacj¦ ogóln¡, natomiast False kwantykacj¦ szczegóªow¡. data Formulae = TT | FF −− prawda i ~ f a l s z | And [ Formulae ] −− k o n i u n k c j a | Eq Type Type −− rownosc | Leq Bool Type Type −− n i e r o w n o s c | Qua Bool RefType ( Type , Type ) Formulae Formulae d e r i v i n g ( Eq , Ord , Show )

Kontekst Ten fragment kodu prezentuje struktur¦ danych reprezentuj¡cych kontekst. Pierwszy wyci¡g zawiera pole z mapy przechowuj¡cej dane zmiennych, drugi sam¡ struktur¦ kontekstu. Dla czytelno±ci komentarze zostaªy z kodu usuni¦te. Rekordy bounds i formulae pochodz¡ wprost z kwantykatora zmiennej. parent okre±la pod którym kwantykatorem (dokªadnie pod kwantykatorem której zmiennej) powinna zosta¢ umieszczona bie»¡ca zmienna, na przykªad je»eli na skutek normalizacji miaªoby miejsce podstawienie x = x1 7→ x2 , to x byªaby ojcem x1 i x2 . Pole value i timeTag oznaczaj¡ odpowiednio warto±¢ zmiennej i znacznik czasowy. Na ko«cu, w children, znajduje si¦ lista zmiennych, których ojcem jest bie»¡ca zmienna. Dla czytelno±ci komentarze zostaªy usuni¦te. data { , , , , , }

VarData = VarData bounds : : ( Type , Type ) f o r m u l a e : : Formulae parent : : RefType value : : Type timeTag : : TagType c h i l d r e n : : [ RefType ] d e r i v i n g Show 55

Rekordy zaczynaj¡ce si¦ od uniq s¡ generatorami unikatowych identykatorów dla odpowiednich obiektów, w tym: nowych zmiennych Ref, zapisywanych równa« i nierówno±ci EqId oraz innych znaczników Tag. Najwa»niejszym polem jest rekord varMap, który przechowuje dane zmiennych w postaci mapy RefType → VarData. bindMark jest znacznikiem zmiany w kontek±cie, natomiast eqMap jest map¡ przechowuj¡c¡ równania i nierówno±ci zbierane podczas etapu normalizacji. data { , , , , , , }

Context = CTX uniqRef_ : : RefType log_ : : [ S t r i n g ] varMap_ : : RefMap VarData uniqEqId_ : : EqId uniqTag_ : : TagType eqMap_ : : [ EqMap Formulae ] bindMark_ : : Bool d e r i v i n g Show

Monada zarz¡dzaj¡ca kontekstem Poni»ej zostaªy zaprezentowane odpowiednie klasy typów (pochodz¡ce ze standardowej biblioteki j¦zyka Haskell ), których implementacj¡ jest monada zarz¡dzaj¡ca kontekstem oraz sama struktura b¦d¡ca sercem algorytmu. Fragment Monad m => MonadPlus m oznacza, »e aby m byªo klasy MonadPlus, to oprócz posiadania okre±lonych operacji, musi by¢ tak»e klasy Monad. c l a s s Functor f where fmap : : ( a → b ) → f a~→ f b c l a s s Monad m where (>>=) : : ∀ a b . m a → ( a → m b ) → m b (>>) : : ∀ a b . m a → m b → m b return : : a → m a f a i l : : String → m a c l a s s Monad m ⇒ MonadPlus m where mzero : : m a mplus : : m a → m a → m a Literaª a przy denicji newtype MM a oznacza zmienn¡ typow¡, inaczej mówi¡c a jest operatorem którego dziedzin¡ i przeciwdziedzin¡ s¡ typy. Zastosowanie MM jest widoczne ju» w nast¦pnym wierszu kodu. Operator >>= w denicji monady jest nazywany bind i sªu»y do ª¡czenia dwóch oblicze« reprezentowanych w postaci monad. Symbol $ jest inksowym operatorem aplikacji f $ x = f x o niskim priorytecie, co daje efekt nawiasowania, np. f $ f $ f $ f x = f(f(f(f(x)))). newtype MM a = MM ( Context → [ ( Context , a ) ] ) runMM : : ∀ t . MM t → Context → [ ( Context , t ) ] runMM (MM g ) c = g c i n s t a n c e Functor (MM) where 56

fmap f (MM g ) = (MM $ λ c → L i s t . map ( λ ( d , x ) → ( d , f x ) ) ( g c ) ) i n s t a n c e Monad (MM) where r e t u r n x = MM $ λ c → [ ( c , x ) ] fail s = MM $ λ_ → [ ] (MM g ) >>= f = (MM ( λ c → l e t m ( d , x ) = runMM ( f x ) d i n L i s t . concatMap m ( g c ) ) ) i n s t a n c e MonadPlus (MM) where mzero = MM $ λ_ → [ ] mplus (MM f ) (MM g ) = MM ( λ c → f c ++ g c )

Najwa»niejsze klasy typów W tej cz¦±ci znajduj¡ si¦ fragmenty zawieraj¡ce najwa»niejsze klasy typów u»ywanych przy implementacji algorytmów. Pierwsz¡ z prezentowanych jest klasa wyra»e«, które mo»na kwantykowa¢ i dekwantykowa¢. Typ FInfo sªu»y do przechowywania informacji o tym, które zmienne byªy kwantykowane ogólnie, a które szczegóªowo. data F I n f o = F I n f o [ ( Bool , RefType ) ] d e r i v i n g Show c l a s s Q u a n t i f i a b l e a where q u a n t i f y : : F I n f o → a → MM a u n q u a n t i f y : : Bool → a → MM ( a , F I n f o ) Kolejn¡ z prezentowanych klas s¡ typy normalizowalne. Warto zwróci¢ uwag¦ na wyra»enie ∀b w sygnaturze funkcji normalize. Drugi parametr jest obliczeniem (reprezentowanym przez monad¦), które jest wywoªywane dopiero po znormalizowaniu pierwszego parametru. Wynik tego obliczenia mo»e by¢ dowolnego typu (st¡d ∀b) i jest on zwracany w parze z wynikiem normalizacji. c l a s s N o r m a l i z a b l e a where n o r m a l i z e : : ∀ b . a → MM b → MM ( a , b ) Poni»ej zamieszczony zostaª przykªad instancji klasy Normalizable. Podobnie jak w denicji klas, zapis X ⇒ Y oznacza: je»eli zachodzi X, to zachodzi równie» Y , gdzie. . . Normalizacja obiektu typu b jest dokonywana dopiero po przetworzeniu obiektu typu a. Wynik zwracany jest razem z wynikiem abstrakcyjnej operacji przekazywanej przez parametr k7 . instance ( Normalizable a , N o r m a l i z a b l e b ) ⇒ N o r m a l i z a b l e ( a , b ) where n o r m a l i z e ( a , b ) k = do ( a ' , ( b ' , w) ) ← n o r m a l i z e a ( n o r m a l i z e b k ) r e t u r n ( ( a ' , b ' ) , w) Poni»szy fragment kodu oznacza, »e kategorie i zmienne wolne normalizuj¡ si¦ jako one same, natomiast warto±ci zmiennych s¡ normalizowane tak jak inne termy. Dodatkowy fragment pokazuje normalizacj¦ operatorów ≫ i ≪. 7

Oznaczenie to nie zostaªo wybrane przypadkowo 

57

k

jest skrótem od kontynuacja.

pair a b = return (a , b) i n s t a n c e ( Lambdable Type , Q u a n t i f i a b l e Type , Q u a n t i f i a b l e Formulae , UniLoop ( ) ) ⇒ N o r m a l i z a b l e Type where n o r m a l i z e t@ ( C l s _) k = k >>= ( p a i r t ) n o r m a l i z e t@ ( Ref r ) k = do f r e e ← isVarFree r i f f r e e then k >>= ( p a i r t ) e l s e do v a l u e ← getVarValue r normalize value k ... n o r m a l i z e (App b f x ) k = do ( f ' , ( x ' , w) ) ← n o r m a l i z e f $ n o r m a l i z e x k r e t u r n (App b f ' x ' , w) ... Klasa typów Lambdable okre±la które wyra»enia daj¡ si¦ przeksztaªci¢ do postaci t1 7→ t2 lub t2 ←[ t1 . Argumenty funkcji makeLam okre±laj¡ kolejno sposób traktowania kwantykatorów, kierunek operatora i przetwarzane wyra»enie. Pierwsz¡ zwracan¡ warto±ci¡ jest argument, drug¡ wynik. Dodatkowa wspóªrz¦dna typu FInfo przechowuje informacje o kwantykatorach, które zostaªy napotkane podczas przetwarzania, jej zastosowanie wida¢ przy obsªudze konstruktora Var. Sposób obliczania warto±ci funkcji dla Gcd wynika bezpo±rednio z zastosowania reguªy GcdLam sªabej semantyki (por. roz. 4.5). c l a s s Lambdable a where makeLam : : Bool → Bool → a → MM ( a , a , F I n f o ) instance ( Evaluable Type , Q u a n t i f i a b l e Type ) ⇒ Lambdable Type where ... makeLam q b t@ ( Var _ _ _ _) = do ( t ' , i ) ← unquantify q t ( a , r , vs ) ← makeLam q b t ' r e t u r n ( a , r , vs +++ i ) makeLam _ b (Lam c a r ) = i f b == c then r e t u r n ( a , r , F I n f o [ ] ) e l s e f a i l $ "" makeLam q b ( Gcd c d ) = do ( ca , cr , cv ) ← makeLam q b c ( da , dr , dv ) ← makeLam q b d r e t u r n ( Lca ca da , Gcd c r dr , cv +++ dv ) ...

58

5.4.3. Obsªuga ontologii

Jedn¡ z praktycznych trudno±ci, które pojawiªy si¦ podczas tworzenia oprogramowania, byª brak biblioteki dla j¦zyka Haskell pozwalaj¡cej na wczytywanie ontologii bezpo±rednio z plików OWL8 . Z drugiej strony nie istniej¡ analogiczne problemy dla j¦zyka Java, który posiada bardzo szerok¡ baz¦ bibliotek wszelkiego rodzaju. W ten sposób powstaª program OWLConverter, generator kodu, który na podstawie wej±ciowej ontologii tworzy odpowiednie struktury danych dla Haskella. Pozwala to na optymalizacj¦ w wewn¦trznej strukturze danych algorytmu. Ka»dej kategorii K ∈ Onto przyporz¡dkowana jest liczba naturalna cK z zakresu 3..n gdzie n jest ilo±ci¡ wszystkich znacze« podstawowych (1 oznacza Thing, 2 oznacza Nothing). Dodatkowo, ka»dej kategorii jest równie» przyporz¡dkowana druga liczba eK wyra»ona wzorem P n−2 − 1. Pozwala to na szybkie c−3 . Oczywi±cie e eK = Thing = 0 i eNothing = 2 cL :L≤K 2 obliczanie supremum i inmum za pomoc¡ bitowych operacji przeci¦cia i sumy. Zalet¡ takiego podej±cia jest proste rozwi¡zanie problemu poruszonego w rozdziale 3.1.5. Poniewa» graf ontologii nie musi by¢ krat¡ rozdzieln¡, uzupeªniany jest o dodatkowe elementy. Okazuje si¦, »e dodanie sum bitowych liczb eK tworzy ju» krat¦ rozdzieln¡9 . Na przykªad, cz¦±ciowy porz¡dek b¦d¡cy relacj¡ podzielno±ci dla zbioru {1, 2, 4, 5, 20} tworzy pi¦cioelementow¡ krat¦ nierozdzieln¡: niech 1 = Thing oraz 20 = Nothing, wtedy: (2 ∧ 5) ∨ 4 = 4, ale (2∨4)∧(5∨4) = 2. W zapisie bitowym krata ta przedstawia si¦ jako {000, 001, 011, 100, 111}, a dodawanym elementem jest 101, czyli odpowiednik liczby 10. W otrzymanej strukturze nadal (2 ∨ 4) ∧ (5 ∨ 4) = 2, ale (2 ∧ 5) ∨ 4 = 2. Nie jest to wynik zaskakuj¡cy  otrzymana krata, to krata dzielników liczby 20, h{1, 2, 4, 5, 10, 20}, NWD, NWWi, a rozdzielno±¢ NWD i NWW jest ogólnie znanym faktem z teorii liczb. Zastosowanie liczb eK pozwala równie» na szybkie obliczanie > i ?. Je»eli policzymy c∗ = a | ¬b oraz d∗ = b & ¬a i uzupeªnimy pierwsz¡ z liczb zerami10 , a drug¡ jedynkami11 do elementów kraty, to otrzymane elementy c i d b¦d¡ speªnia¢ c = a ? b i d = a > b. Oczywistym minusem jest konieczno±¢ rekompilowania programu przy ka»dej, nawet drobnej zmianie ontologii. Na szcz¦±cie nie jest to wielk¡ wad¡, gdy» napisana aplikacja jest zaledwie projektem badawczym, a nie produktem komercyjnym. Dodatkowo taki schemat budowy aplikacji pozwala u»y¢ kompilatora j¦zyka Haskell, do parsowania wyra»e« sªabej semantyki, co zwalnia programist¦ od pisania dodatkowego moduªu. 5.4.4. Uwagi dodatkowe

Projekt ten posiadaª kilka prototypów, które testowaªy ró»ne podej±cia. Nie bez znaczenia okazaª si¦ jednak wybór j¦zyka programowania do napisania najwa»niejszej cz¦±ci analizatora. Ka»dy z u»ywanych  Haskell, Java i Ruby  ma swoje wady i zalety. Ruby 12 jest niezast¡piony przy tworzeniu krótkich skryptów-narz¦dzi usprawniaj¡cych prac¦. Cho¢ ostateczna wersja aplikacji nie zawiera nawet maªego fragmentu napisanego 8 9

Nie jest to do ko«ca prawda, jednak dost¦pne opcje nie speªniaªy postawionych im wymaga«. Gdy przeci¦cie bitowe nie nale»y do

{eK , . . .},

to i tak jest ono sum¡ bitow¡ pewnych liczb nale»¡cych do

tego zbioru.

10

K jest wyzerowany, to bity wszystkich subkategorii K K jest ustawiony, to bity wszystkich superkategorii K 12 http://www.ruby-lang.org/

11

Je»eli bit kategorii

te» musz¡ by¢ wyzerowane.

Je»eli bit kategorii

te» musz¡ by¢ ustawione.

59

w tym j¦zyku, bez jego pomocy (lub j¦zyka podobnego, np. Pythona ) kodowanie zaj¦ªoby znacznie wi¦cej czasu. Niestety dynamiczne typowanie wymaga wielkiej bazy testowej, a niska wydajno±¢ (Ruby jest j¦zykiem interpretowanym) jest jego powa»n¡ wad¡. Java 13 to dojrzaªy j¦zyk obiektowy uruchamiany na specjalnej, stosowej maszynie wirtualnej, dzi¦ki której posiada niew¡tpliw¡ zalet¦  przeno±no±¢. Kolejn¡ jest ilo±¢ bibliotek, które zostaªy napisane dla Javy, a tak»e ªatwo±¢ w ich u»yciu. Dodatkowym atutem s¡ ±rodowiska wspomagaj¡ce prac¦ programisty, takie jak NetBeans czy Eclipse. Niestety sam j¦zyk nie posiada wsparcia dla domkni¦¢ (ang. closures ) ani lambda wyra»e«14 . Ponadto kod napisany w Javie jest bardzo opisowy  procedury w prototypie napisanym w Javie w porównaniu do analogicznych funkcji napisanych w Haskellu, byªy okoªo 2-3 razy dªu»sze i subiektywnie tyle» samo razy mniej czytelne. Haskell 15 jest statycznie typowanym funkcyjnym j¦zykiem programowania z leniwym warto±ciowaniem. Jego gªówn¡ wad¡ jest do±¢ maªa popularno±¢16 , a co si¦ z tym wi¡»e wzgl¦dnie maªa baza dopracowanych bibliotek. Dodatkowo funkcyjna czysto±¢17  pozwala wprawdzie na szereg automatycznych optymalizacji czy uªatwion¡ obsªug¦ wspóªbie»no±ci, ale niestety istotnie komplikuje obsªug¦ wej±cia i wyj±cia. Zalet¡ j¦zyka jest jego rozbudowany system typów oraz wyj¡tkowo czytelna skªadnia, które pozwalaj¡ na tworzenie kodu z maª¡ ilo±ci¡ bª¦dów. Podczas rozwijania prototypu w Javie, jednym z najwi¦kszych problemów byªo wykrywanie pomyªek w kodzie. Skomplikowany przepªyw programu poª¡czony z przeplataj¡cymi si¦ wywoªaniami ró»nych gaª¦zi rezolucji powodowaª, »e jedynie bardzo proste fragmenty ¹ródªa poddawaªy si¦ debugowaniu. To sprawiªo, »e Haskell, udost¦pniaj¡cy koncept monad i przejrzyst¡ do -notacj¦ (ang. do-notation ), okazaª si¦ najlepszym wyborem. Mo»liwo±¢18 skoncentrowania kodu zarz¡dzaj¡cego kontekstami w jednym miejscu i formuªowania reszty jakby dla pojedynczego wyprowadzenia znacznie przyspieszyªa proces implementacji i uªatwiªa poprawianie usterek w kodzie. Z wielu dost¦pnych implementacji, do kompilacji ¹ródeª u»yto The Glasgow Haskell Compiler 19 ze wzgl¦du na rozszerzenia, które udost¦pnia. Do zarz¡dzania ontologi¡ wykorzystano program Protégé 20 , który rozwijany jest przez Stanford Center for Biomedical Informatics Research w ramach grantu LM007885 United States National Library of Medicine 21 . Kod ¹ródªowy zostaª napisany w edytorze Vim 22 autorstwa Brama Moolenaara. Praca badawcza trwaªa ponad rok, natomiast sama implementacja zaj¦ªa okoªo trzech miesi¦cy. W tym czasie powstaªo ponad 8000 wierszy kodu i ontologia licz¡ca 1528 obiektów. Š¡cznie autor zu»yª energi¦ elektryczn¡ wystarczaj¡c¡ do wystrzelenia du»ego sªonia poza ukªad sªoneczny oraz niezliczon¡ ilo±¢ wkªadów do oªówków. Strat w ludziach nie byªo. 13 14

http://www.java.com

Konstrukcje te maj¡ zosta¢ wprowadzone w wersji kompilatora 7.0. http://www.haskell.org/ 16 http://langpop.com/, http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

15

17

Ka»da procedura w Haskellu jest funkcj¡ w matematycznym znaczeniu tego sªowa (np. nie istniej¡ efekty

uboczne).

18 19 20 21

Podobne podej±cia byªy próbowane we wcze±niejszych prototypach, ale bez sukcesów.

http://www.haskell.org/ghc/ http://protege.stanford.edu This work was conducted using the Protégé resource, which is supported by grant LM007885 from the

United States National Library of Medicine.

22

http://www.vim.org/

60

Rozdziaª 6

Wyniki Przedstawiony w poprzednim rozdziale algorytm bardzo dobrze spisywaª si¦ w przygotowanych testach. Niestety autor pracy natraª na powa»ny problem natury praktycznej. Ze wzgl¦du na brak mo»liwo±ci zastosowania gotowej ju» gramatyki oraz trudno±ci zwi¡zane z automatyczn¡ generacj¡ reguª sªabej semantyki, sªownik i ontologia wykorzystywane do testów byªy do±¢ maªych rozmiarów. Z tego powodu, mimo »e algorytm dawaª sobie rad¦ nawet w trudnych przypadkach, nie udaªo si¦ przeprowadzi¢ testów ilo±ciowych, które by rzetelnie potwierdziªy mo»liwo±ci zastosowanego podej±cia.

6.1. Wyj±cie z algorytmu Wyj±cie z algorytmu stanowi¡ dwa elementy: wyra»enie sªabej semantyki opisuj¡ce caªe zdanie, oraz drzewo jego wyprowadzenia. Dla przykªadu zdanie Annie included Bonnie ma znaczenie Event[Rel = Include01] [Arg1 = Bonnie][Arg0 = Annie]. Z typu mo»na przeczyta¢, »e zdanie opisuje wydarzenie Event, w którym Annie wykonuje akcj¦ opisywan¡ znaczeniem Include01 na Bonnie. Po lewej stronie przedstawiono typ w postaci hierarchicznej, a po prawej odpowiednie drzewo rozkªadu:

Event[Rel = Include01] [Arg1 = Bonnie][Arg0 = Annie] X  

Event Rel = Include01 Arg0 = Annie Arg1 = Bonnie

XXX X

Annie

Include01AA [Rel = Include01] [Arg1 = Bonnie]

Annie

!aa a !!

Include01A

Bonnie

included

Bonnie

Bardzo podobne zdanie The list included Bonnie b¦dzie miaªo inne znaczenie: RelationStatement[Rel = Include01][Arg2 = List][Arg1 = Bonnie]. W drzewie wyprowadzenia wida¢ przej±ciowe wyra»enie sªabej semantyki, które stanowi cz¦±ciow¡ aplikacj¦ znaczenia sªowa include. 61

RelationStatement[Rel = Include01][Arg2 = List][Arg1 = Bonnie] (h ((( (((( (

List List

The

list

hh h

(Var 7 (Nothing, Include01B.arg2Type) (TT ) (7 7→ RelationStatement[Rel = Include01B.rel] [Arg2 = 7][Arg1 = Bonnie]))

ZZ

DT

hhh hh

!aa !! a

Include01B

Bonnie

included

Bonnie

Warto zauwa»y¢, »e pomimo, i» u»yty zostaª ten sam czasownik, to zdanie nie ma znaczenia wydarzenia Event, ale okre±lenia relacji RelationStatement. Inne s¡ równie» argumenty: nie wyst¦puje wªa±ciwo±¢ Arg0, natomiast wyst¦puje Arg2. Wynika to z tego, »e opisuj¡ one odpowiednie role tematyczne dla czasownika include. Arg0 oznacza wykonuj¡cego czynno±¢ wstawiania lub zawierania, Arg1 obiekt czynno±ci lub relacji, a Arg2 odpowiedni zbiór lub grup¦. Na koniec przedstawiony jest przykªad zawieraj¡cy wszystkie trzy argumenty, Annie was included by Bonnie in the required list. W zdaniu zostaªa u»yta strona bierna, jednak nie przeszkadza to w wyprowadzeniu.

Event[Rel = Include01] [Arg2 = List[required = True]] [Arg1 = Annie][Arg0 = Bonnie] (h (( (((( (

Annie Annie

hhhh

hh h

(Var 5 (Nothing, Thing) (TT ) (5 7→ PassiveVoiceActor ≫ Include01A[Arg2 = List[required = True]][Arg0 =(Bonnie] ≪ 5)) h

(( (((( ((( (

Was was

hhh hhhh

hh h

Include01A [Arg2 = List[required = True]] [Arg0 = Bonnie] (h

( (((( ( ((

(

hhhh h

Include01A [Arg0 = Bonnie] X  



Include01A included

XXX

X X

hhh

h

(Var 5 (Nothing, Thing) (TT ) (5 7→ 5 ≫ 5.in ≪ List[required = True])) PP  P  P

(Var 5 (Nothing, Thing) (TT ) (5 7→ 5 ≫ 5.by ≪ Bonnie))

In

List[required = True]

Q  Q

in

 

By

Bonnie

DT

by

Bonnie

the

62

PP

P P

List[required = True]  

H H H

Required

List

required

list

6.2. Testy ukªadane W tej cz¦±ci zostan¡ przedstawione przykªadowe wyprowadzenia reprezentuj¡ce ró»ne zagadnienia wyst¦puj¡ce w j¦zyku naturalnym.

Š¡czenie czasowników:

Annie knows and likes Bonnie.

RelationStatement Rel = Lexical Arg0 = Annie Arg1 = Bonnie op = And A = Know01A B = Like01A

Zdania wzgl¦dne:

Annie knows Bonnie who likes Charlie.

RelationStatement Rel = Know01 Arg0 = Annie Arg1 = Bonnie who = RelationStatement Rel = Like01 Arg1 = Charlie Arg0 = Bonnie

63

Zdania podrz¦dne:

Annie knows that Bonnie likes Charlie.

RelationStatement Rel = Know01 Arg0 = Annie Arg1 = RelationStatement Rel = Like01 Arg0 = Bonnie Arg1 = Charlie

Wtr¡cenia:

Annie (who knows Bonnie) likes Charlie.

RelationStatement Rel = Like01 Arg0 = Annie parenthesis = RelationStatement Rel = Know01 Arg0 = Annie Arg1 = Bonnie Arg1 = Charlie

64

Niejednoznaczno±ci (1):

I saw her duck.

Algorytm bezbª¦dnie rozpoznaje obydwa

wyprowadzenia.

RelationStatement Rel = See01 Arg0 = I Arg1 = Duck owner = Her

Niejednoznaczno±ci (2):

RelationStatement Rel = See01 Arg0 = I Arg1 = Event Rel = Duck01 Arg0 = Her

W tym przypadku jednak nie jest to takie proste, gdy» program podaje a» trzy wyprowadzenia: kwiaty przysªane dla pacjenta, który przyjechaª, kwiaty, które przyjechaªy, przysªane dla pacjenta i poprawne kwiaty przysªane dla pacjenta przyjechaªy.

Flowers sent = True Arg2 = Patient arrived = True

The owers sent for the patient arrived.

Flowers sent = True arrived = True Arg2 = Patient

Event Rel = Arrive01 Arg0 = Flowers sent = True Arg2 = Patient

Jednak wystarczy ograniczy¢ si¦ do wyprowadze«, które tworz¡ caªe zdania  doda¢ kropk¦ na ko«cu  i otrzymujemy tylko jedno wyprowadzenie. 65

Niejednoznaczno±ci (3):

The doctor sent for the patient arrived. W przypadku doktora sytuacja ma si¦ podobnie, ale tym razem dodanie kropki nie usuwa wszystkich niejednoznaczno±ci. Jednak jest to wynik poprawny  ka»da z tych mo»liwo±ci jest dopuszczalna: doktor posªaª po pacjenta, który przyjechaª, oraz doktor, wysªany dla pacjenta, przyjechaª.

Event Rel = Arrive01 Arg0 = Doctor sent = True Arg2 = Patient

Event Rel = Send02 Arg0 = Doctor Arg1 = Patient arrived = True

66

6.3. Przykªady instancji problematycznych Nie wszystkie jednak zdania parsuj¡ si¦ poprawnie. Ju» dla prostych przykªadów pojawiaj¡ si¦ problemy, a ¹ródªem ich jest spójnik and. Poniewa» reguªa dla koniunkcji nie ogranicza dozwolonych argumentów, zdarzaj¡ si¦ wyprowadzenia, w których ª¡czone s¡ zupeªnie ró»ne od siebie obiekty.

Problem (1):

Annie knows Bonnie and Charlie. To zdanie demonstruje wyprowadzenie, w którym fraza Annie knows Bonnie zostaje poª¡czona spójnikiem razem z fraz¡ Charlie. Obydwie posiadaj¡ jako superkategori¦ Concept i taki jest te» jeden z wynikowych typów wyra»enia.

RelationStatement Rel = Know01 Arg0 = Annie Arg1 = Person op = And A = Bonnie B = Charlie

Concept op = And A = RelationStatement Rel = Know01 Arg0 = Annie Arg1 = Bonnie B = Charlie

Problem (2): Dodatkowe problemy z and pojawiaj¡ si¦ w obecno±ci okre±le«. Na przykªad

nie wiadomo dokªadnie, jak powinno zosta¢ rozªo»one zdanie Good Annie and Bonnie know Charlie, czy dobra jest tylko Annie, czy Bonnie te». W j¦zyku mówionym zostaªoby to zaznaczone za pomoc¡ pauz i akcentów, ale w j¦zyku pisanym takie rozró»nienie si¦ nie pojawia. Szcz¦±liwie pozostawienie tylko rozkªadów b¦d¡cych wyprowadzeniami peªnych zda« likwiduje znaczn¡ wi¦kszo±¢ niechcianych przypadków, z drugiej strony istniej¡ te» takie, których si¦ nie da ªatwo rozs¡dzi¢. Aby zaznaczy¢ skal¦ problemu poni»ej przedstawiam 47 miniaturek ró»nych rozkªadów zdania Good Annie and Bonnie know bad Charlie and Daniel and like ugly Eric and Frank.

67

68

6.4. Testy na podstawie formularzy 10-K W tej cz¦±ci zostaªy zaprezentowane przykªady zda« z formularzy 10-K Ameryka«skiej Komisji Papierów Warto±ciowych. Warto zwróci¢ uwag¦, »e pomimo skomplikowanej struktury zdania te s¡ przetwarzane poprawnie. Wybranym wyj¡tkiem jest ostatni przykªad, w którym du»a ilo±¢ spójników and powoduje istotne problemy.

Amounts received as a return of capital are not included in calculation of this portion of the incentive fee. Powy»sze zdanie ma dwa wyprowadzenia o tym samym wyniku. Poni»ej zaprezentowano tylko jedno drzewo rozkªadu.

Event Rel = Include01 not = True Arg0 = PassiveVoiceActor Arg1 = Money received = True Arg2 = Calculation of = Portion of = Money incentive = True

69

The notes are unsecured, convertible into shares of common stock at $0.247 per share and were issued with a 55% original issue discount totaling $2,190,400. Ten trudny przykªad zostaª przetworzony w caªo±ci bez najmniejszych bª¦dów.

Whole op = And Arg1 = Concept Arg0 = Entity B = (Var 12 (Nothing,Thing) (TT) (12 --> PassiveVoiceActor >>> Issue01A [with = IssueDiscount[ratio = Ratio][original = True]] [Rel = Issue01B][Arg2 = Totalization[amount = Money]]

Suggest Documents