Chatbot z Pytonem : Stemming i lematyzacja

https://szkolazpieklarodem.pl/

Stemming to proces redukcji odmienionych słów do ich rdzenia, formy podstawowej. Algorytm wynikający redukuje słowa „mówiąc” do rdzenia „powiedzieć”, podczas gdy „prawdopodobnie” staje się domniemaniem. Jak widać, może to być w 100% poprawne, ale nie zawsze. Lematyzacja jest ściśle związana z rdzeniem, ale lematyzacja to algorytmiczny proces określania lematu słowa na podstawie jego zamierzonego znaczenia. Na przykład w języku angielskim czasownik „chodzić” może występować jako „chodzić”, „chodzić”, „chodzić” lub „chodzić”. Podstawowa forma „spaceru”, którą można znaleźć w słowniku, nazywa się lematem na to słowo. spaCy nie ma wbudowanego rdzenia, ponieważ lematyzacja jest uważana za bardziej poprawną i produktywną. Różnica między Stemmingiem a Lematyzacją

  • Stemming wykonuje tę pracę w prymitywny, heurystyczny sposób, odcinając końcówki słów, zakładając, że pozostałe słowo jest tym, czego faktycznie szukamy, ale często obejmuje to usuwanie afiksów derywacyjnych.
  • Lematyzacja próbuje wykonać to zadanie w bardziej elegancki sposób, wykorzystując słownictwo i analizę morfologiczną słów. Próbuje usunąć tylko końcówki fleksyjne i zwrócić słownikową formę słowa, znaną jako lemat.

Chociaż niewiele bibliotek udostępnia metody rdzeniowania i lematyzacji, zawsze najlepszą praktyką jest użycie lematyzacji w celu prawidłowego uzyskania rdzenia słowa. Spróbujmy zbadać lematyzację na kilku przykładach:

Przykład 1:

from spacy.lemmatizer import Lemmatizer

from spacy.lang.en import LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES

lemmatizer = Lemmatizer(LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES)

lemmatizer(‘chuckles’, ‘NOUN’) # 2nd param is token’s part-of-speech tag

Wyjście :

[u’chuckle’]

Przykład 2:

lemmatizer(‘blazing’, ‘VERB’)

Wyjście:

[u’blaze’]

Przykład 3:

lemmatizer(‘fastest’, ‘ADJ’)

Wyjście:

[u’fast’]

Jeśli chcesz zobaczyć porównanie stemmera i lemmatizera, musisz zainstalować jedną z najpopularniejszych bibliotek dla Pythona: Natural Language Toolkit (NLTK). spaCy zyskało popularność niedawno, ale to NLTK sprawiło, że każdy entuzjasta NLP zanurzył się w oceanie NLP i jego technik. Sprawdź następujący przykład, w którym próbujemy użyć dwóch technik stemplowania dostarczonych przez NLTK. Najpierw staramy się uzyskać rdzeń słowa „najszybszy”, używając PorterStemmer, a następnie SnowBallStemmer. Obydwa dają ten sam wynik – to znaczy „najszybszy” – ale kiedy wykonujemy lematyzację za pomocą metody spaCy, otrzymujemy „szybki” jako rdzeń słowa „najszybszy”, co jest bardziej znaczące i poprawne.

from nltk.stem.porter import *

from nltk.stem.snowball import SnowballStemmer

porter_stemmer = PorterStemmer()

snowball_stemmer = SnowballStemmer(“english”)

print(porter_stemmer.stem(“fastest”))

print(snowball_stemmer.stem(“fastest”))

fastest

fastest

Uwaga: przed próbą uruchomienia tego kodu upewnij się, że zainstalowałeś pakiet nltk przy użyciu pip3.

Ponieważ jesteś prawie świadomy tego, co robi stemming lub lematyzacja w NLP, powinieneś być w stanie zrozumieć, że kiedykolwiek spotkasz się z sytuacją, w której potrzebujesz rdzenia słowa, musisz tam przeprowadzić lematyzację. Na przykład często jest używany do budowy wyszukiwarek. Pewnie zastanawiałeś się, w jaki sposób Google wyświetla w wynikach wyszukiwania artykuły, które chciałeś uzyskać, nawet jeśli wyszukiwany tekst nie został poprawnie sformułowany. W tym miejscu posługujemy się lematyzacją. Wyobraź sobie, że wyszukujesz tekst: „Kiedy zostanie wydany kolejny sezon Gry o tron?” Załóżmy teraz, że wyszukiwarka dokonuje prostego dopasowywania częstotliwości słów w dokumencie, aby uzyskać wyniki wyszukiwania. W tym przypadku powyższe zapytanie prawdopodobnie nie będzie pasować do artykułu z podpisem „Data premiery Gry o Tron w następnym sezonie”. Jeśli przeprowadzimy lematyzację pierwotnego pytania przed dopasowaniem danych wejściowych do dokumentów, możemy uzyskać lepsze wyniki. Spróbujemy przetestować tę teorię również w nadchodzących sekcjach.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *