Ce este Chunking în procesarea limbajului natural?

Nodul sursă: 1878431

Dragi cititori,

În acest blog, voi discuta despre fragmentarea atât teoretic, cât și practic în Python.

Deci, să începem…

NOTĂ: Pentru implementare, este mai bine să utilizați Python IDLE, deoarece rezultatul este un desen al unui arbore care apare într-o fereastră separată.

Agendă

  • Ce este chunking?
  • Unde se folosește fragmentarea?
  • Tipuri de fragmentare
  • Implementarea chunking-ului în Python
  • REZULTATE

Ce este chunking?

Chunking este definit ca procesul de procesare a limbajului natural folosit pentru a identifica părți de vorbire și fraze scurte prezente într-o propoziție dată.

Reamintindu-ne vechile noastre clase de gramatică engleză din timpul școlii, rețineți că există opt părți de vorbire și anume substantivul, verbul, adjectivul, adverbul, prepoziția, conjuncția, pronumele și interjecția. De asemenea, în definiția de mai sus a fragmentării, frazele scurte se referă la frazele formate prin includerea oricăreia dintre aceste părți de vorbire.

De exemplu, fragmentarea poate fi făcută pentru a identifica și astfel grupa expresii nominale sau substantive singure, adjective sau fraze adjectivale și așa mai departe. Luați în considerare propoziția de mai jos:

„Am mâncat burgeri și produse de patiserie la micul dejun.”

În acest caz, dacă dorim să grupăm sau să împărțim fraze nominale, vom obține „burgeri”, „produse de patiserie” și „pranz”, care sunt substantivele sau grupurile nominale ale propoziției.

Unde se folosește fragmentarea?

De ce am vrea să învățăm ceva fără să știm unde este folosit pe scară largă?! Privind aplicațiile discutate în această secțiune a blogului te va ajuta să rămâi curios până la sfârșit!

Chunking este folosit pentru a obține expresiile necesare dintr-o propoziție dată. Cu toate acestea, etichetarea POS poate fi folosită numai pentru a identifica părțile de vorbire cărora le aparține fiecare cuvânt al propoziției.

Când avem o mulțime de descrieri sau modificări în jurul unui anumit cuvânt sau a unei expresii care ne interesează, folosim fragmentarea pentru a lua singur fraza necesară, ignorând restul din jurul acesteia. Prin urmare, fragmentarea deschide o cale de a grupa frazele necesare și de a exclude toți modificatorii din jurul lor care nu sunt necesari pentru analiza noastră. Rezumând, fragmentarea ne ajută să extragem cuvintele importante din descrierile lungi. Astfel, fragmentarea este un pas în extragerea informațiilor.

Interesant, acest proces de fragmentare în NLP este extins la diverse alte aplicații; de exemplu, pentru a grupa fructele dintr-o anumită categorie, de exemplu, fructele bogate în proteine ​​ca grup, fructele bogate în vitamine ca alt grup și așa mai departe. În plus, fragmentarea poate fi folosită și pentru a grupa mașini similare, să zicem, mașini care susțin transmisia automată într-un grup, iar celelalte care acceptă treapta manuală într-o altă bucată și așa mai departe.

Tipuri de fragmentare

Există, în linii mari, două tipuri de fragmentare:

  • Îngrădirea
  • Mărunțind

Îmbunătățire:

Aici, nu ne scufundăm adânc; în schimb, suntem mulțumiți doar de o prezentare generală a informațiilor. Ne ajută doar să ne facem o scurtă idee despre datele date.

Descomand:

Spre deosebire de tipul anterior de fragmentare, fragmentarea ne ajută să obținem informații detaliate.

Deci, dacă doriți doar o perspectivă, luați în considerare „scăderea în bucăți”, altfel preferați „reducerea în bucăți”.

Implementarea chunking-ului în Python

Imaginează-ți o situație în care vrei să extragi toate verbele din textul dat pentru analiza ta. Astfel, în acest caz, trebuie să luăm în considerare fragmentarea sintagmelor verbale. Acest lucru se datorează faptului că obiectivul nostru este să extragem toate frazele verbale din fragmentul dat de text. Îmbunătățirea se face cu ajutorul expresiilor regulate.

Nu vă faceți griji dacă este prima dată când întâlniți termenul „expresii obișnuite”. Tabelul de mai jos este aici, la salvarea ta:

Simbol

Sens

Exemplu

*

Caracterul precedent poate apărea de zero sau de mai multe ori, ceea ce înseamnă că caracterul precedent poate fi sau nu acolo.

ab* se potrivește cu toate intrările care încep cu ab și apoi sunt urmate de zero sau mai multe numere de b. Modelul se va potrivi cu ab, abb, abbb și așa mai departe.

+

Caracterul precedent ar trebui să apară cel puțin o dată.

a+ se potrivește cu a,aa,aaa și așa mai departe.

?

Caracterul precedent poate să nu apară deloc sau să apară o singură dată, ceea ce înseamnă că caracterul precedent este opțional.

ab? se potrivește cu ab,abb dar nu cu abbb și așa mai departe.

