Kit de herramientas de lenguaje natural - Unigram Tagger
¿Qué es Unigram Tagger?
Como su nombre lo indica, el etiquetador unigram es un etiquetador que solo usa una sola palabra como contexto para determinar la etiqueta POS (parte del discurso). En palabras simples, Unigram Tagger es un etiquetador basado en contexto cuyo contexto es una sola palabra, es decir, Unigram.
¿Como funciona?
NLTK proporciona un módulo llamado UnigramTaggerpara este propósito. Pero antes de profundizar en su funcionamiento, comprendamos la jerarquía con la ayuda del siguiente diagrama:
Del diagrama anterior, se entiende que UnigramTagger es heredado de NgramTagger que es una subclase de ContextTagger, que hereda de SequentialBackoffTagger.
El funcionamiento de UnigramTagger se explica con la ayuda de los siguientes pasos:
Como hemos visto, UnigramTagger hereda de ContextTagger, implementa un context()método. Estacontext() El método toma los mismos tres argumentos que choose_tag() método.
El resultado de context()método será la palabra token que se utilizará más adelante para crear el modelo. Una vez que se crea el modelo, la palabra token también se usa para buscar la mejor etiqueta.
De este modo, UnigramTagger construirá un modelo de contexto a partir de la lista de oraciones etiquetadas.
Entrenamiento de un etiquetador Unigram
NLTK's UnigramTaggerse puede entrenar proporcionando una lista de oraciones etiquetadas en el momento de la inicialización. En el siguiente ejemplo, usaremos las oraciones etiquetadas del corpus del banco de árboles. Usaremos las primeras 2500 oraciones de ese corpus.
Ejemplo
Primero importe el módulo UniframTagger desde nltk -
from nltk.tag import UnigramTagger
A continuación, importe el corpus que desee utilizar. Aquí estamos usando el corpus de treebank -
from nltk.corpus import treebank
Ahora, tome las oraciones con fines de entrenamiento. Estamos tomando las primeras 2500 oraciones con fines de capacitación y las etiquetaremos:
train_sentences = treebank.tagged_sents()[:2500]
A continuación, aplique UnigramTagger en las oraciones utilizadas con fines de entrenamiento:
Uni_tagger = UnigramTagger(train_sentences)
Tome algunas frases, iguales o inferiores, tomadas con fines de capacitación, es decir, 2500, con fines de prueba. Aquí tomamos los primeros 1500 para fines de prueba:
test_sentences = treebank.tagged_sents()[1500:]
Uni_tagger.evaluate(test_sents)
Salida
0.8942306156033808
Aquí, obtuvimos alrededor del 89 por ciento de precisión para un etiquetador que usa la búsqueda de una sola palabra para determinar la etiqueta POS.
Ejemplo de implementación completo
from nltk.tag import UnigramTagger
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
Uni_tagger = UnigramTagger(train_sentences)
test_sentences = treebank.tagged_sents()[1500:]
Uni_tagger.evaluate(test_sentences)
Salida
0.8942306156033808
Anulando el modelo de contexto
Del diagrama anterior que muestra la jerarquía de UnigramTagger, conocemos todos los etiquetadores que heredan de ContextTagger, en lugar de entrenar a los suyos, pueden tomar un modelo prediseñado. Este modelo prediseñado es simplemente una asignación de diccionario de Python de una clave de contexto a una etiqueta. Y paraUnigramTagger, las claves de contexto son palabras individuales mientras que para otras NgramTagger subclases, serán tuplas.
Podemos anular este modelo de contexto pasando otro modelo simple al UnigramTaggerclase en lugar de pasar el conjunto de entrenamiento. Entendamos esto con la ayuda de un sencillo ejemplo a continuación:
Ejemplo
from nltk.tag import UnigramTagger
from nltk.corpus import treebank
Override_tagger = UnigramTagger(model = {‘Vinken’ : ‘NN’})
Override_tagger.tag(treebank.sents()[0])
Salida
[
('Pierre', None),
('Vinken', 'NN'),
(',', None),
('61', None),
('years', None),
('old', None),
(',', None),
('will', None),
('join', None),
('the', None),
('board', None),
('as', None),
('a', None),
('nonexecutive', None),
('director', None),
('Nov.', None),
('29', None),
('.', None)
]
Como nuestro modelo contiene 'Vinken' como la única clave de contexto, puede observar en el resultado anterior que solo esta palabra tiene etiqueta y todas las demás palabras tienen None como etiqueta.
Establecer un umbral de frecuencia mínima
Para decidir qué etiqueta es más probable para un contexto dado, el ContextTaggerla clase usa la frecuencia de ocurrencia. Lo hará de forma predeterminada incluso si la palabra de contexto y la etiqueta ocurren solo una vez, pero podemos establecer un umbral de frecuencia mínima pasando uncutoff valor para el UnigramTaggerclase. En el siguiente ejemplo, estamos pasando el valor de corte en la receta anterior en la que entrenamos un UnigramTagger -
Ejemplo
from nltk.tag import UnigramTagger
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
Uni_tagger = UnigramTagger(train_sentences, cutoff = 4)
test_sentences = treebank.tagged_sents()[1500:]
Uni_tagger.evaluate(test_sentences)
Salida
0.7357651629613641