Prezicerea cuvântului următor în 5 pași simpli folosind Python

Probabil ați observat că, atunci când introduceți text pe telefonul mobil, acesta anticipează următorul cuvânt pe care doriți să-l folosiți. Aceasta este o funcție care accelerează scrierea și vă ajută să economisiți timp.

Este foarte practic. Fie că trimiteți mesaje, navigați pe internet sau scrieți un email, sugestiile de text pot fi de mare ajutor. Dar v-ați întrebat vreodată cum reușește telefonul să ghicească cuvântul următor?

În acest ghid, vă voi arăta cum să construiți un sistem de predicție a cuvintelor folosind Python.

Pentru a înțelege mai ușor, ar fi util să aveți cunoștințe de bază despre NLP (Procesarea Limbajului Natural). Dacă sunteți nou în acest domeniu, nu vă faceți griji; puteți obține rapid informațiile esențiale din articolul nostru „NLP simplificat”, unde explicăm lucrurile într-un mod accesibil.

Aplicații ale anticipării cuvântului următor

  • Anticiparea cuvântului următor îmbunătățește viteza și acuratețea scrierii pe dispozitive mobile, fiind extrem de utilă în aplicațiile de mesagerie text și de comunicare.
  • Motoarele de căutare utilizează textul predictiv pentru a sugera interogări, ajutând utilizatorii să găsească rapid informațiile relevante.
  • Contribuie la corectarea automată a cuvintelor scrise greșit și reduce erorile de tastare în diverse aplicații, cum ar fi editoarele de text și clienții de email.
  • Dezvoltatorii și programatorii beneficiază de textul predictiv atunci când scriu cod, deoarece acesta le sugerează funcții, metode și nume de variabile relevante.
  • Platformele online și serviciile de streaming folosesc textul predictiv pentru a recomanda conținut relevant utilizatorilor.

Haideți să începem să învățăm împreună despre această tehnică fascinantă din NLP și despre cum ne poate fi de folos, analizând fiecare pas în detaliu.

Pregătirea Datelor

Mai întâi, trebuie să importăm bibliotecile necesare care sunt esențiale pentru proiectul nostru. Apoi, vom defini un text de exemplu, pe care îl vom utiliza pentru antrenament. Puteți înlocui acest text cu orice date text doriți.

De asemenea, puteți folosi un set de date cu date text, pe care le puteți găsi cu ușurință pe Kaggle sau pe o platformă similară.

# Importă Bibliotecile Necesare
import nltk
from nltk import ngrams
from collections import defaultdict
import random

Exemplu de date text, pe care le vom folosi pentru anticiparea cuvântului următor.

# Date Text Exemplu
text = """
Într-o noapte luminoasă, înstelată, în orășelul straniu și enigmatic Serendipity, 
o tânără exploratoare curioasă pe nume Amelia a pornit într-o aventură extraordinară. 
Cu lupa sa de încredere în mână și un spirit neînfricat, ea s-a lansat într-o căutare pentru a descoperi comoara eluzivă Elysian, ascunsă adânc în pădurea labirintică. 
În timp ce se aventura prin pădurile verzi, Amelia a întâlnit o veveriță excentrică, vorbitoare, pe nume Percival, care vorbea în ghicitori și o ghida spre locul unde se afla comoara. 
Pădurea era plină de flora bioluminescentă, luminându-i calea cu un caleidoscop de culori. 
Amelia a ajuns curând la o prăpastie cu vedere spre o cascadă azurie impresionantă, ale cărei ape căzătoare ecouiau un cântec melodios. 
Lângă cascadă se afla o piatră colosală, acoperită cu mușchi, cu inscripții criptice. 
Cu îndrumarea lui Percival, ea a descifrat rune vechi și a descoperit intrarea în tezaurul. 
Înăuntru, ea a descoperit un cufăr opulent, împodobit cu filigranuri aurii complicate. 
La deschiderea acestuia, o simfonie de bijuterii strălucitoare, pietre prețioase radiante și artefacte sclipitoare au întâmpinat-o cu o strălucire eterică. 
Comoara Elysian era a ei, o mărturie a curajului ei neînfricat și a curiozității insațiabile. 
Întoarcerea Ameliei în Serendipity a fost sărbătorită cu o veselie jubilantă, iar călătoria ei remarcabilă a devenit o legendă, inspirând alții să pornească în propriile lor aventuri în tărâmul minunat al imaginației și descoperirii.
"""

Puteți înlocui acest text conform preferințelor dvs.

Tokenizare

Vom preprocesa textul și îl vom tokeniza. Tokenizarea este procesul de împărțire a textului în cuvinte sau simboluri individuale. Vom folosi biblioteca nltk din Python pentru a tokeniza textul.

Pentru a ne asigura că modelul nostru se concentrează pe cuvinte și ignoră majusculele sau semnele de punctuație, efectuăm preprocesare. Acest pas implică transformarea tuturor cuvintelor în litere mici și eliminarea oricăror semne de punctuație.

import nltk
# Tokenizarea textului în cuvinte
words = nltk.word_tokenize(text)

# Preprocesarea cuvintelor (conversia la litere mici, eliminarea semnelor de punctuație)
words = [word.lower() for word in words if word.isalnum()]

words

După preprocesare și tokenizare, vom obține toate cuvintele cu litere mici și fără semne de punctuație.

Cuvinte tokenizate

Construirea de N-grame

În această etapă, vom crea N-grame, care sunt secvențe de N cuvinte în procesarea limbajului natural (NLP).

