Kaj je Chunking v obdelavi naravnega jezika?

Izvorno vozlišče: 1878431

Dragi bralci,

V tem blogu bom razpravljal o teoretičnem in praktičnem razdeljevanju v Python.

Torej, začnimo …

OPOMBA: Za izvedbo je bolje uporabiti Python IDLE, saj je rezultat risba drevesa, ki se pojavi v ločenem oknu.

Dnevni red

  • Kaj je chunking?
  • Kje se uporablja chunking?
  • Vrste drobljenja
  • Implementacija chunkinga v Pythonu
  • Rezultati

Kaj je chunking?

Razdelitev je opredeljena kot proces obdelave naravnega jezika, ki se uporablja za prepoznavanje delov govora in kratkih besednih zvez, prisotnih v danem stavku.

Če se spomnimo naših dobrih starih tečajev angleške slovnice v šoli, upoštevajte, da obstaja osem delov govora, in sicer samostalnik, glagol, pridevnik, prislov, predlog, veznik, zaimek in medmet. Poleg tega se v zgornji definiciji združevanja kratke fraze nanašajo na fraze, ki nastanejo z vključitvijo katerega koli od teh delov govora.

Na primer, razdeljevanje lahko izvedete za prepoznavanje in s tem združevanje samostalniških besednih zvez ali samostalnikov, pridevnikov ali pridevniških besednih zvez itd. Razmislite o spodnjem stavku:

“Za zajtrk sem imel burgerje in pecivo.”

V tem primeru, če želimo samostalniške besedne zveze združiti v skupine ali koščke, bomo dobili »hamburgerje«, »pecivo« in »kosilo«, ki so samostalniki ali samostalniške skupine stavka.

Kje se uporablja chunking?

Zakaj bi se radi nečesa naučili, ne da bi vedeli, kje se to pogosto uporablja?! Če si ogledate aplikacije, o katerih razpravljamo v tem delu bloga, boste ostali radovedni do konca!

Chunking se uporablja za pridobivanje zahtevanih stavkov iz danega stavka. Vendar se lahko POS označevanje uporablja le za prepoznavanje delov govora, ki jim pripada vsaka beseda stavka.

Ko imamo veliko opisov ali sprememb okoli določene besede ali besedne zveze, ki nas zanima, uporabimo razčlenjevanje, da zgrabimo samo zahtevano besedno zvezo, ostalo okoli nje pa zanemarimo. Zato razčlenjevanje utira pot za združevanje zahtevanih fraz in izključitev vseh modifikatorjev okoli njih, ki niso potrebni za našo analizo. Če povzamemo, razčlenjevanje nam pomaga izluščiti pomembne besede samo iz dolgih opisov. Tako je razdeljevanje na kose korak pri pridobivanju informacij.

Zanimivo je, da je ta proces razčlenjevanja v NLP razširjen na različne druge aplikacije; na primer združiti sadje določene kategorije, recimo sadje, bogato z beljakovinami, kot skupino, sadje, bogato z vitamini, kot drugo skupino itd. Poleg tega se lahko razrezovanje uporabi tudi za združevanje podobnih avtomobilov, na primer avtomobilov, ki podpirajo samodejno prestavljanje, v eno skupino in drugih, ki podpirajo ročno prestavljanje, v drugo in tako naprej.

Vrste drobljenja

Na splošno obstajata dve vrsti razčlenjevanja:

  • Zbiranje
  • Zmanjševanje

Razdelitev:

Tukaj se ne potapljamo globoko; namesto tega smo zadovoljni le s pregledom informacij. Pomaga nam le dobiti kratko predstavo o danih podatkih.

Zmanjševanje:

Za razliko od prejšnje vrste razčlenjevanja nam razčlenjevanje pomaga pridobiti podrobne informacije.

Torej, če želite samo vpogled, razmislite o "zmanjšanju", drugače raje "zmanjšajte".

Implementacija chunkinga v Pythonu

Predstavljajte si situacijo, v kateri želite izvleči vse glagole iz danega besedila za analizo. Tako moramo v tem primeru upoštevati razčlenjenost glagolskih fraz. To je zato, ker je naš cilj izvleči vse glagolske fraze iz danega dela besedila. Razdelitev se izvede s pomočjo regularnih izrazov.

Ne skrbite, če se prvič srečate z izrazom "regularni izrazi". Spodnja tabela je tukaj, v vašo pomoč:

simbol

Pomen

Primer

*

Predhodni znak se lahko pojavi nič ali večkrat, kar pomeni, da predhodni znak morda ni tam.

ab* se ujema z vsemi vnosi, ki se začnejo z ab in nato sledijo nič ali več b-jev. Vzorec se bo ujemal z ab, abb, abbb in tako naprej.

+

Predhodni znak se mora pojaviti vsaj enkrat.

a+ se ujema z a,aa,aaa in tako naprej.

?

Predhodni znak se morda sploh ne pojavi ali se pojavi samo enkrat, kar pomeni, da je predhodni znak neobvezen.

ab? ujema se z ab, abb, ne pa z abbb itd.

Zgornja tabela vključuje najpogostejše uporabljene regularne izraze. Regularni izrazi so zelo uporabni v ukazni vrstici, zlasti pri brisanju, lociranju, preimenovanju ali premikanju datotek.

