Förutsäga nästa ord i 5 enkla steg med Python

Du kanske har observerat att när du skriver på din mobiltelefon förutsäger den nästa ord du kanske vill använda. Det är en funktion som gör det snabbare att skriva och sparar tid.

Det är bekvämare. Oavsett om du sms:ar, söker på internet eller skriver ett e-postmeddelande kan prediktiv text vara till stor hjälp. Men har du någonsin undrat hur din mobil vet vilket ord som ska föreslås härnäst?

I den här guiden kommer jag att visa dig hur du skapar ordförutsägelser med Python.

För att enkelt kunna följa med hjälper det att ha en grundläggande förståelse för NLP. Om du är ny på detta, oroa dig inte; du kan snabbt få grunderna från vår artikel ”NLP Simplified”, där vi förklarar det enkelt.

Tillämpningar av Next Word Prediction

  • Förutsägelse av nästa ord förbättrar hastigheten och precisionen för att skriva på mobila enheter, vilket gör det mycket fördelaktigt för appar för textmeddelanden och kommunikation.
  • Sökmotorer använder prediktiv text för att föreslå sökfrågor, vilket gör det lättare för användare att snabbt hitta relevant information.
  • Det hjälper till att automatiskt korrigera felstavade ord och minska skrivfel i olika applikationer, inklusive ordbehandlare och e-postklienter.
  • Utvecklare och programmerare drar nytta av prediktiv text när de skriver kod, eftersom det föreslår relevanta funktioner, metoder och variabelnamn.
  • Onlineplattformar och streamingtjänster använder prediktiv text för att rekommendera relevant innehåll till användare.
  • Låt oss börja lära oss om denna intressanta NLP-teknik tillsammans och hur den är användbar, och gå igenom varje steg tydligt.

    Dataförberedelse

    Först och främst måste vi importera de nödvändiga biblioteken som är viktiga för vårt projekt. Efter det kommer vi att definiera exempeltext, som kommer att användas för träning. Du kan ersätta denna text med valfri textdata.

    Du kan också använda ett dataset med textdata, som du enkelt kan hitta på Kaggle eller liknande plattform.

    # Import Necessary Libraries
    
    import nltk
    from nltk import ngrams
    from collections import defaultdict
    import random

    Exempeltextdata, som kommer att användas för att förutsäga nästa ord.

    # 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.
    """
    

    Du kan ersätta denna text enligt dina önskemål.

    Tokenisering

    Vi kommer att förbehandla vår text och symbolisera den. Tokenisering är processen att dela upp texten i enskilda ord eller symboler. Vi använder nltk-biblioteket i Python för att tokenisera vår text.

    För att säkerställa att vår modell fokuserar på ord och ignorerar skiftläge eller skiljetecken utför vi förbearbetning. Detta steg innebär att konvertera alla ord till gemener och ta bort eventuella skiljetecken.

    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

    Efter förbearbetning och tokenisering får vi alla ord med gemener och utan skiljetecken.

    Tokeniserade ord

    Bygga N-gram

    I det här steget kommer vi att skapa N-gram, som är sekvenser av N ord i naturlig språkbehandling (NLP).

    I vår kod kommer vi att skapa bigram, där N är lika med 2, vilket betyder att varje N-gram kommer att bestå av par av ord.

    Detta är ett grundläggande steg i att bygga en prediktionsmodell för nästa ord eftersom det tillåter oss att analysera ordsekvenser och förutsäga nästa ord baserat på det sammanhang som de föregående N-1 orden ger.

    # 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

    Dessa N-gram fungerar som byggstenarna för att träna och implementera vår nästa ords prediktionsmodell.

    Definiera funktion

    I det här steget skapar vi en funktion som heter ’predict_next_word’ som gissar nästa ord i en mening baserat på ett angett prefix (en sekvens av ord).

    Denna funktion är avgörande i nästa ordprediktionsmodell, eftersom den tar det sammanhang som prefixet ger och använder det för att göra en förutsägelse om det mest sannolika nästa ordet.

    Jag kommer att förklara vad som händer i denna process med enkla ord:

    • Funktionen tittar på alla ordpar (bigram) i vår textdata som börjar med det angivna prefixet (orden före det saknade ordet).
    • Den räknar hur ofta varje ord förekommer i dessa par och sorterar dem efter frekvens, från de flesta till minst vanliga.
    • Funktionen föreslår då det ord som förekommer oftast som nästa ord efter det givna prefixet.
    # 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

    Det är en avgörande del av nästa ordprediktionsmodell, eftersom den tillåter oss att generera kontextuellt relevanta förslag för nästa ord i en given textsekvens.

    Testning

    Denna kod låter dig testa modellen med din egen input. Du skriver några ord, trycker på Enter och modellen förutspår nästa ord. Om du skriver något ogiltigt, ber det dig att försöka igen.

    # 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}")

    Vår kod kommer att skapa den här typen av gränssnitt. Där du kan skriva prefix och trycka på enter.

    Ange prefix

    När du har angett enter får du ditt nästa ord

    Förutsagt ord

    Det är ett sätt att visa hur nästa ords prediktionsmodell kan användas i praktiken.

    Utmaningar:

  • Noggrannheten i nästa ords förutsägelse beror mycket på storleken och kvaliteten på träningsdata. Begränsade eller bullriga data kan leda till mindre exakta förutsägelser.
  • Om ett ord i inmatningstexten inte finns i träningsdata, kan det inte förutsägas korrekt.
  • Skiljetecken kan påverka prediktionsnoggrannheten, särskilt på språk som engelska, där ordgränser kan vara tvetydiga.
  • Felaktig tokenisering eller förbearbetning kan leda till felaktiga förutsägelser.
  • Många ord har flera betydelser, och sammanhanget kanske inte alltid disambiguerar dem.
  • Hur man förbättrar noggrannheten

  • Genom att använda en större och mer mångsidig datauppsättning förbättras modellens förståelse av olika sammanhang och ord.
  • Överväg att använda högre ordning N-gram (t.ex. trigram) för mer sammanhang, men balansera det med datatillgänglighet.
  • Samla användarfeedback och förbättra modellen kontinuerligt baserat på verklig användning.
  • Utvärdera regelbundet modellens prestanda med lämpliga mätvärden och justera strategier därefter.
  • Du kan implementera neurala nätverksbaserade modeller, som LSTM eller Transformer, för mer komplex kontextmodellering.
  • Slutord

    I en värld av naturlig språkbehandling är det en värdefull färdighet att förutsäga nästa ord. Med dessa 5 enkla Python-steg har du fått ett kraftfullt verktyg för snabbare kommunikation och smartare teknik.

    Fortsätt utforska och använd denna kunskap för att förbättra dina språkupplevelser. Resan har precis börjat!

    Du kan också utforska några bästa sätt att ladda ner filer från en URL med Python.