POS-tagging med NLTK og Chunking i NLP [EKSEMPLER]

โšก Smart oppsummering

POS-tagging tildeler en ordklasse til hvert ord i en setning, mens Chunking grupperer de taggede ordene i meningsfulle fraser som substantivfraser, og legger til en grunn struktur som NLTK bygger med regulรฆre uttrykk i Python.

  • ๐Ÿท๏ธ POS-tagging: Hvert ord mottar et grammatisk token som NN, VB eller JJ fra konteksten.
  • ๐ŸŒฟ chunking: Taggede ord grupperes i fraser, en prosess som ogsรฅ kalles grunn parsing.
  • ๐Ÿ”ค arbeidsflyt: Tokeniser tekst fรธrst, bruk deretter pos_tag, og pars deretter med en RegexpParser-grammatikk.
  • ๐Ÿ“Š Telle tagger: Counter og FreqDist avslรธrer tag- og ordfrekvenser for funksjonsteknikk.
  • ๐Ÿ”— Kollokasjoner: Bigrammer og trigrammer fanger opp ordpar og tripler for sterkere tekstfunksjoner.
  • ๐Ÿค– AI-bruk: Maskinlรฆring og HMM-baserte taggere hรฅndterer tvetydige ord sannsynlighetsmessig.

POS-tagging med NLTK og Chunking i NLP

POS-tagging

POS-tagging (Orddelmerking) er en prosess for รฅ merke opp ord i tekstformat for en bestemt del av en tale basert pรฅ definisjon og kontekst. Den er ansvarlig for รฅ lese tekst pรฅ et sprรฅk og tilordne et spesifikt token (orddeler) til hvert ord. Det kalles ogsรฅ grammatisk merking.

La oss lรฆre med et eksempel pรฅ en NLTK-ordklasse:

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

Trinn involvert i POS-taggingseksemplet

  • Tokenize tekst (word_tokenize)
  • Bruk pos_tag i trinnet ovenfor, det vil si nltk.pos_tag(tokenize_text)

Eksempler pรฅ NLTK POS-tagger er listet opp nedenfor:

Forkortelse Betydning
CC koordinerende forbindelse
CD kardinalsiffer
DT bestemme
EX eksistensielt der
FW fremmedord
IN preposisjon/underordnet konjunksjon
JJ adjektiv
JJR adjektiv, komparativ
JJS adjektiv, superlativ
LS liste markedet
MD modal
NN substantiv, entall
NNS substantiv flertall
NNP egennavn, entall
NNPS egennavn, flertall
PDT forhรฅndsbestemmer
POS besittende slutt
PRP personlig pronomen
PRP$ eiendomspronomen
RB adverb
RBR adverb, komparativ
RBS adverb, superlativ
RP partikkel~~POS=TRUNC
TIL uendelig markรธr
UH interjection
VB verb
GBV verbgerund
VBD verb fortid
VBN verb perfektum partisipp
VBP verb, presens, ikke tredjeperson entall
VBZ verb, presens med 3. person entall
wdt wh-bestemmer
WP wh-pronomen
WRB wh-adverb

NLTK POS-taglisten ovenfor inneholder alle NLTK POS-taggene. NLTK POS-taggeren brukes til รฅ tilordne grammatisk informasjon til hvert ord i setningen. Installasjon, import og nedlasting av alle pakkene med POS NLTK er nรฅ fullfรธrt.

Hva er Chunking i NLP?

chunking I NLP er Chunking en prosess for รฅ ta smรฅ biter av informasjon og gruppere dem i store enheter. Den primรฆre bruken av Chunking er รฅ lage grupper av ยซsubstantivfraserยป. Det brukes til รฅ legge til struktur i setningen ved รฅ fรธlge POS-tagging kombinert med regulรฆre uttrykk. Den resulterende gruppen av ord kalles ยซchunksยป. Det kalles ogsรฅ shallow parsing.

Ved grunn parsing er det maksimalt ett nivรฅ mellom rรธtter og blader, mens dyp parsing omfatter mer enn ett nivรฅ. Grunn parsing kalles ogsรฅ lett parsing eller chunking.

Regler for Chunking

Det finnes ingen forhรฅndsdefinerte regler, men du kan kombinere dem etter behov og krav. La oss for eksempel si at du mรฅ merke substantiv, verb (preteritum), adjektiv og konjunksjon fra setningen. Du kan bruke regelen nedenfor:

chunk:{***?}

Tabellen nedenfor viser hva de ulike symbolene betyr:

Navn pรฅ symbol Tekniske beskrivelser
. Ethvert tegn unntatt ny linje
* Match 0 eller flere repetisjoner
? Match 0 eller 1 repetisjoner

La oss nรฅ skrive koden for รฅ forstรฅ regelen bedre.

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)

Utgang:

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))

Konklusjonen fra ovennevnte Part of Speech-tagging Python Eksempel er at ยซmakeยป er et verb som ikke er inkludert i regelen, sรฅ det er ikke merket som mychunk.

