Wiele etykiet w nadzorowanym algorytmie uczenia się

10

Mam korpus tekstu z odpowiednimi tematami. Na przykład "A rapper Tupac was shot in LA"i został oznaczony jako ["celebrity", "murder"]. Zasadniczo każdy wektor cech może mieć wiele etykiet (nie tyle samo. Pierwszy wektor cech może mieć 3 etykiety, drugi 1, trzeci 5).

Gdybym miał tylko jedną etykietę odpowiadającą każdemu tekstowi, wypróbowałbym klasyfikator Naive Bayes , ale tak naprawdę nie wiem, jak mam postępować, jeśli mogę mieć wiele etykiet.

Czy istnieje sposób na przekształcenie Naive Bayes w problem klasyfikacji wielu marek (jeśli istnieje lepsze podejście - daj mi znać)?

PS kilka rzeczy na temat danych, które mam.

  • około 10 000 elementów w zestawie danych
  • tekst ma około 2-3 zdań
  • maksymalnie 7 etykiet na tekst
Salvador Dali
źródło
@fordprefect Wielomianowy Naiwny Bayes stosuje rozkład wielomianowy dla prawdopodobieństw niektórych cech danej klasy: . OP chce, aby klasyfikator zarządzał wieloma wyjściami, jak opisał TheGrimmScientist. p(faja|do)
Robert Smith,

Odpowiedzi:

6

Na początek Naive Bayes prawdopodobnie nie jest tutaj odpowiedni. Zakłada niezależność między danymi wejściowymi (stąd „Naiwny”), a słowa w zdaniu są bardzo zależne.

Ale zakładając, że naprawdę chcesz uruchomić NB jako algorytm do rozpoczęcia eksperymentów, rozważę dwie opcje:

Niewdzięczny: wiele klasyfikatorów NB

To byłoby alternatywne podejście. Zrób corupus wszystkich słów zaobserwowanych jako twój wektor danych wejściowych. Zrób korpus ze wszystkich znaczników, które są obserwowane jako twój wektor wyników. Klasyfikator NB z wieloma wyjściami jest odpowiednikiem posiadania wielu klasyfikatorów NB z jednym wyjściem (zrób więc to, co jest łatwiejsze do zaimplementowania w dowolnym oprogramowaniu). Traktuj każdy element jako próbkę szkoleniową, w której dane wejściowe (słowo) to 1jeśli to słowo jest obecne, a 0jeśli to słowo nie. Użyj tego samego schematu binarnego dla danych wyjściowych.

Ten brutal zmusza zastosowanie NB Classifier do twoich danych i pozostawia ci znalezienie sensu, wciąż szukając olbrzymiego zestawu klasyfikatorów, które ci pozostaną.

Bardziej wdzięczny: Przetwarzaj swoje dane

Takie podejście polecam, jeśli chcesz uruchomić jeden klasyfikator NB wielu klas.

Twoim celem jest znalezienie sposobu mapowania każdego zestawu tagów na pojedynczą klasę. Jestem pewien, że istnieje jakiś schemat grupowania lub analiza sieci (być może [„celebrytka”] powiązana z [„morderstwem”] może stać się segmentem [„rozpustą”]), który rozsądnie zmapuje tagi do jednego klastra. Jeśli traktujesz tagi jako węzły, a dwa podane tagi razem jako linki, to powinieneś przyjrzeć się algorytmom wykrywania społeczności (od tego chciałbym zacząć). Ale jeśli chcesz, aby coś działało, wystarczyłoby coś w rodzaju hakowania tagów, które konwertują listę tagów tylko na tagi najczęściej widoczne w zestawie danych.

Ta metoda pozwala w pierwszej kolejności wyczyścić dane i ułatwiłaby zrozumienie danych wyjściowych klasyfikatora NB.

TheGrimmScientist
źródło
dziękuję za wkład, jeśli masz pomysł, co byłoby lepsze niż NB, daj mi znać.
Salvador Dali,
1
sekcja „istniejące rozwiązania” tego zjeżdżalni zawiera wszystko, co chciałbym odpowiedzieć, plus więcej (zakładając, że nie potrzebujesz konkretnego klasyfikatora, a po prostu chcesz sposobu użycia tagów). Mam nadzieję, że ci się przyda.
TheGrimmScientist,
@TheGrimmScientist Czy nie byłoby rozsądnie zastosować pierwsze podejście? Jeśli masz wektor cech f1, f2, f3 i, powiedzmy, 3 etykiety dla tego wektora, możemy podzielić go na 3 wektory (wszystkie zawierające te same cechy f1, f2, f3) z różnymi etykietami jako dane wyjściowe. Następnie można normalnie używać Naive Bayes. Nie jestem pewien, czy o to ci chodziło.
Robert Smith,