PNL | Combinación de etiquetadores Ngram

NgramTagger tiene 3 subclases

  • UnigramTagger
  • BigramTagger
  • TrigramTagger

La subclase BigramTagger usa la etiqueta anterior como parte de su contexto
. La subclase TrigramTagger usa las dos etiquetas anteriores como parte de su contexto.

ngram : es una subsecuencia de n elementos.
Idea de las subclases de NgramTagger:

  • Al observar las palabras anteriores y las etiquetas POS, se puede adivinar la etiqueta de parte del discurso para la palabra actual.
  • Cada etiquetador mantiene un diccionario de contexto (la clase padre ContextTagger se usa para implementarlo).
  • Este diccionario se usa para adivinar esa etiqueta según el contexto.
  • El contexto es una cantidad de palabras etiquetadas previamente en el caso de las subclases de NgramTagger.

Código #1: Funcionamiento del etiquetador Bigram

# Loading Libraries 
from nltk.tag import DefaultTagger 
from nltk.tag import BigramTagger
  
from nltk.corpus import treebank
  
# initializing training and testing set    
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
  
# Tagging
tag1 = BigramTagger(train_data)
  
# Evaluation
tag1.evaluate(test_data)

Producción :

0.11318799913662854

 
Código #2: Funcionamiento del etiquetador Trigram

# Loading Libraries 
from nltk.tag import DefaultTagger 
from nltk.tag import TrigramTagger
  
from nltk.corpus import treebank
  
# initializing training and testing set    
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
  
# Tagging
tag1 = TrigramTagger(train_data)
  
# Evaluation
tag1.evaluate(test_data)

Producción :

0.06876753723289446

 
Código n.º 3: Uso colectivo del etiquetador Unigram, Bigram y Trigram.

# Loading Libraries
   
from nltk.tag import TrigramTagger
from tag_util import backoff_tagger
from nltk.corpus import treebank
  
# initializing training and testing set    
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
  
backoff = DefaultTagger('NN')
tag = backoff_tagger(train_sents, 
                     [UnigramTagger, BigramTagger, TrigramTagger], 
                     backoff = backoff)
  
tag.evaluate(test_sents)

Producción :

0.8806820634578028

Cómo funciona ?

  • La función backoff_tagger crea una instancia de cada clase de etiquetador.
  • Proporciona etiquetador anterior y train_sents como retroceso.
  • El orden de las clases de etiquetador es importante: en el código anterior, la primera clase es UnigramTagger y, por lo tanto, se entrenará primero y se le dará el etiquetador de retroceso inicial (el DefaultTagger).
  • Este etiquetador luego se convierte en el etiquetador de retroceso para la siguiente clase de etiquetador.
  • El etiquetador final devuelto será una instancia de la última clase de etiquetador: TrigramTagger .

Código #4: Prueba

print (tagger._taggers[-1] == backoff)
  
print ("\n", isinstance(tagger._taggers[0], TrigramTagger))
  
print ("\n", isinstance(tagger._taggers[1], BigramTagger))

Producción :

True

True

True

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 *