Στέλεχος και Λεμματοποίηση σε Python NLTK με Παραδείγματα

⚡ Έξυπνη Σύνοψη

Η ρίζα και η λημματοποίηση είναι τεχνικές κανονικοποίησης κειμένου Python NLTK που μειώνουν τις παραλλαγές λέξεων σε μια κοινή βάση, όπου τα επιθήματα stemding crops γρήγορα χωρίς συμφραζόμενα και λημματοποίηση επιστρέφουν μια αληθινή λέξη λεξικού χρησιμοποιώντας νόημα.

  • 🌱 Προέλευση: Το PorterStemmer καλλιεργεί επιθήματα για να φτάσει σε μια ρίζα που μπορεί να μην είναι πραγματική λέξη.
  • 📚 Εξευγενισμός: Το WordNetLemmatizer επιστρέφει τη βασική μορφή του λεξικού, που ονομάζεται λήμμα.
  • Διαφορά: Η δημιουργία stemming είναι ταχύτερη, η λημματοποίηση είναι πιο αργή αλλά πιο ακριβής και λαμβάνει υπόψη τα συμφραζόμενα.
  • 🔤 Ομαλοποίηση: Και οι δύο συρρικνώνουν την πυκνότητα των λέξεων, έτσι ώστε οι μηχανές να αντιμετωπίζουν τις παραλλαγές ως ένα χαρακτηριστικό.
  • 🏷️ Ετικέτες POS: Η εισαγωγή μιας ετικέτας μέρους του λόγου καθιστά τον λεξιλογητή πολύ πιο ακριβή.
  • 🤖 Όφελος Τεχνητής Νοημοσύνης: Το καθαρότερο κανονικοποιημένο κείμενο παράγει ισχυρότερες δυνατότητες και μοντέλα μηχανικής μάθησης.

Στέλεχος και Λεμματοποίηση σε Python NLTK

Τι είναι το Stemming και το Lemmatization Python NLTK;

Στέλεχος και Λεμματοποίηση in Python Οι τεχνικές NLTK είναι τεχνικές κανονικοποίησης κειμένου για την Επεξεργασία Φυσικής Γλώσσας. Αυτές οι τεχνικές χρησιμοποιούνται ευρέως για την προεπεξεργασία κειμένου. Η διαφορά μεταξύ της δημιουργίας stemming και της λημματοποίησης είναι ότι η δημιουργία stemming είναι ταχύτερη επειδή κόβει λέξεις χωρίς να γνωρίζει τα συμφραζόμενα, ενώ η λημματοποίηση είναι πιο αργή επειδή γνωρίζει τα συμφραζόμενα των λέξεων πριν από την επεξεργασία.

Τι είναι το Stemming;

Βλάστηση είναι μια μέθοδος ομαλοποίησης λέξεων σε Επεξεργασία φυσικής γλώσσαςΕίναι μια τεχνική κατά την οποία ένα σύνολο λέξεων σε μια πρόταση μετατρέπεται σε μια ακολουθία για να συντομευτεί η αναζήτηση. Σε αυτήν τη μέθοδο, οι λέξεις που έχουν την ίδια σημασία αλλά κάποιες παραλλαγές ανάλογα με τα συμφραζόμενα ή την πρόταση κανονικοποιούνται. Με άλλα λόγια, υπάρχει μία ρίζα λέξης, αλλά υπάρχουν πολλές παραλλαγές της ίδιας λέξης. Για παράδειγμα, η ρίζα λέξης είναι «eat» και οι παραλλαγές της είναι «eats, eating, eaten, και ούτω καθεξής». Με τον ίδιο τρόπο, με τη βοήθεια του Stemming στο Python, μπορούμε να βρούμε τη ρίζα οποιασδήποτε παραλλαγής.

Για παράδειγμα:

He was riding.
He was taking the ride.

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

Ας το εφαρμόσουμε αυτό με ένα Python πρόγραμμα. Το NLTK έχει έναν αλγόριθμο που ονομάζεται PorterStemmerΑυτός ο αλγόριθμος δέχεται τη λίστα των λέξεων με διακριτικά και τις ταξινομεί σε ριζικές λέξεις.

Πρόγραμμα για την κατανόηση του Stemming

from nltk.stem import PorterStemmer
e_words= ["wait", "waiting", "waited", "waits"]
ps =PorterStemmer()
for w in e_words:
    rootWord=ps.stem(w)
    print(rootWord)

Παραγωγή:

wait
wait
wait
wait

