2010-12-17 24 views
5

Actualmente estoy tratando de construir un etiquetador de TPV de propósito general (o tan general como sea práctico) con NLTK. He incursionado en el corpus marrón y en el banco de los árboles para entrenarme, pero probablemente me estoy conformando con el corpus del banco de árboles.¿Intenta usar MEGAM como un clasificador NLTK basado en un marcador de depósito?

Aprendiendo sobre la marcha, estoy encontrando que el clasificador POS taggers es el más preciso. El clasificador de entidad máxima está destinado a ser el más preciso, pero creo que utiliza tanta memoria (y tiempo de procesamiento) que tengo que reducir significativamente el conjunto de datos de entrenamiento, por lo que el resultado final es menos preciso que usar el clasificador Naive Bayes predeterminado.

Se ha sugerido que use MEGAM. NLTK tiene algo de apoyo para MEGAM, pero todos los ejemplos que he encontrado son para clasificadores generales (por ejemplo, un clasificador de texto que usa un vector de funciones de palabras), en lugar de un marcador de POS más específico. Sin tener que volver a crear mi propio extractor y compilador de características POS (es decir, prefiero usar el que ya está en NLTK), ¿cómo puedo usar el clasificador MEGAM MaxEnt? Es decir. la forma en que se puede caer en algún código MaxEnt existente que es a lo largo de las líneas de:

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

¿Has leído: http://streamhacker.com/2008/11/03/part-of-speech-tagging-with-nltk-part-1/? En general, es un buen vistazo a los etiquetadores de POS si mira los cuatro artículos. – perimosocordiae

+1

Sí, tengo su libro. El blog tiene algunas comparaciones de eficiencia interesantes, y aún podría agregar un etiquetador Brill al final del clasificador (como se sugiere); pero las publicaciones no parecen mencionar a MEGAM? Tal vez deba ver el código NLTK MaxEnt y aplicar ingeniería inversa o duplicarlo para usar MEGAM. – winwaed

Respuesta

8

Este revestimiento debe trabajar para la formación de un MEGAM MaxentClassifier para la ClassifierBasedPOSTagger. Por supuesto, eso supone MEGAM ya está instalado (vaya here para descargar)

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

También revisa train_tagger.py en https://github.com/japerk/nltk-trainer. Algún tiempo después escribiré un artículo de introducción, pero espero que los mensajes de ayuda sean suficientes para comenzar. – Jacob

+0

Gracias Jacob - ¡eso parece estar funcionando! (Parece que necesito recordarme a mí mismo acerca de las funciones de Python Lambda). Sí, tenía instalado Megam, mi problema era conectar el clasificador (genérico) al clasificador de etiquetado de POS. Hasta el momento, mis pruebas dan precisiones que son muy similares a las de Naive Bayes (dentro de aproximadamente 1%). Lleva más tiempo construir el clasificador, pero no tan largo como el algoritmo MaxEnt predeterminado. Imprimí train_tagger.py - Lo revisaré durante un descanso para tomar café :-) – winwaed

+1

Puede intentar aumentar max_iter o disminuir min_lldelta para lograr una mayor precisión. Esos son solo los números que suelo usar desde la precisión de las mesetas con bastante rapidez. – Jacob

Cuestiones relacionadas