Bygg din egen ordprediktor med Python: 5 enkle steg!

Utforsk Kunsten med Ordprediksjon ved Hjelp av Python

Har du noen gang lagt merke til hvordan mobiltelefonen din foreslår det neste ordet mens du skriver? Denne funksjonen gjør det raskere og mer effektivt å skrive.

Dette er ikke bare praktisk, det er også en enorm hjelp. Uansett om du skriver meldinger, gjør nettsøk eller komponerer en e-post, kan prediktiv tekst være en uvurderlig ressurs. Men har du noen gang tenkt over hvordan mobilen din klarer å forutse det neste ordet?

I denne veiledningen skal vi undersøke hvordan du kan bygge din egen ordprediksjonsmodell med Python.

For å lettere kunne følge med, er det en fordel å ha en grunnleggende forståelse av NLP. Hvis du er nybegynner, er det ingen fare; du kan raskt lære det grunnleggende ved å lese vår artikkel «NLP Simplified», der vi forklarer konseptene på en lettfattelig måte.

Anvendelser av Ordprediksjon

  • Ordprediksjon øker hastigheten og presisjonen ved skriving på mobile enheter, noe som er fordelaktig for meldingsapper og kommunikasjon.
  • Søkemotorer bruker prediktiv tekst for å foreslå søkeord, som hjelper brukerne med å finne relevant informasjon raskt.
  • Det hjelper til med å korrigere stavefeil automatisk og redusere skrivefeil i diverse applikasjoner, inkludert tekstbehandlere og e-postprogrammer.
  • Programutviklere og koderne nyter godt av prediktiv tekst ved koding, der den foreslår passende funksjoner, metoder og variabelnavn.
  • Nettplattformer og strømmetjenester bruker prediktiv tekst til å anbefale relevant innhold til brukerne.

La oss dykke ned i denne fascinerende NLP-teknikken og se på hvordan den kan være nyttig, steg for steg.

Forberedelse av Data

Først må vi importere de nødvendige bibliotekene som er fundamentale for prosjektet vårt. Etter det definerer vi en eksempeltekst, som vil fungere som vår treningsdata. Denne teksten kan erstattes med hvilken som helst annen tekst du ønsker.

Alternativt kan du bruke et tekstdatasett fra Kaggle eller lignende plattformer.

    import nltk
    from nltk import ngrams
    from collections import defaultdict
    import random
  

Her er et utdrag av tekstdata som vil bli brukt for å forutse det neste ordet.

    text = """
    I en eventyrlig, stjernedekket natt i den sjarmerende, gåtefulle byen Lykketreff,
    begynte en nysgjerrig ung oppdagelsesreisende ved navn Amelia et uvanlig eventyr.
    Med sitt pålitelige forstørrelsesglass i hånden og en ukuelig ånd, dro hun ut på en ferd for å finne den mystiske Elysian-skatten, gjemt dypt inne i den labyrintiske skogen.
    Mens hun utforsket de grønne skogområdene, møtte Amelia et eksentrisk, snakkende ekorn ved navn Percival, som snakket i gåter og ledet henne mot skattens gjemmested.
    Skogen var strålende opplyst av selvlysende flora, som malte stien hennes med en kaleidoskopisk fargepalett.
    Amelia nådde snart en avsats som så ut over et imponerende, asurblått fossefall, der det brusende vannet skapte en melodisk kaskade.
    Ved siden av fossen stod en enorm, mosegrodd stein med kryptiske inskripsjoner.
    Med Percivals hjelp tolket hun de gamle runene og oppdaget inngangen til skattkammeret.
    Inni fant hun en overdådig kiste smykket med intrikate, gylne filigranarbeider.
    Da hun åpnet den, ble hun møtt av en symfoni av glitrende juveler, strålende edelstener og skinnende artefakter med en eterisk glans.
    Elysian-skatten var hennes, et bevis på hennes urokkelige mot og umettelige nysgjerrighet.
    Amelias tilbakekomst til Lykketreff ble feiret med jublende festivitas, og hennes bemerkelsesverdige reise ble en legende som inspirerte andre til å legge ut på sine egne eventyr i fantasien og oppdagelsens vidunderlige rike.
    """
  

Du kan enkelt endre teksten etter dine behov.

Tokenisering

Vi må forberede og tokenisere teksten vår. Tokenisering er prosessen med å dele teksten i individuelle ord eller tokens. Vi bruker nltk-biblioteket i Python for å tokenisere teksten vår.

