NLP czyli Natural Language Processing

19 Październik 2009

Czas pozbierać trochę myśli związanych z przetwarzaniem języka naturalnego czyli z angielskiego “natural language processing” (NLP).

Język naturalny to, w odróżnieniu od języków sztucznych (np. Esperanto) i języków formalnych (np. języki programowania), język powstały jako rezultat naturalnej ludzkiej aktywności poznawczej i komunikacyjnej. Do języków naturalnych zaliczamy np. język polski, angielski czy chiński. W odróżnieniu od języków sztucznych i formalnych, język naturalny nie jest budowany w sposób celowy, w oparciu o z góry założone zbiory reguł oraz alfabety lub słowniki. Jest to język rozwijający się historycznie, podlegający rozmaitym modyfikacjom wynikającym chociażby z miejsca na świecie, w którym jest używany.

Jednym z głównych celów języków sztucznych, a w szczególności języków formalnych, jest zapewnienie bardzo precyzyjnej lub wręcz absolutnie jednoznacznej komunikacji. Stąd tworzenie szczegółowych reguł i zasobów języka. Język naturalny jest natomiast pełen nieścisłości, niejasności, braku precyzji, a tym samym miejsca na wielorakie interpretacje, twórcze działania itp. itd. Ludzie dzięki różnym złożonym procesom uczą się jak rozumieć język i jak go używać do komunikowania swoich myśli. Jedni robią to zresztą lepiej a inni gorzej. Mówimy do siebie nawzajem, piszemy i jakoś tak się dzieje, że jednak zazwyczaj się rozumiemy. I to pomimo najprzeróżniejszych wieloznaczności, nieścisłości lub po prostu błędów. Od najwcześniejszego okresu życia nabywamy rozmaite kompetencje głównie poprzez słuchanie i naśladowanie.  Językoznawcy nie są zresztą do końca zgodni co do tego czy przypadkiem nie posiadamy jakiegoś wewnętrznego, wrodzonego “języka”, który bardziej budzimy i wypełniamy niż tworzymy od zera. Niemniej jednak ważny jest tu rezultat. Mniej więcej w wieku 5 lat jesteśmy już baaaaardzo sprawni językowo, formułujemy proste i bardziej złożone zdania, rozumiemy co do nas mówią.

Nic z tego nie byłoby możliwe gdyby nie fakt, że język naturalny, jakkolwiek nieprecyzyjny, oparty jest  na zbiorze określonych słów i reguł ich tworzenia (np. dodawanie przedrostków: wy-sunąć, za-sunąć, prze-sunąć, po-sunąć, do-sunąć) oraz ich ustawiania czyli składni. Forma i pozycja mają znaczenie. Dzięki temu wiemy, że “szukać” i “sprzątać” to czasowniki a “po-szukiwa-nie” i “sprząta-nie” to rzeczowniki. Wiemy też, że “poszukiw-acz” i “sprząt-acz” to wykonawcy tych czynności. A dzięki otwartości na język może i trochę się dziwimy kiedy po raz pierwszy widzimy słowo “szukacz”, ale zupełnie nie przeszkadza nam to domyślić się co “szukacz” robi.

Równie dobrze radzimy sobie z rozumieniem znaczenia słów w kontekście czyli w towarzystwie innych słów. Ta zdolność pozwala nam chociażby wybrać właściwe znaczenie danego słowa spośród kilku innych znaczeń tego samego słowa. Kiedy słyszymy zdanie “Książę chodził często po swoim zamku z rozpiętym zamkiem u spodni i przekręcał klucze w zamkach” raczej nie mamy wątpliwości o które różne zamki chodzi.

A jak sprawić, żeby maszyna była w stanie zinterpretować nawet tak  proste zdanie? Musimy nauczyć ją przetwarzać język naturalny czyli tak opisać język, żeby można było odwołać się m.in. do słowników, zbioru reguł słowotwórczych i reguł dotyczących składni. Musimy pokazać jej typowe zastosowania i zestawienia grup słów czyli związki frazeologiczne. Poważne wyzwanie. :)

A po co to wszystko? Trudno wyobrazić sobie np. dobrze działającego komputerowego tłumacza, który nie potrafi “wydobyć” znaczenia ze słów i tekstu. Wyszukiwarka internetowa posiadająca umiejętność zrozumienia znaczenia tekstu napisanego przez człowieka lepiej zaindeksuje treść dokumentu i lepiej dobierze go do zapytania użytkownika. Bez zdolności przetwarzania języka naturalnego trudno wyobrazić sobie maszynę odpowiadająca na pytania zadane przez człowieka tak, jakby były zadane innemu człowiekowi. Poważne wyzwanie. :)

