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']