Code Επεξήγηση:

  • Υπάρχει μια ενότητα stem στο NLTK η οποία εισάγεται. Εάν εισαγάγετε ολόκληρη την ενότητα, το πρόγραμμα γίνεται βαρύ καθώς περιέχει χιλιάδες γραμμές κώδικα. Έτσι, από ολόκληρη την ενότητα stem, εισαγάγαμε μόνο το "PorterStemmer".
  • Ετοιμάσαμε μια εικονική λίστα δεδομένων παραλλαγής της ίδιας λέξης.
  • Δημιουργείται ένα αντικείμενο που ανήκει στην κλάση nltk.stem.porter.PorterStemmer.
  • Τα περάσαμε στο PorterStemmer ένα προς ένα χρησιμοποιώντας έναν βρόχο "for". Τέλος, λάβαμε την τελική ρίζα κάθε λέξης που αναφέρεται στη λίστα.

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

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="Hello Guru99, You have to build a very good site and I love visiting your site."
words = word_tokenize(sentence)
ps = PorterStemmer()
for w in words:
	rootWord=ps.stem(w)
	print(rootWord)

Παραγωγή:

hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site

Code Επεξήγηση:

  • Το πακέτο PorterStemmer εισάγεται από το στέλεχος της ενότητας.
  • Εισάγονται πακέτα για την μετατροπή προτάσεων καθώς και λέξεων σε tokenization.
  • Γράφεται μια πρόταση που πρέπει να γίνει διακριτική στο επόμενο βήμα.
  • Εδώ δημιουργείται ένα αντικείμενο για το PorterStemmer.
  • Εκτελείται ένας βρόχος και η δημιουργία ρίζας κάθε λέξης γίνεται χρησιμοποιώντας το αντικείμενο που δημιουργήθηκε στη γραμμή κώδικα 5.

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

Τι είναι η Λεμματοποίηση;

Εξευγενισμός Στο NLTK, η αλγοριθμική διαδικασία εύρεσης του λήματος μιας λέξης ανάλογα με τη σημασία και τα συμφραζόμενά της είναι η αλγοριθμική διαδικασία εύρεσης του λήματος μιας λέξης ανάλογα με τη σημασία και τα συμφραζόμενά της. Η λημματοποίηση συνήθως αναφέρεται στη μορφολογική ανάλυση των λέξεων, η οποία στοχεύει στην αφαίρεση των κλιτικών καταλήξεων. Βοηθά στην επιστροφή της βάσης ή της λεξικής μορφής μιας λέξης, γνωστής ως λήμμα. Η μέθοδος λημματοποίησης NLTK βασίζεται στην ενσωματωμένη συνάρτηση μορφοποίησης του WordNet. Η προεπεξεργασία κειμένου περιλαμβάνει τόσο την υιοθέτηση θεμάτων όσο και τη λημματοποίηση. Πολλοί άνθρωποι βρίσκουν τους δύο όρους συγκεχυμένους. Κάποιοι τους αντιμετωπίζουν ως ίδιους, αλλά υπάρχει μια διαφορά μεταξύ της υιοθέτησης θεμάτων και της λημματοποίησης. Η λημματοποίηση προτιμάται από την πρώτη για τον παρακάτω λόγο.

Γιατί το Lemmatization είναι καλύτερο από το Stemming;

Ο αλγόριθμος δημιουργίας ριζών λειτουργεί κόβοντας το επίθημα από τη λέξη. Με μια ευρύτερη έννοια, κόβει είτε την αρχή είτε το τέλος της λέξης. Αντίθετα, η Λημματοποίηση είναι μια πιο ισχυρή λειτουργία και λαμβάνει υπόψη τη μορφολογική ανάλυση των λέξεων. Επιστρέφει το λήμμα, το οποίο είναι η βασική μορφή όλων των κλιτικών μορφών της. Απαιτείται εις βάθος γλωσσική γνώση για τη δημιουργία λεξικών και την αναζήτηση της σωστής μορφής της λέξης. Η δημιουργία ριζών είναι μια γενική λειτουργία, ενώ η λημματοποίηση είναι μια έξυπνη λειτουργία όπου η σωστή μορφή αναζητείται στο λεξικό. Ως εκ τούτου, η λημματοποίηση βοηθά στη διαμόρφωση καλύτερων μάθηση μηχανής χαρακτηριστικά.

Code να διακρίνουν μεταξύ Λημματοποίησης και Βλαστοποίησης

Βλάστηση Code:

import nltk
from nltk.stem.porter import PorterStemmer
porter_stemmer  = PorterStemmer()
text = "studies studying cries cry"
tokenization = nltk.word_tokenize(text)
for w in tokenization:
print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))

