Wat is Chunking bij natuurlijke taalverwerking?

Bronknooppunt: 1878431

Beste lezers,

In deze blog bespreek ik chunking zowel theoretisch als praktisch in Python.

Dus laten we beginnen...

NOTITIE: Voor de implementatie is het beter om Python IDLE te gebruiken, omdat de uitvoer een tekening is van een boom die in een apart venster verschijnt.

Agenda

  • Wat is chunken?
  • Waar wordt chunking gebruikt?
  • Soorten chunking
  • Implementatie van chunking in Python
  • Resultaten

Wat is chunken?

Chunking wordt gedefinieerd als het proces van natuurlijke taalverwerking dat wordt gebruikt om delen van spraak en korte zinnen in een bepaalde zin te identificeren.

Denkend aan onze goede oude Engelse grammaticalessen op school, merk op dat er acht woordsoorten zijn, namelijk het zelfstandig naamwoord, het werkwoord, het bijvoeglijk naamwoord, het bijwoord, het voorzetsel, het voegwoord, het voornaamwoord en het tussenwerpsel. In de bovenstaande definitie van chunking verwijzen korte zinnen ook naar de zinnen die worden gevormd door het opnemen van een van deze woordsoorten.

Chunking kan bijvoorbeeld worden gedaan om zelfstandige naamwoorden of zelfstandige naamwoorden, bijvoeglijke naamwoorden of bijvoeglijke naamwoorden, enzovoort te identificeren en zo te groeperen. Denk eens aan de onderstaande zin:

โ€œIk had hamburgers en gebak als ontbijt.โ€

Als we in dit geval zelfstandige naamwoorden willen groeperen of in stukjes willen verdelen, krijgen we 'burgers', 'gebakjes' en 'lunch', de zelfstandige naamwoorden of groepen van zelfstandige naamwoorden in de zin.

Waar wordt chunking gebruikt?

Waarom zouden we iets willen leren zonder te weten waar het veel gebruikt wordt?! Als je naar de toepassingen kijkt die in dit gedeelte van de blog worden besproken, blijf je tot het einde nieuwsgierig!

Chunking wordt gebruikt om de vereiste zinsdelen uit een bepaalde zin te halen. POS-tagging kan echter alleen worden gebruikt om de woordsoorten te herkennen waartoe elk woord van de zin behoort.

Als we heel veel beschrijvingen of aanpassingen hebben rond een bepaald woord of de zin waarin we geรฏnteresseerd zijn, gebruiken we chunking om alleen de vereiste zin te pakken, terwijl we de rest eromheen negeren. Daarom maakt chunking een manier vrij om de vereiste frases te groeperen en alle modifiers eromheen uit te sluiten die niet nodig zijn voor onze analyse. Samenvattend: chunking helpt ons alleen de belangrijke woorden uit lange beschrijvingen te halen. Chunking is dus een stap in het extraheren van informatie.

Interessant is dat dit proces van chunking in NLP wordt uitgebreid naar verschillende andere toepassingen; bijvoorbeeld om vruchten van een specifieke categorie te groeperen, bijvoorbeeld vruchten die rijk zijn aan eiwitten als een groep, vruchten die rijk zijn aan vitamines als een andere groep, enzovoort. Daarnaast kan chunking ook worden gebruikt om vergelijkbare auto's, bijvoorbeeld auto's die automatische versnellingen ondersteunen, in รฉรฉn groep te groeperen en de andere die handmatige versnelling ondersteunen in een andere groep, enzovoort.

Soorten chunking

Er zijn grofweg twee soorten chunking:

  • Opsplitsen
  • Het afbrokkelen

Opdelen:

Hier duiken we niet diep; in plaats daarvan zijn we blij met slechts een overzicht van de informatie. Het helpt ons alleen een kort idee te krijgen van de gegeven gegevens.

Afbreken:

In tegenstelling tot het vorige type chunking helpt het segmenteren ons gedetailleerde informatie te verkrijgen.

Dus als je alleen maar inzicht wilt, overweeg dan om โ€œop te delenโ€ en anders liever โ€œop te delenโ€.

Implementatie van chunking in Python

Stel je een situatie voor waarin je alle werkwoorden uit de gegeven tekst wilt extraheren voor je analyse. In dit geval moeten we dus rekening houden met het opsplitsen van werkwoorduitdrukkingen. Dit komt omdat het ons doel is om alle werkwoorduitdrukkingen uit het gegeven stuk tekst te halen. Chunking gebeurt met behulp van reguliere expressies.

Maak je geen zorgen als het de eerste keer is dat je de term 'reguliere expressies' tegenkomt. De onderstaande tabel staat hier tot uw redding:

Symbool

Betekenis

Voorbeeld

*

Het voorgaande teken kan nul of meer keren voorkomen, wat betekent dat het voorgaande teken er wel of niet kan zijn.

ab* komt overeen met alle invoer, beginnend met ab en dan gevolgd door nul of meer b's. Het patroon komt overeen met ab, abb, abbb enzovoort.

+

Het voorgaande teken moet minstens รฉรฉn keer voorkomen.

a+ komt overeen met a, aa, aaa enzovoort.

?

Het voorgaande teken komt mogelijk helemaal niet voor of komt slechts รฉรฉn keer voor, wat betekent dat het voorgaande teken optioneel is.

ab? komt overeen met ab,abb maar niet met abbb enzovoort.

