Marquage POS avec NLTK et Chunking en NLP [EXEMPLES]

⚡ Résumé intelligent

L'étiquetage morphosyntaxique (POS Tagging) attribue une catégorie grammaticale à chaque mot d'une phrase, tandis que le découpage en segments (chunking) regroupe ces mots étiquetés en groupes significatifs tels que des groupes nominaux, ajoutant une structure superficielle que NLTK construit à l'aide d'expressions régulières. Python.

  • 🏷️ Étiquetage PDV : Chaque mot reçoit un jeton grammatical comme NN, VB ou JJ en fonction de son contexte.
  • 🌿 Regrouper: Les mots étiquetés sont regroupés en phrases, un processus également appelé analyse syntaxique superficielle.
  • 🔤 Workflow: Commencez par tokeniser le texte, puis appliquez pos_tag, puis analysez-le avec une grammaire RegexpParser.
  • (I.e. Comptage des étiquettes : Les fonctions Counter et FreqDist révèlent les fréquences des étiquettes et des mots pour l'ingénierie des caractéristiques.
  • 🔗 Collocations : Les bigrammes et les trigrammes permettent de capturer des paires et des triplets de mots pour des caractéristiques textuelles plus fortes.
  • 🤖 Utilisation de l'IA : L'apprentissage automatique et les étiqueteurs basés sur les HMM traitent les mots ambigus de manière probabiliste.

Étiquetage morphosyntaxique avec NLTK et segmentation en NLP

Balisage PDV

Balisage PDV L'étiquetage morphosyntaxique (ou étiquetage grammatical) est un processus qui consiste à marquer les mots d'un texte en fonction de leur catégorie grammaticale, de leur définition et de leur contexte. Il permet de lire un texte et d'attribuer à chaque mot une catégorie grammaticale spécifique.

Prenons comme exemple les catégories grammaticales de NLTK :

Input: Everything to permit us.
Output: [('Everything', NN),('to', TO), ('permit', VB), ('us', PRP)]

Étapes de l'exemple d'étiquetage des points de vente

  • Tokeniser le texte (word_tokenize)
  • Appliquez la fonction pos_tag à l'étape ci-dessus, c'est-à-dire nltk.pos_tag(tokenize_text).

Vous trouverez ci-dessous des exemples de balises NLTK POS :

Abréviation Sens
CC conjonction de coordination
CD chiffre cardinal
DT déterminant
EX existentiel là-bas
FW mot étranger
IN préposition/conjonction de subordination
JJ adjectif
JJR adjectif, comparatif
JJS adjectif, superlatif
LS marché de liste
MD modal
NN nom, singulier
NNS nom pluriel
PNN nom propre, singulier
NNPS nom propre, pluriel
GMT prédéterminant
POS fin possessive
PRP pronom personnel
$PRP pronom possessif
RB adverbe
RBR adverbe, comparatif
RBS adverbe, superlatif
RP particule
À marqueur infini
UH interjection
VB verbe
VBG verbe gérondif
VDB verbe au passé
VBN participe passé du verbe
VBP verbe, présent de l'indicatif, pas à la troisième personne du singulier
VBZ verbe, présent de l'indicatif, 3e personne du singulier
WDT déterminant wh
WP pronom interrogatif
WRB adverbe interrogatif

La liste des étiquettes morphosyntaxiques NLTK ci-dessus contient toutes les étiquettes morphosyntaxiques NLTK. L'étiqueteur morphosyntaxique NLTK sert à attribuer des informations grammaticales à chaque mot de la phrase. L'installation, l'importation et le téléchargement de tous les modules de l'étiqueteur morphosyntaxique NLTK sont maintenant terminés.

Qu’est-ce que le chunking en PNL ?

Regrouper En traitement automatique du langage naturel (TALN), le chunking est un processus qui consiste à regrouper de petits éléments d'information en unités plus larges. Son principal usage est la création de groupes nominaux. Il permet de structurer les phrases en s'appuyant sur l'étiquetage morphosyntaxique et les expressions régulières. Les groupes de mots ainsi obtenus sont appelés « chunks ». On parle également d'analyse syntaxique superficielle.

En analyse superficielle, il n'y a qu'un seul niveau entre les racines et les feuilles, tandis qu'en analyse profonde, il y en a plusieurs. L'analyse superficielle est aussi appelée analyse légère ou segmentation.

Règles de découpage

Il n'existe pas de règles prédéfinies, mais vous pouvez les combiner selon vos besoins. Par exemple, supposons que vous deviez identifier le nom, le verbe (au passé), l'adjectif et la conjonction de coordination dans une phrase. Vous pouvez utiliser la règle suivante :

chunk:{***?}

Le tableau suivant indique la signification des différents symboles :

Nom du symbole Description
. N'importe quel caractère sauf nouvelle ligne
* Faites correspondre 0 ou plusieurs répétitions
? Faites correspondre 0 ou 1 répétitions

À présent, écrivons le code pour mieux comprendre la règle.

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{***?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

Sortie :

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       '***?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

La conclusion du marquage de la partie du discours ci-dessus Python Par exemple, « make » est un verbe qui n’est pas inclus dans la règle, il n’est donc pas étiqueté comme mychunk.

Cas d'utilisation du découpage

Le découpage en segments est utilisé pour la détection d'entités. Une entité est la partie de la phrase qui permet à une machine de déterminer l'intention de l'entité.

Example:
Temperature of New York.
Here Temperature is the intention and New York is an entity.

En d'autres termes, le découpage en segments permet de sélectionner des sous-ensembles de jetons. Veuillez consulter le code ci-dessous pour comprendre comment le découpage en segments est utilisé pour sélectionner les jetons. Dans cet exemple, vous verrez un graphique correspondant à un segment d'un groupe nominal.

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {
?*}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking

Sortie :

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

Graphique de fragmentation des expressions nominales

Graphique de segmentation des phrases nominales

D'après le graphique, on constate que « learn » et « guru99 » sont deux tokens différents, mais qu'ils sont catégorisés comme un groupe nominal, contrairement au token « from ». Le découpage en segments permet de regrouper différents tokens dans un même segment. Le résultat dépend de la grammaire choisie. De plus, dans NLTK, le découpage en segments sert à étiqueter les motifs et à explorer les corpus textuels.

Comptage des étiquettes de point de vente

Nous avons discuté de divers pos_tag Nous allons maintenant étudier comment compter ces étiquettes. Le comptage des étiquettes est essentiel pour la classification de texte et la préparation des caractéristiques pour les opérations en langage naturel. Nous commencerons par écrire le code fonctionnel, puis nous expliquerons les étapes.

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

Sortie :

Counter({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1, 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

Élaboration du code :

  1. Utilisez le package Counter du module collections. Counter est une sous-classe de dictionnaire qui stocke les éléments comme clés et leur nombre d'occurrences comme valeurs.
  2. Importez nltk pour tokeniser le texte.
  3. Écrivez le texte dont vous souhaitez compter le pos_tag.
  4. Convertissez tous les mots en minuscules avant la tokenisation.
  5. Traiter les mots via word_tokenize et calculer le pos_tag de chaque token.
  6. Le compteur comptabilise ensuite le nombre total d'occurrences de chaque balise dans le texte.

Distribution de fréquence

La distribution de fréquence désigne le nombre de fois où un résultat expérimental se produit. Elle sert à déterminer la fréquence d'apparition de chaque mot dans un document. Dist. de fréquence classe définie par la nltk.probabilité module. Le compteur est incrémenté de un à chaque occurrence d'un échantillon.

Pour chaque mot, nous pouvons vérifier combien de fois il apparaît dans un document. Par exemple :

  • Méthode de comptage : La méthode `freq_dist.count('and')` renvoie le nombre d'occurrences de « and ». Elle est appelée méthode `count`.
  • Méthode de fréquence : freq_dist.freq('and') renvoie la fréquence d'un échantillon donné.

Nous allons écrire un petit programme qui calculera la distribution de fréquence de chaque mot du texte.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

Explication du code:

  1. Importez le module nltk.
  2. Écrivez le texte dont vous devez trouver la répartition des mots.
  3. Tokenisez chaque mot du texte, qui est servi d'entrée au module FreqDist de nltk.
  4. Appliquez chaque mot à nltk.FreqDist sous forme de liste.
  5. Représentez les mots sur le graphique à l'aide de la fonction plot().

Remarque : matplotlib doit être installé pour visualiser le graphique. Cet outil compte la fréquence d’apparition de chaque mot dans le texte et facilite l’analyse des sentiments. Le terme clé est « tokenisation » : après la tokenisation, chaque mot est analysé afin de déterminer sa fréquence d’apparition.

Collocations : bigrammes et trigrammes

Les collocations sont les paires de mots qui apparaissent fréquemment ensemble dans un document. Leur fréquence est calculée en divisant le nombre de ces paires par le nombre total de mots du document.

Prenons l'exemple des rayons ultraviolets et des rayons infrarouges. Les mots « ultraviolet » et « rayons » ne sont pas utilisés séparément et peuvent donc être considérés comme une collocation. Autre exemple : le scanner, car on ne dit pas « scanner » et « tomodensitométrie » séparément. Les collocations peuvent être classées en deux catégories :

  • Bigrammes : combinaison de deux mots
  • Trigrammes : combinaison de trois mots

Les bigrammes et les trigrammes offrent des fonctionnalités plus pertinentes et utiles pour l'analyse des caractéristiques.tracétape de tion. Celles-ci sont particulièrement utiles dans l'analyse des sentiments basée sur le texte.

Exemple de bigrammes Code:

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Sortie :

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Exemple de trigrammes Code:

Parfois, il devient important de voir une paire de trois mots dans la phrase à des fins d'analyse statistique et de comptage de fréquence. Cela joue encore une fois un rôle crucial dans la formation PNL Le traitement automatique du langage naturel (TALN) et la prédiction des sentiments à partir du texte sont utilisés. Le même code sert au calcul des trigrammes.

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

Sortie :

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]

Marquage des phrases

Étiqueter une phrase consiste à lui attribuer des étiquettes grammaticales telles que verbe ou nom en fonction du contexte. L'identification des étiquettes morphosyntaxiques étant complexe, un étiquetage générique manuel est impossible, car certains mots ont des significations ambiguës selon la structure de la phrase. La conversion du texte en liste est une étape importante avant l'étiquetage : chaque mot est ensuite analysé et comptabilisé pour chaque étiquette.

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Code Explication:

  1. Code pour importer nltk (le Natural Language Toolkit, qui contient des sous-modules tels que la tokenisation de phrases et la tokenisation de mots).
  2. Texte dont les balises doivent être imprimées.
  3. Tokenisation des phrases.
  4. Une boucle « for » est implémentée, dans laquelle les mots sont tokenisés à partir de la phrase et l'étiquette de chaque mot est affichée en sortie.

Dans un corpus, il existe deux types d'étiqueteurs morphosyntaxiques :

1. Étiqueteur de points de vente basé sur des règles : Pour les mots ambigus, on utilise une approche basée sur des règles contextuelles. Cette approche consiste à analyser le sens du mot précédent ou suivant. Les mots sont ainsi étiquetés selon les règles grammaticales de la langue concernée, telles que la mise en majuscules et la ponctuation. Par exemple, l'étiqueteur de Brill.

2. Étiqueteur POS stochastique : Cette méthode utilise des approches telles que la fréquence ou la probabilité. Si un mot est majoritairement associé à une étiquette particulière dans l'ensemble d'entraînement, cette étiquette lui est attribuée dans la phrase de test. L'étiquette d'un mot dépendant non seulement de sa propre étiquette, mais aussi des étiquettes précédentes, cette méthode n'est pas toujours précise.

Étiquetage POS avec modèle de Markov caché

Les problèmes d'étiquetage peuvent également être modélisés à l'aide d'un modèle de Markov caché (MMC). Ce modèle considère les jetons d'entrée comme une séquence observable, tandis que les étiquettes sont considérées comme des états cachés. L'objectif est de déterminer la séquence de ces états cachés. Par exemple, x = x₁, x₂, …, xₙ, où x est une séquence de jetons, et y = y₁, y₂, y₃, y₄, …, yₙ est la séquence cachée.

Comment fonctionne le modèle de Markov caché (HMM) ?

Le modèle de Markov caché (HMM) utilise une distribution conjointe P(x, y), où x représente la séquence de jetons d'entrée et y la séquence d'étiquettes. La séquence d'étiquettes associée à x est l'argmax sur y1…yn de p(x1, x2, …, xn, y1, y2, y3, …). Nous avons catégorisé les étiquettes à partir du texte, mais les statistiques de ces étiquettes sont essentielles ; la prochaine étape consiste donc à les compter en vue d'une étude statistique.

FAQ

L'étiquetage morphosyntaxique attribue à chaque mot une étiquette indiquant sa catégorie grammaticale, comme nom ou verbe. Le découpage en segments va plus loin et regroupe ces mots étiquetés en groupes nominaux, ce qui donne à la phrase une structure simple.

L'analyse syntaxique superficielle, également appelée segmentation ou analyse légère, ne conserve qu'un seul niveau entre les racines et les feuilles. Elle identifie les limites des phrases sans construire un arbre d'analyse complet, ce qui la rend plus rapide que l'analyse syntaxique profonde.

Le regroupement des mots étiquetés en phrases permet à un système de détecter des entités telles que des personnes, des lieux, des dates ou des produits. La reconnaissance d'entités nommées s'appuie sur ces groupes pour…tract valeurs significatives à partir de texte brut.

La fonction nltk.pos_tag() attribue des étiquettes morphosyntaxiques. Commencez par tokeniser le texte avec word_tokenize, puis transmettez la liste des tokens à pos_tag, qui renvoie chaque mot associé à son étiquette, comme NN, VB ou JJ.

Oui. Les systèmes d'étiquetage IA modernes, entraînés grâce à l'apprentissage automatique et aux réseaux neuronaux profonds, résolvent les ambiguïtés des mots en apprenant le contexte à partir de vastes corpus, atteignant une précision supérieure aux méthodes basées sur des règles appliquées à des textes réels.

Les étiqueteurs stochastiques utilisent les probabilités apprises à partir des données d'entraînement. L'apprentissage automatique estime la probabilité que chaque étiquette corresponde à un mot en fonction des étiquettes environnantes, puis sélectionne la séquence présentant la probabilité globale la plus élevée.

En outre NLTK, les options populaires incluent SpaCy Pour les pipelines de production rapides, Stanford CoreNLP et Hugging Face Transformers pour l'étiquetage basé sur les transformateurs.

Dans une grammaire par blocs, un point correspond à n'importe quel caractère sauf une nouvelle ligne, un astérisque correspond à zéro ou plusieurs répétitions, et un point d'interrogation correspond à zéro ou une répétition du modèle d'étiquette POS précédent.

Résumez cet article avec :