2017-04-04 2 views
0

Ich versuche, einen Naiven Bayes Classifier zu trainieren, und ich habe Probleme mit den Daten. Ich plane, es für extraktive Textzusammenfassung zu verwenden.Naive Bayes Klassifikator extrahierende Zusammenfassung

Example_Input: It was a sunny day. The weather was nice and the birds were singing. 
Example_Output: The weather was nice and the birds were singing. 

Ich habe einen Datensatz, den ich verwenden möchte und in jedem Dokument gibt es mindestens 1 Satz für die Zusammenfassung.

Ich entschied mich, sklearn zu verwenden, aber ich weiß nicht, wie ich die Daten darstellen soll, die ich habe. Nämlich X und y.

from sklearn.naive_bayes import MultinomialNB 
clf = MultinomialNB().fit(X, y) 

in der Nähe von meinem Kopf ist es so zu machen:

X = [ 
     'It was a sunny day. The weather was nice and the birds were singing.', 
     'I like trains. Hi, again.' 
    ] 

y = [ 
     [0,1], 
     [1,0] 
    ] 

wo die Zielwerte 1 bedeuten - in der Zusammenfassung und 0 - nicht enthalten. Dies ergibt unglücklicherweise eine schlechte Formausnahme, da erwartet wird, dass y ein 1-d-Array ist. Ich kann mir keinen Weg vorstellen, sie als solche darzustellen. Bitte helfen Sie mir.

BTW, ich verwende nicht die String-Werte in X direkt, sondern sie als Vektoren mit CountVectorizer und TfidfTransformer von sklearn.

Antwort

1

Gemäß Ihrer Anforderung klassifizieren Sie die Daten. Das heißt, Sie müssen jeden Satz trennen, um seine Klasse vorherzusagen.

zum Beispiel:
Anstelle von:

X = [ 
     'It was a sunny day. The weather was nice and the birds were singing.', 
     'I like trains. Hi, again.' 
    ] 

Verwenden Sie es wie folgt:

X = [ 
     'It was a sunny day.', 
     'The weather was nice and the birds were singing.', 
     'I like trains.', 
     'Hi, again.' 
    ] 

Verwendung Satz tokenizer von NLTK dies zu erreichen.

Jetzt, für Etiketten, verwenden Sie zwei Klassen. sagen wir 1 für ja, 0 für nein.

y = [ 
     [0,], 
     [1,], 
     [1,], 
     [0,] 
    ] 

Nun nutzen diese Daten, wie Sie wollen, um fit und vorhersagen!

Hoffe es hilft!

+0

Danke für Ihre Antwort. Es wird funktionieren und ist sicherlich besser als meins, aber auf diese Weise wird der Klassifikator den Platz des Satzes im Dokument nicht berücksichtigen, da alles als eins betrachtet wird. Gibt es einen Weg, den ich auch einbeziehen kann? – Nikola

+0

@nikola nehmen Satz mit mehreren Zeilen als Eingabe und teilen Sie es mit Nltk Satz Tokenizer und vorherzusagen, aber nur diejenigen Sätze auf den Ausgang, die Vorhersage der Klasse 1, d – abhinav

Verwandte Themen