Передбачення наступного слова за 5 простих кроків за допомогою Python

Можливо, ви помітили, що коли ви друкуєте на своєму мобільному телефоні, він передбачає наступне слово, яке ви можете використати. Це функція, яка пришвидшує введення тексту та економить ваш час.

Так зручніше. Якщо ви надсилаєте текстові повідомлення, шукаєте в Інтернеті чи пишете електронний лист, інтелектуальний текст може бути дуже корисним. Але чи замислювалися ви коли-небудь, як ваш мобільний телефон знає, яке слово запропонувати наступним?

У цьому посібнику я покажу вам, як створювати передбачення слів за допомогою Python.

Щоб легко слідувати, базове розуміння НЛП допоможе. Якщо ви новачок у цьому, не хвилюйтеся; ви можете швидко отримати основи з нашої статті «НЛП спрощено», де ми пояснюємо це просто.

Програми передбачення наступного слова

  • Прогноз наступного слова покращує швидкість і точність введення тексту на мобільних пристроях, що робить його дуже корисним для текстових повідомлень і комунікаційних програм.
  • Пошукові системи використовують інтелектуальний текст, щоб пропонувати пошукові запити, полегшуючи користувачам швидкий пошук потрібної інформації.
  • Це допомагає в автоматичному виправленні неправильно написаних слів і зменшенні помилок введення в різних програмах, включаючи текстові процесори та клієнти електронної пошти.
  • Розробники та програмісти виграють від інтелектуального тексту під час написання коду, оскільки він пропонує відповідні функції, методи та імена змінних.
  • Онлайн-платформи та потокові сервіси використовують інтелектуальний текст, щоб рекомендувати користувачам відповідний вміст.
  • Давайте разом почнемо вивчати цю цікаву техніку НЛП і її корисність, а також чітко пройдемо кожен крок.

    Підготовка даних

    Перш за все, нам потрібно імпортувати необхідні бібліотеки, які важливі для нашого проекту. Після цього ми визначимо зразок тексту, який буде використовуватися для навчання. Ви можете замінити цей текст будь-якими текстовими даними на свій вибір.

    Ви також можете використовувати набір даних із текстовими даними, які ви можете легко знайти на Kaggle або схожій платформі.

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

    Ви можете замінити цей текст відповідно до ваших вимог.

    Токенізація

    Ми попередньо обробимо наш текст і позначимо його. Токенізація — це процес розбиття тексту на окремі слова або лексеми. Ми використовуємо бібліотеку nltk у Python для токенізації нашого тексту.

    Щоб гарантувати, що наша модель фокусується на словах і ігнорує регістр і пунктуацію, ми виконуємо попередню обробку. Цей крок передбачає перетворення всіх слів на малі літери та видалення будь-якої пунктуації.

    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

    Після попередньої обробки та токенізації ми отримаємо всі слова в нижньому регістрі та без розділових знаків.

    Токенізовані слова

    Побудова N-грам

    На цьому кроці ми збираємося створити N-грами, які є послідовностями з N слів у обробці природної мови (NLP).

    У нашому коді ми збираємося створити біграми, де N дорівнює 2, тобто кожна N-грама складатиметься з пар слів.

    Це фундаментальний крок у побудові моделі передбачення для наступного слова, оскільки він дозволяє нам аналізувати послідовності слів і передбачати наступне слово на основі контексту, наданого попередніми 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

    Ці N-грами служать будівельними блоками для навчання та впровадження нашої моделі передбачення наступного слова.

    Визначити функцію

    На цьому кроці ми створюємо функцію «predict_next_word», яка вгадує наступне слово в реченні на основі наданого префікса (послідовності слів).

    Ця функція має вирішальне значення в моделі передбачення наступного слова, оскільки вона бере контекст, наданий префіксом, і використовує його, щоб зробити прогноз щодо найбільш ймовірного наступного слова.

    Я поясню, що відбувається в цьому процесі простими словами:

    • Функція переглядає всі пари слів (біграми) у наших текстових даних, які починаються з наданого префікса (слова перед пропущеним словом).
    • Він підраховує, як часто кожне слово з’являється в цих парах, і сортує їх за частотою від найбільш поширених до найменш поширених.
    • Потім функція пропонує слово, яке найчастіше зустрічається, як наступне слово після заданого префікса.
    # 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

    Це важлива частина моделі передбачення наступного слова, оскільки дозволяє нам генерувати релевантні контексту пропозиції для наступного слова в певній текстовій послідовності.

    Тестування

    Цей код дозволяє перевірити модель за допомогою ваших власних даних. Ви вводите кілька слів, натискаєте Enter, і модель передбачає наступне слово. Якщо ви введете щось недійсне, вам буде запропоновано повторити спробу.

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

    Наш код створить такий інтерфейс. Де можна написати префікси і натиснути enter.

    Введіть префікс

    Після введення enter ви отримаєте наступне слово

    Передбачене слово

    Це спосіб продемонструвати, як модель передбачення наступного слова можна використовувати на практиці.

    виклики:

  • Точність передбачення наступного слова значною мірою залежить від розміру та якості навчальних даних. Обмежені або шумні дані можуть призвести до менш точних прогнозів.
  • Якщо слово у вхідному тексті не існує в навчальних даних, його неможливо точно передбачити.
  • Пунктуація може впливати на точність передбачення, особливо в таких мовах, як англійська, де межі слів можуть бути неоднозначними.
  • Неправильна токенізація або попередня обробка можуть призвести до неправильних прогнозів.
  • Багато слів мають кілька значень, і контекст не завжди може їх усунути.
  • Як підвищити точність

  • Використання більшого та більш різноманітного набору даних покращує розуміння моделлю різних контекстів і слів.
  • Розгляньте можливість використання N-грам вищого порядку (наприклад, триграм) для більшого контексту, але збалансуйте це з наявністю даних.
  • Збирайте відгуки користувачів і постійно вдосконалюйте модель на основі використання в реальному світі.
  • Регулярно оцінюйте ефективність моделі за допомогою відповідних показників і відповідно коригуйте стратегії.
  • Ви можете реалізувати моделі на основі нейронної мережі, такі як LSTM або Transformer, для більш складного контекстного моделювання.
  • Заключні слова

    У світі обробки природної мови передбачення наступного слова є цінною навичкою. За допомогою цих 5 простих кроків Python ви отримали потужний інструмент для швидшого спілкування та розумніших технологій.

    Продовжуйте досліджувати та використовувати ці знання, щоб покращити свій мовний досвід. Подорож тільки почалася!

    Ви також можете дослідити кілька найкращих способів завантажувати файли з URL-адреси за допомогою Python.