Prevedere la parola successiva in 5 semplici passaggi utilizzando Python

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.

Applicazioni della previsione della parola successiva

  • La previsione della parola successiva migliora la velocità e la precisione della digitazione sui dispositivi mobili, rendendola estremamente utile per le app di messaggistica e comunicazione.
  • I motori di ricerca utilizzano il testo predittivo per suggerire query di ricerca, consentendo agli utenti di trovare rapidamente informazioni pertinenti.
  • Aiuta a correggere automaticamente le parole errate e a ridurre gli errori di battitura in varie applicazioni, inclusi elaboratori di testi e client di posta elettronica.
  • Sviluppatori e programmatori traggono vantaggio dal testo predittivo durante la scrittura del codice, poiché suggerisce funzioni, metodi e nomi di variabili pertinenti.
  • Le piattaforme online e i servizi di streaming utilizzano il testo predittivo per consigliare contenuti pertinenti agli utenti.
  • 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:

  • L’accuratezza della previsione della parola successiva dipende fortemente dalla dimensione e dalla qualità dei dati di addestramento. Dati limitati o rumorosi possono portare a previsioni meno accurate.
  • Se una parola nel testo di input non esiste nei dati di addestramento, non può essere prevista con precisione.
  • La punteggiatura può influire sull’accuratezza della previsione, soprattutto in lingue come l’inglese, dove i confini delle parole possono essere ambigui.
  • Una tokenizzazione o una preelaborazione errata può portare a previsioni errate.
  • Molte parole hanno molteplici significati e il contesto potrebbe non sempre chiarirle.
  • Come migliorare la precisione

  • L’utilizzo di un set di dati più ampio e diversificato migliora la comprensione del modello di vari contesti e parole.
  • Prendi in considerazione l’utilizzo di N-grammi di ordine superiore (ad esempio, trigrammi) per un maggiore contesto, ma bilancialo con la disponibilità dei dati.
  • Raccogli il feedback degli utenti e migliora continuamente il modello in base all’utilizzo nel mondo reale.
  • Valuta regolarmente le prestazioni del modello con metriche appropriate e adatta le strategie di conseguenza.
  • È possibile implementare modelli basati su reti neurali, come LSTM o Transformer, per una modellazione del contesto più complessa.
  • 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.