Stemming nedir?
Stemming, kelimeler için bir tür normalleştirmedir. Normalleştirme, bir cümledeki bir dizi kelimenin aramasını kısaltmak için bir diziye dönüştürüldüğü bir tekniktir. Aynı anlama sahip olan ancak bağlama veya cümleye göre bazı farklılıklar gösteren kelimeler normalleştirilir.
Başka bir deyişle, bir kök kelime vardır, ancak aynı kelimelerin birçok çeşidi vardır. Örneğin, kök kelime "ye" ve varyasyonları "yiyor, yemek, yenen ve buna benzer" şeklindedir. Aynı şekilde, Stemming'in yardımıyla, herhangi bir varyasyonun kök kelimesini bulabiliriz.
Örneğin
He was riding.He was taking the ride.
Yukarıdaki iki cümlede anlam aynıdır, yani geçmişte binicilik aktivitesi. Bir insan, her iki anlamın da aynı olduğunu kolayca anlayabilir. Ancak makineler için her iki cümle de farklıdır. Böylece onu aynı veri satırına dönüştürmek zorlaştı. Aynı veri setini sağlamazsak, makine tahmin edemez. Bu nedenle, makine öğrenimine yönelik veri kümesini hazırlamak için her bir kelimenin anlamını farklılaştırmak gerekir. Ve burada kök ayırma, aynı türdeki verileri kök kelimesini alarak kategorilere ayırmak için kullanılır.
Bunu bir Python programı ile uygulayalım.NLTK'nın "PorterStemmer" adında bir algoritması var. Bu algoritma, simge haline getirilmiş kelime listesini kabul eder ve onu kök kelimeye dönüştürür.
Stemming'i anlamak için program
from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)
Çıktı :
waitwaitwaitwait
Kod Açıklaması:
- NLTk'de ithal edilen bir stem modülü var. Tam modülü içe aktarırsanız, program binlerce satır kod içerdiği için ağırlaşır. Yani tüm kök modülünden yalnızca "PorterStemmer" i içe aktardık.
- Aynı kelimenin varyasyon verilerinin sahte bir listesini hazırladık.
- Nltk.stem.porter.PorterStemmer sınıfına ait bir nesne oluşturulur.
- Ayrıca "for" döngüsünü kullanarak tek tek PorterStemmer'a ilettik. Son olarak, listede bahsedilen her kelimenin çıktı kök kelimesini aldık.
Yukarıdaki açıklamadan, kök bulmanın, verilerdeki fazlalığı ve aynı kelimedeki varyasyonları ortadan kaldırdığı için önemli bir ön işleme adımı olarak kabul edildiği sonucuna varılabilir. Sonuç olarak, daha iyi makine eğitimine yardımcı olacak veriler filtrelenir.
Şimdi tam bir cümle geçiriyoruz ve bir çıktı olarak davranışını kontrol ediyoruz.
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)
Çıktı:
helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite
Kod Açıklama
- Paket PorterStemer, modül gövdesinden içe aktarılır
- Cümlenin ve kelimelerin simge haline getirilmesi için paketler içe aktarılır
- Bir sonraki adımda belirtilecek bir cümle yazılır.
- Bu adımda kelime belirtme işlemi uygulanır.
- Burada PorterStemmer için bir nesne oluşturulur.
- Döngü çalıştırılır ve her bir kelimenin köklenmesi kod satırı 5'te oluşturulan nesne kullanılarak yapılır.
Sonuç:
Stemming bir veri ön işleme modülüdür. İngiliz dili, tek bir kelimenin birçok çeşidine sahiptir. Bu varyasyonlar, makine öğrenimi eğitiminde ve tahmininde belirsizlik yaratır. Başarılı bir model oluşturmak için, bu tür kelimeleri filtrelemek ve kök oluşturmayı kullanarak aynı türde sıralı verilere dönüştürmek çok önemlidir. Ayrıca, bu, normalleştirme olarak da bilinen gereksiz verilerin kaldırılması ve bir cümleden satır verileri elde etmek için önemli bir tekniktir.
Lemmatizasyon nedir?
Lemmatizasyon, bir kelimenin anlamına bağlı olarak lemmayı bulmanın algoritmik sürecidir. Lemmatizasyon genellikle çekimsel sonları kaldırmayı amaçlayan kelimelerin morfolojik analizini ifade eder. Lemma olarak bilinen bir kelimenin temel veya sözlük biçimini döndürmeye yardımcı olur. NLTK Lemmatizasyon yöntemi, WorldNet'in yerleşik morf işlevine dayanmaktadır. Metin ön işleme, hem kök ayırmayı hem de sözcük ayırmayı içerir. Çoğu insan bu iki terimi kafa karıştırıcı buluyor. Bazıları bunlara aynı muamelede bulunur, ancak ikisi arasında bir fark vardır. Aşağıdaki nedenden dolayı lemmatizasyon birincisine tercih edilir.
Lemmatizasyon neden Stemming'den daha iyidir?
Kök bulma algoritması, son eki kelimeden keserek çalışır. Daha geniş anlamda, kelimenin başlangıcını veya sonunu keser.
Aksine, Lemmatizasyon daha güçlü bir işlemdir ve kelimelerin morfolojik analizini dikkate alır. Tüm çekim biçimlerinin temel formu olan lemmayı döndürür. Sözlükler oluşturmak ve kelimenin doğru biçimini aramak için derinlemesine dil bilgisi gereklidir. Kök oluşturma genel bir işlemken, lemmatizasyon sözlükte uygun formun aranacağı akıllı bir işlemdir. Bu nedenle, lemmatizasyon, daha iyi makine öğrenimi özelliklerinin oluşturulmasına yardımcı olur.
Lemmatizasyon ve Kök Oluşturmayı ayırt etmek için kod
Kökten kodlama
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)))
Çıktı:
Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri
Lemmatizasyon kodu
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)))
Çıktı:
Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry
Çıktının tartışılması:
Çalışmalar ve çalışmalar için kök oluşturmaya bakarsanız, çıktı aynıdır (studi) ancak lemmatizer, her iki token için çalışmalar için çalışma ve çalışma için çalışma için farklı lemma sağlar. Bu yüzden makineyi eğitmek için özellik seti yapmamız gerektiğinde, lemmatizasyon tercih edilirse harika olur.
Lemmatizer Kullanım Örneği:
Lemmatizer, metin belirsizliğini en aza indirir. Bisiklet veya bisiklet gibi örnek kelimeler, temel kelime bisiklete dönüştürülür. Temel olarak, aynı anlama sahip ancak farklı gösterime sahip tüm kelimeleri temel formlarına dönüştürecektir. Verilen metindeki kelime yoğunluğunu azaltır ve eğitim makinesi için doğru özelliklerin hazırlanmasına yardımcı olur. Verileri daha temiz, makine öğrenimi modeliniz daha akıllı ve doğru olacaktır. Lemmatizer ayrıca bellek ve hesaplama maliyetinden tasarruf sağlar.
Python'da Wordnet Lemmatizasyon ve POS Etiketlemesinin kullanımını gösteren Gerçek Zamanlı örnek
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)
Kod Açıklama
- İlk olarak, korpus okuyucu wordnet içe aktarılır.
- WordNetLemmatizer, wordnet'ten içe aktarılır
- Kelime belirteci ve konuşma etiketinin bölümleri nltk'den içe aktarılır
- Varsayılan Sözlük koleksiyonlardan içe aktarılır
- Sözlük, pos_tag (ilk harf) değerlerinin wordnet sözlüğündeki değerle eşlenen anahtar değerler olduğu yerde oluşturulur. Daha sonra döngüde kullanacağımız için tek ilk harfi aldık.
- Metin yazılır ve simge haline getirilir.
- Döngü içinde kullanılacak nesne lemma_function oluşturulur
- Döngü çalıştırılır ve lemmatize, biri token ve diğeri wordnet değerine sahip pos_tag eşlemesidir.
Çıktı:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
Lemmatizasyonun wordnet sözlüğü ile yakın bir ilişkisi vardır, bu nedenle bu konuyu çalışmak çok önemlidir, bu yüzden bunu bir sonraki konu olarak tutuyoruz.