Παραγωγή:

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Εξευγενισμός Code:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_lemmatizer = WordNetLemmatizer()
	text = "studies studying cries cry"
	tokenization = nltk.word_tokenize(text)
	 for w in tokenization:
		print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))

Παραγωγή:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Συζήτηση του Output

Αν εξετάσουμε την stemming για studies και την studying, η έξοδος είναι η ίδια (studi), αλλά ο λημματοποιητής NLTK παρέχει διαφορετικό λήμμα και για τα δύο διακριτικά: study for studies και study for study. Έτσι, όταν χρειάζεται να δημιουργήσουμε ένα σύνολο χαρακτηριστικών για την εκπαίδευση μιας μηχανής, θα ήταν υπέροχο να προτιμηθεί η λημματοποίηση.

Χρήση Case of Lemmatizer

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

Παράδειγμα σε πραγματικό χρόνο που δείχνει τη χρήση της Λημματοποίησης WordNet και της Ετικέτας POS σε Python:

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV
	text = "guru99 is a totally new kind of learning experience."
	tokens = word_tokenize(text)
	lemma_function = WordNetLemmatizer()
	for token, tag in pos_tag(tokens):
		lemma = lemma_function.lemmatize(token, tag_map[tag[0]])
		print(token, "=>", lemma)

Παραγωγή:

guru99 => guru99
is => be
totally => totally
new => new
kind => kind
of => of
learning => learn
experience => experience
. => .

Code Επεξήγηση:

  • Το πρόγραμμα ανάγνωσης corpus wordnet εισάγεται και το WordNetLemmatizer εισάγεται από το wordnet.
  • Η ετικέτα Word tokenize και η ετικέτα μερών λόγου εισάγονται από το nltk και το Default Dictionary από συλλογές.
  • Δημιουργείται ένα λεξικό όπου το πρώτο γράμμα του pos_tag είναι το κλειδί, το οποίο αντιστοιχίζεται στην τιμή από το λεξικό wordnet.
  • Το κείμενο γράφεται και μετατρέπεται σε token, και το αντικείμενο lemma_function δημιουργείται για χρήση μέσα στον βρόχο.
  • Ο βρόχος εκτελείται και η συνάρτηση lemmatize δέχεται δύο ορίσματα: το διακριτικό και έναν χάρτηping του pos_tag με την τιμή wordnet.

Python Η λημματοποίηση έχει στενή σχέση με την Λεξικό WordNet, επομένως είναι απαραίτητο να μελετήσουμε αυτό το θέμα στη συνέχεια.

Συχνές Ερωτήσεις

Το stemmer του Porter είναι η κλάση PorterStemmer του NLTK. Εφαρμόζει την επιθηματική strip.ping κανόνες από τον αλγόριθμο του Martin Porter του 1980 για να ανάγει τις αγγλικές λέξεις στη ρίζα τους, έτσι ώστε οι λέξεις «waiting», «waited» και «waits» να γίνονται όλα «wait».

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

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

Το NLTK παρέχει το PorterStemmer (και άλλα stemmers όπως το Snowball) για την δημιουργία stemming και το WordNetLemmatizer για την δημιουργία stemming. Το lemmatizer βασίζεται στο λεξικό WordNet για να επιστρέψει τη σωστή βασική μορφή κάθε λέξης.

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

Τα σύγχρονα μοντέλα τεχνητής νοημοσύνης συνάγουν αυτόματα τα συμφραζόμενα, αλλά το WordNetLemmatizer του NLTK χρειάζεται μια ετικέτα μέρους του λόγου για να αποσαφηνίσει την έννοια. Η παροχή αυτής της ετικέτας του επιτρέπει να επιλέξει το σωστό λήμμα, για παράδειγμα μετατρέποντας τη λέξη «μάθηση» σε «εκμάθηση» όταν επισημαίνεται ως ρήμα.

Μια λέξη μπορεί να είναι ουσιαστικό ή ρήμα με διαφορετικά λήμματα. Χωρίς ετικέτα μέρους του λόγου, το WordNetLemmatizer υποθέτει ότι υπάρχει ουσιαστικό. Η εισαγωγή της σωστής ετικέτας, όπως ρήμα ή επίθετο, δίνει τη σωστή βασική μορφή.

Όχι. Η ρίζα των επιθημάτων crops γίνεται μόνο crops, επομένως το «studies» γίνεται «studi» και το «cries» γίνεται «cri», οι οποίες δεν είναι έγκυρες λέξεις. Η λημματοποίηση, αντίθετα, επιστρέφει πάντα μια πραγματική λέξη λεξικού όπως «study».

Συνοψίστε αυτήν την ανάρτηση με: