Potresti aver osservato che quando digiti sul tuo cellulare, viene predetta la parola successiva che potresti voler utilizzare. È una funzionalità che rende la digitazione più veloce e ti fa risparmiare tempo.
È più conveniente. Che tu stia inviando SMS, effettuando ricerche su Internet o scrivendo un’e-mail, il testo predittivo può essere davvero utile. Ma ti sei mai chiesto come fa il tuo cellulare a sapere quale parola suggerire dopo?
In questa guida ti mostrerò come creare previsioni di parole utilizzando Python.
Per seguire facilmente, avere una conoscenza di base della PNL aiuta. Se sei nuovo a questo, non preoccuparti; puoi ottenere rapidamente le nozioni di base dal nostro articolo “PNL semplificata”, dove lo spieghiamo semplicemente.
Sommario:
Applicazioni della previsione della parola successiva
Iniziamo a conoscere insieme questa interessante tecnica di PNL e come è utile, esaminando chiaramente ogni passaggio.
Preparazione dei dati
Prima di tutto dobbiamo importare le librerie necessarie che sono importanti per il nostro progetto. Successivamente, definiremo un testo di esempio, che verrà utilizzato per la formazione. Puoi sostituire questo testo con qualsiasi dato di testo di tua scelta.
Puoi anche utilizzare un set di dati con dati di testo, che puoi facilmente trovare su Kaggle o su una piattaforma simile.
# Import Necessary Libraries import nltk from nltk import ngrams from collections import defaultdict import random
Dati di testo di esempio, che verranno utilizzati per prevedere la parola successiva.
# 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. """
Puoi sostituire questo testo secondo le tue esigenze.
Tokenizzazione
Preprocesseremo il nostro testo e lo tokenizzeremo. La tokenizzazione è il processo di suddivisione del testo in singole parole o token. Usiamo la libreria nltk in Python per tokenizzare il nostro testo.
Per garantire che il nostro modello si concentri sulle parole e ignori maiuscole e minuscole o la punteggiatura, eseguiamo la preelaborazione. Questo passaggio prevede la conversione di tutte le parole in minuscolo e la rimozione della punteggiatura.
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
Dopo la preelaborazione e la tokenizzazione, otterremo tutte le parole in minuscolo e senza punteggiatura.
Parole tokenizzate
Costruire N-grammi
In questo passaggio creeremo N-grammi, che sono sequenze di N parole nell’elaborazione del linguaggio naturale (PNL).
Nel nostro codice creeremo bigrammi, dove N è uguale a 2, il che significa che ogni N-gramma sarà composto da coppie di parole.
Questo è un passaggio fondamentale nella costruzione di un modello di previsione per la parola successiva perché ci consente di analizzare sequenze di parole e prevedere la parola successiva in base al contesto fornito dalle precedenti parole N-1.
# 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
Questi N-grammi fungono da elementi costitutivi per l’addestramento e l’implementazione del nostro modello di previsione della parola successiva.
Definire la funzione
In questo passaggio creiamo una funzione chiamata “predict_next_word” che indovina la parola successiva in una frase in base a un prefisso fornito (una sequenza di parole).
Questa funzione è cruciale nel modello di previsione della parola successiva, poiché prende il contesto fornito dal prefisso e lo utilizza per fare una previsione sulla parola successiva più probabile.
Spiegherò cosa succede in questo processo in parole semplici:
- La funzione esamina tutte le coppie di parole (bigrammi) nei nostri dati di testo che iniziano con il prefisso fornito (le parole prima della parola mancante).
- Conta la frequenza con cui ciascuna parola appare in quelle coppie e le ordina per frequenza, dalla più comune alla meno comune.
- La funzione suggerisce quindi la parola che ricorre più spesso come parola successiva dopo il prefisso specificato.
# 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
È una parte cruciale del modello di previsione della parola successiva, poiché ci consente di generare suggerimenti contestualmente rilevanti per la parola successiva in una determinata sequenza di testo.
Test
Questo codice ti consente di testare il modello con il tuo input. Digiti alcune parole, premi Invio e il modello prevede la parola successiva. Se digiti qualcosa di non valido, ti viene chiesto di riprovare.
# 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}")
Il nostro codice creerà questo tipo di interfaccia. Dove puoi scrivere i prefissi e premere Invio.
Inserisci il prefisso
Dopo aver inserito Invio, otterrai la parola successiva
Parola prevista
È un modo per dimostrare come il modello di previsione della parola successiva può essere utilizzato nella pratica.
Sfide:
Come migliorare la precisione
Parole finali
Nel mondo dell’elaborazione del linguaggio naturale, prevedere la parola successiva è un’abilità preziosa. Con questi 5 semplici passaggi Python, hai acquisito un potente strumento per comunicazioni più veloci e una tecnologia più intelligente.
Continua a esplorare e utilizzare questa conoscenza per migliorare le tue esperienze linguistiche. Il viaggio è appena iniziato!
Puoi anche esplorare alcuni modi migliori per scaricare file da un URL utilizzando Python.