Jak sprawdzić IP komputera

Czy wiedziałeś, że to AI? O algorytmach AI, których nieświadomie używasz każdego dnia (część 1)

9 minut czytania
Komentarze

Od czasu wypuszczenia na świat przez OpenAI ChatGPT, opartego na modelu GPT-3, a teraz GPT-4, sztuczna inteligencja (AI) na dobre zadomowiła się w debacie publicznej. Pytania takie jak: czy AI zastąpi mnie w pracy, kiedy maszyny się zbuntują czy jak używać ChatGPT w programowaniu, są zadawane nawet w telewizjach śniadaniowych. Jednak AI jest z nami nie od dzisiaj i modele takie jak GPT, BERT czy MidJourney są raczej wierzchołkiem góry lodowej algorytmów sztucznej inteligencji używanych (nie)świadomie przez każdego. Dziś przyjrzymy się pierwszej takiej kategorii… która towarzyszy nam już od naprawdę długiego czasu.

Autor: dr Jan Kwapisz (Dijkstra Enterprise)

AI z sąsiedztwa, czyli jaka?

Sztuczna inteligencja zajmuje się tworzeniem rozwiązań komputerowych, które nie dają się łatwo zalgorytmizować. Są to takie sytuacje, gdzie niełatwo jest (lub jest to wręcz niemożliwe) podać parę (oczywistych) instrukcji, które niezawodnie doprowadzą do jakieś sytuacji. Na przykład spróbuj napisać przepis na rozpoznanie swojej twarzy. Mogłoby to iść jakoś tak: jeśli ma ciemne włosy, brodę, zielone oczy i odstające uszy to jestem to ja. Problem z tym podejściem byłby taki, że najpierw algorytm musiałby te oczy na zdjęciu znaleźć, ponadto ludzi o takiej charakterystyce są tysiące, a my chcemy algorytm, który rozpoznaje tylko jedną, konkretną twarz.

fot. Depositphotos/atercov

W szczególności uczenie maszynowe (ang. machine learning (ML)) zajmuje się algorytmami, które potrafią się nauczyć poprawnego zachowania w danej sytuacji zamiast podawać rozwiązanie wprost. Algorytmy uczenia maszynowego budują model matematyczny danej sytuacji na podstawie przykładowych danych, zwanych zbiorem uczącym, w celu prognozowania lub podejmowania decyzji w nowych przypadkach. Algorytmy uczenia maszynowego są wykorzystywane w wielu różnych zastosowaniach. W tej serii artykułów omówię trzy takie zastosowania:

  1. Ochrona przed spamem (filtrowanie wiadomości internetowych) – to omówimy w tym tekście
  2. Systemy rekomendacyjne
  3. Rozpoznawanie twarzy

Mam nadzieję, że przekonam Cię dzięki nim, że uczenie maszynowe jest proste i warto je rozumieć, chociażby na podstawowym poziomie, aby lepiej interpretować świat, w którym funkcjonujemy. Dziś omówimy filtr spamu, ale wkrótce pojawią się następne artykuły.

Czy Bayer jest naiwny? O filtrze spamu

Wyobraź sobie, że otrzymujesz następującego maila z adresu [email protected]:

Dzień dobry mój przyjacielu,

Mój Wujek zmarł wczoraj i zostawił wielki majątek! Mam dla Ciebie milion dolarów, po prostu kliknij w ten link i Ci je przeleję! Zadzwoń do mnie na 111-222-333 i powiem Ci jak przelać pieniądze!

Pozdrawiam

XXX

Od razu wiesz, że coś jest nie tak. Ludzie w końcu nie dzielą się swoimi pieniędzmi tak chętnie, nawet z najbliższymi, a tym bardziej z obcymi. Powyższy mail to przykład spamu, niechcianej wiadomości mającej na celu wyłudzenie od Ciebie danych, zareklamowanie produktu lub inną niepożądaną aktywność. Każdy z nas otrzymuje takich wiadomości dziesiątki, a często i setki miesięcznie na swoją skrzynkę pocztową. Dlatego ważne jest, aby nasza skrzynka e-mail odsiewała taką właśnie pocztę i oznaczała ją jako spam. Jest to tak zwany filtr spamu.

Jednym z podstawowych algorytmów do odsiewania spamu jest algorytm naiwnego Bayesa (naive Bayes algorithm). Uczy się go następująco.

Krok pierwszy: dane

