POS označavanje s NLTK i Chunking u NLP [PRIMJERI]

⚡ Pametni sažetak

POS označavanje dodjeljuje vrstu riječi svakoj riječi u rečenici, dok Chunking grupira te označene riječi u smislene fraze poput imenskih fraza, dodajući plitku strukturu koju NLTK gradi s regularnim izrazima u Python.

  • 🏷️ POS označavanje: Svaka riječ dobiva gramatički token poput NN, VB ili JJ iz svog konteksta.
  • 🌿 Komadanje: Označene riječi grupiraju se u fraze, proces koji se naziva i plitko parsiranje.
  • 🔤 Tijek rada: Prvo tokenizirajte tekst, zatim primijenite pos_tag, a zatim parsirajte pomoću RegexpParser gramatike.
  • 📊 Brojanje oznaka: Counter i FreqDist otkrivaju frekvencije oznaka i riječi za inženjering značajki.
  • 🔗 Kolokacije: Bigrami i trigrami obuhvaćaju parove riječi i trojke za jače tekstualne značajke.
  • 🤖 Upotreba umjetne inteligencije: Strojno učenje i označivači temeljeni na HMM-u vjerojatnosno obrađuju dvosmislene riječi.

Označavanje POS-a s NLTK-om i dijeljenjem u NLP-u

POS označavanje

POS označavanje (Označavanje vrsta riječi) je postupak označavanja riječi u tekstualnom formatu za određeni dio govora na temelju njegove definicije i konteksta. Odgovoran je za čitanje teksta na nekom jeziku i dodjeljivanje određenog tokena (vrsta riječi) svakoj riječi. Također se naziva gramatičko označavanje.

Učimo s primjerom NLTK vrste riječi:

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

Koraci uključeni u primjer označavanja POS-a

  • Tokeniziraj tekst (word_tokenize)
  • Primijenite pos_tag na gornji korak, odnosno nltk.pos_tag(tokenize_text)

Primjeri NLTK POS oznaka navedeni su u nastavku:

skraćenica Značenje
CC koordinirajući veznik
CD kardinalna znamenka
DT odrediti
EX egzistencijalni tamo
FW strana riječ
IN prijedlog/podredni veznik
JJ pridjev
JJR pridjev, komparativ
JJS pridjev, superlativ
LS lista tržišta
MD modalni
NN imenica, jednina
NNS imenica množina
NNP vlastita imenica, jednina
NNPS vlastita imenica, množina
PDT predodređujući
POS posvojni završetak
PRP osobna zamjenica
PRP$ posvojna zamjenica
RB prilog
RBR proširenje prilog, komparativ
RBS prilog, superlativ
RP čestica
DO beskonačni marker
UH ubacivanje
VB glagol
RN glagolski gerund
VBD glagol prošlo vrijeme
VBN glagol prošli particip
VBP glagol, prezent, ne 3. lice jednine
VBZ glagol, prezent s 3. osobom jednine
wdt wh-odredivač
WP wh-zamjenica
WRB koji prilog

Gornji popis NLTK POS oznaka sadrži sve NLTK POS oznake. NLTK POS označivač koristi se za dodjeljivanje gramatičkih informacija svakoj riječi rečenice. Instaliranje, uvoz i preuzimanje svih POS NLTK paketa je sada dovršeno.

Što je Chunking u NLP-u?

Komadanje U NLP-u je proces uzimanja malih dijelova informacija i njihovog grupiranja u velike jedinice. Primarna upotreba dijeljenja u fragmente je stvaranje grupa "imenskih fraza". Koristi se za dodavanje strukture rečenici praćenjem POS označavanja u kombinaciji s regularnim izrazima. Rezultirajuća skupina riječi naziva se "fragmenti". Također se naziva plitko parsiranje.

Kod plitke parsacije postoji maksimalno jedna razina između korijena i listova, dok duboka parsacija obuhvaća više od jedne razine. Plitka parsacija se naziva i lagana parsacija ili dijeljenje na dijelove.

Pravila za usitnjavanje

Ne postoje unaprijed definirana pravila, ali ih možete kombinirati prema potrebi i zahtjevu. Na primjer, pretpostavimo da trebate označiti imenicu, glagol (prošlo vrijeme), pridjev i veznik iz rečenice. Možete koristiti pravilo u nastavku:

chunk:{***?}

Sljedeća tablica prikazuje značenje različitih simbola:

Naziv simbola Description
. Bilo koji znak osim novog retka
* Spojite 0 ili više ponavljanja
? Spojite 0 ili 1 ponavljanja

Sada napišimo kod kako bismo bolje razumjeli pravilo.

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)

Izlaz:

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

Zaključak iz gornjeg označavanja dijela govora Python Primjer je da je glagol „make“ glagol koji nije uključen u pravilo, pa nije označen kao mychunk.

