Heim > Technologie-Peripheriegeräte > KI > Eine Fallstudie zur Verwendung des bidirektionalen LSTM-Modells zur Textklassifizierung

Eine Fallstudie zur Verwendung des bidirektionalen LSTM-Modells zur Textklassifizierung

PHPz
Freigeben: 2024-01-24 10:36:06
nach vorne
776 Leute haben es durchsucht

Eine Fallstudie zur Verwendung des bidirektionalen LSTM-Modells zur Textklassifizierung

Das bidirektionale LSTM-Modell ist ein neuronales Netzwerk, das zur Textklassifizierung verwendet wird. Unten finden Sie ein einfaches Beispiel, das zeigt, wie bidirektionales LSTM für Textklassifizierungsaufgaben verwendet wird.

Zuerst müssen wir die erforderlichen Bibliotheken und Module importieren:

import os  
import numpy as np  
from keras.preprocessing.text import Tokenizer  
from keras.preprocessing.sequence import pad_sequences  
from keras.models import Sequential  
from keras.layers import Dense, Embedding, Bidirectional, LSTM  
from sklearn.model_selection import train_test_split
Nach dem Login kopieren

Als nächstes müssen wir den Datensatz vorbereiten. Hier gehen wir davon aus, dass der Datensatz bereits im angegebenen Pfad vorhanden ist und drei Dateien enthält: train.txt, dev.txt und test.txt. Jede Datei enthält eine Textsequenz und entsprechende Tags. Wir können den Datensatz mit dem folgenden Code laden:

def load_imdb_data(path):  
    assert os.path.exists(path)  
    trainset, devset, testset = [], [], []  
    with open(os.path.join(path, "train.txt"), "r") as fr:  
        for line in fr:  
            sentence_label, sentence = line.strip().lower().split("\t", maxsplit=1)  
            trainset.append((sentence, sentence_label))  
    with open(os.path.join(path, "dev.txt"), "r") as fr:  
        for line in fr:  
            sentence_label, sentence = line.strip().lower().split("\t", maxsplit=1)  
            devset.append((sentence, sentence_label))  
    with open(os.path.join(path, "test.txt"), "r") as fr:  
        for line in fr:  
            sentence_label, sentence = line.strip().lower().split("\t", maxsplit=1)  
            testset.append((sentence, sentence_label))  
    return trainset, devset, testset
Nach dem Login kopieren

Nach dem Laden des Datensatzes können wir den Text vorverarbeiten und serialisieren. Hier verwenden wir Tokenizer zur Textsegmentierung und füllen dann die Indexsequenz jedes Wortes auf die gleiche Länge auf, damit sie auf das LSTM-Modell angewendet werden kann.

max_features = 20000  
maxlen = 80  # cut texts after this number of words (among top max_features most common words)  
batch_size = 32  
  
print('Pad & split data into training set and dev set')  
x_train, y_train = [], []  
for sent, label in trainset:  
    x_train.append(sent)  
    y_train.append(label)  
x_train, y_train = pad_sequences(x_train, maxlen=maxlen), np.array(y_train)  
x_train, y_train = np.array(x_train), np.array(y_train)  
x_dev, y_dev = [], []  
for sent, label in devset:  
    x_dev.append(sent)  
    y_dev.append(label)  
x_dev, y_dev = pad_sequences(x_dev, maxlen=maxlen), np.array(y_dev)  
x_dev, y_dev = np.array(x_dev), np.array(y_dev)
Nach dem Login kopieren

Als nächstes können wir ein bidirektionales LSTM-Modell erstellen. In diesem Modell verwenden wir zwei LSTM-Schichten, eine für die Weiterleitung von Informationen und eine für die Rückwärtsweitergabe von Informationen. Die Ausgaben dieser beiden LSTM-Ebenen werden verkettet, um einen leistungsfähigeren Vektor zu bilden, der den Text darstellt. Schließlich verwenden wir eine vollständig verbundene Schicht zur Klassifizierung.

print('Build model...')  
model = Sequential()  
model.add(Embedding(max_features, 128, input_length=maxlen))  
model.add(Bidirectional(LSTM(64)))  
model.add(LSTM(64))  
model.add(Dense(1, activation='sigmoid'))  
  
print('Compile model...')  
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
Nach dem Login kopieren

Jetzt können wir das Modell trainieren. Wir werden den Entwicklungsdatensatz als Validierungsdaten verwenden, um sicherzustellen, dass wir während des Trainings nicht überpassen.

epochs = 10  
batch_size = 64  
  
history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(x_dev, y_dev))
Nach dem Login kopieren

Nachdem das Training abgeschlossen ist, können wir die Leistung des Modells am Testsatz bewerten.

test_loss, test_acc = model.evaluate(x_test, y_test)  
print('Test accuracy:', test_acc)
Nach dem Login kopieren

Das Obige ist ein Beispiel für die Textklassifizierung mithilfe eines einfachen bidirektionalen LSTM-Modells. Sie können auch versuchen, die Parameter des Modells anzupassen, z. B. die Anzahl der Schichten, die Anzahl der Neuronen, Optimierer usw., um eine bessere Leistung zu erzielen. Oder verwenden Sie vorab trainierte Worteinbettungen (wie Word2Vec oder GloVe), um die Einbettungsebene zu ersetzen und mehr semantische Informationen zu erfassen.

Das obige ist der detaillierte Inhalt vonEine Fallstudie zur Verwendung des bidirektionalen LSTM-Modells zur Textklassifizierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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