Heim > Technologie-Peripheriegeräte > KI > Methoden und Techniken zur Generierung von Fließtext mit LSTM

Methoden und Techniken zur Generierung von Fließtext mit LSTM

PHPz
Freigeben: 2024-01-23 09:00:07
nach vorne
1241 Leute haben es durchsucht

Methoden und Techniken zur Generierung von Fließtext mit LSTM

LSTM ist eine Variante wiederkehrender neuronaler Netze, die zur Lösung langfristiger Abhängigkeitsprobleme eingesetzt werden. Die Kernidee besteht darin, den Fluss von Eingabe-, Ausgabe- und internen Zuständen durch eine Reihe von Gating-Einheiten zu steuern und so das Problem des verschwindenden oder explodierenden Gradienten in RNN effektiv zu vermeiden. Dieser Gating-Mechanismus ermöglicht es LSTM, sich Informationen über einen langen Zeitraum zu merken und den Status bei Bedarf selektiv zu vergessen oder zu aktualisieren, wodurch lange Sequenzdaten besser verarbeitet werden können.

Das Arbeitsprinzip von LSTM besteht darin, den Fluss und die Aufbewahrung von Informationen durch drei Gate-Steuereinheiten zu steuern, zu denen Vergessenstore, Eingabe-Gates und Ausgabe-Gates gehören.

Forgetting Gate: Steuert, ob der vorherige Status vergessen werden muss, sodass das Modell selektiv Informationen zum vorherigen Status beibehalten kann.

Eingabegatter: Steuert den Anteil neuer Eingabeinformationen im aktuellen Zustand, sodass das Modell selektiv neue Informationen hinzufügen kann.

Ausgabegatter: Steuert die Ausgabe aktueller Statusinformationen und ermöglicht dem Modell die selektive Ausgabe von Statusinformationen.

Angenommen, wir möchten LSTM verwenden, um einen Text über das Wetter zu generieren. Zuerst müssen wir den Text in Zahlen umwandeln, was wir erreichen können, indem wir jedes Wort einer eindeutigen Ganzzahl zuordnen. Wir können diese ganzen Zahlen dann in ein LSTM einspeisen und das Modell trainieren, um die Wahrscheinlichkeitsverteilung des nächsten Wortes vorherzusagen. Schließlich können wir diese Wahrscheinlichkeitsverteilung verwenden, um fortlaufenden Text zu generieren.

Das Folgende ist ein Beispielcode zum Implementieren von LSTM zum Generieren von Text:

import numpy as np
import sys
import io
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
from keras.callbacks import ModelCheckpoint
from keras.utils import np_utils

# 读取文本文件并将其转换为整数
with io.open('text.txt', encoding='utf-8') as f:
    text = f.read()
chars =list(set(text))
char_to_int = dict((c, i) for i, c in enumerate(chars))

# 将文本分割成固定长度的序列
seq_length = 100
dataX = []
dataY = []
for i in range(0, len(text) - seq_length, 1):
    seq_in = text[i:i + seq_length]
    seq_out = text[i + seq_length]
    dataX.append([char_to_int[char] for char in seq_in])
    dataY.append(char_to_int[seq_out])
n_patterns = len(dataX)

# 将数据转换为适合LSTM的格式
X = np.reshape(dataX, (n_patterns, seq_length, 1))
X = X / float(len(chars))
y = np_utils.to_categorical(dataY)

# 定义LSTM模型
model = Sequential()
model.add(LSTM(256, input_shape=(X.shape[1], X.shape[2]), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(256))
model.add(Dropout(0.2))
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')

# 训练模型
filepath="weights-improvement-{epoch:02d}-{loss:.4f}.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=1, save_best_only=True, mode='min')
callbacks_list = [checkpoint]
model.fit(X, y, epochs=20, batch_size=128, callbacks=callbacks_list)

# 使用模型生成文本
int_to_char = dict((i, c) for i, c in enumerate(chars))
start = np.random.randint(0, len(dataX)-1)
pattern = dataX[start]
print("Seed:")
print("\"", ''.join([int_to_char[value] for value in pattern]), "\"")
for i in range(1000):
    x = np.reshape(pattern, (1, len(pattern), 1))
    x = x / float(len(chars))
    prediction = model.predict(x, verbose=0)
    index = np.argmax(prediction)
    result = int_to_char[index]
    seq_in = [int_to_char[value] for value in pattern]
    sys.stdout.write(result)
    pattern.append(index)
    pattern = pattern[1:len(pattern)]
Nach dem Login kopieren

Im obigen Code lesen wir zunächst die Textdatei über die io-Bibliothek und ordnen jedes Zeichen einer eindeutigen Ganzzahl zu. Anschließend teilen wir den Text in Sequenzen der Länge 100 auf und konvertieren diese Sequenzen in ein für LSTM geeignetes Format. Als Nächstes definieren wir ein Modell mit zwei LSTM-Schichten und einer vollständig verbundenen Schicht und verwenden Softmax als Aktivierungsfunktion, um die Wahrscheinlichkeitsverteilung des nächsten Zeichens zu berechnen. Schließlich verwenden wir die Fit-Methode, um das Modell zu trainieren, und die Predict-Methode, um fortlaufenden Text zu generieren.

Wenn wir das Modell zum Generieren von Text verwenden, wählen wir zunächst zufällig eine Sequenz aus dem Datensatz als Ausgangspunkt aus. Anschließend verwenden wir das Modell, um die Wahrscheinlichkeitsverteilung des nächsten Zeichens vorherzusagen und wählen das Zeichen mit der höchsten Wahrscheinlichkeit als nächstes Zeichen aus. Als nächstes fügen wir dieses Zeichen am Ende der Sequenz hinzu und entfernen das Zeichen am Anfang der Sequenz. Dabei wiederholen wir die obigen Schritte, bis wir 1000 Zeichen Text generiert haben.

Im Allgemeinen ist LSTM eine Variante wiederkehrender neuronaler Netze, die speziell zur Lösung langfristiger Abhängigkeitsprobleme entwickelt wurde. Durch die Verwendung von Gated-Einheiten zur Steuerung des Eingabe-, Ausgabe- und internen Statusflusses kann LSTM das Problem verschwindender oder explodierender Farbverläufe vermeiden und so Anwendungen wie die Generierung von fortlaufendem Text ermöglichen.

Das obige ist der detaillierte Inhalt vonMethoden und Techniken zur Generierung von Fließtext mit LSTM. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:163.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage