Che cos'è il Chunking nell'elaborazione del linguaggio naturale?

Nodo di origine: 1878431

Cari lettori,

In questo blog, parlerò del chunking sia teoricamente che praticamente in Python.

Allora, cominciamo...

NOTA: Per l'implementazione, è meglio usare Python IDLE poiché l'output è un disegno di un albero che si apre in una finestra separata.

Diaro

  • Cos'è il chunking?
  • Dove viene utilizzato il chunking?
  • Tipi di chunking
  • Implementazione del chunking in Python
  • Risultati

Cos'è il chunking?

Chunking è definito come il processo di elaborazione del linguaggio naturale utilizzato per identificare parti del discorso e brevi frasi presenti in una data frase.

Ricordando le nostre buone vecchie lezioni di grammatica inglese a scuola, nota che ci sono otto parti del discorso: nome, verbo, aggettivo, avverbio, preposizione, congiunzione, pronome e interiezione. Inoltre, nella precedente definizione di chunking, le frasi brevi si riferiscono alle frasi formate includendo una qualsiasi di queste parti del discorso.

Ad esempio, il chunking può essere eseguito per identificare e quindi raggruppare frasi nominali o solo nomi, aggettivi o frasi aggettivi e così via. Considera la frase seguente:

"Ho mangiato hamburger e pasticcini per colazione."

In questo caso, se vogliamo raggruppare o spezzettare frasi nominali, otterremo “burgers”, “pasties” e “lunch” che sono i sostantivi o gruppi di sostantivi della frase.

Dove viene utilizzato il chunking?

Perché dovremmo voler imparare qualcosa senza sapere dove è ampiamente usato?! Guardare le applicazioni discusse in questa sezione del blog ti aiuterà a rimanere curioso fino alla fine!

Chunking viene utilizzato per ottenere le frasi richieste da una data frase. Tuttavia, il POS tagging può essere utilizzato solo per individuare le parti del discorso a cui appartiene ogni parola della frase.

Quando abbiamo un sacco di descrizioni o modifiche attorno a una particolare parola o frase di nostro interesse, usiamo il chunking per afferrare solo la frase richiesta, ignorando il resto intorno ad essa. Quindi, il chunking apre un modo per raggruppare le frasi richieste ed escludere tutti i modificatori attorno ad esse che non sono necessari per la nostra analisi. Riassumendo, il chunking ci aiuta a estrarre solo le parole importanti da lunghe descrizioni. Pertanto, il chunking è un passaggio nell'estrazione delle informazioni.

È interessante notare che questo processo di suddivisione in blocchi nella PNL è esteso a varie altre applicazioni; ad esempio, per raggruppare i frutti di una categoria specifica, ad esempio frutti ricchi di proteine ​​come gruppo, frutti ricchi di vitamine come altro gruppo e così via. Inoltre, il chunking può essere utilizzato anche per raggruppare auto simili, ad esempio auto che supportano il cambio automatico in un gruppo e le altre che supportano il cambio manuale in un altro blocco e così via.

Tipi di Chunking

Ci sono, in linea di massima, due tipi di chunking:

  • A pezzi
  • Abbattere

Raggruppamento:

Qui non ci immergiamo in profondità; invece, siamo contenti solo di una panoramica delle informazioni. Ci aiuta solo a farci una breve idea dei dati forniti.

Abbattere:

A differenza del precedente tipo di chunking, il chunking down ci aiuta a ottenere informazioni dettagliate.

Quindi, se vuoi solo un'idea, considera "chunking up" altrimenti preferisci "chunking down".

Implementazione del chunking in Python

Immagina una situazione in cui desideri estrarre tutti i verbi dal testo dato per la tua analisi. Quindi, in questo caso, dobbiamo considerare il chunking delle frasi verbali. Questo perché il nostro obiettivo è quello di estrarre tutte le frasi verbali da un determinato pezzo di testo. Chunking è fatto con l'aiuto di espressioni regolari.

Non preoccuparti se è la prima volta che ti imbatti nel termine “espressioni regolari”. La tabella sottostante è qui, in tuo soccorso:

Simbolo

Significato

Esempio

*

Il carattere precedente può ricorrere zero o più volte, il che significa che il carattere precedente può essere presente o meno.

ab* corrisponde a tutti gli input che iniziano con ab e poi sono seguiti da zero o più numeri di b. Il modello corrisponderà ab, abb ,abbb e così via.

+

Il carattere precedente dovrebbe comparire almeno una volta.

a+ corrisponde a,aa,aaa e così via.

?

Il carattere precedente potrebbe non verificarsi affatto o verificarsi solo una volta, il che significa che il carattere precedente è facoltativo.