For å sørge for at modellen vår fokuserer på selve ordene og ignorerer forskjeller i store og små bokstaver, eller tegnsetting, gjennomfører vi en forberedende behandling. Dette trinnet innebærer å konvertere alle ord til små bokstaver og fjerne tegnsetting.

    import nltk
    
    words = nltk.word_tokenize(text)
    
    words = [word.lower() for word in words if word.isalnum()]
    
    words
  

Etter forberedelse og tokenisering vil vi få alle ord i små bokstaver og uten tegnsetting.

Konstruksjon av N-gram

I dette steget skaper vi N-gram, som er sekvenser av N ord brukt i naturlig språkbehandling (NLP).

I koden vår vil vi lage bigram, der N er 2. Dette betyr at hvert N-gram vil bestå av par med ord.

Dette er et viktig skritt i utviklingen av en modell som predikerer det neste ordet, fordi det gjør oss i stand til å analysere ordsekvenser og forutse det neste ordet basert på den konteksten som er gitt av de N-1 forrige ordene.

    N = 2
    
    ngrams_list = list(ngrams(words, N))
    
    ngram_freq = defaultdict(int)
    for ngram in ngrams_list:
        ngram_freq[ngram] += 1
  

Disse N-gram fungerer som byggesteinene for opplæringen og implementeringen av vår neste-ords prediksjonsmodell.

Definering av Funksjon

I dette steget skaper vi en funksjon som kalles «forutsi_neste_ord» som gjetter det neste ordet i en setning, basert på et gitt prefiks (en rekkefølge av ord).

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

La meg forklare hva som skjer i enkle ord:

  • Funksjonen ser på alle ordparene (bigram) i tekstdataene våre som starter med det gitte prefikset (ordene før det manglende ordet).
  • Den teller hvor ofte hvert ord vises i disse parene og sorterer dem etter frekvens, fra de mest til minst vanlige.
  • Funksjonen foreslår så det ordet som oftest forekommer som det neste ordet etter det gitte prefikset.
    def predict_next_word(prefix):
      matching_ngrams = [(ngram, freq) for ngram, freq in ngram_freq.items() if ngram[:-1] == prefix]
    
      if not matching_ngrams:
        return "Ingen forutsigelse tilgjengelig."
    
      sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True)
    
      prediction = sorted_ngrams[0][0][-1]
    
      return prediction
  

Den er en vesentlig del av ordprediksjonsmodellen, da den lar oss generere kontekstuelt relevante forslag til det neste ordet i en gitt tekstsekvens.

Testing

Denne koden gir deg muligheten til å teste modellen med din egen input. Du skriver noen få ord, trykker Enter og modellen forutsier det neste ordet. Hvis du skriver noe ugyldig, blir du bedt om å prøve igjen.

    user_input = input("Skriv inn et prefiks for neste-ord-prediksjon: ").lower().split()
    if len(user_input) != N - 1:
        print("Vennligst skriv inn et gyldig prefiks.")
    else:
        prefix = tuple(user_input)
        prediction = predict_next_word(prefix)
        print(f"Neste ord prediksjon: {prediction}")
  

Koden vår vil skape et grensesnitt som dette, der du kan skrive inn prefikser og trykke Enter.

Når du har trykket enter, vil du få ditt neste ord.

Dette er en demonstrasjon på hvordan neste-ords prediksjonsmodellen kan brukes i praksis.

Utfordringer

  • Nøyaktigheten til neste-ords prediksjon er sterkt avhengig av størrelsen og kvaliteten på treningsdataene. Begrensede eller støyende data kan føre til mindre presise spådommer.
  • Dersom et ord i inndatateksten ikke finnes i treningsdataene, kan det ikke forutsies nøyaktig.
  • Tegnsetting kan ha innvirkning på nøyaktigheten i prediksjonene, særlig i språk som engelsk, hvor ordgrenser kan være tvetydige.
  • Feil tokenisering eller forberedelse av data kan føre til feilaktige spådommer.
  • Mange ord har flere betydninger, og konteksten kan ikke alltid bidra til å avklare dem.

Hvordan Forbedre Nøyaktigheten

  • Å bruke 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 hold det i balanse med tilgjengelig data.
  • Samle tilbakemeldinger fra brukerne og forbedre modellen kontinuerlig basert på bruk i den virkelige verden.
  • Evaluer regelmessig modellens ytelse med passende beregninger og tilpass strategiene deretter.
  • Du kan implementere modeller basert på nevrale nettverk, som LSTM eller Transformer, for mer kompleks kontekstmodellering.

Siste Ord

I en verden av naturlig språkbehandling er det verdifullt å kunne forutsi det neste ordet. 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åkopplevelsen din. Reisen har akkurat startet!

Du kan også utforske de beste måtene for å laste ned filer fra en URL ved hjelp av Python.