Domů Programování Generování textu TensorFlow Keras
ProgramováníPythonStrojové učeníUmělá inteligence

Generování textu TensorFlow Keras

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.

Související články

Umělá inteligence

AI ve videoprodukci

🌟 Úvod: Nová éra filmové tvorby Ještě před pár lety bylo natáčení...

Umělá inteligence

Jak umělá inteligence mění digitální marketing a SEO

🔍 Úvod: Když AI nebere práci, ale zvyšuje její hodnotu Umělá inteligence...

Kvízy a testyNVIDIAUmělá inteligence

NVIDIA NIM

NVIDIA NIM je sada kontejnerových mikroservisů pro akcelerované inferencování AI modelů na...

NVIDIAUmělá inteligence

NVIDIA ChatRTX

NVIDIA ChatRTX je ukázková desktopová aplikace, která umožňuje vytvořit si vlastního AI...