Principes de base du marquage d'une partie du discours (POS)

Qu'est-ce que le marquage POS?

Le marquage, une sorte de classification, est l'attribution automatique de la description des jetons. Nous appelons le descripteur s 'tag', qui représente une des parties du discours (noms, verbe, adverbes, adjectifs, pronoms, conjonction et leurs sous-catégories), des informations sémantiques, etc.

D'un autre côté, si nous parlons de balisage de partie de parole (POS), il peut être défini comme le processus de conversion d'une phrase sous la forme d'une liste de mots, en une liste de tuples. Ici, les tuples sont sous la forme de (mot, balise). Nous pouvons également appeler le marquage POS un processus d'attribution d'une des parties du discours au mot donné.

Le tableau suivant représente la notification de point de vente la plus fréquemment utilisée dans le corpus Penn Treebank -

Sr. Non Marque La description
1 NNP Nom propre, singulier
2 NNPS Nom propre, pluriel
3 PDT Pré-déterminant
4 POS Fin possessive
5 PRP Pronom personnel
6 PRP $ Pronom possessif
sept RB Adverbe
8 RBR Adverbe, comparatif
9 RBS Adverbe, superlatif
dix RP Particule
11 SYM Symbole (mathématique ou scientifique)
12 À à
13 UH Interjection
14 VB Verbe, forme de base
15 VBD Verbe, passé
16 VBG Verbe, gérondif / participe présent
17 VBN Verbe, passé
18 WP Pronom Wh
19 WP $ Pronom wh possessif
20 WRB Wh-adverbe
21 # Signe dièse
22 $ Signe dollar
23 . Ponctuation finale de la phrase
24 , Virgule
25 : Colon, point-virgule
26 ( Caractère crochet gauche
27 ) Caractère crochet droit
28 " Guillemet double simple
29 ' Guillemet simple ouvert à gauche
30 " Guillemet double ouvert à gauche
31 ' Guillemet simple fermé à droite
32 " Guillemet double ouvert à droite

Exemple

Comprenons-le avec une expérience Python -

import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))

Production

[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]

Pourquoi le marquage POS?

L'étiquetage des points de vente est une partie importante de la PNL car il constitue la condition préalable à une analyse PNL plus approfondie comme suit

  • Chunking
  • Analyse syntaxique
  • Extraction d'informations
  • Traduction automatique
  • Analyse des sentiments
  • Analyse grammaticale et désambiguïsation du sens des mots

TaggerI - Classe de base

Tous les tagueurs résident dans le package nltk.tag de NLTK. La classe de base de ces tagueurs estTaggerI, signifie que tous les tagueurs héritent de cette classe.

Methods - La classe TaggerI a les deux méthodes suivantes qui doivent être implémentées par toutes ses sous-classes -

  • tag() method - Comme son nom l'indique, cette méthode prend une liste de mots en entrée et renvoie une liste de mots étiquetés en sortie.

  • evaluate() method - Avec l'aide de cette méthode, nous pouvons évaluer la précision du tagger.

La base de l'étiquetage des points de vente

La ligne de base ou l'étape de base du marquage POS est Default Tagging, qui peut être effectuée à l'aide de la classe DefaultTagger de NLTK. Le marquage par défaut attribue simplement la même étiquette POS à chaque jeton. Le marquage par défaut fournit également une référence pour mesurer les améliorations de précision.

Classe DefaultTagger

Le balisage par défaut est effectué en utilisant DefaultTagging class, qui prend le seul argument, c'est-à-dire la balise que nous voulons appliquer.

Comment ça marche?

Comme indiqué précédemment, tous les tagueurs sont hérités de TaggerIclasse. leDefaultTagger est hérité de SequentialBackoffTagger qui est une sous-classe de TaggerI class. Comprenons-le avec le diagramme suivant -

Comme faisant partie de SeuentialBackoffTagger, la DefaultTagger doit implémenter la méthode choose_tag () qui prend les trois arguments suivants.

  • Liste des jetons
  • Index du jeton actuel
  • Liste des jetons précédents, c'est-à-dire l'historique

Exemple

import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])

Production

[('Tutorials', 'NN'), ('Point', 'NN')]

Dans cet exemple, nous avons choisi une balise de nom car ce sont les types de mots les plus courants. De plus,DefaultTagger est également plus utile lorsque nous choisissons l'étiquette de point de vente la plus courante.

Évaluation de la précision

le DefaultTaggerest également la référence pour évaluer l'exactitude des étiqueteurs. C'est la raison pour laquelle nous pouvons l'utiliser avecevaluate()méthode de mesure de la précision. leevaluate() La méthode prend une liste de jetons marqués comme référence pour évaluer le marqueur.

Voici un exemple dans lequel nous avons utilisé notre tagger par défaut, nommé exptagger, créé ci-dessus, pour évaluer l'exactitude d'un sous-ensemble de treebank phrases marquées corpus -

Exemple

import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)

Production

0.13198749536374715

La sortie ci-dessus montre qu'en choisissant NN pour chaque étiquette, nous pouvons réaliser des tests de précision d'environ 13% sur 1000 entrées du treebank corpus.

Marquer une liste de phrases

Plutôt que de baliser une seule phrase, les NLTK TaggerI classe nous fournit également un tag_sents()méthode à l'aide de laquelle nous pouvons étiqueter une liste de phrases. Voici l'exemple dans lequel nous avons tagué deux phrases simples

Exemple

import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([['Hi', ','], ['How', 'are', 'you', '?']])

Production

[
   [
      ('Hi', 'NN'), 
      (',', 'NN')
   ], 
   [
      ('How', 'NN'), 
      ('are', 'NN'),
      ('you', 'NN'), 
      ('?', 'NN')
   ]
]

Dans l'exemple ci-dessus, nous avons utilisé notre tagger par défaut créé précédemment nommé exptagger.

Démarquer une phrase

Nous pouvons également décomposer une phrase. NLTK fournit la méthode nltk.tag.untag () à cet effet. Il prendra une phrase étiquetée comme entrée et fournit une liste de mots sans étiquettes. Voyons un exemple -

Exemple

import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])

Production

['Tutorials', 'Point']