Středa , 25 Červen 2025
Domů Programování Generování textu TensorFlow Keras
ProgramováníPythonStrojové učeníUmělá inteligence

Generování textu TensorFlow Keras

blank
blank

Zde je zjednodušený příklad jak vytvořit model pro generování textu pomocí LSTM (Long Short-Term Memory) sítě v Kerasu. Předpokládáme, že máme na vstupu text Shakespearových her (v tomto příkladu používáme menší text pro jednoduchost).

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
from tensorflow.keras.utils import to_categorical

# Začátek textu
text = "To be or not to be, that is the question"

# Vytvoříme mapování znaků na indexy a indexy na znaky
chars = sorted(list(set(text)))
char_to_index = dict((c, i) for i, c in enumerate(chars))
index_to_char = dict((i, c) for i, c in enumerate(chars))

# Počet jedinečných znaků
n_chars = len(chars)

# Délka sekvencí, které budeme používat pro trénink
seq_length = 10

# Vytvoříme tréninkové a cílové sekvence
X, Y = [], []
for i in range(0, len(text) - seq_length, 1):
    seq_in = text[i:i + seq_length]
    seq_out = text[i + seq_length]
    X.append([char_to_index[char] for char in seq_in])
    Y.append(char_to_index[seq_out])

# Počet tréninkových vzorků
n_samples = len(X)

# Přeformátujeme X a Y pro vstup do LSTM
X = np.reshape(X, (n_samples, seq_length, 1)) / float(n_chars)
Y = to_categorical(Y, num_classes=n_chars)

# Vytvoříme LSTM model
model = Sequential()
model.add(LSTM(256, input_shape=(X.shape[1], X.shape[2])))
model.add(Dense(n_chars, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')

# Natrénujeme model
model.fit(X, Y, epochs=100, batch_size=128, verbose=0)

# Vygenerujeme text
start = np.random.randint(0, n_samples-1)
pattern = X[start]
print("Seed:")
print("\"", ''.join([index_to_char[int(value*n_chars)] for value in pattern]), "\"")
for i in range(100):
    x = np.reshape(pattern, (1, len(pattern), 1))
    prediction = model.predict(x, verbose=0)
    index = np.argmax(prediction)
    result = index_to_char[index]
    seq_in = [index_to_char[int(value*n_chars)] for value in pattern]
    print(result, end="")  # tiskne text na stejném řádku
    pattern = np.append(pattern[1:], [index/float(n_chars)])

print("\nDone.")

Tento příklad trénuje LSTM model na sekvencích o délce 10 znaků z vstupního textu a pak generuje nový text na základě náhodně zvolené startovní sekvence.

Všimněte si, že pro trénování modelu na velkém korpusu textu, jako je například kompletní soubor Shakespearových her, byste potřebovali výkonnější hardware (například GPU) a pravděpodobně byste také potřebovali upravit parametry modelu a proces trénování, aby lépe odpovídaly velikosti a složitosti dat.

Navíc by bylo vhodné implementovat nějakou formu regularizace, jako je dropout nebo weight decay, aby se předešlo přeučení modelu, což je běžný problém při trénování složitých modelů hlubokého učení na velkých datasetech.

Je také důležité poznamenat, že generování textu je složitý problém a i když může být tento základní model schopen vytvářet text, který vypadá „rozumně“ na první pohled, je nepravděpodobné, že by byl schopen konzistentně vytvářet smysluplný a koherentní text na úrovni, kterou bychom očekávali od lidského autora.

Zanechte komentář

Napsat komentář

Související články

blank
Strojové viděníUmělá inteligence

Strojové vidění & AI v průmyslu: Moderní řešení výroby a kontroly kvality

📸 ÚvodStrojové vidění ve spojení s umělou inteligencí (AI) mění průmyslové provozy:...

blank
Kvantové počítačeStrojové učeníUmělá inteligence

Kvantové strojové učení

⚛️ Úvod do kvantového strojového učeníKvantové strojové učení (Quantum Machine Learning, QML)...

blank
ProgramováníStrojové učeníUmělá inteligence

Neuromorfní čipy vs. GPU/TPU

Top články Neuromorfní čipy vs. GPU/TPU 19. 6. 2025 Edge-AI v IoT:...

blank
Umělá inteligence

Edge-AI v IoT: Výzvy a řešení pro inteligentní zařízení

🌐 Co je Edge-AI v IoT?Edge-AI kombinuje umělou inteligenci (AI) a Internet...