PNL | Chunker basado en Tagger de entrenamiento | Serie 1

Entrenar un fragmentador es una alternativa a la especificación manual de patrones de fragmentación de expresiones regulares (regex). Pero el entrenamiento manual para especificar la expresión es una tarea tediosa, ya que sigue el método de acierto y prueba para obtener los patrones exactos correctos. Por lo tanto, los datos de corpus existentes se pueden usar para entrenar chunkers.

En los códigos a continuación, estamos usando el corpus treebank_chunk para producir oraciones fragmentadas en forma de árboles.
-> Para entrenar un fragmentador basado en etiquetadores: una clase TagChunker utiliza los métodos chunked_sents() .
-> Para extraer una lista de tuplas (pos, iob) de una lista de árboles, la clase TagChunker usa una función auxiliar, conll_tag_chunks() .

Estas tuplas finalmente se utilizan para entrenar a un etiquetador. y aprende etiquetas IOB para etiquetas de parte del discurso.

Código #1: Entendamos la clase Chunker para entrenamiento.

from nltk.chunk import ChunkParserI
from nltk.chunk.util import tree2conlltags, conlltags2tree
from nltk.tag import UnigramTagger, BigramTagger
from tag_util import backoff_tagger
  
  
def conll_tag_chunks(chunk_data):
      
    tagged_data = [tree2conlltags(tree) for 
                    tree in chunk_data]
      
    return [[(t, c) for (w, t, c) in sent] 
            for sent in tagged_data]
      
class TagChunker(ChunkParserI):
      
    def __init__(self, train_chunks, 
                 tagger_classes =[UnigramTagger, BigramTagger]):
          
        train_data = conll_tag_chunks(train_chunks)
        self.tagger = backoff_tagger(train_data, tagger_classes)
          
    def parse(self, tagged_sent):
        if not tagged_sent: 
            return None
          
        (words, tags) = zip(*tagged_sent)
        chunks = self.tagger.tag(tags)
        wtc = zip(words, chunks)
          
        return conlltags2tree([(w, t, c) for (w, (t, c)) in wtc])

Producción :

Training TagChunker

 
Código #2: Uso de Tag Chunker.

# loading libraries
from chunkers import TagChunker
from nltk.corpus import treebank_chunk
  
# data from treebank_chunk corpus
train_data = treebank_chunk.chunked_sents()[:3000]
test_data = treebank_chunk.chunked_sents()[3000:]
  
# Initailazing 
chunker = TagChunker(train_data)

 
Código #3: Evaluación del TagChunker

# testing
score = chunker.evaluate(test_data)
  
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.9732039335251428

Precision of TagChunker : 0.9166534370535006

Recall of TagChunker : 0.9465573770491803

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 *