Hvad er Chunking i naturlig sprogbehandling?

Kildeknude: 1878431

Kære læsere,

I denne blog vil jeg diskutere chunking både teoretisk og praktisk i Python.

Så lad os begynde...

BEMÆRK VENLIGST: Til implementeringen er det bedre at bruge Python IDLE, da outputtet er en tegning af et træ, som dukker op i et separat vindue.

dagsorden

  • Hvad er chunking?
  • Hvor bruges chunking?
  • Typer af chunking
  • Implementering af chunking i Python
  • Resultater

Hvad er chunking?

Chunking er defineret som processen med naturlig sprogbehandling, der bruges til at identificere dele af tale og korte sætninger til stede i en given sætning.

Når vi husker på vores gode gamle engelske grammatikklasser tilbage i skolen, bemærk, at der er otte dele af tale, nemlig substantivet, verbum, adjektivet, adverbium, præposition, konjunktion, pronomen og interjektion. I ovenstående definition af chunking refererer korte sætninger også til de sætninger, der dannes ved at inkludere nogen af ​​disse dele af tale.

For eksempel kan chunking udføres for at identificere og dermed gruppere navneordsfraser eller substantiver alene, adjektiver eller adjektivfraser og så videre. Overvej sætningen nedenfor:

“Jeg havde burgere og kager til morgenmad.”

I dette tilfælde, hvis vi ønsker at gruppere eller dele navneordssætninger, får vi "burgere", "kager" og "frokost", som er navneord eller navneordsgrupper i sætningen.

Hvor bruges chunking?

Hvorfor vil vi gerne lære noget uden at vide, hvor det er meget brugt?! Hvis du ser på de applikationer, der er diskuteret i denne sektion af bloggen, hjælper det dig med at forblive nysgerrig til det sidste!

Chunking bruges til at få de nødvendige sætninger fra en given sætning. Dog kan POS-tagging kun bruges til at få øje på de dele af tale, som hvert ord i sætningen hører til.

Når vi har masser af beskrivelser eller ændringer omkring et bestemt ord eller den sætning, vi interesserer os for, bruger vi chunking til at gribe den påkrævede sætning alene og ignorerer resten omkring den. Derfor baner chunking en måde at gruppere de nødvendige sætninger og udelukke alle de modifikatorer omkring dem, som ikke er nødvendige for vores analyse. Sammenfattende hjælper chunking os med at udtrække de vigtige ord alene fra lange beskrivelser. Chunking er således et trin i informationsudvinding.

Interessant nok udvides denne proces med chunking i NLP til forskellige andre applikationer; for eksempel at gruppere frugter af en bestemt kategori, f.eks. frugter rige på proteiner som en gruppe, frugter rige på vitaminer som en anden gruppe, og så videre. Desuden kan chunking også bruges til at gruppere lignende biler, f.eks. biler, der understøtter autogear i én gruppe, og de andre, der understøtter manuelt gear i en anden chunk og så videre.

Typer af chunking

Der er groft sagt to typer chunking:

  • Knuder op
  • Knuser ned

At samle op:

Her dykker vi ikke dybt; i stedet er vi glade for blot et overblik over informationen. Det hjælper os blot med at få en kort idé om de givne data.

Nedskæring:

I modsætning til den tidligere type chunking hjælper chunking ned os med at få detaljerede oplysninger.

Så hvis du bare vil have et indblik, så overvej at "chunke up", ellers foretrækker "chunking down".

Implementering af chunking i Python

Forestil dig en situation, hvor du ønsker at udtrække alle verberne fra den givne tekst til din analyse. Derfor skal vi i dette tilfælde overveje chunkingen af ​​verbumssætninger. Dette skyldes, at vores mål er at udtrække alle verbum fra det givne tekststykke. Chunking udføres ved hjælp af regulære udtryk.

Bare rolig, hvis det er første gang, du støder på udtrykket "regulære udtryk". Nedenstående tabel er her, til din redning:

Symbol

Betydning

Eksempel

*

Det foregående tegn kan forekomme nul eller flere gange, hvilket betyder, at det foregående tegn kan være der eller ikke.

ab* matcher alle input, der starter med ab og derefter efterfulgt af nul eller flere antal b'er. Mønsteret vil matche ab, abb, abbb og så videre.

+

Det foregående tegn skal forekomme mindst én gang.

a+ matcher a,aa,aaa og så videre.

?

Det foregående tegn forekommer måske slet ikke eller forekommer kun én gang, hvilket betyder, at det foregående tegn er valgfrit.