A do tego dochodzi jeszcze kwestia uczenia się.. W końcu język ciągle się zmienia. Pojawiają się nowe słowa, nowe znaczenia słów, nowe związku frazeologiczne.. Jak komputer ma to wszystko ogarniać, żeby uzyskać jakiś w miarę przyzwoity rezultat w komunikacji z człowiekiem? Baaardzo poważne wyzwanie. :)

Na koniec, doleję trochę oliwy do ognia i spytam: co to jest znaczenie? :) Krótko mówiąc, kiedy już nawet nauczymy komputer tych wszystkich rzeczy, to co właściwie uzyskamy? Jak ma on wyrazić znaczenie? Co zachodzi w naszej głowie kiedy ustalimy, o który “zamek” chodzi? Zamykam oczy i wyobrażam sobie zamek jako coś co zamyka drzwi. Czy zamek to tylko taki zamek z kluczykiem czy też z gałką? Czy zasuwka u drzwi toalety to też zamek? Czy zamek w kłódce jest bardziej zamkiem niż zasuwka w toalecie? Mówiąc trochę bardziej fachowo, jaki jest mój koncept zamka? No i skoro ja mam jakiś koncept zamka to jak go przekazać maszynie. Gdzie i jak go przechować???

Dopóki mam się zamknąć w toalecie i zrobić swoje* takie rozważania na temat zamka nie mają zbyt wielkiego znaczenia praktycznego. Jednak gdybym miał przetłumaczyć instrukcję obsługi…

Dobra, wystarczy. Zbyt poważne wyzwania tu opisuję, żeby spłycać je do jednego posta. Pozbieram wkrótce trochę informacji o tym co się w tej dziedzinie dzieje. A dzieje się całkiem sporo. Póki co, polecam http://plwordnet.pwr.wroc.pl/main/ i http://wordnet.princeton.edu/.

*skąd wiemy co może oznaczać “zrobić swoje” w tym zdaniu? :)

Konferencja ICCCI 2009

15 Październik 2009

Pierwsza międzynarodowa konferencja poświęcona Collective Intelligence i Semantic Web już za nami. Odbyła  się we Wrocławiu 5 i 6 października i została zorganizowana przez Politechnikę Wrocławską. Dzięki życzliwości dra Radosława Katarzyniaka odpowiadającego za sprawy organizacyjne dostałem porcję informacji pokonferencyjnych, z którymi dziele się “na szybkiego” poniżej.

“1st International Conference on Computational Collective IntelligenceSemantic Web, Social Networks & Multiagent Systems

W dniach 5-7 października 2009 odbyła się konferencja ICCCI 2009.

Sesji inauguracyjnej przewodniczyli: pomysłodawca i przewodniczący komitetu programowego serii konferencji ICCCI konferencji prof. dr hab. inż. Ngoc Thanh Nguyen z Instytutu Informatyki, Dziekan Wydziału Informatyki i Zarządzania, dr hab. inż. Jerzy Świątek, prof. PWr., oraz Dyrektor Instytutu Informatyki prof. dr hab. inż. Zbigniew Huzar.

Celem konferencji było omówienie problematyki kolektywnej inteligencji obliczeniowej (ang. computational collective intelligence), działu sztucznej inteligencji, zajmującego się zastosowaniem przybliżonych metod obliczeniowych w modelowaniu i rozwiązywaniu problemów z zakresu grupowego podejmowania decyzji oraz przetwarzania wiedzy w środowiskach rozproszonych. Systemy webowe, sieci społeczne i systemy wieloagentowe, wymienione w tytule konferencji, stanowią podstawowy kontekst praktyczny zastosowania idei kolektywnej inteligencji obliczeniowej w grupowym przetwarzaniu wiedzy, rozwiązywaniu konfliktów i podejmowaniu decyzji.

Zaproszone wykłady plenarne przedstawili prof. Pierre Lévy z Uniwersytetu w Ottawie, prof. Piotr Jędrzejowicz z Akademii Morskiej w Gdyni oraz prof. Roman Słowiński z Politechniki Poznańskiej.

