Предвиђање следеће речи у 5 једноставних корака помоћу Питхон-а

Можда сте приметили да ваш мобилни телефон, током куцања, нуди предлоге за следећу реч. Ова функција убрзава писање и штеди ваше време.

То је веома практично. Без обзира да ли шаљете поруке, претражујете интернет или састављате имејл, предвиђање текста може бити од изузетне помоћи. Међутим, да ли сте се икада питали како ваш уређај зна коју реч да предложи?

У овом чланку ћу вам представити процес креирања система за предвиђање речи користећи програмски језик Python.

За лакше разумевање, пожељно је да имате основно знање о обради природног језика (NLP). Уколико сте нови у овој области, не брините, можете стећи основно знање из нашег чланка „NLP поједностављено“, где је све детаљно објашњено.

Примене предвиђања наредне речи

  • Предвиђање следеће речи поспешује брзину и тачност куцања на мобилним уређајима, што је посебно корисно за апликације за комуникацију и размену порука.
  • Претраживачи користе предвиђање текста за предлагање упита за претрагу, омогућавајући корисницима брже и једноставније проналажење релевантних информација.
  • Помаже у аутоматском исправљању грешака приликом куцања и смањењу могућих пропуста у различитим апликацијама, укључујући обрађиваче текста и клијенте за електронску пошту.
  • Програмери могу да користе предвиђање текста приликом писања кода, јер нуди предлоге за релевантне функције, методе и називе променљивих.
  • Онлајн платформе и сервиси за стримовање користе предвиђање текста како би препоручили релевантан садржај корисницима.

Кренимо заједно у истраживање ове корисне NLP технике и прођимо кроз сваки корак детаљно.

Припрема података

На почетку, морамо да увеземо неопходне библиотеке које су кључне за реализацију нашег пројекта. Затим, дефинисаћемо узорак текста који ће се користити за тренирање модела. Овај текст можете заменити било којим другим текстуалним подацима по вашем избору.

Такође, можете користити скуп података са текстом, који је лако доступан на платформама као што је Kaggle.

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

Пример текстуалних података које ћемо користити за предвиђање наредне речи.

text = """
У давна времена, у чаробном градићу под именом Серандипити, обасјаном звезданим небом,
млада авантуристкиња по имену Амелија кренула је у необичну авантуру.
Са својом поузданом лупом у руци и непоколебљивим духом, започела је потрагу за недостижним Елизијским благом скривеним у лавиринтској шуми.
Док је лутала кроз бујне шуме, Амелија је наишла на чудну веверицу која је говорила по имену Персивал, која је причала у загонеткама и упућивала је ка место благом.
Шума је била препуна биолуминисцентне флоре, која је осветљавала њен пут калеидоскопом боја.
Амелија је убрзо стигла до ивице литице са које се пружао поглед на прелепи, плави водопад, чија је каскадна вода одјекивала мелодичном серенадом.
Поред водопада стајао је огроман, маховином обрастао камен са тајанственим натписима.
Уз Персивалово упутство, она је дешифровала древне руне и открила улаз у ризницу.
Унутра је открила раскошну ковчег украшен сложеним, златним филиграном.
Када га је отворила, симфонија сјајних драгуља, блиставих драгог камења и светлуцавих артефаката поздравила ју је небеским сјајем.
Елизијско благо је било њено, доказ њене неустрашиве храбрости и незаситне радозналости.
Амелијин повратак у Серандипити прослављен је радосним слављем, а њено изванредно путовање постало је легенда, инспиришући друге да крену у своје авантуре у чудесни свет маште и открића.
"""

Овај текст можете заменити другим, у зависности од ваших потреба.

Токенизација

Прво ћемо припремити наш текст и извршити токенизацију. Токенизација је процес дељења текста на појединачне речи или лексеме. За то користимо nltk библиотеку у Python-у.

Да бисмо били сигурни да се наш модел фокусира на речи, а не на велика и мала слова или интерпункцију, вршимо претходну обраду. Овај корак подразумева претварање свих речи у мала слова и уклањање свих знакова интерпункције.

import nltk

words = nltk.word_tokenize(text)

