Ви, напевне, помічали, що під час набору тексту на мобільному телефоні він пропонує варіанти наступного слова. Це зручна функція, яка прискорює процес введення тексту та зберігає ваш дорогоцінний час.
Це справді дуже зручно. Незалежно від того, чи ви надсилаєте повідомлення, щось шукаєте в інтернеті, чи пишете електронний лист, функція передбачення тексту може бути надзвичайно корисною. Але чи ви коли-небудь замислювалися, як саме ваш телефон “вгадує”, яке слово запропонувати наступним?
У цій статті ми розглянемо процес створення системи передбачення наступного слова за допомогою 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-грам
На цьому етапі ми створимо N-грами, які являють собою послідовності з N слів у обробці природної мови (NLP).
У нашому коді ми збираємося створити біграми, де N дорівнює 2, тобто кожна N-грама складатиметься з пар слів.
Це фундаментальний крок у створенні моделі передбачення наступного слова, оскільки він дозволяє нам аналізувати послідовності слів і робити прогнози на основі контексту, наданого попередніми N-1 словами.
# Визначаємо порядок N-грамної моделі (N=2 для біграм) N = 2 # Створюємо N-грами з токенізованих слів ngrams_list = list(ngrams(words, N)) # Створюємо словник defaultdict для зберігання N-грам та їхньої частоти ngram_freq = defaultdict(int) for ngram in ngrams_list: ngram_freq[ngram] += 1
Ці N-грами служать будівельними блоками для навчання та впровадження нашої моделі передбачення наступного слова.
Визначення функції
На цьому етапі ми створюємо функцію “predict_next_word”, яка прогнозує наступне слово у реченні на основі наданого префікса (послідовності слів).
Ця функція є ключовою у моделі передбачення наступного слова, оскільки вона аналізує контекст, наданий префіксом, і використовує його для визначення найбільш вірогідного наступного слова.
Простими словами, ось як це працює:
- Функція переглядає усі пари слів (біграми) у наших текстових даних, які починаються із заданого префікса (слова перед пропущеним словом).
- Вона підраховує, як часто кожне слово з’являється в цих парах, і сортує їх за частотою від найчастіших до найменш частих.
- Потім функція повертає слово, яке зустрічається найчастіше, як наступне слово після заданого префікса.
# Визначаємо функцію def predict_next_word(prefix): # Фільтруємо N-грами, що починаються із заданого префікса matching_ngrams = [(ngram, freq) for ngram, freq in ngram_freq.items() if ngram[:-1] == prefix] if not matching_ngrams: return "Прогноз недоступний." # Сортуємо N-грами за частотою в спадному порядку sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True) # Обираємо N-граму з найвищою частотою як прогноз prediction = sorted_ngrams[0][0][-1] return prediction
Це важлива частина моделі передбачення наступного слова, оскільки вона дозволяє нам створювати релевантні до контексту пропозиції для наступного слова в заданій текстовій послідовності.
Тестування
Цей код дає змогу протестувати модель на власних даних. Ви вводите кілька слів, натискаєте Enter, і модель передбачає наступне слово. Якщо введено щось недійсне, вас попросять повторити спробу.
# Ви можете використовувати цей фрагмент коду для інтерактивного тестування моделі з введенням користувача user_input = input("Введіть префікс для передбачення наступного слова: ").lower().split() if len(user_input) != N - 1: print("Будь ласка, введіть дійсний префікс.") else: prefix = tuple(user_input) prediction = predict_next_word(prefix) print(f"Прогноз наступного слова: {prediction}")
Наш код створить подібний інтерфейс. Тут можна вводити префікси та натискати enter.
Введення префікса
Після натискання enter ви отримаєте наступне слово.
Прогнозоване слово
Це є демонстрацією того, як можна використовувати модель передбачення наступного слова на практиці.
Виклики:
- Точність прогнозування наступного слова значною мірою залежить від обсягу та якості навчальних даних. Обмежені або “шумні” дані можуть призвести до менш точних прогнозів.
- Якщо слово у вхідному тексті відсутнє в навчальних даних, його неможливо точно передбачити.
- Пунктуація може впливати на точність передбачення, особливо в таких мовах, як англійська, де межі слів можуть бути неоднозначними.
- Неправильна токенізація або попередня обробка можуть призвести до хибних прогнозів.
- Багато слів мають кілька значень, і контекст не завжди може їх уточнити.
Як підвищити точність
- Використання більшого та різноманітнішого набору даних покращує розуміння моделлю різних контекстів і слів.
- Розгляньте можливість використання N-грам вищого порядку (наприклад, триграм) для більшого контексту, але збалансуйте це з доступністю даних.
- Збирайте відгуки користувачів і постійно вдосконалюйте модель на основі використання в реальному світі.
- Регулярно оцінюйте ефективність моделі за допомогою відповідних показників і відповідно коригуйте стратегії.
- Ви можете впровадити моделі на основі нейронних мереж, такі як LSTM або Transformer, для більш складного контекстного моделювання.
Підсумки
У світі обробки природної мови передбачення наступного слова є цінною навичкою. За допомогою цих 5 простих кроків на Python ви отримали потужний інструмент для прискорення спілкування та створення розумніших технологій.
Продовжуйте досліджувати та застосовувати ці знання, щоб покращити свій досвід роботи з мовою. Подорож тільки розпочалася!
Ви також можете дослідити кілька найкращих способів завантажувати файли з URL-адреси за допомогою Python.