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 .
Modelowanie tematów byłoby bardzo odpowiednią metodą dla twojego problemu. Modele tematyczne są formą uczenia się / odkrywania bez nadzoru, w której określona (lub odkryta) liczba tematów jest zdefiniowana przez listę słów, które mają wysokie prawdopodobieństwo pojawienia się razem. W osobnym kroku możesz oznaczyć każdy temat przy użyciu ekspertów merytorycznych, ale do twoich celów nie jest to konieczne, ponieważ jesteś zainteresowany jedynie dotarciem do trzech klastrów.
Każdy dokument traktujesz jak worek słów, a proces wstępnego usuwania słów stopowych itp. Za pomocą najprostszych metod wstępnie określasz liczbę tematów. W twoim przypadku możesz albo podać „3”, czyli ustalony limit kategorii, albo wybrać większą liczbę tematów (od 10 do 100), a następnie w osobnym kroku utworzyć trzy klastry dla dokumentów ze wspólnym naciskiem na tematy. Można zastosować środki typu K lub inne metody grupowania. (Polecam to drugie podejście)
Nie musisz kodować oprogramowania do modelowania tematów od zera. Oto strona internetowa z wieloma zasobami, w tym bibliotekami / pakietami oprogramowania .
Żadne nie są w Javie, ale istnieją sposoby na uruchomienie C ++ i Pythona w Javie.
źródło
Oto kilka naprawdę świetnych pakietów oprogramowania typu open source do klasyfikacji tekstu, które powinny pomóc w rozpoczęciu pracy:
źródło