Tokenizacja w przetwarzaniu języka naturalnego
Opublikowany: 2020-12-01W przypadku danych tekstowych najbardziej podstawowym krokiem jest tokenizacja tekstu. „Tokeny” można traktować jako pojedyncze słowa, zdania lub dowolną minimalną jednostkę. Dlatego rozbicie zdań na oddzielne jednostki to nic innego jak tokenizacja.
Pod koniec tego samouczka będziesz mieć wiedzę na temat następujących rzeczy:
- Co to jest tokenizacja
- Różne rodzaje tokenizacji
- Różne sposoby tokenizacji
Tokenizacja jest najbardziej podstawowym krokiem w potoku NLP.
Ale dlaczego tak jest?
Te słowa lub tokeny są później konwertowane na wartości liczbowe, aby komputer mógł je zrozumieć i nadać im sens. Te tokeny są czyszczone, wstępnie przetwarzane, a następnie konwertowane na wartości liczbowe metodami „Wektoryzacji”. Te wektory można następnie wprowadzić do algorytmów uczenia maszynowego i sieci neuronowych.
Tokenizacja może być nie tylko na poziomie słowa, ale także zdania. Oznacza to, że tekst może być tokenizowany słowami jako tokenami lub zdaniami jako tokenami. Omówmy kilka sposobów przeprowadzania tokenizacji.