Bruk Case of Chunking

Chunking brukes til enhetsdeteksjon. En enhet er den delen av setningen der en maskin henter verdien for en hvilken som helst intensjon.

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

Med andre ord brukes chunking til รฅ velge delsett av tokens. Fรธlg koden nedenfor for รฅ forstรฅ hvordan chunking brukes til รฅ velge tokens. I dette eksemplet vil du se en graf som tilsvarer en del av en substantivfrase.

 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

Utgang:

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

Substantiv frase Chunking Graph

Substantiv frase chunking Graph

Fra grafen kan vi konkludere med at ยซlearnยป og ยซguru99ยป er to forskjellige tokens, men de er kategorisert som en substantivfrase, mens tokenet ยซfromยป ikke tilhรธrer en substantivfrase. Chunking brukes til รฅ kategorisere forskjellige tokens i samme chunk. Resultatet vil avhenge av grammatikken som er valgt. Videre brukes Chunking i NLTK til รฅ merke mรธnstre og utforske tekstkorpusa.

Telle POS-brikker

Vi har diskutert ulike post_tag verdier tidligere. Her skal du studere hvordan du teller disse taggene. ร… telle tagger er avgjรธrende for tekstklassifisering og for รฅ forberede funksjoner for naturlige sprรฅkoperasjoner. Vi skriver fรธrst arbeidskoden og forklarer deretter trinnene.

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)

Utgang:

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})

Utarbeidelse av koden:

  1. Bruk Counter-pakken fra samlingsmodulen. Counter er en underklasse i ordboken som lagrer elementer som nรธkler og antallene deres som verdier.
  2. Importer nltk for รฅ tokenisere teksten.
  3. Skriv teksten hvis post_tag du vil telle.
  4. Gjรธr alle ord om til smรฅ bokstaver fรธr tokenisering.
  5. Send ordene gjennom word_tokenize og beregn pos_taggen til hver token.
  6. Counter teller deretter den totale forekomsten av hver tag i teksten.

Frekvensdistribusjon

Frekvensfordeling refererer til antall ganger et utfall av et eksperiment forekommer. Den brukes til รฅ finne frekvensen av hvert ord som forekommer i et dokument. Den bruker Frekvensavdeling klasse definert av nltk.sannsynlighet modulen. Antallet รธkes med รฉn hver gang en prรธve forekommer.

For et hvilket som helst ord kan vi sjekke hvor mange ganger det forekommer i et dokument. For eksempel:

  • Tellemetode: freq_dist.count('og') returnerer antall ganger 'og' har forekommet. Dette kalles count-metoden.
  • Frekvensmetode: freq_dist.freq('og') returnerer frekvensen til en gitt prรธve.

Vi skal skrive et lite program som beregner frekvensfordelingen til hvert ord i teksten.

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()

Forklaring av kode:

  1. Importer nltk-modulen.
  2. Skriv teksten hvis ordfordeling du trenger รฅ finne.
  3. Tokeniser hvert ord i teksten, som tjener som input til FreqDist-modulen til nltk.
  4. Bruk hvert ord til nltk.FreqDist i form av en liste.
  5. Plott ordene i grafen ved hjelp av plot().

MERK: matplotlib mรฅ vรฆre installert for รฅ se grafen. Den teller forekomsten av hvert ord i teksten og hjelper til med tekstbasert sentimentanalyse. Nรธkkelbegrepet er ยซtokenizeยป: etter tokenisering kontrolleres hvert ord for รฅ bestemme hvor mange ganger det forekom.

Kollokasjoner: Bigrams og Trigrams

Kollokasjoner er ordpar som forekommer sammen mange ganger i et dokument. Det beregnes ut fra forholdet mellom antallet av disse parene som forekommer sammen og det totale ordantallet i dokumentet.

Tenk pรฅ ord som ultrafiolette strรฅler og infrarรธde strรฅler. Ordene ultrafiolett og strรฅler brukes ikke individuelt og kan derfor behandles som en samlokalisering. Et annet eksempel er CT-skanning, siden vi ikke sier CT og skanning separat. Samlokalisering kan kategoriseres i to typer:

  • Bigrams: kombinasjon av to ord
  • Trigrammer: kombinasjon av tre ord

Bigrammer og trigrammer gir mer meningsfulle og nyttige funksjoner for funksjonen f.eks.tracsjonsfasen. Disse er spesielt nyttige i tekstbasert sentimentanalyse.

Bigrams-eksempel 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)

Utgang:

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

Eksempel pรฅ trigrammer Code:

Noen ganger blir det viktig รฅ se et par pรฅ tre ord i setningen for statistisk analyse og frekvenstelling. Dette spiller igjen en avgjรธrende rolle i formingen NLP (naturlig sprรฅkbehandling) samt tekstbasert sentimentprediksjon. Den samme koden kjรธres for รฅ beregne trigrammene.

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

Utgang:

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

