Szukam pracy jako junior, mam małe doświadczenie komercyjne za sobą. Ostatnio na stanowisko "junior developer" dostałem ciekawe zadanie rekrutacyjne. Różniło się znacznie od tych z jakimi miałem do czynienia do tej pory typu codility, analiza brakujących elementów w liście, todo lista z logowaniem itd. Zadanie dla mnie wydało się mega ciężkie, ale też ciekawe więc byłem zadowolony mając taki problem do rozgryzienia. Oczywiście nie skończyłem w żądanym czasie i nie dostałem się dalej. Miałem zrobić program skryptowy do rozpoznawania zdań w języku polskim. Przykłady nie były złożone, nie miał to być rozbudowany program, ale dla mnie i tak wyzwanie. Czytałem trochę o przetwarzaniu języka naturalnego, sieciach neuronowych, uczeniu maszynowym, nie wiem nawet czy ta cała wiedza byłaby potrzebna, ale wydaje mi się że gdzieś w tych okolicach bije dzwon. Akademicko tych zagadnień nie przerabiałem. Na wyjściu program ma zwracać wartość boolową dla każdego zdania osobno czy piszący chce kontaktu z żywym człowiekiem czy kontynuować konwersacje z botem. Mimo, że już po ptokach to zainteresowało mnie to, chciałbym wiedzieć jak to zrobić gdybym następnym razem dostał podobne zadanie i z jakich materiałów, jakich zagadnień najlepiej się uczyć?
Zaimplementowałem listę czasowników i rzeczowników z języka polskiego, na potrzeby zadania wziąłem kilkaset najczęściej występujących w języku polskim. Poczytałem o typowym szyku zdania w języku polskim. Zrobiłem wykrywanie pozycji czasownika (zdania proste w przykładzie) i analizowanie pod kątem typowego szyku zdania. Dodałem wykrywanie przeczenia co by zmieniło logikę zdania. Druga lista z ręcznie wybranymi czasownikami i połączeniu z rzeczownikami, które mogłyby sugerować chęć kontaktu z konsultantem. Potem proste wykrywanie tematu czasownika tak by formy "zadzwonię" "zadzwońcie" "zadzwonimy" itd przypisać do "dzwonić". Żeby ułatwić wykrywanie słowa znaki mogą być trochę pomieszane względem bazowego czasownika z listy.
I tak dalej kombinowałem. Nic z tego nie wyszło zbliżającego mnie do rozwiązania, ale spodobało mi się to, przekonałem się jakiego rodzaju problemy do rozwiązania mi się podobają.
Czy w ogóle szedłem w dobrą stronę do rozwiązania? Czy żeby się za to w ogóle zabierać powinienem rok poświęcić na natural language processing, a teraz zając się mniej skomplikowanymi tematami, stanowisko było na juniora.