Rumah  >  Artikel  >  Peranti teknologi  >  Kajian kes menggunakan model LSTM dwiarah untuk pengelasan teks

Kajian kes menggunakan model LSTM dwiarah untuk pengelasan teks

PHPz
PHPzke hadapan
2024-01-24 10:36:06732semak imbas

Kajian kes menggunakan model LSTM dwiarah untuk pengelasan teks

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!

Kenyataan:
Artikel ini dikembalikan pada:163.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam