Předvídání dalšího slova v 5 snadných krocích pomocí Pythonu

Možná jste si všimli, že při psaní na vašem chytrém telefonu, se vám často zobrazují návrhy na slova, která byste mohli chtít použít. Jedná se o praktickou funkci, která urychluje psaní a šetří váš drahocenný čas.

Je to velice komfortní. Ať už se jedná o psaní textových zpráv, vyhledávání informací na webu, nebo tvorbu e-mailů, prediktivní text vám může být skutečně k užitku. Napadlo vás ale někdy, jak váš telefon dokáže odhadnout, které slovo byste chtěli použít jako další?

V tomto návodu vám podrobně představím, jak si můžete vytvořit vlastní systém pro předpovídání slov s využitím programovacího jazyka Python.

Pro snadné pochopení a následování tohoto postupu, vám pomohou základní znalosti z oblasti NLP (zpracování přirozeného jazyka). Pokud jste s touto problematikou noví, nezoufejte; potřebné základy se můžete rychle naučit z našeho článku “Zjednodušené NLP”, kde jsou základní pojmy vysvětleny srozumitelnou formou.

Uplatnění predikce následujícího slova

  • Predikce následujícího slova rapidně zvyšuje rychlost a přesnost psaní na mobilních zařízeních, což je obrovská výhoda zejména v aplikacích pro textové zprávy a komunikaci.
  • Vyhledávače používají prediktivní text k navrhování vyhledávacích dotazů, což uživatelům usnadňuje a urychluje vyhledávání relevantních informací.
  • Tato funkce pomáhá s automatickými opravami překlepů a snižuje chyby v textu v různých aplikacích, včetně textových editorů a e-mailových klientů.
  • Vývojáři a programátoři těží z prediktivního textu při psaní kódu, protože systém navrhuje relevantní funkce, metody a názvy proměnných.
  • Online platformy a streamovací služby využívají prediktivní text k doporučování uživatelům obsahu, který by je mohl zajímat.

Pojďme se společně podívat na tuto zajímavou techniku NLP a její užitečnost, a projdeme si každý krok tohoto procesu krok za krokem.

Příprava dat

Nejprve je nutné importovat potřebné knihovny, které jsou pro náš projekt klíčové. Následně si definujeme vzorový text, který budeme používat pro trénování modelu. Tento text můžete samozřejmě nahradit jakýmikoli textovými daty dle vašeho výběru.

Můžete také použít rozsáhlou datovou sadu s textovými daty, kterou lze snadno nalézt na platformách jako je Kaggle a podobných místech.

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

Ukázková textová data, která budeme používat k předpovídání následujícího slova.

text = """
Za dávných časů, za svitu hvězdné noci v tichém a tajemném městečku Serendipity,
se mladá a zvědavá cestovatelka jménem Amálie vydala na neobyčejné dobrodružství.
S její věrnou lupou v ruce a s nezdolným odhodláním se vydala na cestu za nalezením bájného Elysejského pokladu, který se skrýval hluboko v labyrintovém lese.
Při cestě zeleným lesem Amálie narazila na výstřední, mluvící veverku jménem Percival, který s ní hovořil hádankami a naváděl ji k místu, kde se ukrývá poklad.
Les byl plný bioluminiscenční flóry, která osvětlovala cestu Amálie kaleidoskopem barev.
Amálie brzy dorazila k útesu, z něhož byl úžasný výhled na azurový vodopád, jehož padající vody vytvářely melodickou serenádu.
Vedle vodopádu stál mohutný, mechem obrostlý kámen s tajuplnými nápisy.
S Percivalovou pomocí rozluštila starobylé runy a odkryla vstup do pokladnice.
Uvnitř objevila bohatou truhlu, zdobenou složitými zlatými filigrány.
Po otevření truhly se na Amálii snesla symfonie třpytivých šperků, zářivých drahokamů a lesklých artefaktů, které ji obklopily éterickou září.
Elysejský poklad byl její, jako důkaz její neohrožené odvahy a nenasytné zvědavosti.
Amáliin návrat do Serendipity byl oslavován s bouřlivou radostí a její pozoruhodná cesta se stala legendou, která inspirovala další k dobrodružstvím v úžasném světě fantazie a objevování.
"""

Tento text můžete libovolně upravovat dle vašich požadavků.

Tokenizace

Náš text musíme nejdříve předzpracovat a rozdělit na jednotlivé tokeny. Tokenizace je proces, při kterém se text rozdělí na jednotlivá slova nebo tokeny. K tokenizaci našeho textu použijeme knihovnu nltk v Pythonu.

Abychom se ujistili, že se model zaměří na slova samotná a nebude brát v potaz rozdíly v psaní velkých a malých písmen, nebo interpunkci, provedeme předzpracování. V tomto kroku převedeme veškerá slova na malá písmena a odstraníme veškerou interpunkci.

import nltk

# Tokenizace textu na slova
words = nltk.word_tokenize(text)

# Předzpracování slov (převod na malá písmena, odstranění interpunkce)
words = [word.lower() for word in words if word.isalnum()]

words

Po předzpracování a tokenizaci získáme všechna slova malými písmeny a bez interpunkce.