Merking av setninger

ร… merke en setning refererer til รฅ legge til etiketter som verb eller substantiv basert pรฅ setningens kontekst. Det er komplisert รฅ identifisere POS-tagger, sรฅ generisk tagging er ikke mulig manuelt, ettersom noen ord har tvetydige betydninger avhengig av setningsstrukturen. ร… konvertere tekst til en liste er et viktig trinn fรธr tagging, ettersom hvert ord lรธkkes og telles for en bestemt tagg.

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 Forklaring:

  1. Code รฅ importere nltk (den naturlige Language Toolkit, som inneholder undermoduler som setningstokenisering og ordtokenisering).
  2. Tekst hvis tagger skal skrives ut.
  3. Setningstokenisering.
  4. En for-lรธkke implementeres der ord tokeniseres fra setningen og taggen til hvert ord skrives ut som utdata.

I et korpus finnes det to typer POS-taggere:

1. Regelbasert POS-tagger: For ord med tvetydig betydning brukes en regelbasert tilnรฆrming basert pรฅ kontekstuell informasjon. Dette gjรธres ved รฅ analysere betydningen av det foregรฅende eller pรฅfรธlgende ordet. Derfor merkes ord med de grammatiske reglene i et bestemt sprรฅk, som store bokstaver og tegnsetting. For eksempel Brills tagger.

2. Stokastisk POS-tagger: Tilnรฆrminger som frekvens eller sannsynlighet brukes under denne metoden. Hvis et ord stort sett er merket med en bestemt tagg i treningssettet, fรฅr det den taggen i testsetningen. Ordtaggen avhenger ikke bare av sin egen tagg, men ogsรฅ av den forrige taggen, sรฅ denne metoden er ikke alltid nรธyaktig.

POS-merking med skjult Markov-modell

Taggingproblemer kan ogsรฅ modelleres ved hjelp av en skjult Markov-modell (HMM). Den behandler input-tokens som en observerbar sekvens, mens tagger anses som skjulte tilstander, og mรฅlet er รฅ bestemme den skjulte tilstandssekvensen. For eksempel, x = x1,x2,โ€ฆ,xn, hvor x er en sekvens av tokens, mens y = y1,y2,y3,y4โ€ฆyn er den skjulte sekvensen.

Hvordan fungerer Hidden Markov Model (HMM)?

HMM bruker en fellesfordeling P(x, y), hvor x er input-tokensekvensen og y er tag-sekvensen. Tag-sekvensen for x vil vรฆre argmax over y1โ€ฆyn av p(x1,x2,โ€ฆxn,y1,y2,y3,โ€ฆ). Vi har kategorisert tagger fra teksten, men statistikk for slike tagger er viktig, sรฅ neste del er รฅ telle disse taggene for statistisk studie.

Spรธrsmรฅl og svar

POS-tagging merker hvert enkelt ord med sin ordklasse, for eksempel substantiv eller verb. Chunking gรฅr et skritt videre og grupperer de taggede ordene i fraser som substantivfraser, noe som gir setningen en overfladisk struktur.

Overfladisk parsing, ogsรฅ kalt chunking eller lett parsing, holder maksimalt ett nivรฅ mellom rรธtter og blader. Den identifiserer frasegrenser uten รฅ bygge et fullstendig parsingstre, noe som gjรธr det raskere enn dyp parsing.

ร… dele opp grupper med taggede ord i fraser, noe som lar et system oppdage enheter som personer, steder, datoer eller produkter. Gjenkjenning av navngitte enheter er avhengig av disse delene for รฅ eks.tract meningsfulle verdier fra rรฅtekst.

Funksjonen nltk.pos_tag() tilordner ordklassekoder. Du tokeniserer fรธrst teksten med word_tokenize, og sender deretter tokenlisten til pos_tag, som returnerer hvert ord parret med koden, som NN, VB eller JJ.

Ja. Moderne AI-taggere trent med maskinlรฆring og dype nevrale nettverk lรธser tvetydige ord ved รฅ lรฆre kontekst fra store korpuser, og oppnรฅr hรธyere nรธyaktighet enn regelbaserte metoder pรฅ tekst i den virkelige verden.

Stokastiske taggere bruker sannsynlighet lรฆrt fra treningsdata. Maskinlรฆring estimerer hvor sannsynlig hver tagg er for et ord gitt de omkringliggende taggene, og velger deretter sekvensen med hรธyest total sannsynlighet.

Foruten NLTK, populรฆre alternativer inkluderer spaCy for raske produksjonsrรธrledninger, Stanford CoreNLP og Hugging Face Transformers for transformatorbasert tagging.

I en chunk-grammatikk samsvarer et punktum med ethvert tegn unntatt en ny linje, en stjerne samsvarer med null eller flere repetisjoner, og et spรธrsmรฅlstegn samsvarer med null eller รฉn repetisjon av det foregรฅende POS-tagmรธnsteret.

Oppsummer dette innlegget med: