2010-12-17 5 views
5

Ich versuche derzeit, einen allgemeinen (oder so allgemeinen wie praktischen) POS-Tagger mit NLTK zu erstellen. Ich habe mich mit den Braun- und Baumstammkorpora zum Training beschäftigt, werde mich aber wahrscheinlich am Baumbankkorpus niederlassen.Versuchen Sie, MEGAM als NLTK ClassifierBasedPOSTagger zu verwenden?

Lernen, wie ich gehe, finde ich den Klassifikator POS-Tagger sind die genauesten. Der Maximum Entity Classifier soll die genaueste sein, aber ich finde, dass er so viel Speicher (und Verarbeitungszeit) benötigt, dass ich das Trainings-Dataset signifikant reduzieren muss, daher ist das Endergebnis weniger genau als der Standard Naive Bayes Classifier.

Es wurde vorgeschlagen, dass ich MEGAM verwende. NLTK hat eine gewisse Unterstützung für MEGAM, aber alle Beispiele, die ich gefunden habe, sind für allgemeine Klassifizierer (z. B. ein Textklassifizierer, der einen Vektor von Wortmerkmalen verwendet) und nicht für einen spezifischeren POS-Tagger. Ohne dass ich meinen eigenen POS-Feature-Extractor und -Compiler neu erstellen muss (ich verwende lieber den bereits in NLTK), wie kann ich den MEGAM MaxEnt-Klassifikator verwenden? Ie. wie kann ich es in einigen bestehenden MaxEnt Code löschen, die entlang der Linien ist:

maxent_tagger = ClassifierBasedPOSTagger(train=training_sentences, 
             classifier_builder=MaxentClassifier.train) 
+3

Haben Sie gelesen: http://streamhacker.com/2008/11/03/part-of-speech-tagging-with-nltk-part-1/? Es ist ein ziemlich guter Blick auf POS-Tagger im Allgemeinen, wenn man sich alle vier Artikel ansieht. – perimosocordiae

+1

Ja, ich habe sein Buch. Der Blog hat einige interessante Effizienzvergleiche, und ich könnte noch einen Brill-Tagger am Ende des Klassifikators hinzufügen (wie vorgeschlagen); aber die Beiträge scheinen MEGAM nicht zu erwähnen? Vielleicht muss ich mir den NLTK MaxEnt-Code ansehen und ihn für MEGAM reverse engineeren oder duplizieren. – winwaed

Antwort

8

Dieses Motto sollte eine MEGAM MaxentClassifier für die Ausbildung für die ClassifierBasedPOSTagger arbeiten. Natürlich geht davon aus, dass MEGAM bereits (go here zum Download) Für die zukünftigen Nutzer

maxent_tagger = ClassifierBasedPOSTagger(train=train_sents, classifier_builder=lambda train_feats: MaxentClassifier.train(train_feats, algorithm='megam', max_iter=10, min_lldelta=0.1)) 
+3

Auch Checkout train_tagger.py in https://github.com/japerk/nltk-trainer. Irgendwann werde ich einen Intro-Artikel schreiben, aber hoffentlich reichen die Hilfemeldungen aus, um loszulegen. – Jacob

+0

Danke Jacob - das scheint zu funktionieren! (sieht so aus, als müsste ich mich an Python Lambda-Funktionen erinnern). Ja, ich hatte Megam installiert, mein Problem war, dass der (generische) Klassifikator in den POS-Tagging-Klassifikator eingebunden wurde. Bis jetzt liefern meine Tests Genauigkeiten, die denen von Naive Bayes sehr ähnlich sind (innerhalb von 1%). Es dauert länger, den Klassifizierer zu erstellen, aber nicht so lange wie der standardmäßige MaxEnt-Algorithmus. Ich habe train_tagger.py ausgedruckt - ich werde es während einer Kaffeepause anschauen :-) – winwaed

+1

Sie könnten versuchen, max_iter zu erhöhen oder min_lldelta zu verringern, um eine höhere Genauigkeit zu erreichen. Das sind nur die Zahlen, die ich normalerweise benutze, da Genauigkeitsplateaus ziemlich schnell sind. – Jacob

Verwandte Themen