Model LSTM dwiarah ialah rangkaian saraf yang digunakan untuk pengelasan teks. Di bawah ialah contoh mudah yang menunjukkan cara menggunakan LSTM dwiarah untuk tugasan pengelasan teks.
Pertama, kita perlu mengimport perpustakaan dan modul yang diperlukan:
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
Seterusnya, kita perlu menyediakan set data. Di sini kami menganggap bahawa set data sudah wujud dalam laluan yang ditentukan dan mengandungi tiga fail: train.txt, dev.txt dan test.txt. Setiap fail mengandungi urutan teks dan tag yang sepadan. Kami boleh memuatkan set data menggunakan kod berikut:
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
Selepas memuatkan set data, kami boleh mempraproses dan menyusun teks. Di sini kami menggunakan Tokenizer untuk pembahagian teks, dan kemudian pad urutan indeks setiap perkataan pada panjang yang sama supaya ia boleh digunakan pada model LSTM.
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)
Seterusnya, kita boleh membina model LSTM dua hala. Dalam model ini, kami menggunakan dua lapisan LSTM, satu untuk menghantar maklumat ke hadapan dan satu untuk menghantar maklumat ke belakang. Output dua lapisan LSTM ini digabungkan untuk membentuk vektor yang lebih berkuasa yang mewakili teks. Akhir sekali, kami menggunakan lapisan bersambung sepenuhnya untuk pengelasan.
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'])
Kini, kita boleh melatih model tersebut. Kami akan menggunakan set data dev sebagai data pengesahan untuk memastikan kami tidak terlalu muat semasa latihan.
epochs = 10 batch_size = 64 history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(x_dev, y_dev))
Selepas latihan selesai, kita boleh menilai prestasi model pada set ujian.
test_loss, test_acc = model.evaluate(x_test, y_test) print('Test accuracy:', test_acc)
Di atas ialah contoh pengelasan teks menggunakan model LSTM dua hala yang mudah. Anda juga boleh cuba melaraskan parameter model, seperti bilangan lapisan, bilangan neuron, pengoptimum, dsb., untuk mendapatkan prestasi yang lebih baik. Atau gunakan pembenaman perkataan yang telah dilatih (seperti Word2Vec atau GloVe) untuk menggantikan lapisan pembenaman untuk menangkap lebih banyak maklumat semantik.
Atas ialah kandungan terperinci Kajian kes menggunakan model LSTM dwiarah untuk pengelasan teks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!