Usando los datos del corpus treebank_chunk, permítanos evaluar los chunkers (preparados en el artículo anterior).
Código #1:
# loading libraries from chunkers import ClassifierChunker from nltk.corpus import treebank_chunk train_data = treebank_chunk.chunked_sents()[:3000] test_data = treebank_chunk.chunked_sents()[3000:] # initializing chunker = ClassifierChunker(train_data) # evaluation score = chunker.evaluate(test_data) a = score.accuracy() p = score.precision() r = recall print ("Accuracy of ClassifierChunker : ", a) print ("\nPrecision of ClassifierChunker : ", p) print ("\nRecall of ClassifierChunker : ", r)
Producción :
Accuracy of ClassifierChunker : 0.9721733155838022 Precision of ClassifierChunker : 0.9258838793383068 Recall of ClassifierChunker : 0.9359016393442623
Código #2: comparemos el rendimiento de conll_train
chunker = ClassifierChunker(conll_train) score = chunker.evaluate(conll_test) a = score.accuracy() p = score.precision() r = score.recall() print ("Accuracy of ClassifierChunker : ", a) print ("\nPrecision of ClassifierChunker : ", p) print ("\nRecall of ClassifierChunker : ", r)
Producción :
Accuracy of ClassifierChunker : 0.9264622074002153 Precision of ClassifierChunker : 0.8737924310910219 Recall of ClassifierChunker : 0.9007354620620346
la palabra se puede pasar a través del etiquetador a nuestra función detectora de características, mediante la creación de 2 tuplas anidadas de la forma ((palabra, pos), iob). El método chunk_trees2train_chunks() produce estas 2 tuplas anidadas.
Se extraen las siguientes características:
- La palabra actual y la etiqueta de parte del discurso
- La palabra anterior y la etiqueta IOB, etiqueta de parte del discurso
- La siguiente palabra y etiqueta de parte del discurso
La clase ClassifierChunker utiliza un ClassifierBasedTagger interno y prev_next_pos_iob() como su detector de funciones predeterminado. Los resultados del etiquetador, que están en la misma forma anidada de 2 tuplas, luego se reforman en 3 tuplas para devolver un árbol final usando conlltags2tree().
Código # 3: constructor de clasificador diferente
# loading libraries from chunkers import ClassifierChunker from nltk.corpus import treebank_chunk from nltk.classify import MaxentClassifier train_data = treebank_chunk.chunked_sents()[:3000] test_data = treebank_chunk.chunked_sents()[3000:] builder = lambda toks: MaxentClassifier.train( toks, trace = 0, max_iter = 10, min_lldelta = 0.01) chunker = ClassifierChunker( train_data, classifier_builder = builder) score = chunker.evaluate(test_data) a = score.accuracy() p = score.precision() r = score.recall() print ("Accuracy of ClassifierChunker : ", a) print ("\nPrecision of ClassifierChunker : ", p) print ("\nRecall of ClassifierChunker : ", r)
Producción :
Accuracy of ClassifierChunker : 0.9743204362949285 Precision of ClassifierChunker : 0.9334423548650859 Recall of ClassifierChunker : 0.9357377049180328
La clase ClassifierBasedTagger usa de manera predeterminada NaiveBayesClassifier.train como su classifier_builder. Pero se puede usar cualquier clasificador anulando el argumento de la palabra clave classifier_builder.
Publicación traducida automáticamente
Artículo escrito por Mohit Gupta_OMG 🙂 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA