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

Kajian kes menggunakan model LSTM dwiarah untuk pengelasan teks

PHPz
Lepaskan: 2024-01-24 10:36:06
ke hadapan
767 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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)
Salin selepas log masuk

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'])
Salin selepas log masuk

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))
Salin selepas log masuk

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)
Salin selepas log masuk

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!

Label berkaitan:
sumber:163.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan