Що таке стеммінг?
Штамбування - це свого роду нормалізація для слів. Нормалізація - це техніка, коли набір слів у реченні перетворюється в послідовність, щоб скоротити його пошук. Слова, що мають однакове значення, але мають певні варіації залежно від контексту або речення, нормалізуються.
В іншому слові є одне корінне слово, але існує багато варіантів тих самих слів. Наприклад, корінне слово - «їсти», а його варіації - «їсть, їсть, їсть і тому подібне». Таким же чином, за допомогою Stemming, ми можемо знайти кореневе слово будь-яких варіацій.
Наприклад
He was riding.He was taking the ride.
У двох вищезазначених реченнях значення однакове, тобто активність верхової їзди в минулому. Людина легко може зрозуміти, що обидва значення однакові. Але для машин обидва речення різні. Таким чином, стало важко перетворити його в той самий рядок даних. Якщо ми не надаємо однаковий набір даних, машина не може передбачити. Тому необхідно розмежувати значення кожного слова, щоб підготувати набір даних до машинного навчання. І тут стемінг використовується для класифікації однотипних даних шляхом отримання їх кореневого слова.
Давайте реалізуємо це за допомогою програми 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 функції перетворення. Попередня обробка тексту включає як стемінг, так і лематизацію. Багато людей вважають ці два терміни заплутаними. Деякі ставляться до них як до однакових, але між ними є різниця. Лемматизація надається перевазі першій із наведених нижче причин.
Чому лемматизація краща за стеммінг?
Алгоритм стеммінга працює, вирізаючи суфікс із слова. У більш широкому розумінні скорочує або початок, або кінець слова.
Навпаки, лемматизація є більш потужною операцією, і вона враховує морфологічний аналіз слів. Він повертає лему, яка є базовою формою всіх її флективних форм. Для створення словників та пошуку правильної форми слова потрібні поглиблені лінгвістичні знання. Стеммінг - це загальна операція, тоді як лематизація - це розумна операція, де відповідна форма буде шукатись у словнику. Отже, лематизація допомагає формувати кращі можливості машинного навчання.
Код для розрізнення лематизації та стемінгу
Стермінг-код
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 також заощаджує пам'ять, а також обчислювальні витрати.
Приклад у реальному часі, де показано використання леметизації Wordnet та позначення POS в 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
- Токенізація слова, а також теги частин мови імпортовані з nltk
- Словник за замовчуванням імпортується із колекцій
- Словник створюється, де pos_tag (перша буква) - це ключові значення, значення яких зіставляються зі значеннями зі словника wordnet. Ми взяли єдину першу букву, оскільки будемо використовувати її пізніше у циклі.
- Текст написаний і маркується.
- Створюється об'єкт lemma_function, який буде використовуватися всередині циклу
- Цикл запускається, і лематизація прийме два аргументи, один - маркер, а інший - відображення pos_tag зі значенням wordnet.
Вихід:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
Лематизація тісно пов’язана зі словником Wordnet, тому дуже важливо вивчити цю тему, тому ми залишаємо це наступною темою