ab? matcher ab,abb men ikke abbb og så videre.

Ovenstående tabel indeholder de mest almindelige anvendte regulære udtryk. Regulære udtryk er meget nyttige i kommandolinjen, især når du sletter, lokaliserer, omdøber eller flytter filer.

Anyways, til denne implementering vil vi kun bruge *. Du er velkommen til at se på ovenstående tabel for at gøre dig bekendt med symbolet!

Vi vil udføre chunking ved hjælp af nltk, det mest populære NLP-bibliotek. Så lad os først importere det.

import nltk

Lad os overveje nedenstående eksempeltekst, som jeg oprettede på egen hånd. Du er velkommen til at erstatte nedenstående med enhver eksempeltekst, du kan lide at implementere chunking!

sample_text=""" Rama dræbte Ravana for at redde Sita fra Lanka. Legenden om Ramayan er det mest populære indiske epos. Mange film og serier er allerede blevet optaget på flere sprog her i Indien baseret på Ramayana. """

Det er klart, at dataene skal sætnings-tokeniseres og derefter ord-tokeniseres, før vi fortsætter. Tokenisering er intet andet end processen med at nedbryde det givne stykke tekst i mindre enheder såsom sætninger, i tilfælde af sætningstokenisering og ord, i tilfælde af ordtokenisering.

Efterfulgt af tokenisering udføres POS (ordedel) tagging for hvert ord, hvor orddelen af ​​hvert ord vil blive identificeret. Nu er vi kun interesseret i verbet ordstemme og ønsker at udtrække det samme.

Angiv derfor den del-of-tale af vores interesse ved at bruge det påkrævede regulære udtryk som følger:

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

Det regulære udtryk(RE) er omgivet af kantede parenteser(), som igen er omgivet af krøllede parenteser({ og ​​}).

BEMÆRK VENLIGST: Angiv RE i henhold til den påkrævede POS

VB står for verbet POS. Prikken efter VB betyder at matche ethvert tegn efter VB. Spørgsmålstegnet efter prikken angiver, at ethvert tegn efter B kun må forekomme én gang eller slet ikke må forekomme. Men fra tabellen, som vi så tidligere, er denne karakter valgfri. Vi har indrammet det regulære udtryk på denne måde, fordi verbumssætninger i NLTK inkluderer følgende POS-tags:

POS

Betydning

VB

Verbum i sin grundform

VBD

verbum i datid

GBV

verbum i nutid

VBN

verbum i sit participiumsform

VBP

Verbum i nutid, men ikke i tredje person ental

VBZ

Verbum i sin nuværende tid og er tredje person ental

Udsagnsord kan således tilhøre enhver af ovenstående POS. Det er derfor, det regulære udtryk er indrammet som VB.? som omfatter alle ovenstående kategorier. RegexpParser-pakken bruges til at kontrollere, om en POS opfylder vores påkrævede mønster, som vi tidligere har nævnt ved brug af RE.

Hele koden kan ses som følger:

import nltk nltk.download('averaged_perceptron_tagger') sample_text=""" Rama dræbte Ravana for at redde Sita fra Lanka. Legenden om Ramayan er det mest populære indiske epos. Mange film og serier er allerede blevet optaget på flere sprog her i Indien baseret på 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.RegexpParser(chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

Resultater

chunking resultat
chunking resultat

Til sidst får vi en træform af ordenes POS sammen med de ord, hvis POS matcher med den givne RE. Øjebliksbilledet af outputtet, der er opnået for eksempelteksten, som vi har givet os, kan ses i ovenstående figurer.

Bemærk, at de ord, der opfylder vores RE for verbumssætninger alene, er tydeligt fremhævet i outputtet. Derfor er chunking af verbumssætninger blevet udført med succes.

Håber du fandt min artikel nyttig.

Tak!

Referencer

1. Implementering af chunking i Python

2. Teori bag chunking

3. Fuld liste over POS tilgængelige i NLP

Om mig

Jeg er Nithyashree V, en sidste år BTech Computer Science and Engineering-studerende. Jeg elsker at lære så seje teknologier og omsætte dem i praksis, især at observere, hvordan de hjælper os med at løse samfundets udfordrende problemer. Mine interesseområder omfatter kunstig intelligens, datavidenskab og naturlig sprogbehandling.

Her er min LinkedIn profil: Min LinkedIn

Du kan læse mine andre artikler om Analytics Vidhya fra link..

Medierne vist i denne artikel ejes ikke af Analytics Vidhya og bruges efter forfatterens skøn.

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

Tidsstempel:

Mere fra Analyse Vidhya