Какво е Stemming?
Стемингът е вид нормализация на думите. Нормализирането е техника, при която набор от думи в изречението се преобразуват в последователност, за да се съкрати неговото търсене. Думите, които имат същото значение, но имат някои вариации според контекста или изречението, се нормализират.
С друга дума има една коренна дума, но има много варианти на едни и същи думи. Например, коренната дума е „ям“ и нейните вариации са „яде, яде, яде и така“. По същия начин, с помощта на Stemming, можем да намерим основната дума на всякакви вариации.
Например
He was riding.He was taking the ride.
В горните две изречения значението е същото, т.е. езда в миналото. Човек може лесно да разбере, че и двете значения са еднакви. Но за машините и двете изречения са различни. По този начин стана трудно да го конвертирате в същия ред с данни. В случай, че не предоставим същия набор от данни, тогава машината не успява да предвиди. Затова е необходимо да се разграничи значението на всяка дума, за да се подготви набора от данни за машинно обучение. И тук stemming се използва за категоризиране на един и същи тип данни чрез получаване на коренната им дума.
Нека да приложим това с програма на Python. NLTK има алгоритъм, наречен "PorterStemmer". Този алгоритъм приема списъка с токенизирана дума и я поставя в основна дума.
Програма за разбиране на стеминга
from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)
Изход :
waitwaitwaitwait
Обяснение на кода:
- В NLTk има стволов модул, който се импортира. Ако импортирате целия модул, тогава програмата става тежка, тъй като съдържа хиляди редове кодове. Така че от целия модул на ствола импортирахме само „PorterStemmer“.
- Подготвихме фиктивен списък с данни за вариации на същата дума.
- Създава се обект, който принадлежи към клас nltk.stem.porter.PorterStemmer.
- Освен това го предадохме на PorterStemmer един по един, използвайки цикъл "for". И накрая, получихме изходна коренна дума за всяка дума, спомената в списъка.
От горното обяснение може също така да се заключи, че извличането се счита за важна стъпка за предварителна обработка, тъй като премахва излишъка в данните и вариациите в същата дума. В резултат на това данните се филтрират, което ще помогне за по-добро обучение на машината.
Сега предаваме пълно изречение и проверяваме поведението му като изход.
Програма:
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)
Изход:
helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite
Обяснение на кода
- Пакетът PorterStemer се импортира от ствола на модула
- Внасят се пакети за токенизиране на изречение, както и думи
- Написва се изречение, което трябва да бъде токенизирано в следващата стъпка.
- В тази стъпка е приложена токенизация на думи.
- Тук е създаден обект за PorterStemmer.
- Цикълът се изпълнява и извличането на всяка дума се извършва с помощта на обекта, създаден в кодовия ред 5
Заключение:
Stemming е модул за предварителна обработка на данни. Английският език има много варианти на една дума. Тези вариации създават неяснота в обучението и предвиждането на машинно обучение. За да създадете успешен модел, е жизненоважно да филтрирате такива думи и да конвертирате към един и същи тип секвенирани данни, като използвате стволови. Също така, това е важна техника за получаване на редови данни от набор от изречения и премахване на излишни данни, известни също като нормализиране.
Какво е лематизация?
Лематизацията е алгоритмичният процес за намиране на лемата на думата в зависимост от тяхното значение. Лематизацията обикновено се отнася до морфологичния анализ на думите, който има за цел да премахне флективните окончания. Помага за връщане на основната или речниковата форма на дума, която е известна като лема. Методът за лематизация на NLTK се основава на вградената морф функция на WorldNet. Предварителната обработка на текста включва както извличане, така и лематизация. Много хора намират двата термина за объркващи. Някои ги третират като еднакви, но има разлика между двете. Лематизацията е предпочитана пред първата поради причината по-долу.
Защо лематизацията е по-добра от Stemming?
Алгоритъмът за извличане работи чрез изрязване на суфикса от думата. В по-широк смисъл отрязва началото или края на думата.
Напротив, лематизацията е по-мощна операция и отчита морфологичния анализ на думите. Той връща лемата, която е основната форма на всички нейни флективни форми. За създаване на речници и търсене на правилната форма на думата са необходими задълбочени езикови познания. Стемингът е обща операция, докато лематизацията е интелигентна операция, при която правилната форма ще се търси в речника. Следователно лематизацията помага за формирането на по-добри характеристики на машинното обучение.
Код за разграничаване между лематизация и зареждане
Код за извличане
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)))
Изход:
Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri
Лематизационен код
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)))
Изход:
Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry
Обсъждане на резултатите:
Ако търсите произтичащи от проучвания и изучаване, изходът е същият (studi), но лематизаторът предоставя различна лема както за изучаване на жетони за изучаване, така и за учене. Така че, когато трябва да направим набор от функции за обучение на машина, би било чудесно, ако се предпочита лематизацията.
Случай на употреба на Lemmatizer:
Лематизаторът минимизира двусмислието на текста. Примерни думи като велосипед или велосипеди се преобразуват в основна дума велосипед. По принцип той ще преобразува всички думи с еднакво значение, но различно представяне в основната им форма. Той намалява плътността на думите в дадения текст и помага при подготовката на точните характеристики на машината за обучение. По-чисти са данните, толкова по-интелигентен и точен ще бъде вашият модел за машинно обучение. Lemmatizerwill също спестява памет, както и изчислителни разходи.
Пример в реално време, показващ използването на Wordnet Lemmatization и POS Tagging в 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)
Обяснение на кода
- Първо, импортира се wordnet на корпуса за четене на корпус.
- WordNetLemmatizer се импортира от wordnet
- Word tokenize, както и маркер на части от речта се импортират от nltk
- Речникът по подразбиране се импортира от колекции
- Речникът се създава, където pos_tag (първа буква) са ключовите стойности, чиито стойности са картографирани със стойността от речника на wordnet. Взехме единствената първа буква, тъй като ще я използваме по-късно в цикъла.
- Текстът е написан и е токенизиран.
- Създава се обект lemma_function, който ще се използва вътре в цикъла
- Цикълът се изпълнява и lemmatize ще вземе два аргумента, единият е маркер, а другият е картографиране на pos_tag със стойност на wordnet.
Изход:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
Лематизацията има тясна връзка с речника на wordnet, така че е от съществено значение да се изучи тази тема, затова ние запазваме това като следващата