Slučaj upotrebe komadanja

Chunking se koristi za detekciju entiteta. Entitet je onaj dio rečenice pomoću kojeg stroj dobiva vrijednost za bilo koju namjeru.

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

Drugim riječima, dijeljenje se koristi za odabir podskupova tokena. Slijedite donji kod kako biste razumjeli kako se dijeljenje koristi za odabir tokena. U ovom primjeru vidjet ćete graf koji odgovara dijelu imenske fraze.

 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

Izlaz:

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

Imenski izraz Chunking Graph

Noun Phrase chunking Graph

Iz grafa možemo zaključiti da su „learn“ i „guru99“ dva različita tokena, ali su kategorizirani kao imenska fraza, dok token „from“ ne pripada imenskoj frazi. Chunking se koristi za kategorizaciju različitih tokena u isti blok. Rezultat će ovisiti o odabranoj gramatici. Nadalje, Chunking se u NLTK-u koristi za označavanje obrazaca i istraživanje tekstualnih korpusa.

Brojanje POS oznaka

Razgovarali smo o raznim pos_tag vrijednosti prethodno. Ovdje ćete proučiti kako brojati ove oznake. Brojanje oznaka ključno je za klasifikaciju teksta i za pripremu značajki za operacije prirodnog jezika. Prvo pišemo radni kod, a zatim objašnjavamo korake.

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)

Izlaz:

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

Razrada koda:

  1. Koristite paket Counter iz modula kolekcija. Counter je podklasa rječnika koja pohranjuje elemente kao ključeve, a njihov broj kao vrijednosti.
  2. Uvezite nltk za tokenizaciju teksta.
  3. Napišite tekst čiji pos_tag želite prebrojati.
  4. Prije tokenizacije pretvorite sve riječi u mala slova.
  5. Propusti riječi kroz word_tokenize i izračunaj pos_tag svakog tokena.
  6. Counter zatim broji ukupan broj pojavljivanja svake oznake u tekstu.

Distribucija frekvencije

Distribucija učestalosti odnosi se na broj pojavljivanja ishoda eksperimenta. Koristi se za pronalaženje učestalosti pojavljivanja svake riječi u dokumentu. Koristi FreqDist klasa definirana od strane nltk.vjerojatnost modul. Broj se povećava za jedan svaki put kada se pojavi uzorak.

Za bilo koju riječ možemo provjeriti koliko se puta pojavila u dokumentu. Na primjer:

  • Metoda brojanja: freq_dist.count('i') vraća broj pojavljivanja 'i'. To se naziva metoda count.
  • Metoda učestalosti: freq_dist.freq('and') vraća frekvenciju zadanog uzorka.

Napisat ćemo mali program koji izračunava frekvencijsku distribuciju svake riječi u tekstu.

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

Objašnjenje koda:

  1. Uvezite nltk modul.
  2. Napiši tekst čiju rasprostranjenost riječi trebaš pronaći.
  3. Tokeniziraj svaku riječ u tekstu, koji se poslužuje kao ulaz u FreqDist modul nltk-a.
  4. Primijeni svaku riječ na nltk.FreqDist u obliku popisa.
  5. Nacrtajte riječi u grafu pomoću funkcije plot().

NAPOMENA: za prikaz grafa mora biti instaliran matplotlib. Broji pojavljivanje svake riječi u tekstu i pomaže u analizi sentimenta temeljenoj na tekstu. Ključni pojam je „tokenizacija“: nakon tokenizacije, svaka se riječ provjerava kako bi se utvrdilo koliko se puta pojavila.

Kolokacije: bigrami i trigrami

Kolokacije su parovi riječi koji se pojavljuju zajedno više puta u dokumentu. Izračunava se omjerom broja tih parova koji se pojavljuju zajedno i ukupnog broja riječi u dokumentu.

Razmotrimo riječi poput ultraljubičastih zraka i infracrvenih zraka. Riječi ultraljubičasto i zrake ne koriste se zasebno i stoga se mogu tretirati kao kolokacija. Drugi primjer je CT skeniranje, budući da ne koristimo CT i skeniranje odvojeno. Kolokacija se može kategorizirati u dvije vrste:

  • Bigrami: kombinacija dviju riječi
  • Trigrami: kombinacija triju riječi

Bigrami i trigrami pružaju smislenije i korisnije značajke za npr. značajketracfaza cije. To je posebno korisno u analizi sentimenta temeljenoj na tekstu.

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

Izlaz:

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

Primjer trigrama Code:

Ponekad postaje važno vidjeti par od tri riječi u rečenici za statističku analizu i brojanje učestalosti. Ovo opet igra presudnu ulogu u formiranju NLP (obrada prirodnog jezika) značajke kao i predviđanje sentimenta na temelju teksta. Isti kod se pokreće za izračun trigrama.

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