În codul nostru, vom crea bigrame, unde N este egal cu 2, ceea ce înseamnă că fiecare N-gramă va conține perechi de cuvinte.

Acesta este un pas esențial în construirea unui model de predicție pentru cuvântul următor, deoarece ne permite să analizăm secvențele de cuvinte și să prezicem următorul cuvânt pe baza contextului oferit de cuvintele N-1 anterioare.

# Definim ordinea modelului N-gram (N=2 pentru bigrame)
N = 2

# Creăm N-grame din cuvintele tokenizate
ngrams_list = list(ngrams(words, N))

# Creăm un defaultdict pentru a stoca N-grame și frecvența lor
ngram_freq = defaultdict(int)
for ngram in ngrams_list:
    ngram_freq[ngram] += 1

Aceste N-grame servesc drept bază pentru antrenarea și implementarea modelului nostru de predicție a cuvântului următor.

Definirea Funcției

În acest pas, creăm o funcție numită „predict_next_word” care estimează următorul cuvânt dintr-o frază pe baza unui prefix dat (o secvență de cuvinte).

Această funcție este esențială în modelul de predicție a cuvântului următor, deoarece preia contextul furnizat de prefix și îl folosește pentru a face o predicție despre cuvântul următor cel mai probabil.

Voi explica ce se întâmplă în acest proces folosind un limbaj simplu:

  • Funcția analizează toate perechile de cuvinte (bigrame) din datele noastre text care încep cu prefixul dat (cuvintele dinaintea cuvântului lipsă).
  • Contorizează cât de des apare fiecare cuvânt în acele perechi și le sortează în funcție de frecvență, de la cel mai frecvent la cel mai puțin frecvent.
  • Apoi, funcția sugerează cuvântul care apare cel mai des ca fiind următorul cuvânt după prefixul dat.
# Definim Funcția
def predict_next_word(prefix):
    # Filtram N-gramele care încep cu prefixul dat
    matching_ngrams = [(ngram, freq) for ngram, freq in ngram_freq.items() if ngram[:-1] == prefix]

    if not matching_ngrams:
        return "Nu există nicio predicție disponibilă."

    # Sortăm N-gramele după frecvență, în ordine descrescătoare
    sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True)

    # Selectăm N-grama cu cea mai mare frecvență ca predicție
    prediction = sorted_ngrams[0][0][-1]

    return prediction

Este o parte crucială a modelului de predicție a cuvântului următor, deoarece ne permite să generăm sugestii relevante din punct de vedere contextual pentru următorul cuvânt dintr-o anumită secvență de text.

Testarea

Acest cod vă permite să testați modelul cu propria dvs. intrare. Scrieți câteva cuvinte, apăsați Enter, iar modelul va prezice următorul cuvânt. Dacă introduceți ceva nevalid, veți fi solicitat să încercați din nou.

# Puteți folosi acest cod pentru a testa interactiv modelul cu inputul utilizatorului
user_input = input("Introduceți un prefix pentru predicția următorului cuvânt: ").lower().split()
if len(user_input) != N - 1:
    print("Vă rugăm să introduceți un prefix valid.")
else:
    prefix = tuple(user_input)
    prediction = predict_next_word(prefix)
    print(f"Predicția următorului cuvânt: {prediction}")

Codul nostru va crea acest tip de interfață. Aici puteți introduce prefixe și apăsați enter.

Introduceți Prefixul

După ce ați apăsat Enter, veți primi următorul cuvânt.

Cuvântul prezis

Aceasta este o modalitate de a demonstra modul în care modelul de predicție a cuvântului următor poate fi utilizat în practică.

Provocări:

  • Acuratețea predicției cuvântului următor depinde în mare măsură de dimensiunea și calitatea datelor de antrenament. Datele limitate sau incorecte pot duce la predicții mai puțin precise.
  • Dacă un cuvânt din textul introdus nu există în datele de antrenament, acesta nu poate fi prezis cu acuratețe.
  • Punctuația poate afecta acuratețea predicțiilor, în special în limbi precum engleza, unde granițele cuvintelor pot fi ambigue.
  • Tokenizarea sau preprocesarea incorectă poate duce la predicții incorecte.
  • Multe cuvinte au mai multe înțelesuri, iar contextul poate să nu le dezambiguizeze întotdeauna.

Cum să Îmbunătățiți Acuratețea

  • Utilizarea unui set de date mai mare și mai divers îmbunătățește înțelegerea de către model a diferitelor contexte și cuvinte.
  • Luați în considerare utilizarea N-gramelor de ordin superior (de exemplu, trigrame) pentru a avea mai mult context, dar echilibrați acest lucru cu disponibilitatea datelor.
  • Colectați feedback-ul utilizatorilor și îmbunătățiți continuu modelul pe baza utilizării reale.
  • Evaluați în mod regulat performanța modelului cu valori adecvate și ajustați strategiile în consecință.
  • Puteți implementa modele bazate pe rețele neuronale, cum ar fi LSTM sau Transformer, pentru a modela un context mai complex.

Cuvinte Finale

În lumea procesării limbajului natural, predicția cuvântului următor este o abilitate valoroasă. Cu acești 5 pași simpli în Python, ați obținut un instrument puternic pentru o comunicare mai rapidă și o tehnologie mai inteligentă.

Continuați să explorați și să folosiți aceste cunoștințe pentru a vă îmbunătăți experiențele lingvistice. Călătoria abia a început!

De asemenea, puteți explora câteva dintre cele mai bune modalități de a descărca fișiere de la o adresă URL folosind Python.