Kaj je zatiranje?
Zarezovanje je neke vrste normalizacija besed. Normalizacija je tehnika, pri kateri se niz besed v stavku pretvori v zaporedje, da skrajša njegovo iskanje. Besede, ki imajo enak pomen, vendar imajo nekatere razlike glede na kontekst ali stavek, so normalizirane.
Z drugo besedo je ena korenska beseda, vendar obstaja veliko različic istih besed. Na primer, korenska beseda je "jesti" in njene različice so "jesti, jesti, jesti in podobno". Na enak način lahko s pomočjo Stemminga najdemo korensko besedo vseh različic.
Na primer
He was riding.He was taking the ride.
V zgornjih dveh stavkih je pomen enak, torej vožnja v preteklosti. Človek zlahka razume, da sta oba pomena enaka. Toda pri strojih sta oba stavka različna. Tako ga je postalo težko pretvoriti v isto podatkovno vrstico. V primeru, da ne zagotovimo enakega nabora podatkov, naprava ne uspe predvideti. Zato je treba razlikovati pomen vsake besede za pripravo nabora podatkov za strojno učenje. In tukaj se izvor uporablja za kategorizacijo iste vrste podatkov z pridobivanjem njihove korenske besede.
Izvedimo to s programom Python. NLTK ima algoritem, imenovan "PorterStemmer". Ta algoritem sprejme seznam tokeniziranih besed in ga postavi v korensko besedo.
Program za razumevanje zatiranja
from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)
Izhod :
waitwaitwaitwait
Razlaga kode:
- V NLTk je osnovni modul, ki je uvožen. Če uvozite celoten modul, potem program postane težak, saj vsebuje na tisoče vrstic kod. Tako smo iz celotnega modula stebla uvozili samo "PorterStemmer."
- Pripravili smo navidezen seznam variacijskih podatkov iste besede.
- Ustvari se objekt, ki spada v razred nltk.stem.porter.PorterStemmer.
- Nadalje smo ga posredovali PorterStemmerju po vrsti z zanko "for". Na koncu smo dobili izhodno korensko besedo vsake besede, omenjene na seznamu.
Iz zgornje razlage je mogoče tudi sklepati, da je izhajanje pomemben korak predobdelave, ker je odstranilo odvečnost podatkov in spremembe iste besede. Posledično se podatki filtrirajo, kar bo pripomoglo k boljšemu strojnemu usposabljanju.
Zdaj podajamo celoten stavek in kot izhod preverjamo njegovo vedenje.
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)
Izhod:
helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite
Razlaga kode
- Paket PorterStemer se uvozi iz stebla modula
- Uvoženi so paketi za tokenizacijo stavka in besed
- Napisan je stavek, ki ga bomo označili v naslednjem koraku.
- V tem koraku se izvaja tokenizacija besed.
- Tu je ustvarjen objekt za PorterStemmer.
- Zanka se zažene in vsaka beseda izvede z uporabo predmeta, ustvarjenega v vrstici kode 5
Zaključek:
Stemming je modul za predhodno obdelavo podatkov. Angleški jezik ima veliko različic ene same besede. Te razlike ustvarjajo dvoumnost pri usposabljanju in napovedovanju strojnega učenja. Če želite ustvariti uspešen model, je nujno filtrirati takšne besede in pretvoriti v isto vrsto zaporednih podatkov z uporabo izvornih podatkov. To je tudi pomembna tehnika za pridobivanje podatkov vrstic iz nabora stavkov in odstranjevanje odvečnih podatkov, znanih tudi kot normalizacija.
Kaj je lematizacija?
Lematizacija je algoritemski postopek iskanja leme besede glede na njihov pomen. Lematizacija se običajno nanaša na morfološko analizo besed, katere namen je odstraniti pregibne končnice. Pomaga pri vrnitvi osnovne ali slovarske oblike besede, ki je znana kot lema. Metoda lematizacije NLTK temelji na vgrajeni funkciji morfa WorldNet. Predobdelava besedila vključuje tako izvorno kot lematizacijo. Marsikomu sta oba izraza zmedena. Nekateri jih obravnavajo enako, vendar je med obema razlika. Iz spodnjega razloga je prednostna lematizacija pred prvo.
Zakaj je lematizacija boljša od matiranja?
Zarezovalni algoritem deluje tako, da izrežemo pripono besede. V širšem pomenu reže bodisi začetek bodisi konec besede.
Nasprotno, lematizacija je močnejša operacija in upošteva morfološko analizo besed. Vrne lemo, ki je osnovna oblika vseh njegovih pregibnih oblik. Za ustvarjanje slovarjev in iskanje ustrezne oblike besede je potrebno poglobljeno jezikovno znanje. Zarezovanje je splošna operacija, lematizacija pa je inteligentna operacija, pri kateri bo ustrezna oblika prikazana v slovarju. Zato lematizacija pomaga pri oblikovanju boljših lastnosti strojnega učenja.
Koda za razlikovanje med lematizacijo in zarezovanjem
Zakonska koda
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)))
Izhod:
Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri
Lematizacijska koda
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)))
Izhod:
Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry
Razprava o rezultatih:
Če iščete študij in študij, je izhod enak (studi), vendar lematizator ponuja različno lemo tako za študij žetonov za študij kot za študij za študij. Torej, ko moramo narediti nabor funkcij za treniranje stroja, bi bilo super, če bi dali prednost lematizaciji.
Primer uporabe lematizerja:
Lemmatizer zmanjša dvoumnost besedila. Primer besede, kot je kolo ali kolo, se pretvori v osnovno besedo kolo. V bistvu bo pretvoril vse besede, ki imajo enak pomen, a drugačno predstavitev, v njihovo osnovno obliko. Zmanjša gostoto besed v danem besedilu in pomaga pri pripravi natančnih lastnosti za vadbeni stroj. Čistejši bodo podatki, bolj inteligenten in natančen bo vaš model strojnega učenja. Lemmatizer bo prihranil tudi spomin in računske stroške.
Primer v realnem času, ki prikazuje uporabo lematizacije Wordnet in označevanja POS v Pythonu
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)
Razlaga kode
- Najprej je uvožen wordnet bralnika korpusa.
- WordNetLemmatizer je uvožen iz wordneta
- Besede tokenize in deli govora so uvoženi iz nltk
- Privzeti slovar se uvozi iz zbirk
- Ustvari se slovar, kjer so pos_tag (prva črka) ključne vrednosti, katerih vrednosti so preslikane z vrednostjo iz slovarja wordnet. Vzeli smo edino prvo črko, saj jo bomo uporabili kasneje v zanki.
- Besedilo je napisano in je tokenizirano.
- Ustvari se objekt lemma_function, ki bo uporabljen znotraj zanke
- Loop se zažene in lemmatize bo vzel dva argumenta, eden je žeton, drugi pa preslikava pos_tag z vrednostjo wordnet.
Izhod:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
Lematizacija je v tesni povezavi s slovarjem wordnet, zato je nujno preučiti to temo, zato jo ohranjamo kot naslednjo temo