Cara melatih lapisan deep-network LSTM

13

Saya menggunakan jaringan lstm dan umpan-maju untuk mengklasifikasikan teks.

Saya mengonversi teks menjadi vektor satu-panas dan mengumpankan masing-masing ke dalam lstm sehingga saya dapat meringkasnya sebagai satu representasi. Lalu saya memberinya makan ke jaringan lain.

Tapi bagaimana cara melatih lstm? Saya hanya ingin urutan mengklasifikasikan teks - haruskah saya memberinya makan tanpa pelatihan? Saya hanya ingin merepresentasikan bagian ini sebagai satu item yang dapat saya masukkan ke dalam layer input dari classifier.

Saya akan sangat menghargai saran apa pun dengan ini!

Memperbarui:

Jadi saya punya lstm dan classifier. Saya mengambil semua output dari lstm dan mengelompokkannya, lalu saya masukkan rata-rata itu ke dalam classifier.

Masalah saya adalah bahwa saya tidak tahu bagaimana cara melatih lstm atau classifier. Saya tahu input apa yang harus untuk lstm dan apa output dari classifier seharusnya untuk input itu. Karena mereka adalah dua jaringan terpisah yang hanya diaktifkan secara berurutan, saya perlu tahu dan tidak tahu apa yang seharusnya menjadi output-ideal untuk lstm, yang juga akan menjadi input untuk classifier. Apakah ada cara untuk melakukan ini?

kataSmith
sumber

Jawaban:

9

Tempat terbaik untuk memulai dengan LSTM adalah posting blog A. Karpathy http://karpathy.github.io/2015/05/21/rnn-effectiveness/ . Jika Anda menggunakan Torch7 (yang sangat saya sarankan) kode sumber tersedia di github https://github.com/karpathy/char-rnn .

Saya juga akan mencoba sedikit mengubah model Anda. Saya akan menggunakan pendekatan banyak-ke-satu sehingga Anda memasukkan kata-kata melalui tabel pencarian dan menambahkan kata khusus di akhir setiap urutan, sehingga hanya ketika Anda memasukkan tanda "akhir urutan" Anda akan membaca klasifikasi output dan hitung kesalahan berdasarkan kriteria pelatihan Anda. Dengan cara ini Anda akan berlatih langsung di bawah konteks yang diawasi.

Di sisi lain, pendekatan yang lebih sederhana adalah dengan menggunakan paragraf2vec ( https://radimrehurek.com/gensim/models/doc2vec.html ) untuk mengekstraksi fitur untuk teks input Anda dan kemudian menjalankan classifier di atas fitur Anda. Ekstraksi fitur paragraf vektor sangat sederhana dan dengan python adalah:

class LabeledLineSentence(object):
    def __init__(self, filename):
        self.filename = filename

    def __iter__(self):
        for uid, line in enumerate(open(self.filename)):
            yield LabeledSentence(words=line.split(), labels=['TXT_%s' % uid])

sentences = LabeledLineSentence('your_text.txt')

model = Doc2Vec(alpha=0.025, min_alpha=0.025, size=50, window=5, min_count=5, dm=1, workers=8, sample=1e-5)
model.build_vocab(sentences)

for epoch in range(epochs):
    try:
        model.train(sentences)
    except (KeyboardInterrupt, SystemExit):
        break
Yannis Assael
sumber
Terima kasih untuk balasannya. Saya akan mempertimbangkan itu. Apakah Anda punya saran tentang masalah khusus dalam pertanyaan saya— Saya telah memperbaruinya.
wordSmith
Saya tidak berpikir bahwa prosedur Anda yang dijelaskan akan menghasilkan hasil apa pun. Dalam hal apa Anda akan berlatih melawan LSTM? Saya tidak yakin saya mengerti mengapa akan menggunakan LSTM dalam hal ini untuk pembelajaran fitur tanpa pengawasan untuk seluruh kalimat. Apakah Anda memiliki literatur yang relevan tentang pendekatan Anda yang dapat saya bantu? Ini mungkin menarik bagi Anda juga arxiv.org/abs/1306.3584 .
Yannis Assael
Saya akan melatih lstm berdasarkan kumpulan data dari teks dan kelas mereka di masa lalu. Saya tidak bermaksud menggunakan pembelajaran tanpa pengawasan. Saya ingin melatihnya secara manual, tetapi tidak tahu caranya. Inilah implementasi lstm dan classifier saya tanpa pustaka pembelajaran mesin, yang saya tahu berfungsi: pastebin.com/63Cqrnef lstm memiliki fungsi deepActivate yang mengaktifkan lstm dan kemudian classifier seperti yang saya sebutkan di quesiton saya. Berikut ini sesuatu yang saya coba terapkan: deeplearning.net/tutorial/lstm.html
wordSmith
tetapi ketika saya mencoba mengaktifkan keduanya sebagai satu jaringan, saya tidak terdefinisi dari masing-masing lapisan keluaran. Lebih lanjut tentang itu ada di sini: stats.stackexchange.com/q/159922/81435
wordSmith
1
Terima kasih banyak! Anda memberikan lebih banyak bantuan daripada yang dibutuhkan. Terima kasih telah melampaui dan melampaui.
wordSmith