Aby nauczyć jakikolwiek algorytm uczenia maszynowego, musimy najpierw przygotować dane. Naszymi danymi będą emaile, możemy je pobrać na przykład ze swojej skrzynki pocztowej albo skorzystać z gotowego zestawu danych, na przykład ze strony Kaggle.com. Możemy je zapisać w pliku .csv lub domyślnym formacie Excela. Około tysiąca maili powinno wystarczyć do treningu naszego algorytmu.

Następnie musimy pooznaczać (fachowo mówi się: nadać etykietę) każdy z tych maili jako spam lub nie-spam. W pliku Excel moglibyśmy zrobić na przykład dwie kolumny, w pierwszej nasz e-mail, w drugiej etykieta. Jak na poniższym obrazku1.

Nasze dane musimy podzielić na dane treningowe (te, na których będziemy uczyć nasz algorytm) oraz testowe, na których sprawdzimy jak działa nasz algorytm po treningu. Zwykle dane dzieli się w stosunku 80% do 20%. Czyli trenujemy nasz algorytm na 800 emailach, a testujemy na 200.

1 Dane można zamienić na liczby, na przykład każdemu słowu przypisać liczbę. “Banan” ->1, “Witaj” -> 2 etc. Nazywa się to „tworzeniem słownika”. W kolumnie “Czy spam?” także można bazować na liczbach i np. wpisać 1, jeśli to spam, zaś jeśli nie – 0.

Krok drugi: Uczenie nadzorowane

Celem naszego algorytmu jest przeczytanie maila i na tej podstawie przypisanie mu etykiety spam / nie spam. Fachowo nazywa się to klasyfikacją binarną (ponieważ mamy tylko dwie etykiety) i ten typ algorytmów nazywa się uczeniem nadzorowanym.

Można to zrobić na wiele różnych sposobów, używając na przykład regresji logistycznej, algorytmów typu drzewa decyzyjne lub właśnie algorytmu naiwnego Bayesa. Działa on następująco.

Dla każdego słowa występującego w naszych e-mailach, na przykład słowie “Witaj”, zliczamy ile razy to słowo wystąpiło w mailach oznaczonych jako spam. Załóżmy, że było to sto razy. Następnie zliczamy ile razy wystąpiło łącznie we wszystkich e-mailach, załóżmy że było to 150 razy. Dzielimy te dwie liczby przez siebie i otrzymujemy 0.66 lub 66%. Oznacza to, że jeśli w mailu wystąpiło słowo „witaj”, to w 66% procent przypadków ten mail był spamem, a więc w 34% przypadków spamem nie był. Ta liczba to prawdopodobieństwo, że dane słowo występuje w mailu oznaczonym jako spam. Prawdopodobieństwa wszystkich możliwych sytuacji sumujących się to 1, czyli do 100%. Następnie robimy to samo dla wszystkich słów, które wystąpiły w mailach treningowych. Otrzymujemy taką tabelkę:

Jednak klasyfikowanie maili na podstawie pojedynczych słów to za mało. Dlatego maile klasyfikujemy na podstawie całej treści mnożąc poszczególne prawdopodobieństwa przez siebie. Można to zapisać jako:

P(spam) = P(“Dzień”)P(“dobry”)…P(“XXX”)

Musimy też policzyć prawdopodobieństwo, że mail nie jest spamem:

P(nie spam) = (1- P(“Dzień”))(1-P(“dobry”))…(1-P(“XXX”))

Otrzymujemy wówczas dwie liczby P(spam) oraz P(nie spam), porównujemy je ze sobą i jeśli P(spam) jest większe, to klasyfikujemy to jako spam. W przeciwnym wypadku jako nie-spam.

Cały nasz algorytm to ta tabelka prawdopodobieństw poszczególnych słów oraz dwa wzory na obliczenie całkowitego prawdopodobieństwa. Teraz możemy porównać, w ilu procent przypadków ten algorytm poprawnie klasyfikuje poprzez porównanie przewidzianych etykiet z prawdziwymi etykietami. Jeśli algorytm zachowuje się dostarczająca dobrze, powiedzmy poprawnie odsiewa 95% spamu, to jesteśmy gotowi na testowanie naszego algorytmu, na danych, których wcześniej nie widział.

fot. Depositphotos/puhha

Krok trzeci: Testowanie

Musimy jeszcze poinstruować nasz algorytm, co ma robić ze słowami, których nigdy nie widział. Być może w żadnym z maili treningowych nie pojawiło się słowo “serdecznie”. Opcji jest oczywiście kilka, a jedną z nich jest na przykład nakazanie algorytmowi, aby je po prostu pomijał.