Tokenizovaná slova

Tvorba N-gramů

V tomto kroku vytvoříme N-gramy, což jsou sekvence N slov používané v oblasti 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 klíčový krok při tvorbě predikčního modelu pro následující slovo, protože nám umožňuje analyzovat sekvence slov a předvídat další slovo na základě kontextu poskytnutého předchozími N-1 slovy.

# Definujeme řád N-gramového modelu (N=2 pro bigramy)
N = 2

# Vytvoříme N-gramy z tokenizovaných slov
ngrams_list = list(ngrams(words, N))

# Vytvoříme defaultdict pro uložení N-gramů a jejich četnosti
ngram_freq = defaultdict(int)
for ngram in ngrams_list:
    ngram_freq[ngram] += 1

Tyto N-gramy slouží jako základní stavební kameny pro trénování a implementaci našeho modelu predikce následujícího slova.

Definice funkce

V tomto kroku definujeme funkci s názvem ‚predict_next_word‘, která odhadne následující slovo ve větě, a to na základě zadané předpony (sekvence slov).

Tato funkce je klíčová v celém modelu predikce následujícího slova, protože bere kontext, který je poskytnut předponou a používá ho k předpovědi nejpravděpodobnějšího následujícího slova.

Pokusím se vysvětlit, 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 hledaným slovem).
  • Spočítá, jak často se každé slovo v těchto párech vyskytuje a seřadí je podle frekvence výskytu, od nejčastějších po nejméně časté.
  • Funkce následně navrhne slovo, které se nejčastěji vyskytuje jako následující slovo za danou předponou.
# Definice funkce
def predict_next_word(prefix):
    # Filtrujeme N-gramy, které začínají zadanou předponou
    matching_ngrams = [(ngram, freq) for ngram, freq in ngram_freq.items() if ngram[:-1] == prefix]

    if not matching_ngrams:
        return "Predikce není k dispozici."

    # Seřadíme N-gramy podle četnosti výskytu sestupně
    sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True)

    # Vybereme N-gram s nejvyšší četností jako predikci
    prediction = sorted_ngrams[0][0][-1]

    return prediction

Je to klíčová část modelu pro predikci dalšího slova, protože nám umožňuje generovat kontextově relevantní návrhy pro následující slovo v dané textové sekvenci.

Testování

Tento kód vám umožňuje model testovat s vlastními vstupy. Napíšete několik slov, potvrdíte a model predikuje následující slovo. Pokud zadáte něco neplatného, budete vyzváni, abyste to zkusili znovu.

# Kód pro interaktivní testování modelu s uživatelskými vstupy
user_input = input("Zadejte předponu pro predikci dalšího slova: ").lower().split()
if len(user_input) != N - 1:
    print("Zadejte platnou předponu.")
else:
    prefix = tuple(user_input)
    prediction = predict_next_word(prefix)
    print(f"Predikce následujícího slova: {prediction}")

Náš kód vytvoří rozhraní tohoto druhu. Zde můžete zadat předponu a stisknout enter.

Zadejte předponu

Po stisknutí klávesy Enter dostanete předpovězené následující slovo.

Predikované slovo

Tímto způsobem lze demonstrovat, jak lze model pro predikci následujícího slova použít v praxi.

Výzvy:

  • Přesnost predikce následujícího slova silně závisí na objemu a kvalitě trénovacích dat. Omezená nebo nekvalitní data mohou vést k méně přesným předpovědím.
  • Pokud slovo ve vstupním textu neexistuje v trénovacích datech, nelze ho přesně předpovědět.
  • Interpunkce může ovlivnit přesnost předpovědi, zejména v jazycích, jako je angličtina, kde mohou být hranice mezi slovy nejednoznačné.
  • Nesprávná tokenizace nebo předzpracování může vést k chybným předpovědím.
  • Mnoho slov má více významů a kontext nemusí vždy jednoznačně určit, které je správné.

Jak zlepšit přesnost

  • Použití větší a rozmanitější datové sady zlepší schopnost modelu porozumět různým kontextům a slovům.
  • Zvažte použití N-gramů vyššího řádu (např. trigramy) pro získání více kontextu, ale berte v potaz dostupnost trénovacích dat.
  • Sbírejte zpětnou vazbu od uživatelů a model neustále vylepšujte na základě reálného používání.
  • Pravidelně vyhodnocujte výkon modelu pomocí vhodných metrik a dle výsledků upravujte strategie.
  • Pro komplexnější modelování kontextu můžete implementovat modely založené na neuronových sítích, jako jsou LSTM nebo Transformer.

Závěrečná slova

Ve světě zpracování přirozeného jazyka je předpovídání následujícího slova velmi cennou dovedností. S těmito 5 jednoduchými kroky v Pythonu jste získali mocný nástroj pro rychlejší komunikaci a inteligentnější technologie.

Pokračujte v prozkoumávání této oblasti a aplikujte své získané znalosti pro vylepšení vašich jazykových zkušeností. Vaše cesta právě začala!

Můžete se také podívat na některé z nejlepších způsobů, jak stahovat soubory z URL adres pomocí Pythonu.