Mi a Stemming?
A származtatás egyfajta normalizálás a szavakra. A normalizálás egy olyan technika, ahol a mondatban szereplő szavak halmazát szekvenciává alakítják, hogy lerövidítsék a keresést. Azok a szavak normalizálódnak, amelyek jelentése azonos, de a szövegkörnyezet vagy a mondat szerint némi eltérést mutat.
Egy másik szóban van egy alapszó, de ugyanazoknak a szavaknak sok változata van. Például az alapszó az "enni", és ennek variációi: "eszik, eszik, eszik és hasonlók". Ugyanígy a Stemming segítségével megtalálhatjuk az esetleges variációk gyökérszavát.
Például
He was riding.He was taking the ride.
A fenti két mondatban a jelentés megegyezik, vagyis a lovaglási tevékenység a múltban. Az ember könnyen megértheti, hogy mindkét jelentés azonos. De a gépeknél mindkét mondat különbözik. Így nehéz lett átalakítani ugyanarra az adatsorra. Ha nem ugyanazt az adatsort adjuk meg, akkor a gép nem tud megjósolni. Tehát meg kell különböztetni az egyes szavak jelentését az adatkészlet gépi tanulás előkészítéséhez. És itt a stemming segítségével azonos típusú adatokat kategorizálhatunk a gyökérszó megszerzésével.
Végezzük el ezt egy Python programmal. Az NLTK rendelkezik "PorterStemmer" nevű algoritmussal. Ez az algoritmus elfogadja a tokenizált szavak listáját, és gyökér szóvá alakítja.
Program a Stemming megértéséhez
from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)
Kimenet :
waitwaitwaitwait
Kód Magyarázat:
- Az NLTk-ben van egy importált modul. Ha a teljes modult importálja, akkor a program nehézzé válik, mivel több ezer sornyi kódot tartalmaz. Tehát a teljes szármodulból csak a "PorterStemmer" -t importáltuk.
- Előkészítettük az azonos szó variációs adatainak dummy listáját.
- Létrejön egy objektum, amely az nltk.stem.porter.PorterStemmer osztályba tartozik.
- Továbbá egyenként továbbítottuk a PorterStemmer-nek a "for" ciklus használatával. Végül megkaptuk a listában említett egyes szavak kimeneti gyökérszavát.
A fenti magyarázatból arra is lehet következtetni, hogy a származtatást fontos előfeldolgozási lépésnek tekintik, mivel eltávolította az adatok redundanciáját és ugyanazon szó variációit. Ennek eredményeként az adatok kiszűrődnek, ami elősegíti a jobb gépi kiképzést.
Most egy teljes mondatot adunk meg, és kimenetként ellenőrizzük a viselkedését.
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)
Kimenet:
helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite
Kód Magyarázat
- A PorterStemer csomag a modul szárából származik
- A mondatok és a szavak tokenizálására szolgáló csomagok importálásra kerülnek
- Olyan mondatot írnak, amelyet a következő lépésben be kell kódolni.
- A Word tokenizáció ebben a lépésben valósul meg.
- Itt jön létre egy objektum a PorterStemmer számára.
- A hurok lefut, és az egyes szavak szúrása az 5. kódsorban létrehozott objektum segítségével történik
Következtetés:
A Stemming egy adat-előfeldolgozó modul. Az angol nyelv egyetlen változatának sok változata van. Ezek a variációk kétértelműséget okoznak a gépi tanulás és az előrejelzés terén. A sikeres modell létrehozásához elengedhetetlen az ilyen szavak szűrése és azonos típusú szekvenált adatokká való konvertálása a stemming használatával. Ez szintén fontos technika a sorok adatainak megszerzéséhez egy mondatkészletből és a felesleges adatok eltávolításának, más néven normalizálásnak.
Mi az a Lemmatization?
A lemmatizálás egy szó lemma megtalálásának algoritmikus folyamata, jelentésüktől függően. A lemmatizáció általában a szavak morfológiai elemzésére utal, amelynek célja az inflexiós végződések eltávolítása. Segít a szó alap- vagy szótári alakjának visszaadásában, amely lemma néven ismert. Az NLTK Lemmatization módszer a WorldNet beépített morph függvényén alapszik. A szöveges előfeldolgozás magában foglalja mind a származtatást, mind a lemmatizálást. Sokan zavarosnak találják a két kifejezést. Egyesek ugyanúgy kezelik ezeket, de van különbség mindkettő között. A lemmatizációt előnyben részesítik az előbbivel szemben az alábbi ok miatt.
Miért jobb a Lemmatization, mint a Stemming?
A származtatott algoritmus úgy működik, hogy kivágja a szó utótagját. Tágabb értelemben a szó elejét vagy végét vágja.
Éppen ellenkezőleg, a Lemmatization egy erőteljesebb művelet, amely figyelembe veszi a szavak morfológiai elemzését. Visszaadja a lemmát, amely minden inflexiós alakjának alapformája. A szótárak létrehozásához és a szó megfelelő alakjának megkereséséhez mélyreható nyelvtudásra van szükség. A származtatás általános művelet, míg a lemmatizálás intelligens művelet, ahol a megfelelő formát a szótárban keresik. Ezért a lemmatizálás segíti a jobb gépi tanulási funkciók kialakítását.
Kód a Lemmatization és a Stemming megkülönböztetésére
Származási kód
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)))
Kimenet:
Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri
Lemmatization kód
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)))
Kimenet:
Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry
A kimenet megbeszélése:
Ha a tanulmányokhoz és a tanuláshoz kötődik, akkor a kimenet megegyezik (studi), de a lemmatizer mind a tokenek tanulmányozásához, mind a tanuláshoz különböző jeleket kínál. Tehát amikor a gép vonatkészletére van szükségünk, nagyon jó lenne, ha a lemmatizációt részesítenénk előnyben.
A Lemmatizer használata:
A Lemmatizer minimalizálja a szöveg kétértelműségét. A példa szavakat, mint például a kerékpár vagy a kerékpár, átalakítják alapszóvá. Alapvetően minden azonos jelentésű, de eltérő ábrázolású szót átalakít az alapalakjává. Csökkenti a szó sűrűségét az adott szövegben, és elősegíti az edzőgép pontos jellemzőinek elkészítését. Tisztább az adat, annál intelligensebb és pontosabb lesz a gépi tanulási modell. A Lemmatizerwill a memóriát és a számítási költségeket is kíméli.
Valós idejű példa a Wordnet Lemmatization és POS Tagging használatáról a Pythonban
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)
Kód Magyarázat
- Először a korpuszolvasó szóhálózatát importálják.
- A WordNetLemmatizer a Wordnetből importálódik
- A Word tokenize, valamint a beszédcímke egyes részei importálva vannak az nltk-ból
- Az alapértelmezett szótár gyűjteményekből importálódik
- A szótár létrehozása ott történik, ahol a pos_tag (első betű) azok a kulcsértékek, amelyek értékei a wordnet szótár értékével vannak leképezve. Mi vettük az egyetlen első betűt, mivel később felhasználjuk a ciklusban.
- A szöveg írva van és tokenizált.
- Létrejön a lemma_function objektum, amelyet a hurok belsejében fognak használni
- A hurok lefut, és a lemmatize két argumentumot vesz fel, az egyik a token, a másik pedig a pos_tag hozzárendelése wordnet értékkel.
Kimenet:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
A Lemmatization szoros kapcsolatban áll a wordnet szótárral, ezért elengedhetetlen a téma tanulmányozása, ezért ezt tartjuk a következő témakörként