Boîte à outils en langage naturel - Unigram Tagger

Qu'est-ce que Unigram Tagger?

Comme son nom l'indique, unigram tagger est un tagger qui n'utilise qu'un seul mot comme contexte pour déterminer le tag POS (Part-of-Speech). En termes simples, Unigram Tagger est un tagger basé sur le contexte dont le contexte est un seul mot, c'est-à-dire Unigram.

Comment ça marche?

NLTK fournit un module nommé UnigramTaggerdans ce but. Mais avant de plonger dans son fonctionnement, comprenons la hiérarchie à l'aide du diagramme suivant -

D'après le diagramme ci-dessus, il est entendu que UnigramTagger est hérité de NgramTagger qui est une sous-classe de ContextTagger, qui hérite de SequentialBackoffTagger.

Le fonctionnement de UnigramTagger est expliqué à l'aide des étapes suivantes -

  • Comme nous l'avons vu, UnigramTagger hérite de ContextTagger, il implémente un context()méthode. Cecontext() La méthode prend les trois mêmes arguments que choose_tag() méthode.

  • Le résultat de context()method sera le mot token qui sera ensuite utilisé pour créer le modèle. Une fois le modèle créé, le mot token est également utilisé pour rechercher la meilleure balise.

  • De cette façon, UnigramTagger construira un modèle de contexte à partir de la liste des phrases marquées.

Formation d'un tagueur Unigram

NLTK UnigramTaggerpeuvent être formés en fournissant une liste de phrases marquées au moment de l'initialisation. Dans l'exemple ci-dessous, nous allons utiliser les phrases balisées du corpus treebank. Nous utiliserons les 2500 premières phrases de ce corpus.

Exemple

Importez d'abord le module UniframTagger de nltk -

from nltk.tag import UnigramTagger

Ensuite, importez le corpus que vous souhaitez utiliser. Ici, nous utilisons le corpus treebank -

from nltk.corpus import treebank

Maintenant, prenez les phrases à des fins de formation. Nous prenons les 2500 premières phrases à des fins de formation et les marquerons -

train_sentences = treebank.tagged_sents()[:2500]

Ensuite, appliquez UnigramTagger sur les phrases utilisées à des fins de formation -

Uni_tagger = UnigramTagger(train_sentences)

Prenez quelques phrases, soit égales ou moins prises à des fins de formation, soit 2500, à des fins de test. Ici, nous prenons les premiers 1500 à des fins de test -

test_sentences = treebank.tagged_sents()[1500:]
Uni_tagger.evaluate(test_sents)

Production

0.8942306156033808

Ici, nous avons obtenu une précision d'environ 89% pour un tagueur qui utilise la recherche d'un seul mot pour déterminer l'étiquette POS.

Exemple d'implémentation complet

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)

Production

0.8942306156033808

Remplacer le modèle de contexte

À partir du diagramme ci-dessus montrant la hiérarchie pour UnigramTagger, nous connaissons tous les tagueurs qui héritent de ContextTagger, au lieu de former le leur, peuvent prendre un modèle pré-construit. Ce modèle pré-construit est simplement un mappage de dictionnaire Python d'une clé de contexte à une balise. Et pourUnigramTagger, les clés de contexte sont des mots individuels tandis que pour d'autres NgramTagger sous-classes, ce seront des tuples.

Nous pouvons remplacer ce modèle de contexte en passant un autre modèle simple au UnigramTaggerclasse au lieu de passer l'ensemble de formation. Comprenons-le à l'aide d'un exemple simple ci-dessous -

Exemple

from nltk.tag import UnigramTagger
from nltk.corpus import treebank
Override_tagger = UnigramTagger(model = {‘Vinken’ : ‘NN’})
Override_tagger.tag(treebank.sents()[0])

Production

[
   ('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)
]

Comme notre modèle contient 'Vinken' comme seule clé de contexte, vous pouvez observer à partir de la sortie ci-dessus que seul ce mot a une balise et tous les autres mots ont None comme balise.

Définition d'un seuil de fréquence minimum

Pour décider quelle balise est la plus probable pour un contexte donné, le ContextTaggerla classe utilise la fréquence d'occurrence. Il le fera par défaut même si le mot de contexte et la balise n'apparaissent qu'une seule fois, mais nous pouvons définir un seuil de fréquence minimum en passant uncutoff valeur à la UnigramTaggerclasse. Dans l'exemple ci-dessous, nous transmettons la valeur de coupure dans la recette précédente dans laquelle nous avons formé un UnigramTagger -

Exemple

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)

Production

0.7357651629613641