Τι είναι το Chunking στην επεξεργασία φυσικής γλώσσας;

Κόμβος πηγής: 1878431

Αγαπητοι αναγνωστες,

Σε αυτό το blog, θα συζητήσω το chunking τόσο θεωρητικά όσο και πρακτικά στην Python.

Λοιπόν, ας ξεκινήσουμε…

ΣΗΜΕΊΩΣΗ: Για την υλοποίηση, είναι καλύτερο να χρησιμοποιήσετε το Python IDLE καθώς η έξοδος είναι ένα σχέδιο ενός δέντρου που εμφανίζεται σε ξεχωριστό παράθυρο.

ημερήσια διάταξη

  • Τι είναι το chunking;
  • Πού χρησιμοποιείται το chunking;
  • Τύποι τεμαχισμού
  • Εφαρμογή του chunking στην Python
  • Αποτελέσματα

Τι είναι το chunking;

Το Chunking ορίζεται ως η διαδικασία επεξεργασίας της φυσικής γλώσσας που χρησιμοποιείται για τον προσδιορισμό τμημάτων του λόγου και σύντομων φράσεων που υπάρχουν σε μια δεδομένη πρόταση.

Υπενθυμίζοντας τα παλιά καλά μαθήματα αγγλικής γραμματικής στο σχολείο, σημειώστε ότι υπάρχουν οκτώ μέρη του λόγου, δηλαδή το ουσιαστικό, το ρήμα, το επίθετο, το επίρρημα, η πρόθεση, ο σύνδεσμος, η αντωνυμία και ο επιφώνημα. Επίσης, στον παραπάνω ορισμό του τεμαχισμού, οι σύντομες φράσεις αναφέρονται στις φράσεις που σχηματίζονται με τη συμπερίληψη οποιουδήποτε από αυτά τα μέρη του λόγου.

Για παράδειγμα, το τεμάχιο μπορεί να γίνει για να προσδιοριστούν και, επομένως, να ομαδοποιηθούν ονοματικές φράσεις ή μόνο ουσιαστικά, επίθετα ή φράσεις επιθέτων κ.λπ. Σκεφτείτε την παρακάτω πρόταση:

“Είχα μπέργκερ και αρτοσκευάσματα για πρωινό.”

Σε αυτήν την περίπτωση, εάν θέλουμε να ομαδοποιήσουμε ή να τμηματοποιήσουμε ονοματικές φράσεις, θα λάβουμε «μπιφτέκια», «γλυκά» και «μεσημεριανό» που είναι τα ουσιαστικά ή οι ονοματικές ομάδες της πρότασης.

Πού χρησιμοποιείται το chunking;

Γιατί να θέλουμε να μάθουμε κάτι χωρίς να ξέρουμε πού χρησιμοποιείται ευρέως;! Κοιτάζοντας τις εφαρμογές που συζητούνται σε αυτήν την ενότητα του ιστολογίου θα σας βοηθήσει να παραμείνετε περίεργοι μέχρι το τέλος!

Το Chunking χρησιμοποιείται για να ληφθούν οι απαιτούμενες φράσεις από μια δεδομένη πρόταση. Ωστόσο, η προσθήκη ετικετών POS μπορεί να χρησιμοποιηθεί μόνο για τον εντοπισμό των τμημάτων του λόγου στα οποία ανήκει κάθε λέξη της πρότασης.

Όταν έχουμε πολλές περιγραφές ή τροποποιήσεις γύρω από μια συγκεκριμένη λέξη ή τη φράση που μας ενδιαφέρει, χρησιμοποιούμε τεμάχια για να αρπάξουμε μόνο την απαιτούμενη φράση, αγνοώντας τις υπόλοιπες γύρω από αυτήν. Ως εκ τούτου, το chunking ανοίγει έναν δρόμο για να ομαδοποιήσουμε τις απαιτούμενες φράσεις και να αποκλείσουμε όλους τους τροποποιητές γύρω τους που δεν είναι απαραίτητοι για την ανάλυσή μας. Συνοψίζοντας, το chunking μας βοηθά να εξάγουμε τις σημαντικές λέξεις μόνο από μακροσκελείς περιγραφές. Έτσι, το chunking είναι ένα βήμα στην εξαγωγή πληροφοριών.

