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

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

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

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

Да бисте лако пратили, помаже вам основно разумевање НЛП-а. Ако сте нови у овоме, не брините; можете брзо добити основе из нашег чланка „НЛП поједностављени“, где то једноставно објашњавамо.

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

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

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

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

    Такође можете користити скуп података са текстуалним подацима, које можете лако пронаћи на Каггле-у или сличној платформи.

    # Import Necessary Libraries
    
    import nltk
    from nltk import ngrams
    from collections import defaultdict
    import random

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

    # 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.
    """
    

    Овај текст можете заменити према вашим захтевима.

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

    Ми ћемо претходно обрадити наш текст и токенизирати га. Токенизација је процес разлагања текста на појединачне речи или лексеме. Користимо нлтк библиотеку у Питхон-у да токенизујемо наш текст.

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

    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

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

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

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

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

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

    Ово је фундаментални корак у изградњи модела предвиђања за следећу реч јер нам омогућава да анализирамо секвенце речи и предвидимо следећу реч на основу контекста који су дале претходне Н-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

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

    Дефинишите функцију

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

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

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

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

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

    Тестирање

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

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

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

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

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

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

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

    Изазови:

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

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

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

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

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