Har du lagt märke till att din mobiltelefon gissar nästa ord när du skriver? Den här funktionen snabbar upp skrivandet och sparar värdefull tid.
Det är onekligen smidigt. Oavsett om du skickar SMS, söker på internet eller skriver e-post, kan förutsägande text vara en stor hjälp. Men har du funderat på hur din telefon vet vilket ord den ska föreslå?
I den här guiden kommer jag att visa dig hur man skapar ordprediktioner med Python.
För att hänga med ordentligt underlättar det att ha en grundläggande förståelse för NLP (Natural Language Processing). Om du är nybörjare på detta område, oroa dig inte. Du kan snabbt greppa grunderna i vår artikel ”NLP Simplified”, där vi förklarar det på ett enkelt sätt.
Användningsområden för förutsägelse av nästa ord
- Förutsägelse av nästa ord ökar hastigheten och precisionen vid textinmatning på mobila enheter, vilket är mycket användbart i meddelande- och kommunikationsappar.
- Sökmotorer använder prediktiv text för att föreslå söktermer, vilket gör det lättare för användare att hitta relevant information snabbt.
- Det hjälper till att automatiskt rätta stavfel och minska antalet skrivfel i olika program, inklusive ordbehandlare och e-postprogram.
- Utvecklare och programmerare kan dra nytta av prediktiv text vid kodskrivning, då den 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ändarna.
Låt oss tillsammans börja lära oss om den här spännande NLP-tekniken och hur den kan användas. Vi går igenom varje steg på ett tydligt sätt.
Dataförberedelse
Först måste vi importera de bibliotek som är nödvändiga för projektet. Därefter definierar vi ett exempel på text som ska användas för träning. Du kan byta ut den här texten med valfri textdata.
Du kan också använda ett dataset med textdata, som du enkelt kan hitta på Kaggle eller liknande plattformar.
# Import nödvändiga bibliotek import nltk from nltk import ngrams from collections import defaultdict import random
Här är ett exempel på textdata som används för att förutsäga nästa ord:
# Exempel på textdata text = """ I den mystiska staden Serendipity, under en klar natt med gnistrande stjärnor, började en nyfiken ung upptäcktsresande vid namn Amelia ett enastående äventyr. Med sitt pålitliga förstoringsglas i handen och en okuvlig vilja, gav hon sig ut på ett uppdrag för att hitta den svårfångade Elysian-skatten som var gömd djupt inne i den labyrintiska skogen. Under sin resa genom de gröna skogarna stötte Amelia på en excentrisk, talande ekorre som hette Percival. Han talade i gåtor och vägledde henne mot skattens plats. Skogen var fylld med självlysande växter som lyste upp hennes stig med ett kalejdoskop av färger. Amelia nådde snart en brant klippkant med utsikt över ett imponerande, azurblått vattenfall. Dess forsande vatten ekade med en melodiös serenad. Bredvid vattenfallet stod en enorm, mossbevuxen sten med kryptiska inskriptioner. Med Percivals hjälp dechiffrerade hon de gamla runorna och hittade ingången till skattkammaren. Inuti upptäckte hon en magnifik kista dekorerad med intrikata, guldfiligraner. När hon öppnade den, välkomnade en symfoni av skimrande juveler, strålande ädelstenar och glänsande artefakter henne med ett eteriskt sken. Elysian-skatten var hennes, ett bevis på hennes orädda mod och omättliga nyfikenhet. Amelias återkomst till Serendipity firades med glada festligheter och hennes anmärkningsvärda resa blev en legend som inspirerade andra att ge sig ut på egna äventyr i fantasins och upptäckternas underbara värld. """
Du kan anpassa texten efter egna preferenser.
Tokenisering
Vi förbereder och symboliserar vår text. Tokenisering är processen att dela upp texten i enskilda ord eller symboler. Vi använder biblioteket nltk i Python för att tokenisera texten.
För att säkerställa att vår modell fokuserar på ord och ignorerar skillnader i versaler och gemener, eller skiljetecken, genomför vi förbearbetning. Det här steget innebär att omvandla alla ord till gemener och ta bort eventuella skiljetecken.
import nltk # Tokenisera texten i ord words = nltk.word_tokenize(text) # Förbehandla orden (konvertera till gemener, ta bort skiljetecken) words = [word.lower() for word in words if word.isalnum()] words
Efter förbearbetning och tokenisering får vi alla orden i gemener utan skiljetecken.
Skapa N-gram
I det här steget skapar vi N-gram, som är sekvenser av N ord inom bearbetning av naturligt språk (NLP).
I vår kod skapar vi bigram, där N är lika med 2, vilket betyder att varje N-gram kommer att bestå av ordpar.
Det här är ett grundläggande steg i skapandet av en prediktionsmodell för nästa ord, eftersom det gör det möjligt för oss att analysera ordsekvenser och förutsäga nästa ord baserat på det sammanhang som de föregående N-1 orden ger.
# Definiera ordningen för N-grammodellen (N=2 för bigram) N = 2 # Skapa N-gram från de tokeniserade orden ngrams_list = list(ngrams(words, N)) # Skapa en defaultdict för att lagra N-gram och deras frekvens 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 prediktionsmodell för nästa ord.
Definiera en 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 angivet prefix (en sekvens av ord).
Denna funktion är avgörande i vår prediktionsmodell för nästa ord, eftersom den tar det sammanhang som prefixet ger och använder det för att göra en förutsägelse om vilket ord som är mest sannolikt att komma härnäst.
Jag ska förklara vad som händer under den här processen 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 det mest till det minst vanliga.
- Funktionen föreslår sedan det ord som förekommer oftast som nästa ord efter det givna prefixet.
# Definiera funktionen def predict_next_word(prefix): # Filtrera N-gram som börjar med det givna prefixet matching_ngrams = [(ngram, freq) for ngram, freq in ngram_freq.items() if ngram[:-1] == prefix] if not matching_ngrams: return "Ingen förutsägelse tillgänglig." # Sortera N-gram efter frekvens i fallande ordning sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True) # Välj N-gram med högst frekvens som förutsägelse prediction = sorted_ngrams[0][0][-1] return prediction
Den är en avgörande del av prediktionsmodellen, eftersom den tillåter oss att generera sammanhangsrelevanta förslag för nästa ord i en given textsekvens.
Testning
Den här koden låter dig testa modellen med dina egna inmatningar. Du skriver in några ord, trycker på Enter och modellen förutsäger nästa ord. Om du skriver något som inte är giltigt, uppmanas du att försöka igen.
# Du kan använda det här kodavsnittet för att testa modellen interaktivt med användarinmatning user_input = input("Ange ett prefix för att förutsäga nästa ord: ").lower().split() if len(user_input) != N - 1: print("Ange ett giltigt prefix.") else: prefix = tuple(user_input) prediction = predict_next_word(prefix) print(f"Förutsägelse av nästa ord: {prediction}")
Vår kod skapar en interaktionsyta där du kan skriva ett prefix och trycka på Enter.
Efter att du har tryckt på Enter får du ditt nästa ord.
Detta är ett praktiskt exempel på hur en prediktionsmodell för nästa ord kan användas.
Utmaningar:
- Noggrannheten i förutsägelsen av nästa ord är starkt beroende av storleken och kvaliteten på träningsdatan. Begränsad eller bristfällig data kan leda till mindre korrekta förutsägelser.
- Om ett ord i inmatningstexten inte finns i träningsdatan, kan det inte förutsägas korrekt.
- Skiljetecken kan påverka förutsägelsens noggrannhet, särskilt i språk som engelska, där ordgränserna 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 lyckas klargöra vilket ord som är avsett.
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 för olika sammanhang och ord.
- Överväg att använda N-gram av högre ordning (t.ex. trigram) för att få mer sammanhang, men balansera det med datatillgängligheten.
- Samla in användaråterkoppling och förbättra modellen kontinuerligt baserat på den faktiska användningen.
- Utvärdera regelbundet modellens prestanda med lämpliga mått och justera strategier därefter.
- Du kan implementera modeller baserade på neurala nätverk, såsom LSTM eller Transformer, för mer komplex kontextmodellering.
Slutord
I den fascinerande världen av bearbetning av naturligt språk är förmågan att förutsäga nästa ord en värdefull färdighet. Med dessa fem enkla steg i Python, har du skapat ett kraftfullt verktyg för snabbare kommunikation och smartare teknik.
Fortsätt utforska och använda den här kunskapen för att förbättra dina språkupplevelser. Resan har bara börjat!
Du kan också ta en titt på de bästa sätten att ladda ner filer från en URL med Python. …