Spis treści
Podział Pythona()
Funkcja split() Pythona zwraca listę tokenów podzielonych przez wspomniany znak. Domyślnie dzieli słowa na spacje.
Tokenizacja słów
| Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” Tokeny = Mystr.split() |
| #Wyjście: >> [ 'To' , 'to' , 'a' , 'tokenizacja' , 'samouczek'. , 'my' , 'jesteśmy' , 'uczenie się' , 'inne' , 'tokenizacja' , 'metody' , 'i' , 'sposoby?' , 'Tokenizacja' , 'jest' , 'niezbędne' , 'w' , 'NLP' , 'zadania'. ] |
Tokenizacja zdań
Ten sam tekst można podzielić na zdania, przekazując separator jako „.”.
| Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” Tokeny = Mystr.split( “.” ) |
| #Wyjście: >> [ 'To jest samouczek dotyczący tokenizacji' , ' Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP” , ” ] |
Choć wydaje się to proste i proste, ma wiele wad. A jeśli zauważysz, rozdziela się po ostatnim „.” także. I nie bierze pod uwagę „?” jako wskaźnik następnego zdania, ponieważ zajmuje tylko jeden znak, którym jest „.”.
Dane tekstowe w rzeczywistych scenariuszach są bardzo brudne i nieładnie umieszczone w słowach i zdaniach. Może być obecnych dużo tekstu śmieci, które bardzo utrudnią tokenizację w ten sposób. Dlatego przejdźmy do lepszych i bardziej zoptymalizowanych sposobów tokenizacji.
Musisz przeczytać: 10 najlepszych technik głębokiego uczenia się, które powinieneś znać
Wyrażenie regularne
Wyrażenie regularne (RegEx) to sekwencja znaków używana do dopasowania wzorca znaków. Używamy RegEx, aby znaleźć określone wzorce, słowa lub znaki, aby je zastąpić lub wykonać na nich jakąkolwiek inną operację. Python posiada moduł re , który służy do pracy z RegEx. Zobaczmy, jak możemy tokenizować tekst za pomocą re .
Tokenizacja słów
| Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” Tokeny = re.findall( „[\w']+” , Mystr) |
| #Wyjście: >> [ 'To' , 'jest' , 'a' , 'tokenizacja' , 'tutorial' , 'My' , 'jesteśmy' , 'nauka' , 'inne' , 'tokenizacja' , 'metody' , 'i' , 'sposoby' , 'Tokenizacja' , 'jest' , 'essential' , 'in' , 'NLP' , 'tasks' ] |
Więc co się tutaj stało?
Funkcja re.findall() dopasowuje wszystkie pasujące do niej sekwencje i przechowuje je na liście. Wyrażenie „[\w]+” oznacza, że dowolny znak – czy to litery, cyfry, czy podkreślenie („_”). Symbol „+” oznacza wszystkie wystąpienia wzoru. Zasadniczo przeskanuje wszystkie znaki i umieści je na liście jako jeden token, gdy trafi na spację lub inny znak specjalny oprócz podkreślenia.
Proszę zauważyć, że słowo „NLP” jest pojedynczym słowem, ale nasze wyrażenie regularne podzieliło je na „NLP” i „s” z powodu apostrofu.
Tokenizacja zdań
| Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” Tokeny = re.compile( '[.!?] ' ).split(Mystr) |
| #Wyjście: >> [ 'To jest samouczek dotyczący tokenizacji' , 'Uczymy się różnych metod i sposobów tokenizacji' , 'Tokenizacja jest niezbędna w zadaniach NLP.' ] |
Teraz połączyliśmy wiele znaków dzielących w jeden warunek i wywołaliśmy funkcję re.split. Dlatego gdy trafi którykolwiek z tych 3 znaków, potraktuje to jako osobne zdanie. Jest to przewaga RegEx nad funkcją podziału Pythona, w której nie można przekazać wielu znaków do podziału.
Przeczytaj także: Zastosowania przetwarzania języka naturalnego
Tokenizatory NLTK
Natural Language Toolkit (NLTK) to biblioteka Pythona przeznaczona specjalnie do obsługi zadań NLP. NLTK składa się z wbudowanych funkcji i modułów, które są tworzone dla określonych procesów całego potoku NLP. Przyjrzyjmy się, jak NLTK obsługuje tokenizację.
Tokenizacja słów
NLTK posiada oddzielny moduł, NLTK.tokenize, do obsługi zadań tokenizacji. W przypadku tokenizacji słów jedną z metod, z których się składa, jest word_tokenize.
| z nltk.tokenize importuj word_tokenize Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” word_tokenize(Mystr) |
| #Wyjście: >>[ 'To' , 'to' , 'a' , 'tokenizacja' , 'samouczek' , '.' , 'My' , 'jesteśmy' , 'uczenie się' , 'inne' , 'tokenizacja' , 'metody' , ',' , 'i' , 'sposoby' , '?' , 'Tokenizacja' , 'jest' , 'niezbędne' , 'w' , 'NLP' , 'zadania' , '.' ] |
Proszę zauważyć, że word_tokenize traktuje znaki interpunkcyjne jako oddzielne tokeny. Aby temu zapobiec, musimy usunąć wszystkie interpunkcje i znaki specjalne przed samym tym krokiem.

Tokenizacja zdań
| z nltk.tokenize import send_tokenize Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” sent_tokenize(Mystr) |
| #Wyjście: >> [ 'To jest samouczek dotyczący tokenizacji.' , „Uczymy się różnych metod i sposobów tokenizacji?” , „Tokenizacja jest niezbędna w zadaniach NLP”. ] |
SpaCy Tokenizery
SpaCy to prawdopodobnie jedna z najbardziej zaawansowanych bibliotek do zadań NLP. Składa się z obsługi prawie 50 języków. Dlatego pierwszym krokiem jest pobranie rdzenia dla języka angielskiego. Następnie musimy zaimportować moduł English, który ładuje wektory tokenizer, tagger, parser, NER i word.
Tokenizacja słów
| from spacy.lang.en importuj angielski nlp = angielski() Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” mój_dokument = nlp(Mystr) Tokeny = [] dla tokena w my_doc: Tokeny.append(token.tekst) Tokeny |
| #Wyjście: >> [ 'To' , 'jest' , 'a' , 'tokenizacja' , 'samouczek' , '.' , 'My' , 'jesteśmy' , 'uczenie się' , 'inne' , 'tokenizacja' , 'metody' , ',' , 'i' , 'sposoby' , '?' , 'Tokenizacja' , 'jest' , 'niezbędne' , 'w' , 'NLP' , 's' , 'zadania' , '.' ] |
Tutaj, kiedy wywołujemy funkcję nlp z przekazaną MyStr, tworzy ona dla niej tokeny słowa. Następnie indeksujemy je i przechowujemy na osobnej liście.
Tokenizacja zdań
| from spacy.lang.en importuj angielski nlp = angielski() sent_tokenizer = nlp.create_pipe( 'sentencizer' ) nlp.add_pipe(sent_tokenizer) Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” mój_dokument = nlp(Mystr) Wysłane = [] dla wysłanych w doc.sents: Wysyła.append(wysłany.tekst) Wysłane |
| #Wyjście: >> [ 'To jest samouczek dotyczący tokenizacji.' , „Uczymy się różnych metod i sposobów tokenizacji?” , „Tokenizacja jest niezbędna w zadaniach NLP.” ] |
W celu tokenizacji zdań wywołaj metodę creat_pipe, aby utworzyć komponent sentencizer, który tworzy tokeny zdań. Następnie dodajemy potok do obiektu nlp. Kiedy przekazujemy ciąg tekstowy do obiektu nlp, tym razem tworzy on dla niego tokeny zdań. Teraz można je dodać do listy w taki sam sposób, jak w poprzednim przykładzie.
Tokenizacja Kerasa
Keras jest obecnie jednym z najbardziej preferowanych frameworków do uczenia głębokiego. Keras oferuje również dedykowaną klasę do zadań związanych z przetwarzaniem tekstu – keras.preprocessing.text. Ta klasa ma funkcję text_to_word_sequence , która tworzy z tekstu tokeny na poziomie słowa. Rzućmy okiem.
| z keras.preprocessing.text import text_to_word_sequence Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” Tokeny = text_to_word_sequence (Mystr) Tokeny |
| #Wyjście: >> [ 'to' , 'jest' , 'a' , 'tokenizacja' , 'tutorial' , 'my' , 'jesteśmy' , 'nauka' , 'inne' , 'tokenizacja' , 'metody' , 'i' , 'sposoby' , 'tokenizacja' , 'is' , 'essential' , 'in' , "nlp's" , 'tasks' ] |
Proszę zauważyć, że słowo „NLP” zostało potraktowane jako pojedynczy token. Dodatkowo, ten tokenizer Keras zmniejszył wszystkie tokeny, co jest dodatkowym bonusem.
Tokenizator Gensim
Gensim to kolejna popularna biblioteka do obsługi zadań opartych na NLP i modelowania tematów. Klasa gensim.utils oferuje metodę tokenize, którą można wykorzystać do naszych zadań tokenizacji.

Tokenizacja słów
| z gensim.utils import tokenize Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” list(tokenize(Mystr)) |
| #Wyjście: >> [ 'To' , 'jest' , 'a' , 'tokenizacja' , 'tutorial' , 'My' , 'jesteśmy' , 'nauka' , 'inne' , 'tokenizacja' , 'metody' , 'i' , 'sposoby' , 'Tokenizacja' , 'is' , 'essential' , 'in' , 'NLP' , 's' , 'tasks' ] |
Tokenizacja zdań
Do tokenizacji zdań używamy metody split_sentences z klasy gensim.summarization.textcleaner .
| z gensim.summarization.textcleaner import split_sentences Mystr = „To jest samouczek dotyczący tokenizacji. Uczymy się różnych metod i sposobów tokenizacji? Tokenizacja jest niezbędna w zadaniach NLP.” Tokeny = split_sentences( Mystr ) Tokeny |
| #Wyjście: >> [ 'To jest samouczek dotyczący tokenizacji.' , „Uczymy się różnych metod i sposobów tokenizacji?” , „Tokenizacja jest niezbędna w zadaniach NLP.” ] |
Zanim pójdziesz
W tym samouczku omówiliśmy różne sposoby tokenizacji danych tekstowych w oparciu o aplikacje. Jest to niezbędny etap potoku NLP, ale konieczne jest wyczyszczenie danych przed przystąpieniem do tokenizacji.
Jeśli chcesz dowiedzieć się więcej o uczeniu maszynowym i sztucznej inteligencji, sprawdź dyplom PG IIIT-B i upGrad w uczeniu maszynowym i sztucznej inteligencji, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 450 godzin rygorystycznych szkoleń, ponad 30 studiów przypadków i zadań, Status absolwentów IIIT-B, ponad 5 praktycznych praktycznych projektów zwieńczenia i pomoc w pracy z najlepszymi firmami.
