Neděle , 6 Červenec 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
Umělá inteligence

🩺 Personalizovaná medicína a AI

🩺 Co je personalizovaná medicína? Personalizovaná medicína využívá data o genetice, životním...

blank
Umělá inteligence

Edge-AI a nové akcelerátory

🌐 Co je Edge-AI? Edge-AI spojuje umělou inteligenci a edge computing, tedy...

blank
ProgramováníUmělá inteligence

Runway Game Worlds: Vytvářejte video hry s generativní AI

Runway Game Worlds: Vytvářejte video hry s generativní AI bez nutnosti programování...

blank
ProgramováníPython

PyCharm JetBrains IDE vývojové prostředí

🚀 Úvod PyCharm je špičkové integrované vývojové prostředí (IDE) od společnosti JetBrains,...

blank
×
Avatar
PetrPikora.com
AI Chatbot
Ahoj! Jak vám mohu pomoci?
 

Používáním tohoto chatbota souhlasíte se shromažďováním a používáním vašich dat, jak je uvedeno v našich Zásadách ochrany osobních údajů. Vaše údaje budou použity pouze jako pomoc s vaším dotazem.