Ich erhalte einen Speicherfehler, wenn ich den Klassifikator für den gesamten Datensatz trainiere, also habe ich den Datensatz in kleine Teile geteilt und ein einzelnes Klassifikatorobjekt für jedes trainiert.NLTK Classifier Objekt
Zum Testen benötige ich eine Kombination dieser einzelnen Klassifikatorobjekte. Wie kann ich das machen? Ich kann die Objekte in der Pickle-Datei speichern, aber wiederum sind sie nur einzelne Objekte.
Ich verwende NLTK.
Code:
documents = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
all_words = []
for w in movie_reviews.words():
all_words.append(w.lower())
all_words = nltk.FreqDist(all_words)
word_features = list(all_words.keys())[:3000]
def find_features(document):
words = set(document)
features = {}
for w in word_features:
features[w] = (w in words)
return features
#print((find_features(movie_reviews.words('neg/cv000_29416.txt'))))
featuresets = [(find_features(rev), category) for (rev, category) in documents]
numtrain = int(len(documents) * 90/100)
training_set = featuresets[:numtrain]
testing_set = featuresets[numtrain:]
classifier = nltk.NaiveBayesClassifier.train(training_set)
Vielen Dank für Ihre Antwort. Die Frage ist, dass ich einen Speicherfehler erhalte, wenn ich nur 3000 Wörter überschreite, und für eine korrekte Vorhersage muss ich den ganzen Datensatz verwenden, der mehr als 100k Wörter betragen wird. Ich denke also nicht, dass Punkt 1 und 2 funktionieren. Was ich denke ist, dass mein Problem ein sehr häufiges Problem sein sollte, da die meisten Leute, die ein maschinelles Lernprojekt machen, damit konfrontiert werden müssen. Diese Seite http://text-processing.com/demo/sentiment/ hat eine Anwendung mit NLTK gemacht und es funktioniert perfekt, so dass es eine gemeinsame Technik oder etwas geben muss, die jeder benutzen muss. – Arkham
Das Repository in meinem Beispiel ist ein Sentiment-Analyse-Projekt, das (in einer der Einstellungen) ~ 100000 Tweets für Zugdaten und ~ 20000 für Testdaten verwendet und es in einem einzigen Schritt ohne Speicherprobleme gemacht wird. Es benutzt jedoch scikit-learn (und nltk für andere Dinge). Deshalb habe ich 1 und 2 vorgeschlagen. Können Sie mir mehr darüber erzählen, wo Sie Ihr Beispiel testen? (Hardware und Einrichtung) – mkaran
Ich habe einen 6GB RAM mit dem NLTK-Toolkit natürlich und wie alles auf dem normalen Computer. Nicht mit scikit Modul BTW. Aber da der Link, den ich gepostet habe, kein scikit-Modul verwendet und auf NLTK basiert, denke ich nicht, dass es einen Unterschied machen sollte. – Arkham