Forudsig det næste ord i 5 nemme trin ved hjælp af Python

Du har måske bemærket, at når du skriver på din mobiltelefon, forudsiger den det næste ord, du måske vil bruge. Det er en funktion, der gør det hurtigere at skrive og sparer dig tid.

Det er mere bekvemt. Uanset om du sender sms’er, søger på internettet eller skriver en e-mail, kan forudsigende tekst være virkelig nyttig. Men har du nogensinde spekuleret på, hvordan din mobil ved, hvilket ord der skal foreslås næste gang?

I denne guide vil jeg vise dig, hvordan du opretter ordforudsigelser ved hjælp af Python.

For nemt at følge med hjælper det at have en grundlæggende forståelse af NLP. Hvis du er ny til dette, så fortvivl ikke; du kan hurtigt få det grundlæggende fra vores artikel “NLP Simplified”, hvor vi forklarer det enkelt.

Anvendelser af Next Word Prediction

  • Forudsigelse af næste ord forbedrer hastigheden og nøjagtigheden af ​​at skrive på mobile enheder, hvilket gør det meget fordelagtigt for tekstbeskeder og kommunikationsapps.
  • Søgemaskiner bruger forudsigelig tekst til at foreslå søgeforespørgsler, hvilket gør det nemmere for brugerne at finde relevant information hurtigt.
  • Det hjælper med automatisk korrektion af fejlstavede ord og reducerer skrivefejl i forskellige applikationer, herunder tekstbehandlingsprogrammer og e-mail-klienter.
  • Udviklere og programmører drager fordel af forudsigelig tekst, når de skriver kode, da det foreslår relevante funktioner, metoder og variabelnavne.
  • Online platforme og streamingtjenester bruger forudsigelig tekst til at anbefale relevant indhold til brugerne.
  • Lad os begynde at lære om denne interessante NLP-teknik sammen, og hvordan den er nyttig, og gennemgå hvert trin tydeligt.

    Dataforberedelse

    Først og fremmest skal vi importere de nødvendige biblioteker, som er vigtige for vores projekt. Derefter vil vi definere eksempeltekst, som vil blive brugt til træning. Du kan erstatte denne tekst med alle tekstdata efter eget valg.

    Du kan også bruge et datasæt med tekstdata, som du nemt kan finde på Kaggle eller en lignende platform.

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

    Eksempel på tekstdata, som vil blive brugt til at forudsige det næste 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 erstatte denne tekst efter dit behov.

    Tokenisering

    Vi vil forbehandle vores tekst og tokenisere den. Tokenisering er processen med at opdele teksten i individuelle ord eller tokens. Vi bruger nltk-biblioteket i Python til at tokenisere vores tekst.

    For at sikre, at vores model fokuserer på ord og ignorerer store og små bogstaver eller tegnsætning, udfører vi forbehandling. Dette trin involverer konvertering af alle ord til små bogstaver og fjernelse af tegnsætning.

    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 forbehandling og tokenisering får vi alle ord med små bogstaver og uden tegnsætning.

    Tokeniserede ord

    Bygning af N-gram

    I dette trin skal vi lave N-gram, som er sekvenser af N ord i naturlig sprogbehandling (NLP).

    I vores kode skal vi lave bigrammer, hvor N er lig med 2, hvilket betyder, at hvert N-gram vil bestå af par af ord.

    Dette er et grundlæggende trin i opbygningen af ​​en forudsigelsesmodel for det næste ord, fordi det giver os mulighed for at analysere ordsekvenser og forudsige det næste ord baseret på konteksten fra de foregående N-1 ord.

    # 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

    Disse N-grammer tjener som byggesten til træning og implementering af vores næste-ords forudsigelsesmodel.

    Definer funktion

    I dette trin opretter vi en funktion kaldet ‘forudsig_næste_ord’, der gætter det næste ord i en sætning baseret på et forudsat præfiks (en sekvens af ord).

    Denne funktion er afgørende i næste ords forudsigelsesmodel, da den tager den kontekst, som præfikset giver, og bruger den til at lave en forudsigelse om det mest sandsynlige næste ord.

    Jeg vil forklare, hvad der sker i denne proces med enkle ord:

    • Funktionen ser på alle de ordpar (bigrammer) i vores tekstdata, der starter med det angivne præfiks (ordene før det manglende ord).
    • Den tæller, hvor ofte hvert ord optræder i disse par, og sorterer dem efter hyppighed, fra de fleste til mindst almindelige.
    • Funktionen foreslår så det ord, der optræder oftest, som det næste ord efter det givne præfiks.
    # 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 er en afgørende del af den næste ordforudsigelsesmodel, da den giver os mulighed for at generere kontekstuelt relevante forslag til det næste ord i en given tekstsekvens.

    Afprøvning

    Denne kode lader dig teste modellen med dit eget input. Du skriver et par ord, trykker på Enter, og modellen forudsiger det næste ord. Hvis du skriver noget ugyldigt, bliver du bedt om at prøve 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}")

    Vores kode vil skabe denne form for grænseflade. Hvor du kan skrive præfikser og trykke enter.

    Indtast præfiks

    Når du har indtastet enter, får du dit næste ord

    Forudsagt ord

    Det er en måde at demonstrere, hvordan næste-ords forudsigelsesmodellen kan bruges i praksis.

    Udfordringer:

  • Nøjagtigheden af ​​næste ords forudsigelse afhænger i høj grad af størrelsen og kvaliteten af ​​træningsdataene. Begrænsede eller støjende data kan føre til mindre præcise forudsigelser.
  • Hvis et ord i inputteksten ikke findes i træningsdataene, kan det ikke forudsiges nøjagtigt.
  • Tegnsætning kan påvirke forudsigelsesnøjagtigheden, især på sprog som engelsk, hvor ordgrænser kan være tvetydige.
  • Forkert tokenisering eller forbehandling kan føre til forkerte forudsigelser.
  • Mange ord har flere betydninger, og konteksten gør dem ikke altid entydige.
  • Hvordan man forbedrer nøjagtigheden

  • Brug af et større og mere mangfoldigt datasæt forbedrer modellens forståelse af forskellige sammenhænge og ord.
  • Overvej at bruge højere ordens N-gram (f.eks. trigrammer) for mere kontekst, men afbalancer det med datatilgængelighed.
  • Indsaml brugerfeedback og forbedrer løbende modellen baseret på brug i den virkelige verden.
  • Evaluer regelmæssigt modellens ydeevne med passende målinger og juster strategier i overensstemmelse hermed.
  • Du kan implementere neurale netværksbaserede modeller, såsom LSTM eller Transformer, til mere kompleks kontekstmodellering.
  • Afsluttende ord

    I en verden af ​​naturlig sprogbehandling er det en værdifuld færdighed at forudsige det næste ord. Med disse 5 enkle Python-trin har du fået et kraftfuldt værktøj til hurtigere kommunikation og smartere teknologi.

    Bliv ved med at udforske og bruge denne viden til at forbedre dine sprogoplevelser. Rejsen er lige begyndt!

    Du kan også udforske nogle bedste måder at downloade filer fra en URL ved hjælp af Python.