Είναι ενδιαφέρον ότι αυτή η διαδικασία τεμαχισμού στο NLP επεκτείνεται σε διάφορες άλλες εφαρμογές. Για παράδειγμα, να ομαδοποιήσετε φρούτα μιας συγκεκριμένης κατηγορίας, ας πούμε, φρούτα πλούσια σε πρωτεΐνες ως ομάδα, φρούτα πλούσια σε βιταμίνες ως μια άλλη ομάδα, και ούτω καθεξής. Επιπλέον, το chunking μπορεί επίσης να χρησιμοποιηθεί για την ομαδοποίηση παρόμοιων αυτοκινήτων, ας πούμε, αυτοκινήτων που υποστηρίζουν αυτόματο κιβώτιο ταχυτήτων σε μια ομάδα και τα άλλα που υποστηρίζουν χειροκίνητη ταχύτητα σε ένα άλλο κομμάτι και ούτω καθεξής.

Τύποι τεμαχισμού

Υπάρχουν, γενικά, δύο τύποι τεμαχισμού:

  • Τεμαχισμό
  • Κομματοποίηση

Τεμαχισμός:

Εδώ, δεν βουτάμε βαθιά. Αντίθετα, χαιρόμαστε μόνο με μια επισκόπηση των πληροφοριών. Απλώς μας βοηθά να έχουμε μια σύντομη ιδέα των δεδομένων που δίνονται.

Τεμαχισμός:

Σε αντίθεση με τον προηγούμενο τύπο τεμαχισμού, το τεμαχισμό μας βοηθά να λάβουμε λεπτομερείς πληροφορίες.

Έτσι, αν θέλετε απλώς μια εικόνα, σκεφτείτε το ενδεχόμενο να «μαζέψετε» διαφορετικά προτιμήστε το «κοψίματα».

Εφαρμογή του chunking στην Python

Φανταστείτε μια κατάσταση στην οποία θέλετε να εξαγάγετε όλα τα ρήματα από το δεδομένο κείμενο για την ανάλυσή σας. Έτσι, σε αυτή την περίπτωση, πρέπει να εξετάσουμε το τεμάχιο των ρηματικών φράσεων. Αυτό συμβαίνει επειδή ο στόχος μας είναι να εξαγάγουμε όλες τις ρηματικές φράσεις από το συγκεκριμένο κομμάτι κειμένου. Το τεμάχιο γίνεται με τη βοήθεια κανονικών εκφράσεων.

Μην ανησυχείτε αν είναι η πρώτη φορά που συναντάτε τον όρο «κανονικές εκφράσεις». Ο παρακάτω πίνακας είναι εδώ, για να σας σώσει:

Σύμβολο

Νόημα

Παράδειγμα

*

Ο προηγούμενος χαρακτήρας μπορεί να εμφανίζεται μηδέν ή περισσότερες φορές, πράγμα που σημαίνει ότι ο προηγούμενος χαρακτήρας μπορεί να είναι ή να μην υπάρχει.

Το ab* αντιστοιχεί σε όλες τις εισόδους που ξεκινούν με ab και στη συνέχεια ακολουθούνται από μηδέν ή περισσότερους αριθμούς b. Το μοτίβο θα ταιριάζει με ab, abb, abbb και ούτω καθεξής.

+

Ο προηγούμενος χαρακτήρας πρέπει να εμφανίζεται τουλάχιστον μία φορά.

Το a+ ταιριάζει με a,aa,aaa και ούτω καθεξής.

?