words = [word.lower() for word in words if word.isalnum()]

words

Након припреме и токенизације, добијамо све речи у малим словима и без знакова интерпункције.

Токенизоване речи.

Изградња Н-грама

У овом кораку ћемо креирати Н-граме, односно секвенце од N речи у оквиру обраде природног језика (NLP).

У нашем коду ћемо креирати биграме, где је N једнако 2, што значи да ће се сваки Н-грам састојати од парова речи.

Ово је основни корак у конструисању модела за предвиђање следеће речи, јер нам омогућава да анализирамо секвенце речи и предвидимо наредну реч на основу контекста који дају претходне N-1 речи.

N = 2

ngrams_list = list(ngrams(words, N))

ngram_freq = defaultdict(int)
for ngram in ngrams_list:
    ngram_freq[ngram] += 1

Ови Н-грами служе као градивни елементи за тренирање и имплементацију нашег модела за предвиђање следеће речи.

Дефинисање функције

У овом кораку, креирамо функцију под називом ‘predict_next_word’ која предвиђа наредну реч у реченици на основу датог префикса (низ речи).

Ова функција је кључна у моделу за предвиђање следеће речи, јер користи контекст који обезбеђује префикс и користи га за предвиђање највероватније следеће речи.

Објаснићу шта се дешава у овом процесу једноставним речима:

  • Функција посматра све парове речи (биграме) у нашим текстуалним подацима који почињу са наведеним префиксом (речи испред речи која недостаје).
  • Рачуна колико се често свака реч појављује у тим паровима и сортира их по учесталости, од најчешће до најмање уобичајене.
  • Функција затим предлаже реч која се најчешће јавља као следећа реч након датог префикса.
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 "No prediction available."


    sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True)

    prediction = sorted_ngrams[0][0][-1]

    return prediction

То је кључни део модела за предвиђање следеће речи, омогућавајући нам да генеришемо контекстуално релевантне предлоге за следећу реч у датом низу текста.

Тестирање

Овај код вам омогућава да тестирате модел користећи ваш унос. Унесете неколико речи, притиснете Ентер и модел предвиђа следећу реч. Ако унесете нешто неважеће, биће вам затражено да покушате поново.

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}")

Наш код ће створити овакав интерфејс. Где можете уписати префикс и притиснути ентер.

Унесите префикс.

Након уноса ентер, добићете следећу реч.

Предвиђена реч.

Ово је начин да се прикаже како се модел за предвиђање следеће речи може користити у пракси.

Изазови:

  • Тачност предвиђања следеће речи у великој мери зависи од величине и квалитета података за тренирање. Ограничени или нечисти подаци могу довести до мање тачних предвиђања.
  • Ако се реч у улазном тексту не налази у подацима за тренирање, не може се тачно предвидети.
  • Интерпункцијски знаци могу утицати на тачност предвиђања, посебно на језицима као што је енглески, где границе речи могу бити нејасне.
  • Неправилна токенизација или претходна обрада могу довести до нетачних предвиђања.
  • Многе речи имају више значења, а контекст их не може увек раздвојити.

Како побољшати тачност

  • Употреба већег и разноврснијег скупа података побољшава разумевање модела различитих контекста и речи.
  • Размислите о употреби Н-грама вишег реда (нпр. триграма) за више контекста, али то треба уравнотежити са доступношћу података.
  • Прикупите повратне информације од корисника и стално побољшавајте модел на основу стварне употребе.
  • Редовно процењујте перформансе модела користећи одговарајуће метрике и прилагођавајте стратегије на основу тога.
  • Можете имплементирати моделе засноване на неуронским мрежама, као што су LSTM или Transformer, за сложеније моделирање контекста.

Завршна реч

У свету обраде природног језика, предвиђање следеће речи је драгоцена вештина. Са ових 5 једноставних корака у Python-у, стекли сте моћан алат за бржу комуникацију и паметнију технологију.

Наставите да истражујете и користите ово знање за побољшање вашег језичког искуства. Путовање је тек почело!

Такође можете истражити неке од најбољих начина за преузимање датотека са URL-а користећи Python.