Možná jste si všimli, že když píšete na svém mobilním telefonu, předpovídá další slovo, které byste mohli chtít použít. Je to funkce, díky které je psaní rychlejší a šetří vám čas.
Je to pohodlnější. Ať už píšete SMS, hledáte na internetu nebo píšete e-mail, prediktivní text může být opravdu užitečný. Přemýšleli jste ale někdy o tom, jak váš mobil ví, jaké slovo navrhnout jako další?
V této příručce vám ukážu, jak vytvářet předpovědi slov pomocí Pythonu.
Chcete-li snadno sledovat, pomůže vám základní znalost NLP. Pokud s tím začínáte, nebojte se; základy můžete rychle získat z našeho článku „NLP zjednodušené“, kde to jednoduše vysvětlíme.
Table of Contents
Aplikace předpovědi dalšího slova
Pojďme se společně začít učit o této zajímavé technice NLP a o tom, jak je užitečná, a projděte si každý krok jasně.
Příprava dat
Nejprve musíme naimportovat potřebné knihovny, které jsou pro náš projekt důležité. Poté nadefinujeme vzorový text, který bude použit pro školení. Tento text můžete nahradit libovolnými textovými daty podle vašeho výběru.
Můžete také použít datovou sadu s textovými daty, kterou snadno najdete na Kaggle nebo podobné platformě.
# Import Necessary Libraries import nltk from nltk import ngrams from collections import defaultdict import random
Ukázková textová data, která budou použita pro předpovídání dalšího slova.
# 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. """
Tento text můžete nahradit podle svých požadavků.
Tokenizace
Náš text předzpracujeme a tokenizujeme. Tokenizace je proces rozdělení textu na jednotlivá slova nebo tokeny. K tokenizaci našeho textu používáme knihovnu nltk v Pythonu.
Abychom zajistili, že se náš model soustředí na slova a ignoruje velká a malá písmena nebo interpunkci, provádíme předběžné zpracování. Tento krok zahrnuje převod všech slov na malá písmena a odstranění jakékoli interpunkce.
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
Po předběžném zpracování a tokenizaci získáme všechna slova malá a bez interpunkce.
Tokenizovaná slova
Budování N-gramů
V tomto kroku vytvoříme N-gramy, což jsou sekvence N slov ve zpracování přirozeného jazyka (NLP).
V našem kódu vytvoříme bigramy, kde N se rovná 2, což znamená, že každý N-gram se bude skládat z dvojic slov.
Toto je základní krok při vytváření predikčního modelu pro další slovo, protože nám umožňuje analyzovat sekvence slov a předpovídat další slovo na základě kontextu poskytnutého předchozími N-1 slovy.
# 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
Tyto N-gramy slouží jako stavební kameny pro trénink a implementaci našeho modelu predikce dalšího slova.
Definujte funkci
V tomto kroku vytvoříme funkci nazvanou ‚predict_next_word‘, která odhadne další slovo ve větě na základě poskytnuté předpony (sekvence slov).
Tato funkce je klíčová v modelu predikce dalšího slova, protože bere kontext poskytnutý předponou a používá jej k předpovědi nejpravděpodobnějšího dalšího slova.
Vysvětlím, co se děje v tomto procesu, jednoduchými slovy:
- Funkce se podívá na všechny dvojice slov (bigramy) v našich textových datech, které začínají zadanou předponou (slova před chybějícím slovem).
- Počítá, jak často se každé slovo v těchto párech vyskytuje, a seřadí je podle frekvence, od nejčastějších po nejméně časté.
- Funkce pak navrhne slovo, které se vyskytuje nejčastěji jako další slovo za danou předponou.
# 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
Je to klíčová část modelu predikce dalšího slova, protože nám umožňuje generovat kontextově relevantní návrhy pro další slovo v dané textové sekvenci.
Testování
Tento kód vám umožňuje testovat model s vlastním vstupem. Napíšete několik slov, stisknete Enter a model předpovídá další slovo. Pokud zadáte něco neplatného, budete požádáni, abyste to zkusili znovu.
# 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}")
Náš kód vytvoří tento druh rozhraní. Kde můžete psát předpony a stisknout enter.
Zadejte Prefix
Po zadání enter dostanete další slovo
Předpokládané slovo
Je to způsob, jak demonstrovat, jak lze model predikce dalšího slova použít v praxi.
výzvy:
Jak zlepšit přesnost
Závěrečná slova
Ve světě zpracování přirozeného jazyka je předpovídání dalšího slova cennou dovedností. S těmito 5 jednoduchými kroky Pythonu jste získali mocný nástroj pro rychlejší komunikaci a chytřejší technologii.
Pokračujte ve zkoumání a používání těchto znalostí k vylepšení svých jazykových zkušeností. Cesta právě začala!
Můžete také prozkoumat některé nejlepší způsoby stahování souborů z adresy URL pomocí Pythonu.