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