Teraz możemy przetestować nasz algorytm na danych testowych. Powiedzmy, że osiągnęliśmy 65% skuteczności, co oznacza, że nie najlepiej radzi sobie z danymi, których nigdy nie widział. Aby to poprawić możemy zrobić parę rzeczy (wszystkie te praktyki są stosowane we wszystkich algorytmach uczenia maszynowego). Oto nasze opcje:

Klasyfikowanie tematów emaili oraz adresów email

Być może moglibyśmy prowadzić preselekcję emaili na podstawie adresów oraz ich tematów/tytułów. W szczególności moglibyśmy stworzyć taki właśnie algorytm, który klasyfikował by tematy w ten sam sposób w jaki robi to z mailami. Takie dwa połączone algorytmy prawdopodobnie cechowałyby się większą skutecznością.

Zwiększyć zbiór e-maili treningowych

Generalna zasada w uczeniu maszynowym jest taka, że im większy zbiór danych tym lepsze będą predykcje algorytmu. Jeśli nie mamy dostępu do większej bazy email, to możemy ulepszyć nasz zbiór treningowy, poprzez wygenerowanie  nowych przykładów maili, na podstawie wiadomości, które już mamy, poprzez zmianę “nieistotnych” szczegółów i dodanie takich nowych email do bazy. W przykładowym emailu moglibyśmy zamienić słowo “Przyjacielu” na “kolego” czy “dolarów” na “euro”. Sens emaila zostałby zachowany, a my mielibyśmy więcej danych.

Usunięcie stop słów

Z drugiej strony wiele elementów z wiadomości, nie daje nam żadnej informacji na temat tego czy jest to spam czy nie spam. Są to na przykład imiona bądź zwroty grzecznościowe, takie jak “Pozdrawiam” czy “Z wyrazami szacunku”. Są to tak zwane stop słowa i możemy śmiało je usunąć z emaili, aby uniknąć szumu danych.

Korelacje między słowami

W końcu nasz algorytm nie uwzględnia tego, że niektóre słowa same z siebie nie mają znaczenia, a dopiero określone związki słów mają. Przykładowo dwa poniższe zdania: “Nie, jestem głodny” oraz “Nie jestem głodny” składają się z tych samych słów, a mają przeciwstawne znaczenie. Nasz algorytm tego nie uwzględnia, dlatego też nazywa się “naiwny”. Jednak uwzględnienie tych korelacji jest znacznie trudniejsze i zwykle wymaga użycia bardziej zaawansowanych technik uczenia maszynowego, takich jak sieci neuronowe.

W tym miejscu stawiam nie tyle kropkę, co przecinek. W kolejnym odcinku cyklu, omówię bliżej podstawowe zasady działania AI w zakresie tzw. „algorytmów rekomendacji”. To one decydują w końcu o tym, co podsuwa ci Netflix albo jakie wideo wyświetla ci akurat TikTok.

W momencie pojawienie się kolejnej części cyklu, artykuł zostanie zaktualizowany o odnośnik do lektury.

AI, z których korzystasz, a o których nie wiedziałeś – skrótowe podsumowanie tekstu

Sztuczna inteligencja pozwala rozwiązywać problemy trudne do zalgorytmizowania, a uczenie maszynowe to kluczowa technika, która pozwala algorytmom uczyć się poprawnego działania na podstawie danych.

W przypadku ochrony przed spamem opisano filtr antyspamowy, który wykorzystuje algorytm naiwnego klasyfikatora Bayesa. Klasyfikuje on e-maile jako spam lub nie-spam, analizując prawdopodobieństwo wystąpienia poszczególnych słów w spamie. Algorytm uczy się na danych treningowych, które zawierają e-maile oznaczone jako spam i nie-spam. Skuteczność klasyfikacji można poprawić, analizując tematy e-maili, zwiększając zbiór danych czy używając zaawansowanych technik uczenia maszynowego, takich jak sieci neuronowe.

O autorze:

Autor jest doktorem fizyki teoretycznej, w pracy zajmuje się przetwarzaniem języka przy użyciu sieci neuronowych. Jest Head of Product w Dijkstra Enterprise i przygotował kurs Dijkstra: Podstawy Pythona. Jest certyfikowanym Instruktorem NVIDIA Deep Learning Institute oraz nauczycielem akademickim na Uniwersytecie Warszawskim.

fot. Depositphotos/terovesalainen

Motyw