Trzydniowe obrady odbywały się w centrum konferencyjnym Hotelu Panorama we Wrocławiu. W konferencji udział wzięło 120 prelegentów i słuchaczy z kraju i zagranicy. Wygłoszono 90 referatów (ze 105 zaplanowanych wystąpień).

Konferencja miała międzynarodowy charakter. Uczestnicy reprezentowali wszystkie główne krajowe ośrodki naukowe (Wrocław, Poznań, Warszawa, Kraków, Szczecin, Gliwice, Lublin) oraz szereg zagranicznych ośrodków naukowych (Australia, Brazylia, Chorwacja, Cypr, Czechy, Finlandia, Francja, Niemcy, Islandia, Indie, Japonia, Malezja, Meksyk, Nowa Zelandia, Irlandia, Korea Pd., Rumunia, Słowacja, Hiszpania, Tajwan, Tajlandia, Holandia, Turcja, Wenezuela, Wietnam).

Materiały konferencyjne wydano w serii LNAI (Vol. 5796). Ze względu na wysoki poziom merytoryczny prac przesłanych do organizatorów konferencji, część z nich opublikowana została jako rozdziały w monografii naukowej wydanej w serii Studies in Computational Intelligence (vol. 244) – Springer Verlag.

W czasie konferencji zainaugurowano nowe międzynarodowe czasopismo Transactions on Computational Collective Intelligence – podserię LNCS wydawaną przez Springer Verlag i edytowaną przez prof. dr hab. inż. Thanh Ngoc Nguyena pracownika Instytutu Informatyki Politechniki Wrocławskiej.

Uroczysty bankiet odbył się w Starej Garbarni (Wrocław – Leśnica). W trakcie spotkania przedstawiono miejsce organizacji ICCCI 2010. Odbędzie się ona na Tajwanie.”


Poniżej statystki ilości prezentacji z poszczególnych ośrodków naukowych w Polsce:

Uczelnie Ośrodki naukowe (razem)
AGH

7

Polit. Gdańska

1

Kraków

7

Akademia Morska w Gdynii

1

Trójmiasto

4

WAT

1

Warszawa

7

IBS PAN

2

Poznań

9

Pols.-Jap. WSI Warszawa

2

Gliwice

1

Uni. Warsz.

1

Polit Warszawska

3

UAM

1

Szczecin

1

WSB Poznań

1

Olsztyn

1

Uniw.Ekon. Poznan

1

Wrocław

20

Polit. Poznań.

6

Uniw.Gdański

2

Polit. Świętokrz.

1

Zachodniopomorski Uniwersytet Technologiczny (Szczecin)

1

Olsztyn

1

Polit. Wrocł.

20

Zamość

1

KUL

1

Lublin 2


Tutaj lista krajów reprezentowanych podczas konferencji:

Australia
Brazylia
Chorwacja
Cypr
Czechy
Finladia
Francja
Niemcy
Islandia
Indie
Japonia
Malezja
Meksyk
N. Zelandia
Poland
Irlandia
Korea Pd.
Rumunia
Słowacja
Hiszpania
Tajwan
Tajlandia
Holandia
Turcja
Wenezuela
Wietnam

Przyznano dwie Best Paper Awards:
1. Proposal of a New Rule-based Inference Scheme for the Semantic Web Applications
Nalepa, Grzegorz J.; Furmańska, Weronika T.
2. A Multi-agent Model of Deceit and Trust in Intercultural Trade
Verwaart, Tim; Hofstede, Gert Jan; Jonker, Catholijn M.

To tyle, kiedy będzie miał coś więcej, podzielę się.

Semantyczna “Trójca” ;), czyli jak reprezentować wiedzę

11 Październik 2009

Każdy kto zetknął się lub zetknie się z koncepcją Semantic Web dość szybko musi zmierzyć się z pojęciem “trójki” (ang. triple) oraz “triplestore” czyli składu trójek. O co chodzi? To pojęcie jest nierozerwalnie związane z tematem, o którym pisałem w poprzednim poście, czyli z ontologiami. Ale po kolei.

Semantyczna trójka to zbiór trzech elementów czyli podmiotu (ang. subject), orzeczenia (ang. predicate) oraz dopełnienia (ang. object). To terminologia znana pewnie każdemu absolwentowi gimnazjum, a może nawet podstawówki. Znana z ćwiczeń wykonywanych głównie w ramach lekcji języka polskiego, a nazywanych “logicznym rozbiorem zdania”.  Co prawda części zdania jest więcej niż podane trzy (np. okolicznik), ale nas interesują te właśnie.

