Przewidywanie następnego słowa w 5 prostych krokach przy użyciu języka Python

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.

Zastosowania przewidywania następnego słowa

  • Przewidywanie następnego słowa poprawia szybkość i dokładność pisania na urządzeniach mobilnych, dzięki czemu jest bardzo przydatne w przypadku aplikacji do przesyłania wiadomości tekstowych i komunikacji.
  • Wyszukiwarki wykorzystują przewidywany tekst do sugerowania zapytań, co ułatwia użytkownikom szybkie znalezienie odpowiednich informacji.
  • Pomaga w automatycznym poprawianiu błędnie napisanych słów i ograniczaniu błędów podczas pisania w różnych aplikacjach, w tym w edytorach tekstu i klientach poczty e-mail.
  • Deweloperzy i programiści korzystają z przewidywania tekstu podczas pisania kodu, ponieważ sugeruje on odpowiednie funkcje, metody i nazwy zmiennych.
  • Platformy internetowe i usługi przesyłania strumieniowego wykorzystują tekst predykcyjny, aby rekomendować użytkownikom odpowiednie treści.
  • 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:

  • Dokładność przewidywania następnego słowa w dużym stopniu zależy od rozmiaru i jakości danych szkoleniowych. Ograniczone lub zaszumione dane mogą prowadzić do mniej dokładnych przewidywań.
  • Jeśli słowo w tekście wejściowym nie istnieje w danych szkoleniowych, nie można go dokładnie przewidzieć.
  • Interpunkcja może wpływać na dokładność przewidywania, szczególnie w językach takich jak angielski, gdzie granice słów mogą być niejednoznaczne.
  • Nieprawidłowa tokenizacja lub wstępne przetwarzanie może prowadzić do błędnych przewidywań.
  • Wiele słów ma wiele znaczeń i kontekst nie zawsze je ujednoznacznia.
  • Jak poprawić dokładność

  • Korzystanie z większego i bardziej zróżnicowanego zbioru danych poprawia zrozumienie przez model różnych kontekstów i słów.
  • Rozważ użycie N-gramów wyższego rzędu (np. trygramów) dla szerszego kontekstu, ale zrównoważ to dostępnością danych.
  • Zbieraj opinie użytkowników i stale ulepszaj model w oparciu o rzeczywiste użytkowanie.
  • Regularnie oceniaj wydajność modelu za pomocą odpowiednich wskaźników i odpowiednio dostosowuj strategie.
  • Można wdrożyć modele oparte na sieciach neuronowych, takie jak LSTM lub Transformer, w celu bardziej złożonego modelowania kontekstu.
  • 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.