Ο προηγούμενος χαρακτήρας μπορεί να μην εμφανίζεται καθόλου ή να εμφανίζεται μόνο μία φορά που σημαίνει ότι ο προηγούμενος χαρακτήρας είναι προαιρετικός.

αβ; ταιριάζει ab,abb αλλά όχι abbb και ούτω καθεξής.

Ο παραπάνω πίνακας περιλαμβάνει τις πιο συνηθισμένες τυπικές εκφράσεις που χρησιμοποιούνται. Οι τυπικές εκφράσεις είναι πολύ χρήσιμες στη γραμμή εντολών, ειδικά κατά τη διαγραφή, τον εντοπισμό, τη μετονομασία ή τη μετακίνηση αρχείων.

Τέλος πάντων, για αυτήν την υλοποίηση, θα χρησιμοποιήσουμε μόνο *. Μη διστάσετε να δείτε τον παραπάνω πίνακα για να εξοικειωθείτε με το σύμβολο!

Θα κάνουμε chunking χρησιμοποιώντας το nltk, την πιο δημοφιλή βιβλιοθήκη NLP. Λοιπόν, ας το εισάγουμε πρώτα.

εισαγωγή nltk

Ας εξετάσουμε το παρακάτω δείγμα κειμένου που δημιούργησα μόνος μου. Μη διστάσετε να αντικαταστήσετε το παρακάτω με οποιοδήποτε δείγμα κειμένου θέλετε να εφαρμόσετε το chunking!

sample_text=""""Ο Ράμα σκότωσε τον Ραβάνα για να σώσει τη Σίτα από τη Λάνκα. Ο θρύλος του Ραμαγιάν είναι το πιο δημοφιλές ινδικό έπος. Πολλές ταινίες και σίριαλ έχουν ήδη γυριστεί σε πολλές γλώσσες εδώ στην Ινδία βασισμένες στο Ραμαγιάνα. """

Σαφώς, τα δεδομένα πρέπει να είναι διακριτικά προτάσεων και, στη συνέχεια, διακριτικά λέξεων πριν προχωρήσουμε. Tokenization δεν είναι παρά η διαδικασία διάσπασης του δεδομένου κομματιού κειμένου σε μικρότερες ενότητες όπως προτάσεις, στην περίπτωση του tokenization προτάσεων και των λέξεων, στην περίπτωση του tokenization λέξεων.

Ακολουθεί το tokenization, η επισήμανση POS (part-of-speech) γίνεται για κάθε λέξη, στην οποία θα προσδιορίζεται το τμήμα του λόγου κάθε λέξης. Τώρα, μας ενδιαφέρει μόνο το ρήμα part-of-speech και επιθυμούμε να εξαγάγουμε το ίδιο.

Ως εκ τούτου, καθορίστε το μέρος του λόγου που μας ενδιαφέρει χρησιμοποιώντας την απαιτούμενη κανονική έκφραση ως εξής:

VB: {}

tokenized=nltk.sent_tokenize(sample_text) for i σε 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()

Η κανονική έκφραση (RE) περικλείεται μέσα σε γωνιακές αγκύλες() οι οποίες με τη σειρά τους περικλείονται μέσα σε σγουρές αγκύλες ({ και }).

ΣΗΜΕΊΩΣΗ: Καθορίστε το RE σύμφωνα με το απαιτούμενο POS

Το VB σημαίνει το ρήμα POS. Η κουκκίδα που διαδέχεται το VB σημαίνει ότι ταιριάζει με οποιονδήποτε χαρακτήρα που ακολουθεί το VB. Το ερωτηματικό μετά την τελεία προσδιορίζει ότι οποιοσδήποτε χαρακτήρας μετά το B πρέπει να εμφανίζεται μόνο μία φορά ή να μην εμφανίζεται καθόλου. Ωστόσο, από τον πίνακα που είδαμε προηγουμένως, αυτός ο χαρακτήρας είναι προαιρετικός. Έχουμε πλαισιώσει την κανονική έκφραση με αυτόν τον τρόπο επειδή, στο NLTK, οι ρηματικές φράσεις περιλαμβάνουν τις ακόλουθες ετικέτες POS:

