Ich habe einen Textkorpus mit entsprechenden Themen. Zum Beispiel "A rapper Tupac was shot in LA"
und es wurde als bezeichnet ["celebrity", "murder"]
. Grundsätzlich kann jeder Merkmalsvektor viele Beschriftungen haben (nicht die gleiche Menge. Der erste Merkmalsvektor kann 3 Beschriftungen haben, die zweite 1, die dritte 5).
Wenn ich nur eine Beschriftung für jeden Text hätte, würde ich einen Naive Bayes-Klassifikator ausprobieren , aber ich weiß nicht wirklich, wie ich vorgehen soll, wenn ich viele Beschriftungen haben kann.
Gibt es eine Möglichkeit, Naive Bayes in ein Problem der Klassifizierung mehrerer Etiketten umzuwandeln (wenn es einen besseren Ansatz gibt - lassen Sie es mich bitte wissen)?
PS ein paar Dinge über die Daten, die ich habe.
- ca. 10.000 Elemente im Datensatz
- Text ist ungefähr 2-3 Sätze
- Maximal 7 Beschriftungen pro Text
quelle
Antworten:
Für den Anfang ist Naive Bayes hier wahrscheinlich nicht geeignet. Es setzt Unabhängigkeit zwischen den Eingaben voraus (daher die "Naive") und Wörter in einem Satz sind sehr abhängig.
Angenommen, Sie möchten wirklich mit NB als Algorithmus arbeiten, um Ihre Experimente zu starten, gibt es zwei Optionen, die ich in Betracht ziehen würde:
Ungraceful: Viele NB-Klassifikatoren
Dies wäre ein alternativer Ansatz. Machen Sie einen Korupus aller Wörter, die als Ihr Eingabevektor beobachtet werden. Machen Sie einen Korpus aus allen Tags, die als Ihr Ausgabevektor beobachtet werden. Ein NB-Klassifizierer mit mehreren Ausgängen entspricht mehreren NB-Klassifizierern mit jeweils einem Ausgang (tun Sie also, was in dem von Ihnen verwendeten Software-Framework einfacher zu implementieren ist). Behandeln Sie jedes Element als Trainingsbeispiel, bei dem eine bestimmte Eingabe (ein Wort) ein
1
Wenn dieses Wort vorhanden ist und ein0
Wenn dieses Wort nicht vorhanden ist. Verwenden Sie für die Ausgabe dasselbe Binärschema.Dieser Rohling erzwingt die Anwendung des NB-Klassifikators auf Ihre Daten und lässt Sie einen Sinn finden, indem Sie immer noch die riesige Menge an Klassifikatoren abbauen müssen, die Ihnen übrig bleiben.
Anmutiger: Verarbeiten Sie Ihre Daten
Dies ist der Ansatz, den ich empfehlen würde, wenn Sie mit einem NB-Klassifikator mit mehreren Klassen arbeiten möchten.
Ihr Ziel hier ist es, herauszufinden, wie Sie jeden Satz von Tags einer einzelnen Klasse zuordnen können. Ich bin mir sicher, dass es eine Art Clustering-Schema oder eine Netzwerkanalyse gibt (vielleicht könnte ["Berühmtheit"] im Zusammenhang mit ["Mord"] zu einem Segment ["Ausschweifung"] werden), das Ihre Tags sinnvoll einem einzelnen Cluster zuordnet. Wenn Sie Tags als Knoten und zwei vorgegebene Tags zusammen als Links behandeln, sollten Sie sich mit Community-Erkennungsalgorithmen befassen (hier würde ich beginnen). Wenn Sie jedoch nur möchten, dass etwas funktioniert, reicht eine Art Hack auf die Tags aus, mit dem eine Liste von Tags nur in das Tag konvertiert wird, das in Ihrem Dataset am häufigsten vorkommt.
Diese Methode lädt die Arbeit zum Bereinigen Ihrer Daten vor und erleichtert das Verständnis der Ausgabe des NB-Klassifikators.
quelle