PNL | Fragmentación basada en clasificador | conjunto 2

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *