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 :