Weźmy proste zdanie “Ala ma kota”. Podmiotem jest ‘Ala’, orzeczeniem ‘ma’ (ktoś jeszcze pamięta, że podmiot podkreślało się jedną kreską, a orzeczenie dwiema? ;) ), a dopełnieniem ‘kot’. Tak zbudowana wypowiedź pokazuje relację (orzeczenie) pomiędzy jakąś Alą i jakimś kotem.  To właśnie trójka.

Wrócę do poprzedniego posta, w którym pisałem o tym skąd wiemy, że chleba trzeba szukać w sklepie spożywczym. Jak opisać tę wiedzę? I tu właśnie użyjemy ‘trójki’ lub kilku ‘trójek’.

Możemy to zrobić na przykład budując taką trójkę:

Przykład  1:

“Chleb jest sprzedawany w sklepie spożywczym.”

Hmmm.. gdzie tu trójka?? :) Już pokazuję:

(”Chleb”, ” jestSprzedawanyW”, “SklepSpożywczy”)

W praktyce trójki służące do reprezentowania wiedzy (ang. KR – knowledge representation) tworzą zbiory takich zdań, które nazywamy… ontologiami. A ontologie wypełnione (czy inaczej ’spopulowane’) konkretnymi obiektami tworzą bazy wiedzy. Klasyfikacja, czyli podział na klasy pomiędzy którymi występują określone relacje, zazwyczaj opiera się na jakiejś hierarchii nad-klas i pod-klas.

Więc ontologia, z której skorzysta jakaś aplikacja wnioskująca gdzie kupić chleb pewnie będzie miała przynajmniej takie poziomy klasyfikacji:

Przykład 2:

(”Chleb”, “jestProduktemTypu”, “Pieczywo”) – tu mówimy, że klasa “Pieczywo” jest superklasą (nad-klasą) klasy “Chleb”

(”Pieczywo”, “jestSprzedawanyW”, “SklepSpożywczy”) – tu mówimy, gdzie obiekty klasy “Pieczywo” i jej podklas są sprzedawane

Utworzymy taką konstrukcję choćby po to, żeby łatwo można było rozbudować ontologię o kolejną porcję wiedzy np.:

(”Bułka”, “jestProduktemTypu”, “Pieczywo”)

żeby wiedzieć gdzie kupić bułkę.

I tak oto przy użyciu kilku wypowiedzi w formie ‘podmiot-orzeczenie-dopełnienie’ zapisaliśmy pewną wiedzę. W oparciu o dwa zdania z przykładu 2 możemy wywnioskować, że chleb można kupić w sklepie spożywczym.

No a po co triplestore, czyli magazyn trójek? Po to, żeby zapisywać w nim właśnie takie trójkowe wypowiedzi.

O tym jak w Semantic Web wyglądają takie trójki, co to jest RDF, OWL, co je łączy z XML i jaką rolę odgrywa URI pewnie jeszcze napiszę. ;)

Trochę o ontologiach

9 Październik 2009

Ontologia jako dział filozofii to nauka o bycie, o tym co jest. Dobrą pigułkę wiedzy na temat ontologii dostarcza polska wikipedia tutaj. Ważne żeby rozumieć, że to mądrze brzmiące słowo jest nam bardzo bliskie każdego dnia.

Bez posługiwania się ontologiami nie bylibyśmy w stanie sprawnie zrobić zakupów spożywczych. Skąd wiedzielibyśmy, że po chleb, masło i szynkę trzeba pójść do spożywczego a nie np. papierniczego. Ano stąd, że te artykuły klasyfikujemy jako artykuły spożywcze i na pewno nie papiernicze (mimo, że kiepska szynka ma czasem smak wilgotnego kartonu), a artykuły spożywcze kupuje się w sklepie spożywczym. Dalej, dlaczego po chleb idziemy do działu “Pieczywo”, po mleko do działu “Nabiał” a po szyneczkę do działu “Mięso”? Znów z powodu klasyfikacji. Możemy zatem powiedzieć, że w sklepie spożywczym znajdziemy przedmioty należące do poszczególnych klas. Widać z tego, że “ontologia” to nie tylko zajęcie dla filozofów. Ontologia to reprezentacja klas bytów i zależności między nimi. Ważne żeby pamiętać, że włożony przeze mnie do koszyka chleb to nie jest część ontologii, ale obiekt klasy “chleb”, konkretna instancja tej klasy. Tu widać, że ontologia to rodzaj modelu, a nie katalog przedmiotów danej dziedziny. Lista obiektów to populacja ontologii zwana też czasem bazą wiedzy. Można powiedzieć, że: ontologia+obiekty=baza wiedzy.

