Mikä on Stemming?
Stemming on eräänlainen sanojen normalisointi. Normalisointi on tekniikka, jossa joukko sanan lauseita muunnetaan jaksoksi lyhentämään sen hakua. Sanat, joilla on sama merkitys, mutta joilla on jonkin verran vaihtelua kontekstin tai lauseen mukaan, normalisoidaan.
Toisessa sanassa on yksi juurisana, mutta samoista sanoista on monia muunnelmia. Esimerkiksi perussana on "syö" ja sen muunnelmat ovat "syö, syö, syödään ja niin edelleen". Samalla tavalla voimme Stemmingin avulla löytää minkä tahansa muunnelman juurisanan.
Esimerkiksi
He was riding.He was taking the ride.
Edellä olevissa kahdessa lauseessa merkitys on sama, ts. Ratsastustoiminta aikaisemmin. Ihminen voi helposti ymmärtää, että molemmat merkitykset ovat samat. Mutta koneille molemmat lauseet ovat erilaiset. Siksi oli vaikea muuttaa sitä samaksi tietoriviksi. Jos emme tarjoa samaa tietojoukkoa, kone ei pysty ennustamaan. Joten on tarpeen erottaa kunkin sanan merkitys, jotta aineisto valmistetaan koneoppimista varten. Ja tässä stemmingiä käytetään luokittelemaan samantyyppiset tiedot saamalla sen juurisana.
Toteutetaan tämä Python-ohjelmalla. NLTK: lla on algoritmi nimeltä "PorterStemmer". Tämä algoritmi hyväksyy merkityn sanan luettelon ja johtaa sen juurisanaan.
Ohjelma Stemmingin ymmärtämiseksi
from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)
Tuotos :
waitwaitwaitwait
Koodin selitys:
- NLTk: ssä on varsimoduuli, joka tuodaan. Jos tuot koko moduulin, ohjelma muuttuu raskaaksi, koska se sisältää tuhansia koodirivejä. Joten koko varsimoduulista tuotiin vain "PorterStemmer".
- Valmistelimme nuken luettelon saman sanan vaihtelutiedoista.
- Luodaan objekti, joka kuuluu luokkaan nltk.stem.porter.PorterStemmer.
- Lisäksi välitimme sen PorterStemmerille yksitellen käyttäen "for" -silmukkaa. Lopuksi saimme lähtösanan jokaisesta luettelossa mainitusta sanasta.
Yllä olevasta selityksestä voidaan myös päätellä, että juonittelua pidetään tärkeänä esikäsittelyvaiheena, koska se poisti tietojen redundanssin ja saman sanan muunnelmat. Tämän seurauksena tiedot suodatetaan, mikä auttaa koneen koulutuksen parantamisessa.
Annamme nyt täydellisen lauseen ja tarkistamme sen käyttäytymisen tuotoksena.
Ohjelmoida:
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)
Tuotos:
helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite
Koodin selitys
- Paketti PorterStemer tuodaan moduulin varresta
- Pakkaukset lauseiden ja sanojen merkitsemistä varten tuodaan
- Kirjoitetaan lause, joka merkitään seuraavassa vaiheessa.
- Word-tokenointi toteutetaan tässä vaiheessa.
- Täällä luodaan objekti PorterStemmerille.
- Silmukka ajetaan ja jokaisen sanan peruminen tehdään koodirivillä 5 luodulla objektilla
Päätelmä:
Stemming on tietojen esikäsittelymoduuli. Englannin kielellä on monia muunnelmia yhdestä sanasta. Nämä vaihtelut aiheuttavat epäselvyyttä koneoppimisen koulutuksessa ja ennakoinnissa. Onnistuneen mallin luominen on välttämätöntä suodattaa tällaiset sanat ja muuntaa saman tyyppiseksi sekvensoiduksi dataksi stemmingin avulla. Tämä on myös tärkeä tekniikka rivitietojen saamiseksi lausejoukosta ja turhien tietojen poistaminen, joka tunnetaan myös nimellä normalisointi.
Mikä on Lemmatization?
Lemmatization on algoritminen prosessi sanan lemman löytämiseksi niiden merkityksestä riippuen. Lemmatization viittaa yleensä sanojen morfologiseen analyysiin, jonka tarkoituksena on poistaa taivutuspäätteet. Se auttaa palauttamaan sanan perus- tai sanakirjan muodon, joka tunnetaan nimellä lemma. NLTK Lemmatization -menetelmä perustuu WorldNetin sisäänrakennettuun morph-toimintoon. Tekstin esikäsittely sisältää sekä stemming että lemmatization. Monien mielestä nämä kaksi termiä ovat hämmentäviä. Jotkut kohtelevat näitä samalla tavalla, mutta molempien välillä on ero. Lemmatisaatio on edullinen edelliseen nähden seuraavasta syystä.
Miksi Lemmatization on parempi kuin Stemming?
Alkuperäinen algoritmi toimii leikkaamalla loppuliite sanasta. Laajemmassa mielessä leikkaa joko sanan alun tai lopun.
Päinvastoin, Lemmatization on tehokkaampi operaatio, ja siinä otetaan huomioon sanojen morfologinen analyysi. Se palauttaa lemman, joka on kaikkien taivutusmuotojensa perusmuoto. Sanakirjojen luomiseen ja sanan oikean muodon etsimiseen tarvitaan syvällistä kielitaitoa. Stemming on yleinen operaatio, kun taas lemmatization on älykäs operaatio, jossa oikea muoto tarkastellaan sanakirjassa. Siksi lemmatisaatio auttaa muodostamaan parempia koneoppimisominaisuuksia.
Koodi erottaa Lemmatization ja Stemming
Alkuperäinen koodi
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)))
Tuotos:
Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri
Lemmatization-koodi
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)))
Tuotos:
Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry
Keskustelu tuotoksesta:
Jos katsot johtuvan opinnoista ja opiskelusta, tulos on sama (studi), mutta lemmatizer tarjoaa erilaisen lemman sekä opiskeluun tarkoitetuille merkinnöille että opiskeluun. Joten kun meidän on tehtävä ominaisuus asetettu kouluttamaan konetta, olisi hienoa, jos lemmalisointi on suositeltavaa.
Lemmatizerin käyttötapa:
Lemmatizer minimoi tekstin epäselvyyden. Esimerkkisanat, kuten polkupyörä tai polkupyörät, muunnetaan perussanaksi polkupyörä. Pohjimmiltaan se muuntaa kaikki sanat, joilla on sama merkitys, mutta erilaiset esitykset, niiden perusmuotoon. Se vähentää sanatiheyttä annetussa tekstissä ja auttaa valmistelemaan tarkat ominaisuudet harjoituslaitteelle. Puhtaampi data, sitä älykkäämpi ja tarkempi koneoppimismallisi on. Lemmatizerwill säästää myös muistia ja laskennallisia kustannuksia.
Reaaliaikainen esimerkki Wordnet Lemmatizationin ja POS-koodauksen käytöstä Pythonissa
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)
Koodin selitys
- Ensinnäkin tuodaan korpuslukijan sanaverkko.
- WordNetLemmatizer tuodaan wordnetistä
- Word tokenize sekä puhetunnisteen osat tuodaan nltk: stä
- Oletussanakirja tuodaan kokoelmista
- Sanakirja luodaan missä pos_tag (ensimmäinen kirjain) ovat avainarvoja, joiden arvot yhdistetään wordnet-sanakirjan arvoon. Olemme ottaneet ainoan ensimmäisen kirjaimen, koska käytämme sitä myöhemmin silmukassa.
- Teksti kirjoitetaan ja se on tokenoitu.
- Luo objektin lemma_function, jota käytetään silmukan sisällä
- Silmukka suoritetaan ja lemmatize vie kaksi argumenttia, joista toinen on merkki ja toinen on pos_tag-kartoitus wordnet-arvolla.
Tuotos:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
Lemmatizationilla on läheinen suhde wordnet-sanakirjaan, joten on välttämätöntä tutkia tätä aihetta, joten pidämme tätä seuraavana aiheena