Przetwarzanie tekstu i modele języków naturalnych
Prowadzący: Kornel Jankowski
Opis
Warsztaty merytorycznie złożą się z dwóch części:
Zaawansowana obróbka danych tekstowych
Nauczymy się używać standardowych narzędzi dostępnych na systemach Linuksowych do różnego rodzaju zadań związanych z przetwarzaniem tekstu - głównie oczyszczaniem tekstów ze śmieci na różne sposoby, ale także np. ujednolicaniem pisowni itp. Naszą najlepszą bronią w tej części będą wyrażenia regularne, wzniesiemy się na wyżyny magii, którą można wykonać z użyciem zwykłych linuksowych shellowych skryptów - to dobra okazja, żeby zobaczyć jak kilka pozornie prostych narzędzi połączonych sprytnie pozwala niedużym wysiłkiem poradzić sobie nawet ze skomplikowanymi zadaniami.
Gdy już się z tym oswoimy, porozmawiamy krótko o podstawach teorii języków formalnych - sformalizujemy praktyczną wiedzę o wyrażeniach regularnych i zapoznamy się z koncepcją automatu.
W sensie praktycznym, tę część warsztatów każdy uczestnik uwieńczy własnoręcznym oczyszczeniem i przygotowaniem do dalszej pracy pewnej ilości tekstu w jakimś języku (zapewne angielskim lub polskim), który to tekst stanie się podstawą do tworzenia modeli w drugiej części.
Probabilistyczne modele języków
Tego rodzaju modele stosuje się powszechnie w różnych zastosowaniach bliskich nam na co dzień: klawiatury smartfonów, rozpoznawanie mowy czy pisma, wykrywanie sprytniejszych trolli, a nawet łapanie seryjnych morderców. W części drugiej poznamy najpierw najstarszy, ale jakże potężny pomysł na statystyczne modelowanie języka - n-gramy. Każdy zbuduje własny model języka, którym sie zajmiemy i poobserwuje jego własności i zachowanie. Pochylimy się też nad tym, że model n-gramowy można przekonwertować na automat skończony i nad praktycznymi tego faktu konsekwencjami. Jeśli wyrobimy się z czasem, użyjemy takich modeli w realnym zastosowaniu w rozpoznawaniu mowy.
Później przyjrzymy się nowocześniejszym pomysłom na modelowanie języków - sieciom neuronowym. Porozmawiamy trochę o tym, jak to wszystko właściwie działa, po czym każdy wytrenuje własną rekurencyjną sieć neuronową na tych samych danych, na których wcześniej policzone będą n-gramy. Przyjrzymy się różnicom - zyskom, ale i stratom wynikającym z użycia bardziej zaawansowanych modeli.
Wymagania
Techniczne
- Komputer. Jeśli ktoś pojawi się bez komputera ominie go praktyczna frajda i będzie musiał patrzeć jak prowadzący macha rękami i mu uwierzyć.
- Na komputerze działający system linuksowy - jeśli to możliwe normalnie zainstalowany, nie w maszynie wirtualnej - obliczenia które będziemy chcieli wykonać będą dosyć intensywne, jak również potrzebować niebagatelnej ilości pamięci. Ale jeśli możecie na swoim komputerze uruchomić Slacka, to dacie też radę wytrenować neuronowy model języka (Jeśli wyłączycie Slacka).
Merytoryczne
- Minimum obycia z pracą w linuksowym terminalu, tj. umiejętność poruszania się po systemie plików, kopiowania, przenoszenia, usuwania, podglądania zawartości plików, przekierowanie wejścia, wyjścia, potoki. (Jeśli się nie umie, można to minimum zdobyć w jeden wieczór przechodząc przez pierwszych 9 rozdziałów Bash Notes for Professionals. To mniej niż 50 słabo zapełnionych stron - tylko brzmi groźnie.)
- Minimum umiejętności programistycznych - jeśli ktoś nie napisał nigdy niczego poza 'Hello World' w języku C lub podobnym, może mieć trochę trudności.
Zadania kwalifikacyjne będą dopasowane do oczekiwanych umiejętności precyzyjniej niż powyższy opis, jeśli więc martwi Cię któryś z tych punktów - przejrzyj proszę zadania ;)
Przydatne rzeczy
Regex101 - narzędzie do pracy i zabawy z wyrażeniami regularnymi
rozdział Adv. Bash Scripting Guide pokazujący bodaj wszystkie narzędzia, których użyjemy w pierwszej części warsztatów, a nawet o kilka za dużo.
dodatkowo
Bash Notes for Professionals - tutaj są odpowiedzi na te pytania dotyczące Basha, które kiedykolwiek ktokolwiek zadał (na stackoverflow)
Advanced Bash Scripting guide - tutaj są odpowiedzi na wszystkie pytania dotyczące Basha - nawet takie, których nikt jeszcze nigdy nie zadał.