2016-07-30 21 views
4

Ich versuche, einen maschinellen Lernalgorithmus mit scikit-learn zu schreiben, der Text analysiert und basierend auf Trainingsdaten klassifiziert.Behalten Sie die Reihenfolge der Textdaten bei der Vektorisierung

Das Beispiel für die Verwendung von Textdaten, die direkt aus der Dokumentation scikit-learn entnommen wurden, verwendet eine CountVectorizer, um ein Sparse-Array zu generieren, wie oft jedes Wort angezeigt wird.

>>> from sklearn.feature_extraction.text import CountVectorizer 
>>> count_vect = CountVectorizer() 
>>> X_train_counts = count_vect.fit_transform(twenty_train.data) 

Leider berücksichtigt dies keine Reihenfolge der Phrasen. Es ist möglich, größere ngrams (CountVectorizer(ngram_range=(min, max))) zu verwenden, um bestimmte Ausdrücke zu betrachten, aber dies erhöht die Anzahl der Merkmale schnell und ist nicht einmal so groß.

Gibt es eine gute Möglichkeit, auf andere Weise mit geordnetem Text umzugehen? Ich bin definitiv offen für die Verwendung eines Parsers für natürliche Sprache (nltk, textblob, etc.) zusammen mit scikit-learn.

+1

Das Bag-of-words + Naive Bayes-Modell funktioniert in einigen Kontexten ziemlich gut. Machst du eine binäre Klassifizierung oder Multi-Klasse? – bpachev

+0

@bpachev Ich beginne mit der binären Klassifizierung, aber ich würde gerne zu Multi-Klasse kommen, sobald mein binärer Klassifizierer anständig arbeitet. – 2Cubed

Antwort

1

Was ist mit word2vec embedding? Es ist eine neuronale Netzwerk basierte Einbettung von Wörtern in Vektoren, und berücksichtigt Kontext. Dies könnte einen komplexeren Satz von Funktionen für Ihren Klassifikator bereitstellen.

Eine leistungsfähige Python-Bibliothek für die Verarbeitung natürlicher Sprache mit einer guten word2vec-Implementierung ist gensim. Gensim ist sehr skalierbar und schnell und verfügt über erweiterte Textverarbeitungsfunktionen. Hier ist ein kurzer Überblick über wie, um loszulegen:

Installation

Just do easy_install -U gensim oder pip install --upgrade gensim.

Ein einfaches Beispiel word2vec

import gensim 

documents = [['human', 'interface', 'computer'], 
['survey', 'user', 'computer', 'system', 'response', 'time'], 
['eps', 'user', 'interface', 'system'], 
['system', 'human', 'system', 'eps'], 
['user', 'response', 'time'], 
['trees'], 
['graph', 'trees'], 
['graph', 'minors', 'trees'], 
['graph', 'minors', 'survey']] 

model = gensim.models.Word2Vec(documents, min_count=1) 
print model["survey"] 

Dies wird Ausgang des Vektor, dass „Umfrage“ Karten, die Sie für ein Feature Eingang zu Ihrem Klassifikator verwenden könnten.

Gensim hat viele andere Fähigkeiten, und es lohnt sich, es besser kennenzulernen, wenn Sie an Natural Language Processing interessiert sind.

Verwandte Themen