ab? trova ab,abb ma non abbb e così via.

La tabella sopra include le espressioni regolari più comuni utilizzate. Le espressioni regolari sono molto utili nella riga di comando, specialmente durante l'eliminazione, l'individuazione, la ridenominazione o lo spostamento di file.

Ad ogni modo, per questa implementazione, useremo solo *. Sentiti libero di guardare la tabella sopra per familiarizzare con il simbolo!

Eseguiremo il chunking utilizzando nltk, la libreria NLP più popolare. Quindi, prima importiamolo.

importa nltk

Consideriamo il testo di esempio qui sotto che ho creato da solo. Sentiti libero di sostituire quanto segue con qualsiasi testo di esempio che ti piace per implementare il chunking!

sample_text=""" Rama ha ucciso Ravana per salvare Sita da Lanka. La leggenda del Ramayan è l'epopea indiana più popolare. Molti film e serie sono già stati girati in diverse lingue qui in India basati sul Ramayana. """

Chiaramente, i dati devono essere tokenizzati in frasi e poi tokenizzati in parole prima di procedere. La tokenizzazione non è altro che il processo di scomposizione del dato pezzo di testo in unità più piccole come frasi, nel caso della tokenizzazione della frase e parole, nel caso della tokenizzazione della parola.

Seguito dalla tokenizzazione, viene eseguita la codifica POS (parte del discorso) per ogni parola, in cui verrà identificata la parte del discorso di ogni parola. Ora, siamo interessati solo al verbo parte del discorso e desideriamo estrarlo.

Quindi, specificare la parte del discorso di nostro interesse utilizzando l'espressione regolare richiesta come segue:

Verb: {}

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

L'espressione regolare (RE) è racchiusa tra parentesi angolari() che a loro volta sono racchiuse tra parentesi graffe ({ e }).

NOTA: Specificare il RE in base al POS richiesto

VB sta per il verbo POS. Il punto che segue VB significa corrispondere a qualsiasi carattere che segue VB. Il punto interrogativo dopo il punto specifica che qualsiasi carattere dopo la B deve comparire una sola volta o non deve comparire affatto. Tuttavia, dalla tabella che abbiamo visto in precedenza, questo carattere è opzionale. Abbiamo inquadrato l'espressione regolare in questo modo perché, in NLTK, le frasi verbali includono i seguenti tag POS:

POS

Significato

VB

Verbo nella sua forma base

VBD

verbo al suo passato

GBV

verbo al suo presente

VBN

verbo nella sua forma di participio passato

VBP

Verbo al presente ma non alla terza persona singolare

VBZ

Verbo al presente ed è terza persona singolare

Pertanto, le frasi verbali possono appartenere a uno qualsiasi dei POS di cui sopra. Ecco perché l'espressione regolare è inquadrata come VB.? che comprende tutte le categorie di cui sopra. Il pacchetto RegexpParser viene utilizzato per verificare se un POS soddisfa il nostro modello richiesto che abbiamo menzionato utilizzando la RE in precedenza.

L'intero codice può essere visto come segue:

import nltk nltk.download('averaged_perceptron_tagger') sample_text=""" Rama ha ucciso Ravana per salvare Sita da Lanka. La leggenda del Ramayan è l'epopea indiana più popolare. Molti film e serie sono già stati girati qui in diverse lingue in India basato sul 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(parole con tag) chunked.draw()

Risultati

risultato di chunking
risultato di chunking

Infine, otteniamo una forma ad albero del POS delle parole insieme alle parole il cui POS corrisponde alla data RE. L'istantanea dell'output ottenuto per il testo di esempio passato da noi può essere vista nelle figure sopra.

Osserva che le parole che soddisfano la nostra RE per le sole frasi verbali sono chiaramente evidenziate nell'output. Quindi, il chunking delle frasi verbali è stato eseguito con successo.

Spero che tu abbia trovato utile il mio articolo.

Grazie!

Riferimenti

1. Implementare il chunking in Python

2. Teoria alla base del chunking

3. Elenco completo dei POS disponibili in PNL

Chi Sono

Sono Nithyashree V, una studentessa dell'ultimo anno di BTech Computer Science and Engineering. Adoro imparare queste fantastiche tecnologie e metterle in pratica, in particolare osservando come ci aiutano a risolvere i difficili problemi della società. Le mie aree di interesse includono l'Intelligenza Artificiale, la Scienza dei Dati e l'Elaborazione del Linguaggio Naturale.

Ecco il mio profilo LinkedIn: Il mio Linkedin

Puoi leggere i miei altri articoli su Analytics Vidhya da qui.

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e sono utilizzati a discrezione dell'autore.

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

Timestamp:

Di più da Analisi Vidhya