Kakorkoli že, za to izvedbo bomo uporabljali samo *. Oglejte si zgornjo tabelo, da se seznanite s simbolom!

Razdeljevanje bomo izvajali z uporabo nltk, najbolj priljubljene NLP knjižnice. Torej, najprej ga uvozimo.

uvozi nltk

Oglejmo si spodnji vzorec besedila, ki sem ga ustvaril sam. Spodnje besedilo lahko zamenjate s poljubnim vzorčnim besedilom, ki ga želite uporabiti za razčlenjevanje!

vzorec_besedila="""
Rama je ubil Ravano, da bi rešil Sito iz Lanke. Legenda o Ramajanih je najbolj priljubljen indijski ep. Veliko filmov in nadaljevank je že
posneto v več jezikih tukaj v Indiji na podlagi Ramayane. """

Jasno je, da je treba podatke tokenizirati v stavku in nato v tokenizirati besedo, preden nadaljujemo. Tokenizacija ni nič drugega kot postopek razčlenitve danega dela besedila na manjše enote, kot so stavki, v primeru stavčne tokenizacije, in besede, v primeru besedne tokenizacije.

Sledi tokenizacija, označevanje POS (del govora) se izvede za vsako besedo, v kateri bo identificiran del govora vsake besede. Zdaj nas zanima le glagolski del govora in želimo ga izluščiti.

Zato določite del govora, ki nas zanima, z uporabo zahtevanega regularnega izraza, kot sledi:

VB: {}

tokenized=nltk.sent_tokenize(sample_text)
for i in tokenized: words=nltk.word_tokenize(i) # print(words) tagged_words=nltk.pos_tag(words) # print(tagged_words) chunkGram=r"""VB: {}""" chunkParser=nltk.RegexpParser( chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

Regularni izraz (RE) je v oglatih oklepajih (), ti pa v zavitih oklepajih ({ in }).

OPOMBA: Določite RE glede na zahtevani POS

VB pomeni glagol POS. Pika, ki sledi VB, pomeni ujemanje s katerim koli znakom, ki sledi VB. Vprašaj za piko določa, da se mora kateri koli znak za B pojaviti samo enkrat ali pa se sploh ne sme pojaviti. Vendar iz tabele, ki smo jo videli prej, ta znak ni obvezen. Regularni izraz smo oblikovali na ta način, ker v NLTK glagolske fraze vključujejo naslednje oznake POS:

POS

Pomen

VB

Glagol v osnovni obliki

VBD

glagol v pretekliku

GBN

glagol v sedanjiku

VBN

glagol v obliki preteklega deležnika

VBP

Glagol v sedanjiku, vendar ne v tretji osebi ednine

VBZ

Glagol v sedanjiku in je tretja oseba ednine

Tako lahko glagolske besedne zveze pripadajo kateremu koli od zgornjih POS. Zato je regularni izraz uokvirjen kot VB.? ki vključuje vse zgoraj navedene kategorije. Paket RegexpParser se uporablja za preverjanje, ali POS izpolnjuje naš zahtevani vzorec, ki smo ga že omenili z uporabo RE.

Celotno kodo si lahko ogledate takole:

uvoz nltk
nltk.download('averaged_perceptron_tagger')
vzorec_besedila="""
Rama je ubil Ravano, da bi rešil Sito iz Lanke. Legenda o Ramajanih je najbolj priljubljen indijski ep. Veliko filmov in nadaljevank je že
je bil posnet v več jezikih tukaj v Indiji na podlagi Ramayane. """
tokenized=nltk.sent_tokenize(sample_text)
for i in tokenized: words=nltk.word_tokenize(i) # print(words) tagged_words=nltk.pos_tag(words) # print(tagged_words) chunkGram=r"""VB: {}""" chunkParser=nltk.RegexpParser( chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

Rezultati

rezultat drobljenja
rezultat drobljenja

Končno dobimo drevesno obliko POS besed skupaj z besedami, katerih POS se ujema z danim RE. Posnetek izhoda, pridobljenega za vzorčno besedilo, ki smo ga posredovali, lahko vidite na zgornjih slikah.

Upoštevajte, da so besede, ki izpolnjujejo naš RE samo za glagolske fraze, jasno poudarjene v izpisu. Zato je bilo uspešno izvedeno razčlenjevanje glagolskih fraz.

Upam, da vam je bil moj članek koristen.

Hvala!

Reference

1. Implementacija chunking-a v Pythonu

2. Teorija za razčlenjevanjem

3. Celoten seznam prodajnih mest, ki so na voljo v NLP

O meni

Sem Nithyashree V, študent zadnjega letnika BTech računalništva in tehnike. Rad se učim tako kul tehnologij in jih uporabljam v praksi, zlasti ko opazujem, kako nam pomagajo pri reševanju zahtevnih družbenih problemov. Moja področja zanimanja vključujejo umetno inteligenco, podatkovno znanost in obdelavo naravnega jezika.

Tukaj je moj LinkedIn profil: Moj LinkedIn

Moje druge članke o Analytics Vidhya lahko preberete na tukaj.

Mediji, prikazani v tem članku, niso v lasti Analytics Vidhya in se uporabljajo po lastni presoji avtorja.

Vir: https://www.analyticsvidhya.com/blog/2021/10/what-is-chunking-in-natural-language-processing/

Časovni žig:

Več od Analitika Vidhya