Żeby człowiek mógł sprawnie przemierzać sklepowe stoiska w poszukiwaniu określonych towarów, żeby potrafił wnioskować gdzie znajdzie mleko, potrzebuje wiedzy o tej części rzeczywistości. Jeśli chcemy, żeby maszyna potrafiła zachowywać się podobnie musimy nauczyć ją tego co jest i musimy to zrobić szybko, bo nie będzie miała okazji od dziecka chodzić z rodzicami po sklepach, żeby gromadzić tę wiedzę. Trzeba zatem specjalisty w tej dziedzinie (np. jakiegoś doświadczonego “społem’owskiego” magazyniera), który opisze te byty czyli stworzy ontologie.

I nam właśnie o taką ontologię chodzi. Ontologie pojawiły się w informatyce dawno temu, na długo przed ukuciem terminu Semantic Web. Jednak od początku istnienia koncepcji Semantic Web oba te pojęcia chadzają za rękę.

Na pewno będę jeszcze pisać o ontologiach i przygodach z ich tworzeniem. A póki co zainteresowanych tematem odsyłam po doskonałe narzędzie do tworzenia ontologii czyli Protege, które znajdziecie tutaj.

Praktycy zapewne docenią tutorial dostępny pod tym linkiem. Serdecznie polecam!

Niech zrobi się semantycznie..

5 Październik 2009

Chociaż Semantic Web to nie jest młody temat (zrodził się w zasadzie wraz z początkiem XXI w. !) wygląda na to, że chyba dopiero teraz zyskuje właściwą masę krytyczną. Praktycy nie zadają już pytania “czy?” tylko “jak?”. Coraz więcej danych udostępnianych jest w formatach konsumowalnych przez maszyny. Coraz więcej narzędzi i środowisk deweloperskich do pracy nad aplikacjami. Tym samym coraz więcej aplikacji. Warto śledzić tę technologię, bo wydaje się być “the next big thing” Internetu.

W swoim fundamentalnym założeniu idea jest bardzo prosta i przekonująca, a streszczę ją tak: “uczynić z Sieci sieć danych a nie tylko sieć treści.”  Spełnienie tego warunku ma szanse doprowadzić do sytuacji, w której maszyny będą publikować, gromadzić, zbierać dane, a ludzie będą tworzyli aplikacje, które będą te dane analizowały i na podstawie tych analiz przeprowadzały wnioskowanie. Dlaczego mamy tracić czas na gromadzenie danych, wyłuskiwanie ich z kontekstu różnych dokumentów skoro moglibyśmy swój potencjał intelektualny wykorzystać bardziej twórczo np. na analizę danych, wskazywanie które dane są potrzebne, poszukiwanie zależności między danymi, tworzenie praktycznych aplikacji wykorzystujących pozyskane dane.

Zanim ludzie zaczęli pisać i czytać książki musieli wkładać dużo więcej energii w pozyskiwanie informacji o świecie. Kiedy mogli wejść do biblioteki i z półki zdjąć książki dotyczące interesującego ich tematu, nie musieli się już skupiać na pozyskaniu źródła informacji, a głównie na jej przyswajaniu i analizie. W sensie cywilizacyjnym to wielki skok. Dziś przeglądamy dziesiątki stron internetowych oferujących dane dotyczące tych samych zagadnień w wielu różnych formatach. Dane o ilości mieszkańców w wybranym kraju możemy odczytać z dokumentu html umieszczonego np. w wikipedii, liczby umieszczonej w arkuszu kalkulacyjnym udostępnionym do ściągnięcia przez jakiś organ statystyczny, wyszukać ją w jakiejś prezentacji w formacie pdf itd. Jako ludzie nie mamy większego problemu żeby jednoznacznie zaklasyfikować znalezioną treść jako daną odpowiadającą naszym poszukiwaniom. Czy nie szkoda jednak czasu na ponowne odkrywanie rzeczy oczywistych? Moim zdaniem szkoda. I kiedy w Sieci zrobi się bardziej semantycznie nasz czas i energię będziemy mogli poświęcić na ciekawsze wyzwania. Więc niech zrobi się semantycznie…