Rozwiążmy to od podstaw. Klasyfikacja (znana również jako kategoryzacja) jest przykładem nauki nadzorowanej . W nadzorowanym nauczaniu masz:
- model - coś, co aproksymuje wewnętrzną strukturę twoich danych, umożliwiając ci uzasadnienie i dokonanie przydatnych prognoz (np. przewidywanie klasy obiektu); normalnie model ma parametry, których chcesz się „nauczyć”
- szkolenie i testowanie zestawów danych - zestawy obiektów używanych do szkolenia modelu (znajdowanie dobrych wartości parametrów) i dalszej oceny
- algorytmy szkoleniowe i klasyfikacyjne - po pierwsze opisuje sposób uczenia się modelu z zestawu danych szkoleniowych, po drugie pokazuje, jak wyprowadzić klasę nowego obiektu na podstawie wyuczonego modelu
Teraz weźmy prosty przypadek klasyfikacji spamu. Twój zestaw danych szkoleniowych to zbiór e-maili + odpowiednich etykiet - „spam” lub „nie spam”. Testowany zestaw danych ma tę samą strukturę, ale składa się z niektórych niezależnych wiadomości e-mail (zwykle po prostu dzieli swój zbiór danych i tworzy, powiedzmy, 9/10 z nich do wykorzystania na szkolenie, a 1/10 na testy). Jednym ze sposobów modelowania wiadomości e-mail jest reprezentowanie każdego z nich jako zestawu (paczki) słów. Jeżeli założymy, że słowa są od siebie niezależne, możemy użyć klasyfikatora Naive Bayesa , to znaczy obliczyć wcześniejsze prawdopodobieństwa dla każdego słowa i każdej klasy (algorytm szkoleniowy), a następnie zastosować twierdzenie Bayesa, aby znaleźć prawdopodobieństwo prawdopodobieństwa przynależności nowego dokumentu konkretna klasa.
Zasadniczo mamy:
raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label
Zauważ teraz, że przedstawiliśmy nasze przedmioty (dokumenty) jako worek słów. Ale czy to jedyny sposób? W rzeczywistości możemy wydobyć znacznie więcej z surowego tekstu. Na przykład zamiast słów możemy używać ich rdzeni lub lematów , wyrzucać hałaśliwe słowa stop , dodawać tagi POS słów, wyodrębniać nazwane jednostki, a nawet eksplorować strukturę HTML dokumentu. W rzeczywistości bardziej ogólna reprezentacja dokumentu (i ogólnie dowolnego obiektu) jest wektorem cech . Np. Dla tekstu:
actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
0, 0, 1, 1, ..., 5, 7, 2, ..., 2, ... | not spam
0, 1, 0, 0, ..., 3, 12, 10, ..., 0, ... | spam
Tutaj pierwszy wiersz zawiera listę możliwych funkcji, a kolejne wiersze pokazują, ile razy ta funkcja występuje w dokumencie. Np. W pierwszym dokumencie nie ma słowa „aktor”, 1 słowa „palić”, 5 rzeczowników, 2 przymiotników i 2 pogrubionych tekstów. Ostatnia kolumna odpowiada wynikowej etykiecie klasy.
Korzystając z wektora cech, możesz uwzględnić dowolne właściwości swoich tekstów. Jednak znalezienie dobrego zestawu funkcji może zająć trochę czasu.
A co z modelem i algorytmami? Czy jesteśmy związani z Naive Bayes. Ani trochę. regresja logistyczna , SVM , drzewa decyzyjne - żeby wymienić tylko kilka popularnych klasyfikatorów. (Zauważ, że mówimy „klasyfikator” w większości przypadków mamy na myśli model + odpowiednie algorytmy szkolenia i klasyfikacji).
Jeśli chodzi o implementację, możesz podzielić zadanie na 2 części:
- Wyodrębnianie funkcji - przekształcanie nieprzetworzonych tekstów na wektory cech.
- Klasyfikacja obiektów - budowanie i stosowanie modelu.
Pierwszy punkt jest dobrze opracowany w wielu bibliotekach NLP . Drugi dotyczy uczenia maszynowego, więc w zależności od zestawu danych możesz użyć Weka lub MLlib .