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?
Tagi: natural language processing, nlp, przetwarzanie języka naturalnego, słowosieć, wordnet