Forutsi neste ord i 5 enkle trinn ved hjelp av Python

Du har kanskje observert at når du skriver på mobiltelefonen, forutsier den neste ord du kanskje vil bruke. Det er en funksjon som gjør skrivingen raskere og sparer tid.

Det er mer praktisk. Enten du sender tekstmeldinger, søker på internett eller skriver en e-post, kan prediktiv tekst være veldig nyttig. Men har du noen gang lurt på hvordan mobilen din vet hvilket ord som skal foreslås neste gang?

I denne veiledningen vil jeg vise deg hvordan du lager ordprediksjoner ved hjelp av Python.

For å følge med på en enkel måte, hjelper det å ha en grunnleggende forståelse av NLP. Hvis du er ny på dette, ikke bekymre deg; du kan raskt få det grunnleggende fra artikkelen vår «NLP Simplified», hvor vi forklarer det enkelt.

Applikasjoner av Next Word Prediction

  • Neste ord-prediksjon forbedrer hastigheten og nøyaktigheten til å skrive på mobile enheter, noe som gjør det svært gunstig for tekstmeldinger og kommunikasjonsapper.
  • Søkemotorer bruker prediktiv tekst for å foreslå søkeord, noe som gjør det enklere for brukere å finne relevant informasjon raskt.
  • Det hjelper med å automatisk korrigere feilstavede ord og redusere skrivefeil i ulike applikasjoner, inkludert tekstbehandlere og e-postklienter.
  • Utviklere og programmerere drar nytte av prediktiv tekst når de skriver kode, da den foreslår relevante funksjoner, metoder og variabelnavn.
  • Nettplattformer og strømmetjenester bruker prediktiv tekst for å anbefale relevant innhold til brukere.
  • La oss begynne å lære om denne interessante NLP-teknikken sammen og hvordan den er nyttig, og gå tydelig gjennom hvert trinn.

    Dataforberedelse

    Først av alt må vi importere de nødvendige bibliotekene som er viktige for prosjektet vårt. Etter det vil vi definere eksempeltekst, som skal brukes til opplæring. Du kan erstatte denne teksten med hvilken som helst tekstdata du ønsker.

    Du kan også bruke et datasett med tekstdata, som du enkelt finner på Kaggle eller en lignende plattform.

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

    Eksempeltekstdata, som vil bli brukt til å forutsi neste 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 teksten i henhold til dine krav.

      7 beste programvare for Mac-datagjenoppretting

    Tokenisering

    Vi vil forhåndsbehandle teksten vår og tokenisere den. Tokenisering er prosessen med å dele opp teksten i individuelle ord eller tokens. Vi bruker nltk-biblioteket i Python for å tokenisere teksten vår.

    For å sikre at modellen vår fokuserer på ord og ignorerer store og små bokstaver eller tegnsetting, utfører vi forhåndsbehandling. Dette trinnet innebærer å konvertere alle ord til små bokstaver og fjerne tegnsetting.

    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

    Etter forbehandling og tokenisering vil vi få alle ord med små bokstaver og uten tegnsetting.

      Distribuert cloud computing forklart på 5 minutter eller mindre

    Tokeniserte ord

    Bygge N-gram

    I dette trinnet skal vi lage N-gram, som er sekvenser av N ord i naturlig språkbehandling (NLP).

    I koden vår skal vi lage bigrammer, der N er lik 2, noe som betyr at hvert N-gram vil bestå av par med ord.

    Dette er et grunnleggende trinn i å bygge en prediksjonsmodell for det neste ordet fordi det lar oss analysere ordsekvenser og forutsi neste ord basert på konteksten gitt av de forrige N-1 ordene.

    # 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-grammene fungerer som byggesteinene for opplæring og implementering av vår neste-ords prediksjonsmodell.

    Definer funksjon

    I dette trinnet lager vi en funksjon kalt «forutsi_neste_ord» som gjetter neste ord i en setning basert på et gitt prefiks (en rekkefølge av ord).

    Denne funksjonen er avgjørende i den neste ordprediksjonsmodellen, siden den tar konteksten gitt av prefikset og bruker den til å lage en prediksjon om det mest sannsynlige neste ordet.

    Jeg vil forklare hva som skjer i denne prosessen med enkle ord:

    • Funksjonen ser på alle ordparene (bigrammene) i tekstdataene våre som starter med det oppgitte prefikset (ordene før det manglende ordet).
    • Den teller hvor ofte hvert ord vises i disse parene og sorterer dem etter frekvens, fra de fleste til minst vanlige.
    • Funksjonen foreslår da det ordet som forekommer oftest som det neste ordet etter det gitte prefikset.
    # 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 avgjørende del av den neste ordprediksjonsmodellen, siden den lar oss generere kontekstuelt relevante forslag for det neste ordet i en gitt tekstsekvens.

      10 treningstimer for å hjelpe deg med gjenoppretting av keisersnittet

    Testing

    Denne koden lar deg teste modellen med din egen inngang. Du skriver noen få ord, trykker på Enter, og modellen spår neste ord. Hvis du skriver noe ugyldig, blir du bedt om å prøve på nytt.

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

    Koden vår vil lage denne typen grensesnitt. Hvor du kan skrive prefikser og trykke enter.

    Skriv inn prefiks

    Når du har skrevet inn enter, får du ditt neste ord

    Forutsagt ord

    Det er en måte å demonstrere hvordan neste-ords prediksjonsmodellen kan brukes i praksis.

    Utfordringer:

  • Nøyaktigheten av neste ords prediksjon avhenger sterkt av størrelsen og kvaliteten på treningsdataene. Begrensede eller støyende data kan føre til mindre nøyaktige spådommer.
  • Hvis et ord i inndatateksten ikke finnes i treningsdataene, kan det ikke forutsies nøyaktig.
  • Tegnsetting kan påvirke prediksjonsnøyaktigheten, spesielt på språk som engelsk, der ordgrenser kan være tvetydige.
  • Feil tokenisering eller forhåndsbehandling kan føre til feil spådommer.
  • Mange ord har flere betydninger, og konteksten kan ikke alltid disambiguere dem.
  • Hvordan forbedre nøyaktigheten

  • Bruk av et større og mer mangfoldig datasett forbedrer modellens forståelse av ulike kontekster og ord.
  • Vurder å bruke høyere ordens N-gram (f.eks. trigram) for mer kontekst, men balanser det med datatilgjengelighet.
  • Samle tilbakemeldinger fra brukere og forbedre modellen kontinuerlig basert på bruk i den virkelige verden.
  • Evaluer regelmessig modellens ytelse med passende beregninger og juster strategier deretter.
  • Du kan implementere nevrale nettverksbaserte modeller, for eksempel LSTM eller Transformer, for mer kompleks kontekstmodellering.
  • Siste ord

    I en verden av naturlig språkbehandling er det en verdifull ferdighet å forutsi neste ord. Med disse 5 enkle Python-trinnene har du fått et kraftig verktøy for raskere kommunikasjon og smartere teknologi.

    Fortsett å utforske og bruke denne kunnskapen til å forbedre språkopplevelsene dine. Reisen har akkurat begynt!

    Du kan også utforske noen beste måter å laste ned filer fra en URL ved hjelp av Python.