POS

Νόημα

VB

Το ρήμα στη βασική του μορφή

VBD

ρήμα στον παρελθοντικό του χρόνο

GBV

ρήμα στον ενεστώτα του

VBN

ρήμα στην παρατατική του μορφή

VBP

Το ρήμα στον ενεστώτα του αλλά όχι σε γ ́ ενικό πρόσωπο

VBZ

Το ρήμα στον ενεστώτα του και είναι γ ́ ενικό πρόσωπο

Έτσι, οι ρηματικές φράσεις μπορούν να ανήκουν σε οποιοδήποτε από τα παραπάνω POS. Γι' αυτό η κανονική έκφραση πλαισιώνεται ως VB.; που περιλαμβάνει όλες τις παραπάνω κατηγορίες. Το πακέτο RegexpParser χρησιμοποιείται για να ελέγξει εάν ένα POS ικανοποιεί το απαιτούμενο μοτίβο μας, το οποίο αναφέραμε χρησιμοποιώντας το RE προηγουμένως.

Ολόκληρος ο κώδικας μπορεί να φανεί ως εξής:

import nltk nltk.download('averaged_perceptron_tagger') sample_text=""" Ο Ράμα σκότωσε τον Ραβάνα για να σώσει τη Σίτα από τη Λάνκα. Ο θρύλος του Ραμαγιάν είναι το πιο δημοφιλές ινδικό έπος. Πολλές ταινίες και σίριαλ έχουν ήδη γυριστεί σε πολλές γλώσσες εδώ στην Ινδία με βάση το 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()

Αποτελέσματα

τεμαχισμένο αποτέλεσμα
τεμαχισμένο αποτέλεσμα

Τέλος, λαμβάνουμε μια δενδρική μορφή του POS των λέξεων μαζί με τις λέξεις των οποίων το POS ταιριάζει με το δεδομένο RE. Το στιγμιότυπο της εξόδου που λήφθηκε για το δείγμα κειμένου που πέρασε από εμάς φαίνεται στα παραπάνω σχήματα.

Παρατηρήστε ότι οι λέξεις που ικανοποιούν το RE μας μόνο για ρηματικές φράσεις επισημαίνονται ξεκάθαρα στην έξοδο. Ως εκ τούτου, το τεμάχιο των ρηματικών φράσεων πραγματοποιήθηκε με επιτυχία.

Ελπίζω να βρήκατε το άρθρο μου χρήσιμο.

Ευχαριστώ!

αναφορές

1. Εφαρμογή chunking στην Python

2. Θεωρία πίσω από το chunking

3. Πλήρης λίστα με τα διαθέσιμα POS στο NLP

Σχετικά με εμάς

Είμαι ο Nithyashree V, τελειόφοιτος BTech Computer Science and Engineering. Μου αρέσει να μαθαίνω τέτοιες cool τεχνολογίες και να τις εφαρμόζω στην πράξη, ειδικά παρατηρώντας πώς μας βοηθούν να λύσουμε τα δύσκολα προβλήματα της κοινωνίας. Οι τομείς ενδιαφέροντός μου περιλαμβάνουν την Τεχνητή Νοημοσύνη, την Επιστήμη Δεδομένων και την Επεξεργασία Φυσικής Γλώσσας.

Εδώ είναι το προφίλ μου στο LinkedIn: Το LinkedIn μου

Μπορείτε να διαβάσετε τα άλλα άρθρα μου στο Analytics Vidhya από εδώ.

Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του συγγραφέα.

Πηγή: https://www.analyticsvidhya.com/blog/2021/10/what-is-chunking-in-natural-language-processing/

Σφραγίδα ώρας:

Περισσότερα από Ανάλυση Vidhya