Gdzie jest miejsce na machine learning w Twojej firmie?
Za pomocą kilku przykładów nauczę Cię jak dostrzegać miejsca, w których możesz wykorzystać możliwości machine learningu. Z perspektywy produktu, który rozwijasz, to pierwszy krok do świata sztucznej inteligencji. Za chwilę dowiesz się, jak do niego wejść.
Marcin Budziński. Programistyczny weteran. Pasję do programowania zaszczepił w nim Tata już we wczesnym dzieciństwie. Zaczął programować w latach ’90, gdy sporo osób nie wierzyło jeszcze w potencjał komputerów. Uczestniczył w dynamicznym rozwoju firm informatycznych, a potrzeba tworzenia coraz to bardziej skomplikowanych algorytmów rozbudziła w nim pasję do sztucznej inteligencji.
Spis treści
Machine learning w pigułce
Uczenie maszynowe skupia się na praktycznym zastosowaniu dokonań w dziedzinie sztucznej inteligencji. Możesz stworzyć program, który przy pomocy matematyki i statystyki potrafi się uczyć. Niektóre algorytmy, np. sieci neuronowe, inspirowane są funkcjonowaniem naszego mózgu. Tak jak Twój umysł rozwija się na podstawie doświadczeń, tak machine learning potrzebuje danych. Uczenie maszynowe spotykamy głównie w systemach rekomendacji, rozpoznawaniu zdjęć, mowy, detekcji spamu czy fraudów. Wielu ludzi nie zdaje sobie sprawy, że możliwości machine learning sięgają znacznie dalej. Wystarczy kreatywnie spojrzeć na dane i produkt, który rozwijasz, aby wzbogacić go o trochę inteligencji.
Jesteś ekspertem
Te kreatywne spojrzenie musisz wykonać sam. To Ty jesteś ekspertem produktu, który rozwijasz. Jeżeli dobrze rozumiesz potrzeby swoich klientów, wiesz, na co zwrócić uwagę. O tym nie ma pojęcia ekspert z zewnętrznej firmy. Zacznij od stworzenia listy miejsc, które chciałbyś ulepszyć. Wypisz również obszary, w jakich widzisz potencjalne oszczędności lub szanse na automatyzację. W czasie przeprowadzania takiej analizy warto zajrzeć do bazy danych — to prawdziwa kopalnia wiedzy. Masz to? Idziemy dalej.
Wszystko jest liczbą
Pozostaje tylko pytanie, co możemy wrzucić do „maszynki” zwanej machine learningiem? Wszystko, co da się zapisać w formie liczby lub wektora liczb. Dowolne zdjęcie przedstawisz za pomocą trójwymiarowego wektora (RGB). Dźwięk możesz przekonwertować do spektrogramu i uzyskać wektor dźwięku. Nawet tak abstrakcyjne pojęcia jak znaczenia słów wyrazisz w wielowymiarowej przestrzeni (Word2Vec). Możesz zbudować wektor, który będzie reprezentować użytkownika Twojej usługi, na podstawie jego ustawień i zachowań. Najważniejsze, abyś posiadał świadomość, że naprawdę wszystko da się przedstawić za pomocą liczb, a następnie wykorzystać w modelu uczenia maszynowego.
Znajdź wskaźnik efektywności
Czas wrócić do listy elementów, które chcesz ulepszyć. Zapewne skrót KPI (Key Performance Indicators) słyszałeś już nie raz. Biznes namiętnie go używa, aby skupić się na osiąganiu przez firmę strategicznych celów. Algorytmy uczenia maszynowego też potrzebują podobnych wskaźników. Jeżeli dla każdego punktu z Twojej listy potrafisz wskazać KPI, to bardzo ułatwisz dobranie odpowiedniego algorytmu i odpowiednich danych. Najłatwiej zrozumiesz to na przykładzie.
Przykład z życia: jadłospis
Pracując w firmie, która dostarcza jadłospisy dla swoich użytkowników, zastanawiałem się: jak możemy ulepszyć nasz produkt? Użytkownicy mieli możliwość wymiany posiłków. Postawiłem tezę: jeżeli użytkownik wymienia mniej posiłków w diecie, to znaczy, że jest ona lepiej dopasowana do jego potrzeb. Czyli naszym KPI jest minimalizacja ilości wymian posiłków w diecie. Tak jasno określony kierunek bardzo ułatwia zbudowanie odpowiedniego modelu.
Następny krok jest już oczywisty — trzeba zebrać dane. Konkretniej wszystkie dostarczone diety oraz informacje, które z posiłków zostały wymienione. Warto dane ubogacić o profil użytkownika, wykonującego akcję. Dzięki temu będziemy mogli stworzyć bardziej spersonalizowany model. Pozostaje dobranie odpowiedniego algorytmu i jego nauka. Czego tak właściwie model będzie się uczyć?
Jest to klasyczny przykład klasyfikacji — model uczy się dopasować parę “użytkownik” i “posiłek” do jednej z dwóch kategorii: wymieniony, niewymieniony (binary classification). Po zakończonym procesie nauki, model trzeba przetestować na próbce danych, których nigdy wcześniej nie widział. Po pozytywnej weryfikacji możemy rozpocząć ulepszanie naszej diety. Zanim jadłospis będzie dostarczony do głodnego użytkownika, sprawdźmy każdy posiłek naszym wytrenowanym modelem. Dostaniemy odpowiedź, że kilka posiłków z dużym prawdopodobieństwem zostaną przez użytkownika wymienione. Teraz wystarczy zastąpić te konkretne posiłki, zanim zrobi to użytkownik. Pozostaje tylko pytanie: na jakie? Tutaj znowu możemy użyć naszego modelu — niech będzie to posiłek, który model sklasyfikuje jako niewymieniony.
Automatyzacja zadań
Są stanowiska, na których panuje spora rotacja. Przyczyna jest prosta — nudne, powtarzające się zajęcie łatwo demotywuje. Taki proces lepiej jest zautomatyzować, a kreatywne umysły skierować do bardziej wymagających spraw. W tym przykładzie praca polegała na dopasowaniu oferty do odpowiedniej kategorii. Dopasowanie, czyli klasyfikacja, to idealne zajęcie dla algorytmu samouczącego. Rozpoczynając pracę nad tym problemem, trzeba się zastanowić, na jakie informacje człowiek zwraca uwagę przed podjęciem decyzji, do której kategorii dana oferta pasuje. Okazuje się, że kluczowe informacje znajdują się w tytule oferty.
Pozostaje zebrać wszystkie historyczne przykłady poprawnie sklasyfikowanych ofert, przekonwertować tekst na wektory (polecam HashingVectorizer z scikit-learn) i można rozpocząć naukę. Jeżeli wszystko pójdzie zgodnie z planem, człowiek będzie potrzebny od czasu do czasu, aby przeprowadzić moderacje kilku kłopotliwych ofert.
Wyszukiwarka
Wyszukiwarka to często kluczowy element produktu. Jej dobre wyniki powinny pozytywnie wpływać na konwersję i być spersonalizowane. Właśnie takie zalety przyniesie nam opakowanie naszej wyszukiwarki algorytmami uczenia maszynowego. Naszym wskaźnikiem niech będzie zwiększenie konwersji. Niestety liczba wyszukiwań kończących się konwersją może być mała. Wtedy warto skupić się na akcjach, które ją poprzedzają, np. kliknięcie elementu lub dodanie do koszyka. Gdy uda się zebrać dane, warto je wzbogacić o dodatkowe parametry, takie jak liczba kliknięć, ocena produktu itd. Jeżeli zależy Ci na spersonalizowanych wynikach, dodaj również wektor cech użytkownika, który wykonywał daną akcję. Na podstawie takich danych zbuduj przykładowe zbiory trenujące, które składają się z odpowiednio posortowanych wyników wyszukiwań.
Teraz już pozostaje tylko uczenie, a następnie zadbanie o to, aby nasz wytrenowany model przesortował pierwsze 1000 wyników, które dostarczyła nam wyszukiwarka. Jeżeli temat Cię zainteresował i używasz Elasticsearcha, weź pod lupę wtyczkę Learning to Rank.
Twoja kolej
Wybrałeś już obszar, który chcesz wzbogacić o inteligencję, czas zabrać się do pracy. Dopiero w tym miejscu warto zaczerpnąć pomocy specjalisty, ale jeżeli chcesz przejść tę drogę sam, to mam dla Ciebie kilka wskazówek.
Poświęć czas na budowę hipotez. Gorąco polecam nad tym etapem pracować w grupie. Następnie wybierz odpowiednią próbkę danych. Nie za dużą, aby można było szybko iterować, ale też nie za małą — model musi się z czegoś uczyć. Pamiętaj, że dane są najważniejsze. Trzeba je wyczyścić, np. przefiltrować informacje generowane przez boty lub testerów. Usuń niepełne dane lub wypełnij domyślnymi wartościami. Niektóre z nich warto normalizować — sieci neuronowe preferują zakres danych od -1 do 1. Niekiedy zebrane materiały trzeba przerobić na inny format. Przykładowo datę możesz wykorzystać do wykrywania sezonowości. Warto pole przekonwertować tak, aby odzwierciedlało cykliczność. Możesz to osiągnąć przy pomocy zwykłej funkcji sinus.
Masz już gotową hipotezę i odpowiednio przygotowane dane. Zbuduj model i zweryfikuj tezę. Nie staraj się wyważyć otwartych drzwi. Korzystaj z gotowych bibliotek, szczególnie tych popularnych, bo w razie problemów, łatwiej znajdziesz pomoc. Na start polecam stack: Python + Scikit-learn, a jeżeli myślisz o użyciu sieci neuronowych, zainteresuj się biblioteką Keras.
Gdy weryfikacja hipotezy przebiegła poprawnie, czas wprowadzić model na produkcję. Ten krok bardzo mocno jest uzależniony od architektury Twojej aplikacji, ale gorąco polecam zainteresować się chmurami (AWS/GCP). W zależności od przypadku, nauka modelu może wymagać sporej ilości zasobów. Na szczęście trenowanie uruchamia się zazwyczaj co jakiś czas, dlatego chmury wydają się idealne, bo moc obliczeniową możemy zwiększać na żądanie.
Podsumowanie
Czytając artykuły o sztucznej inteligencji, odnosi się wrażenie, że zastosowanie takich algorytmów ma miejsce tylko w niecodziennych projektach. Tak nie jest. Machine learning może udoskonalić każdy projekt, trzeba tylko umieć kreatywnie na niego spojrzeć. Mam nadzieję, że udało mi się Ciebie zainspirować. Pamiętaj, że trzymając w ręku młotek, wszystko wydaje się być gwoździem — dlatego nie zapominaj o końcowym użytkowniku Twojej usługi.
Jeżeli chcesz skorzystać z doświadczenia Marcina, skontaktuj się z nim przez LinkedIn lub
marcin@inspirationmedia.pl. Zdjęcie główne artykułu pochodzi z pexels.com.