Hva er Stemming?
Stemming er en slags normalisering av ord. Normalisering er en teknikk der et sett med ord i en setning konverteres til en sekvens for å forkorte oppslaget. Ordene som har samme betydning, men som har en viss variasjon i henhold til kontekst eller setning, normaliseres.
I et annet ord er det ett rotord, men det er mange varianter av de samme ordene. For eksempel er grunnordet "spise" og det er variasjoner som "spiser, spiser, spises og sånn". På samme måte kan vi, ved hjelp av Stemming, finne rotordet til eventuelle varianter.
For eksempel
He was riding.He was taking the ride.
I de to setningene ovenfor er betydningen den samme, dvs. rideaktivitet i fortiden. Et menneske kan lett forstå at begge betydninger er like. Men for maskiner er begge setningene forskjellige. Dermed ble det vanskelig å konvertere den til den samme dataraden. I tilfelle vi ikke gir det samme datasettet, mislykkes maskinen. Så det er nødvendig å skille betydningen av hvert ord for å forberede datasettet for maskinlæring. Og her brukes stemming til å kategorisere samme type data ved å få grunnordet.
La oss implementere dette med et Python-program. NLK har en algoritme som heter "PorterStemmer". Denne algoritmen godtar listen over tokeniserte ord og stammer den til rotord.
Program for å forstå Stemming
from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)
Utgang :
waitwaitwaitwait
Kode Forklaring:
- Det er en stammemodul i NLTk som importeres. Hvis hvis du importerer hele modulen, blir programmet tungt siden det inneholder tusenvis av koder. Så fra hele stammemodulen importerte vi bare "PorterStemmer."
- Vi utarbeidet en dummy-liste over variasjonsdata for det samme ordet.
- Det opprettes et objekt som tilhører klasse nltk.stem.porter.PorterStemmer.
- Videre sendte vi den til PorterStemmer en etter en ved hjelp av "for" loop. Til slutt fikk vi utgangsordord for hvert ord nevnt i listen.
Fra forklaringen ovenfor kan det også konkluderes med at stemming betraktes som et viktig forbehandlingstrinn fordi det fjernet redundans i dataene og variasjoner i det samme ordet. Som et resultat blir data filtrert som vil hjelpe deg med bedre maskinopplæring.
Nå passerer vi en fullstendig setning og sjekker for oppførselen som utdata.
Program:
from nltk.stem import PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="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)
Produksjon:
helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite
Kode Forklaring
- Pakke PorterStemer importeres fra modulstammen
- Pakker for tokenisering av setning så vel som ord importeres
- Det skrives en setning som skal tokeniseres i neste trinn.
- Word tokenization er implementert i dette trinnet.
- Her opprettes et objekt for PorterStemmer.
- Loop kjøres og stemming av hvert ord gjøres ved hjelp av objektet opprettet i kodelinjen 5
Konklusjon:
Stemming er en databehandlingsmodul. Det engelske språket har mange varianter av et enkelt ord. Disse variasjonene skaper tvetydighet i maskinlæringstrening og spådommer. For å lage en vellykket modell er det viktig å filtrere slike ord og konvertere til samme type sekvenserte data ved hjelp av stemming. Dette er også en viktig teknikk for å få raddata fra et setningssett og fjerning av overflødige data, også kjent som normalisering.
Hva er lemmatisering?
Lemmatisering er den algoritmiske prosessen for å finne lemmaet til et ord avhengig av deres betydning. Lemmatisering refererer vanligvis til morfologisk analyse av ord, som tar sikte på å fjerne bøyningsendelser. Det hjelper med å returnere basen eller ordboksformen til et ord, som er kjent som lemmaet. NLTK Lemmatiseringsmetoden er basert på WorldNets innebygde morph-funksjon. Forbehandling av tekst inkluderer både stemming og lemmatisering. Mange synes de to begrepene er forvirrende. Noen behandler disse som de samme, men det er forskjell på disse begge. Lemmatisering foretrekkes fremfor førstnevnte på grunn av nedenstående grunn.
Hvorfor er Lemmatisering bedre enn Stemming?
Stemming algoritme fungerer ved å kutte suffikset fra ordet. I bredere forstand kutter enten begynnelsen eller slutten av ordet.
Tvert imot er lemmatisering en kraftigere operasjon, og den tar hensyn til morfologisk analyse av ordene. Den returnerer lemmaet som er grunnformen for alle dets bøyningsformer. Det kreves inngående språkkunnskaper for å lage ordbøker og se etter ordets rette form. Stemming er en generell operasjon mens lemmatisering er en intelligent operasjon der riktig form vil bli sett i ordboken. Derfor hjelper lemmatisering med å danne bedre funksjoner for maskinlæring.
Kode for å skille mellom lemmatisering og stemming
Stemming kode
import nltkfrom nltk.stem.porter import PorterStemmerporter_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)))
Produksjon:
Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri
Lemmatiseringskode
import nltkfrom nltk.stem import WordNetLemmatizerwordnet_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)))
Produksjon:
Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry
Diskusjon av utdata:
Hvis du ser stemming for studier og studier, er produksjonen den samme (studi), men lemmatizer gir forskjellige lemma for både tokens studere for studier og studere for å studere. Så når vi trenger å lage funksjonssett for å trene maskin, ville det være flott hvis lemmatisering foretrekkes.
Bruk tilfelle av Lemmatizer:
Lemmatizer minimerer tvetydighet i teksten. Eksempelord som sykkel eller sykler blir konvertert til basisordsykkel. I utgangspunktet vil det konvertere alle ord som har samme betydning, men forskjellig representasjon til baseformen. Det reduserer ordtettheten i den gitte teksten og hjelper deg med å forberede de nøyaktige funksjonene for treningsmaskinen. Renere data, jo mer intelligent og nøyaktig maskinlæringsmodellen din blir. Lemmatizer vil også spare både minne og beregningskostnader.
Sanntidseksempel som viser bruk av Wordnet Lemmatisering og POS-merking i Python
from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "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)
Kode Forklaring
- For det første importeres corpus reader wordnet.
- WordNetLemmatizer importeres fra wordnet
- Word tokenize samt deler av talemerket importeres fra nltk
- Standard ordbok importeres fra samlinger
- Ordbok opprettes der pos_tag (første bokstav) er nøkkelverdiene hvis verdier er kartlagt med verdien fra wordnet ordbok. Vi har tatt den eneste første bokstaven da vi vil bruke den senere i løkken.
- Teksten er skrevet og tokeniseres.
- Objekt lemma_function opprettes som skal brukes inne i løkken
- Loop kjøres og lemmatisering vil ta to argumenter, det ene er token og det andre er en kartlegging av pos_tag med wordnet-verdi.
Produksjon:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
Lemmatisering har et nært forhold til wordnet-ordbok, så det er viktig å studere dette emnet, så vi beholder dette som neste emne