De bovenstaande tabel bevat de meest gebruikte reguliere expressies. Reguliere expressies zijn erg handig op de opdrachtregel, vooral bij het verwijderen, lokaliseren, hernoemen of verplaatsen van bestanden.

Hoe dan ook, voor deze implementatie zullen we alleen *. Kijk gerust naar de bovenstaande tabel om vertrouwd te raken met het symbool!

We zullen chunking uitvoeren met behulp van nltk, de populairste NLP-bibliotheek. Laten we het dus eerst importeren.

importeer nltk

Laten we eens kijken naar de onderstaande voorbeeldtekst die ik zelf heb gemaakt. Voel je vrij om het onderstaande te vervangen door een voorbeeldtekst die je graag in chunking implementeert!

sample_text=""" Rama vermoordde Ravana om Sita uit Lanka te redden. De legende van de Ramayan is het populairste Indiase epos. Er zijn hier in India al veel films en series opgenomen in verschillende talen, gebaseerd op de Ramayana. """

Het is duidelijk dat de gegevens eerst zin-tokenized en vervolgens woord-tokenized moeten worden voordat we verder kunnen gaan. Tokenisatie is niets anders dan het proces waarbij een gegeven stuk tekst wordt opgedeeld in kleinere eenheden, zoals zinnen, in het geval van zintokenisatie, en woorden, in het geval van woordtokenisatie.

Gevolgd door tokenisatie wordt voor elk woord een POS-tag (part-of-speech) uitgevoerd, waarbij de part-of-speech van elk woord wordt geรฏdentificeerd. Nu zijn we alleen geรฏnteresseerd in het werkwoord โ€˜part-of-speechโ€™ en willen we dit eruit halen.

Specificeer daarom de woordsoort waarin we geรฏnteresseerd zijn, met behulp van de vereiste reguliere expressie, als volgt:

VB: {}

tokenized=nltk.sent_tokenize(voorbeeld_tekst) voor i in tokenized: woorden=nltk.word_tokenize(i) # print(woorden) tagged_words=nltk.pos_tag(woorden) # print(tagged_words) chunkGram=r"""VB: {}" "" chunkParser=nltk.RegexParser(chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

De reguliere expressie(RE) staat tussen hoekhaken() die op hun beurt tussen accolades({ en }) staan.

NOTITIE: Specificeer de RE volgens het vereiste POS

VB staat voor het werkwoord POS. De punt die volgt op de VB betekent dat deze overeenkomt met elk teken dat volgt op VB. Het vraagteken na de punt geeft aan dat elk teken na B slechts รฉรฉn keer mag voorkomen of helemaal niet mag voorkomen. Uit de tabel die we eerder zagen, is dit teken echter optioneel. We hebben de reguliere expressie op deze manier ingekaderd omdat, in NLTK, werkwoorduitdrukkingen de volgende POS-tags bevatten:

POS

Betekenis

VB

Werkwoord in zijn basisvorm

VBD

werkwoord in de verleden tijd

GBV

werkwoord in de tegenwoordige tijd

VBN

werkwoord in zijn voltooid deelwoordvorm

VBP

Werkwoord in de tegenwoordige tijd, maar niet in de derde persoon enkelvoud

VBZ

Werkwoord in de tegenwoordige tijd en derde persoon enkelvoud

Werkwoorduitdrukkingen kunnen dus tot elk van de bovenstaande POS behoren. Dat is de reden waarom de reguliere expressie is ingelijst als VB.? die alle bovenstaande categorieรซn omvat. Het RegexpParser-pakket wordt gebruikt om te controleren of een POS voldoet aan ons vereiste patroon dat we eerder hebben genoemd met behulp van de RE.

De volledige code is als volgt te zien:

import nltk nltk.download('averaged_perceptron_tagger') sample_text=""" Rama vermoordde Ravana om Sita uit Lanka te redden. De legende van de Ramayan is het populairste Indiase epos. Er zijn hier al veel films en series opgenomen in verschillende talen in India gebaseerd op de Ramayana. """ 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.RegexParser(chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

Resultaten

chunking resultaat
chunking resultaat

Ten slotte verkrijgen we een boomvorm van de POS van de woorden, samen met de woorden waarvan de POS overeenkomt met de gegeven RE. De momentopname van de output die is verkregen voor de door ons doorgegeven voorbeeldtekst is te zien in de bovenstaande figuren.

Merk op dat de woorden die alleen voor werkwoorduitdrukkingen voldoen aan onze RE, duidelijk gemarkeerd zijn in de uitvoer. Daarom is het opsplitsen van werkwoorduitdrukkingen met succes uitgevoerd.

Ik hoop dat je mijn artikel nuttig vond.

Bedankt!

Referenties

1. Chunking implementeren in Python

2. Theorie achter chunking

3. Volledige lijst met beschikbare POS in NLP

Over Mij

Ik ben Nithyashree V, een laatstejaars student BTech Computer Science and Engineering. Ik hou ervan om zulke coole technologieรซn te leren en ze in de praktijk te brengen, vooral door te observeren hoe ze ons helpen de uitdagende problemen van de samenleving op te lossen. Mijn interessegebieden zijn kunstmatige intelligentie, datawetenschap en natuurlijke taalverwerking.

Hier is mijn LinkedIn-profiel: Mijn LinkedIn

U kunt mijn andere artikelen over Analytics Vidhya lezen van hier.

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

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

Tijdstempel:

Meer van Analytics Vidhya