PNL | Chunker basado en Tagger de entrenamiento | conjunto 2

corpus Conll2000

define los fragmentos utilizando etiquetas IOB.

  • Especifica dónde comienza y termina el fragmento, junto con sus tipos.
  • Se puede entrenar un etiquetador de parte del discurso en estas etiquetas IOB para potenciar aún más una subclase ChunkerI.
  • Primero, utilizando el método de corpus chunked_sents() , se obtiene un árbol y luego se transforma a un formato utilizable por un etiquetador de parte del discurso.
  • conll_tag_chunks() usa tree2conlltags() para convertir una oración Tree en una lista de tres tuplas de la forma (word, pos, iob).
    • pos: etiqueta de parte del discurso
    • IOB: etiqueta IOB, por ejemplo: B_NP, I_NP para indicar que el trabajo está al principio y dentro del sintagma nominal, respectivamente.
  • conlltags2tree() es la inversión de tree2conlltags()
  • Las 3 tuplas se convierten luego en 2 tuplas que el etiquetador puede reconocer.
  • La clase RegexpParser usa etiquetas de parte del discurso para patrones de fragmentos, por lo que las etiquetas de parte del discurso se usan como si fueran palabras para etiquetar.
  • La función conll_tag_chunks() toma 3 tuplas (palabra, pos, iob) y devuelve una lista de 2 tuplas de la forma (pos, iob)

Código #1: Entendamos 

Python3

from nltk.chunk.util import tree2conlltags, conlltags2tree
from nltk.tree import Tree
 
t = Tree('S', [Tree('NP', [('the', 'DT'), ('book', 'NN')])])
 
print ("Tree2conlltags : \n", tree2conlltags(t))
 
c = conlltags2tree([('the', 'DT', 'B-NP'), ('book', 'NN', 'I-NP')])
 
print ("\nconlltags2tree : \n", c)
 
# Converting 3 tuples to 2 tuples.
print ("\nconll_tag_chunnks for tree : \n", conll_tag_chunks([t]))

Producción : 

Tree2conlltags : 
[('the', 'DT', 'B-NP'), ('book', 'NN', 'I-NP')]

conlltags2tree : 
Tree('S', [Tree('NP', [('the', 'DT'), ('book', 'NN')])])

conll_tag_chunnks for tree : 
[[('DT', 'B-NP'), ('NN', 'I-NP')]]

Código #2: clase TagChunker usando el corpus conll2000 

Python3

from chunkers import TagChunker
from nltk.corpus import conll2000
 
# data
conll_train = conll2000.chunked_sents('train.txt')
conll_test = conll2000.chunked_sents('test.txt')
 
# initializing the chunker
chunker = TagChunker(conll_train)
 
# testing
score = chunker.evaluate(conll_test)
 
a = score.accuracy()
p = score.precision()
r = recall
  
print ("Accuracy of TagChunker : ", a)
print ("\nPrecision of TagChunker : ", p)
print ("\nRecall of TagChunker : ", r)

Producción : 

Accuracy of TagChunker : 0.8950545623403762

Precision of TagChunker : 0.8114841974355675

Recall of TagChunker : 0.8644191676944863

Nota: el rendimiento de conll2000 no es tan bueno como el de treebank_chunk, pero conll2000 es un corpus mucho más grande. 
  
Código #3: TagChunker usando la clase UnigramTagger  

Python3

# loading libraries
from chunkers import TagChunker
from nltk.tag import UnigramTagger
 
uni_chunker = TagChunker(train_chunks,
                         tagger_classes =[UnigramTagger])
 
score = uni_chunker.evaluate(test_chunks)
 
a = score.accuracy()
 
print ("Accuracy of TagChunker : ", a)

Producción : 

Accuracy of TagChunker : 0.9674925924335466

El argumento tagger_classes se pasa directamente a la función backoff_tagger(), lo que significa que deben ser subclases de SequentialBackoffTagger. En las pruebas, el valor predeterminado de tagger_classes = [UnigramTagger, BigramTagger] generalmente produce los mejores resultados, pero puede variar con diferentes corpus.
 

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 *