Tabelul de mai sus include cele mai frecvente expresii regulate utilizate. Expresiile regulate sunt foarte utile în linia de comandă, mai ales atunci când ștergeți, localizați, redenumim sau mutați fișiere.

Oricum, pentru această implementare, vom folosi doar *. Simțiți-vă liber să vă uitați la tabelul de mai sus pentru a vă familiariza cu simbolul!

Vom efectua chunking folosind nltk, cea mai populară bibliotecă NLP. Deci, mai întâi să-l importăm.

import nltk

Să luăm în considerare exemplul de text de mai jos pe care l-am creat pe cont propriu. Simțiți-vă liber să înlocuiți textul de mai jos cu orice exemplu de text pe care doriți să implementați fragmentarea!

sample_text="""
Rama a ucis-o pe Ravana pentru a-l salva pe Sita din Lanka. Legenda Ramayanului este cea mai populară epopee indiană. O mulțime de filme și seriale au deja
a fost împușcat în mai multe limbi aici, în India, pe baza Ramayana. """

În mod clar, datele trebuie să fie tokenizate propoziție și apoi tokenizate cuvânt înainte de a continua. Tokenizarea nu este altceva decât procesul de împărțire a fragmentului dat de text în unități mai mici, cum ar fi propoziții, în cazul tokenizării propoziției și cuvintelor, în cazul tokenizării cuvintelor.

Urmat de tokenizare, etichetarea POS (parte de vorbire) se face pentru fiecare cuvânt, în care va fi identificată partea de vorbire a fiecărui cuvânt. Acum, ne interesează doar verbul partea de vorbire și dorim să extragem același lucru.

Prin urmare, specificați partea de vorbire a interesului nostru folosind expresia regulată necesară, după cum urmează:

VB: {}

tokenized=nltk.sent_tokenize(text_eșantion)
pentru i în 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()

Expresia regulată (RE) este închisă între paranteze unghiulare() care, la rândul lor, sunt incluse între paranteze ({ și }).

NOTĂ: Specificați RE conform POS-ului solicitat

VB înseamnă verbul POS. Punctul care urmează VB înseamnă să se potrivească cu orice caracter care urmează VB. Semnul de întrebare după punct specifică că orice caracter după B trebuie să apară o singură dată sau nu trebuie să apară deloc. Cu toate acestea, din tabelul pe care l-am văzut anterior, acest caracter este opțional. Am încadrat expresia regulată în acest mod, deoarece, în NLTK, expresiile verbale includ următoarele etichete POS:

POS

Sens

VB

Verbul în forma sa de bază

VBD

verb la timpul său trecut

GBV

verb la timpul prezent

VBN

verbul în forma sa de participiu trecut

VBP

Verbul la timpul prezent, dar nu la persoana a treia singular

VBZ

Verbul la timpul prezent și este persoana a treia singular

Astfel, expresiile verbale pot aparține oricăruia dintre POS-urile de mai sus. De aceea expresia regulată este încadrată ca VB.? care include toate categoriile de mai sus. Pachetul RegexpParser este folosit pentru a verifica dacă un POS îndeplinește modelul necesar pe care l-am menționat folosind RE anterior.

Întregul cod poate fi văzut după cum urmează:

import nltk
nltk.download('averaged_perceptron_tagger')
sample_text="""
Rama a ucis-o pe Ravana pentru a-l salva pe Sita din Lanka. Legenda Ramayanului este cea mai populară epopee indiană. O mulțime de filme și seriale au deja
a fost împușcat în mai multe limbi aici, în India, pe baza Ramayana. """
tokenized=nltk.sent_tokenize(text_eșantion)
pentru i în 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()

REZULTATE

rezultat în bucăți
rezultat în bucăți

În cele din urmă, obținem o formă arborescentă a POS-ului cuvintelor împreună cu cuvintele al căror POS se potrivește cu RE-ul dat. Instantaneul rezultatului obținut pentru textul eșantion transmis de noi poate fi văzut în figurile de mai sus.

Observați că cuvintele care satisfac RE-ul nostru doar pentru expresiile verbale sunt evidențiate clar în rezultat. Prin urmare, fragmentarea frazelor verbale a fost realizată cu succes.

Sper că ați găsit articolul meu util.

Vă mulţumim!

Referinte

1. Implementarea chunking în Python

2. Teoria din spatele fragmentării

3. Lista completă a POS disponibile în NLP

Despre mine

Sunt Nithyashree V, un student în ultimul an BTech Computer Science and Engineering. Îmi place să învăț astfel de tehnologii interesante și să le pun în practică, mai ales să observ cum ne ajută să rezolvăm problemele provocatoare ale societății. Domeniile mele de interes includ inteligența artificială, știința datelor și procesarea limbajului natural.

Iată profilul meu LinkedIn: LinkedIn-ul meu

Puteți citi celelalte articole ale mele despre Analytics Vidhya de la aici.

Media prezentate în acest articol nu este deținută de Analytics Vidhya și sunt utilizate la discreția Autorului.

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

Timestamp-ul:

Mai mult de la Analize Vidhya