Izlaz:

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

Označavanje rečenica

Označavanje rečenice odnosi se na dodavanje oznaka poput glagola ili imenice na temelju konteksta rečenice. Identificiranje POS oznaka je komplicirano, pa generičko označavanje nije moguće ručno, jer neke riječi imaju dvosmislena značenja ovisno o strukturi rečenice. Pretvaranje teksta u popis važan je korak prije označavanja, jer se svaka riječ ponavlja i broji za određenu oznaku.

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 Objašnjenje:

  1. Code uvoziti nltk (prirodni Language Toolkit, koji sadrži podmodule kao što su tokenizacija rečenica i tokenizacija riječi).
  2. Tekst čije oznake treba ispisati.
  3. Tokenizacija rečenica.
  4. Implementirana je for petlja u kojoj se riječi tokeniziraju iz rečenice, a oznaka svake riječi ispisuje se kao izlaz.

U Corpusu postoje dvije vrste POS označivača:

1. Označivač POS-a temeljen na pravilima: Za riječi s dvosmislenim značenjem primjenjuje se pristup temeljen na pravilima, a koji se temelji na kontekstualnim informacijama. To se radi analizom značenja prethodne ili sljedeće riječi. Stoga se riječi označavaju gramatičkim pravilima određenog jezika, kao što su velika slova i interpunkcija. Na primjer, Brillov označivač.

2. Stohastički POS označivač: U okviru ove metode primjenjuju se pristupi poput učestalosti ili vjerojatnosti. Ako je riječ uglavnom označena određenom oznakom u skupu za učenje, ta joj se oznaka dodjeljuje u testnoj rečenici. Oznaka riječi ne ovisi samo o vlastitoj oznaci već i o prethodnoj oznaci, tako da ova metoda nije uvijek točna.

Označavanje POS-a skrivenim Markovljevim modelom

Problemi označavanja mogu se modelirati i pomoću skrivenog Markovljevog modela (HMM). On tretira ulazne tokene kao vidljivi niz, dok se oznake smatraju skrivenim stanjima, a cilj je odrediti niz skrivenih stanja. Na primjer, x = x1,x2,…,xn, gdje je x niz tokena, dok je y = y1,y2,y3,y4…yn skriveni niz.

Kako funkcionira skriveni Markovljev model (HMM)?

HMM koristi zajedničku distribuciju P(x, y), gdje je x ulazni niz tokena, a y niz oznaka. Niz oznaka za x bit će argmax nad y1…yn od p(x1,x2,…xn,y1,y2,y3,…). Kategorizirali smo oznake iz teksta, ali statistika takvih oznaka je ključna, pa je sljedeći dio brojanje tih oznaka za statističku studiju.

Pitanja i odgovori

POS označavanje označava svaku pojedinačnu riječ odgovarajućom vrstom riječi, poput imenice ili glagola. Chunking ide korak dalje i grupira te označene riječi u fraze poput imenskih fraz, dajući rečenici plitku strukturu.

Plitko parsiranje, također nazvano segmentiranje ili lagano parsiranje, održava maksimalno jednu razinu između korijena i listova. Identificira granice fraza bez izgradnje potpunog stabla parsiranja, što ga čini bržim od dubokog parsiranja.

Rastavljanje grupa označenih riječi u fraze, što omogućuje sustavu da prepozna entitete poput ljudi, lokacija, datuma ili proizvoda. Prepoznavanje imenovanih entiteta oslanja se na te dijelove zatracznačajne vrijednosti iz sirovog teksta.

Funkcija nltk.pos_tag() dodjeljuje oznake vrsta riječi. Prvo tokenizirate tekst pomoću word_tokenize, a zatim prosljeđujete popis tokena funkciji pos_tag, koja vraća svaku riječ uparenu s odgovarajućom oznakom, poput NN, VB ili JJ.

Da. Moderni AI označivači obučeni strojnim učenjem i dubokim neuronskim mrežama rješavaju dvosmislene riječi učenjem konteksta iz velikih korpusa, postižući veću točnost od metoda temeljenih na pravilima na tekstu iz stvarnog svijeta.

Stohastički označivači koriste vjerojatnost naučenu iz podataka za obuku. Strojno učenje procjenjuje koliko je svaka oznaka vjerojatna za riječ s obzirom na okolne oznake, a zatim odabire niz s najvećom ukupnom vjerojatnošću.

Osim toga NLTK, popularne opcije uključuju prostrano za brze proizvodne cjevovode, Stanford CoreNLP i Hugging Face Transformers za označavanje temeljeno na transformatorima.

U chunk gramatici, točka odgovara bilo kojem znaku osim novog retka, zvjezdica odgovara nula ili više ponavljanja, a upitnik odgovara nula ili jednom ponavljanju prethodnog uzorka POS oznake.

Sažmite ovu objavu uz: