Być może zauważyłeś, że gdy piszesz na telefonie komórkowym, przewiduje on następne słowo, którego możesz chcieć użyć. Jest to funkcja, która przyspiesza pisanie i oszczędza czas.
Jest wygodniej. Niezależnie od tego, czy wysyłasz SMS-y, przeszukujesz Internet, czy piszesz e-mail, przewidywanie tekstu może być naprawdę pomocne. Ale czy zastanawiałeś się kiedyś, skąd Twój telefon wie, jakie słowo zaproponować jako następne?
W tym przewodniku pokażę, jak tworzyć przewidywania słów za pomocą Pythona.
Aby z łatwością nadążać za postępem, pomocne jest posiadanie podstawowej wiedzy na temat NLP. Jeśli jesteś w tym nowy, nie martw się; możesz szybko opanować podstawy z naszego artykułu „NLP uproszczone”, w którym po prostu to wyjaśniamy.
Spis treści:
Zastosowania przewidywania następnego słowa
Zacznijmy razem uczyć się o tej interesującej technice NLP i jej użyteczności, a także przejrzyście przeanalizujmy każdy krok.
Przygotowywanie danych
Na początek musimy zaimportować niezbędne biblioteki, które są ważne dla naszego projektu. Następnie zdefiniujemy przykładowy tekst, który będzie używany do szkolenia. Możesz zastąpić ten tekst dowolnymi danymi tekstowymi.
Możesz także skorzystać ze zbioru danych z danymi tekstowymi, który z łatwością znajdziesz na platformie Kaggle lub podobnej.
# Import Necessary Libraries import nltk from nltk import ngrams from collections import defaultdict import random
Przykładowe dane tekstowe, które posłużą do przewidzenia następnego słowa.
# Sample Text Data text = """ Once upon a luminous, starry night in the quaint, enigmatic town of Serendipity, a curious young explorer named Amelia embarked on an extraordinary adventure. With her trusty magnifying glass in hand and an indomitable spirit, she embarked on a quest to discover the elusive Elysian treasure hidden deep within the labyrinthine forest. As she ventured through the verdant woods, Amelia encountered an eccentric, talking squirrel named Percival, who spoke in riddles and guided her toward the treasure's whereabouts. The forest was resplendent with bioluminescent flora, illuminating her path with a kaleidoscope of colors. Amelia soon reached a precipice overlooking an awe-inspiring, cerulean waterfall, its cascading waters echoing a melodious serenade. Beside the waterfall stood a colossal, moss-covered stone with cryptic inscriptions. With Percival's guidance, she deciphered the ancient runes and uncovered the entrance to the treasure trove. Inside, she discovered an opulent chest adorned with intricate, golden filigree. Upon opening it, a symphony of shimmering jewels, radiant gemstones, and glistening artifacts greeted her with an ethereal glow. The Elysian treasure was hers, a testament to her dauntless courage and insatiable curiosity. Amelia's return to Serendipity was celebrated with jubilant revelry, and her remarkable journey became a legend, inspiring others to embark on their own adventures in the wondrous realm of imagination and discovery. """
Możesz zastąpić ten tekst zgodnie ze swoimi wymaganiami.
Tokenizacja
Wstępnie przetworzymy nasz tekst i go tokenizujemy. Tokenizacja to proces dzielenia tekstu na pojedyncze słowa lub tokeny. Do tokenizacji naszego tekstu używamy biblioteki nltk w Pythonie.
Aby mieć pewność, że nasz model skupia się na słowach i ignoruje wielkość liter oraz znaki interpunkcyjne, przeprowadzamy przetwarzanie wstępne. Ten krok obejmuje konwersję wszystkich słów na małe litery i usunięcie wszelkich znaków interpunkcyjnych.
import nltk # Tokenize the text into words words = nltk.word_tokenize(text) # Preprocess the words (convert to lowercase, remove punctuation) words = [word.lower() for word in words if word.isalnum()] words
Po wstępnym przetworzeniu i tokenizacji otrzymamy wszystkie słowa pisane małymi literami i bez interpunkcji.
Tokenizowane słowa
Budowanie N-gramów
W tym kroku utworzymy N-gramy, które są sekwencjami N słów w przetwarzaniu języka naturalnego (NLP).
W naszym kodzie utworzymy bigramy, gdzie N jest równe 2, co oznacza, że każdy N-gram będzie składał się z par słów.
Jest to podstawowy krok w budowaniu modelu przewidywania następnego słowa, ponieważ pozwala nam analizować sekwencje słów i przewidywać następne słowo na podstawie kontekstu dostarczonego przez poprzednie N-1 słowa.
# Define the order of the N-gram model (N=2 for bigrams) N = 2 # Create N-grams from the tokenized words ngrams_list = list(ngrams(words, N)) # Create a defaultdict to store N-grams and their frequency ngram_freq = defaultdict(int) for ngram in ngrams_list: ngram_freq[ngram] += 1
Te N-gramy służą jako elementy składowe do szkolenia i wdrażania naszego modelu przewidywania następnego słowa.
Zdefiniuj funkcję
W tym kroku tworzymy funkcję o nazwie „predict_next_word”, która odgaduje kolejne słowo w zdaniu na podstawie podanego przedrostka (ciągu słów).
Funkcja ta jest kluczowa w modelu przewidywania następnego słowa, ponieważ uwzględnia kontekst dostarczony przez przedrostek i wykorzystuje go do przewidywania najbardziej prawdopodobnego następnego słowa.
Wyjaśnię w prostych słowach, co dzieje się w tym procesie:
- Funkcja sprawdza wszystkie pary słów (bigramy) w naszych danych tekstowych, które zaczynają się od podanego przedrostka (słów poprzedzających brakujące słowo).
- Liczy, jak często każde słowo pojawia się w tych parach i sortuje je według częstotliwości, od najczęściej do najrzadziej.
- Funkcja następnie sugeruje słowo, które występuje najczęściej, jako kolejne słowo po podanym przedrostku.
# Define Function def predict_next_word(prefix): # Filter N-grams that start with the given prefix matching_ngrams = [(ngram, freq) for ngram, freq in ngram_freq.items() if ngram[:-1] == prefix] if not matching_ngrams: return "No prediction available." # Sort N-grams by frequency in descending order sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True) # Select the N-gram with the highest frequency as the prediction prediction = sorted_ngrams[0][0][-1] return prediction
Jest to kluczowa część modelu przewidywania następnego słowa, ponieważ pozwala nam generować odpowiednie kontekstowo sugestie dotyczące następnego słowa w danej sekwencji tekstowej.
Testowanie
Ten kod umożliwia przetestowanie modelu przy użyciu własnych danych wejściowych. Wpisujesz kilka słów, naciskasz Enter, a model przewiduje następne słowo. Jeśli wpiszesz coś nieprawidłowego, zostaniesz poproszony o ponowną próbę.
# You can use this code snippet to interactively test the model with user input user_input = input("Enter a prefix for next-word prediction: ").lower().split() if len(user_input) != N - 1: print("Please enter a valid prefix.") else: prefix = tuple(user_input) prediction = predict_next_word(prefix) print(f"Next word prediction: {prediction}")
Nasz kod utworzy tego rodzaju interfejs. Gdzie możesz wpisać przedrostki i nacisnąć Enter.
Wprowadź przedrostek
Po wpisaniu Enter otrzymasz kolejne słowo
Przewidywane Słowo
Jest to sposób na pokazanie, jak model przewidywania następnego słowa może być zastosowany w praktyce.
Wyzwania:
Jak poprawić dokładność
Ostatnie słowa
W świecie przetwarzania języka naturalnego przewidywanie następnego słowa jest cenną umiejętnością. Dzięki tym 5 prostym krokom w języku Python zyskałeś potężne narzędzie do szybszej komunikacji i inteligentniejszej technologii.
Kontynuuj eksplorację i wykorzystuj tę wiedzę, aby ulepszyć swoje doświadczenia językowe. Podróż właśnie się rozpoczęła!
Możesz także poznać najlepsze sposoby pobierania plików z adresu URL przy użyciu języka Python.