Penggunaan terbaik LSTM untuk prediksi urutan acara

9

Asumsikan urutan 1 dimensi berikut:

A, B, C, Z, B, B, #, C, C, C, V, $, W, A, % ...

Surat-surat di A, B, C, ..sini mewakili peristiwa 'biasa'.

Simbol di #, $, %, ...sini mewakili acara 'khusus'

Jarak temporal antara semua peristiwa adalah tidak seragam (mulai dari detik, hingga hari) meskipun semakin lama peristiwa tersebut semakin kecil kemungkinannya untuk mempengaruhi peristiwa di masa depan. Idealnya saya dapat memperhitungkan penundaan waktu ini secara eksplisit.

Ada di urutan 10.000 jenis acara biasa, dan di urutan 100 jenis acara khusus. Jumlah acara biasa sebelum acara khusus bervariasi tetapi tidak mungkin lebih dari 100-300.

Pada dasarnya saya tertarik untuk mencari pola dalam urutan peristiwa biasa yang akhirnya menjadi prediksi untuk acara khusus.

Sekarang Anda dapat mendekati ini dengan berbagai cara: membuat vektor fitur + klasifikasi standar, pembelajaran aturan asosiasi, HMM, dll.

Dalam hal ini saya ingin tahu bagaimana jaringan berbasis LSTM paling cocok. Terus terang akan melakukan sesuatu seperti char-rnn Karparthy dan memprediksi acara berikutnya diberi sejarah. Kemudian untuk urutan baru

C, Z, Q, V, V, ... , V, W

Anda dapat menjalankannya melalui model dan melihat acara khusus apa yang paling mungkin terjadi selanjutnya. Tapi rasanya kurang pas.

Karena ini adalah masalah klasifikasi temporal, tampaknya hal yang tepat untuk dilakukan adalah menggunakan Classification Temporal Connectionist seperti yang dijelaskan oleh Alex Graves .

Namun, sebelum berinvestasi terlalu banyak pada saat ini saya sedang mencari sesuatu yang lebih mudah dan lebih cepat untuk bereksperimen untuk merasakan seberapa baik LSTM cocok di sini. Tensorflow akan melihat contoh CTC di beberapa titik, tetapi belum.

Jadi (sub) pertanyaan saya adalah:

  1. Mengingat masalah di atas dan saya ingin bereksperimen dengan LSTM apakah perlu mencoba pendekatan tipe char-rnn, haruskah saya menggigit peluru dan mulai menggunakan CTC, atau apakah ada tempat yang lebih baik untuk memulai.
  2. Bagaimana Anda akan secara eksplisit memasukkan informasi waktu antar peristiwa. Menggunakan jam tetap dengan acara no-op jelas bekerja tetapi tampaknya jelek.
  3. Dengan asumsi saya berhasil melatih LSTM apakah ada cara untuk memeriksa model untuk melihat seperti apa 'motif' acara itu telah diambil? (Yaitu, analog dengan filter di convnets)

Setiap kode sampel (lebih disukai python) selalu membantu.

Sunting: Hanya untuk menambahkan bahwa ada beberapa gangguan dalam urutan. Beberapa peristiwa dapat diabaikan dengan aman tetapi hal mana yang tidak selalu mungkin untuk dikatakan di muka. Jadi idealnya model (dan motif yang berasal dari itu) kuat terhadap ini.

Dgorissen
sumber
Jenis data apa ini?
pir
@felbo: ​​Sayangnya saya tidak bisa mengatakannya secara eksplisit tetapi datanya dari perangkat keras, bukan finansial / penjualan / iklan / ..
dgorissen
Baik. Sebenarnya, one-hot encoding (dalam jawaban saya) mungkin bermasalah jika Anda memiliki ~ 10k jenis acara. Anda mungkin dapat melakukan sesuatu di sepanjang baris word2vec sehingga Anda hanya memiliki ~ 300 dimensi input. Demikian pula, kemungkinan bermasalah untuk memprediksi tipe acara berikutnya dari 10k opsi. Sebaliknya, masuk akal untuk membingkai ulang masalah untuk hanya memprediksi 100 jenis khusus dan kemudian kelas 'acara normal' untuk semua acara normal 10k.
pir
Untuk lebih jelasnya: Saya berasumsi Anda memiliki banyak data untuk masalah seperti ini.
pir
@felbo: ​​memang. Pernah berpikir hanya menggunakan indeks, belajar embedding vektor seperti word2vec, atau kelompokkan peristiwa ke dalam kelas untuk mengurangi dimensionalitas. Serupa di sisi prediksi, setuju.
dgorissen

Jawaban:

4

Data Anda tampaknya hanya urutan token. Coba buat autoencoder LSTM dan biarkan pembuat enkode mempelajari beberapa representasi tetap dari bagian pertama dari urutan Anda dan dekoder untuk memprediksi sisanya.

Representasi ini akan menjadi motif Anda.

Ref:

Bahdanau, D., Cho, K., & Bengio, Y. (2014). Terjemahan mesin saraf dengan belajar bersama untuk menyelaraskan dan menerjemahkan. arXiv preprint arXiv: 1409.0473.

Srivastava, N., Mansimov, E., & Salakhutdinov, R. (2015). Pembelajaran representasi video tanpa pengawasan menggunakan LSTMs. arXiv preprint arXiv: 1502.04681.

horaceT
sumber
1

Bagian terpenting adalah bagaimana Anda "mengungkapkan" masalah klasifikasi, artinya bagaimana Anda merepresentasikan input dan apa yang ingin Anda hasilkan. Karena Anda memiliki begitu banyak jenis acara yang berbeda, Anda perlu mempelajari penyematan ini. Ini dapat dilakukan secara langsung di eg Keras. Anda dapat melihat contoh initentang cara mempelajari penyematan langsung dari data. Pendekatan lain adalah belajar embedding sebelumnya menggunakan pendekatan tanpa pengawasan seperti word2vec. Namun, ini membutuhkan lebih banyak pekerjaan di pihak Anda karena Anda harus datang dengan tugas yang relevan dan melatihnya untuk menghasilkan penyematan. Mengingat Anda memiliki cukup data, lebih mudah (walaupun sedikit kurang efektif) untuk mempelajari penyematan langsung. Untuk hasilnya saya tidak akan memprediksi semua jenis acara yang berbeda, tetapi hanya acara khusus dan "kelas latar belakang" untuk membuat masalah tetap layak. Jika Anda benar-benar ingin dapat memprediksi setiap kelas maka Anda perlu menggunakan beberapa trik (lihat bagaimana word2vec melakukannya).

Mengenai waktu antar acara. Anda bisa menambahkannya ke LSTM Anda sebagai dimensi tambahan (lihat mis. Ini untuk contoh bagaimana melakukannya di Keras). Ini akan mudah dilakukan dan akan memungkinkan LSTM untuk memperhitungkan perbedaan temporal.

Saya tidak tahu cara untuk memvisualisasikan motif dengan "membuka gulungan" sifat temporal dari jaringan. Anda mungkin dapat menghasilkan beberapa motif menggunakan jaringan generatif, tetapi kemungkinan akan sulit untuk menafsirkannya. Salah satu cara untuk mengeksplorasi motif bisa dengan hanya menemukan urutan teratas 100000 paling umum dari peristiwa non-khusus misalnya panjang 20-100, memasukkannya ke dalam model yang terlatih dan mengekstrak output probabilitas dari lapisan softmax akhir. Dengan cara ini Anda bisa menemukan urutan yang terhubung ke acara khusus tertentu. Namun, sulit untuk mengatakan apakah pendekatan motif ini layak / bermanfaat tanpa melihat data Anda.

pir
sumber
Untuk lebih jelasnya. Di sisi motif, maksud Anda melihat data mentah dan mengekstraksi urutan paling umum dari panjang minimum tertentu (atau menggunakan penambangan item yang sering dilakukan untuk menghasilkannya) dan kemudian melihat di mana prediksi acara khusus maksimal? Dalam hal ini tampaknya lebih mudah untuk mendekatinya sebagai masalah klasifikasi standar, bukan?
dgorissen
Saya berharap sifat yang bergantung pada waktu dari model berulang akan memungkinkan semacam inspeksi yang bermanfaat. Atau mungkin hal yang harus dilakukan adalah menjalankan model secara 'terbalik'. Maksimalkan keyakinan prediksi masing-masing jenis acara khusus dan lihat jenis urutan apa yang dihasilkan. Namun, tidak yakin bagaimana cara kerjanya dan mungkin membutuhkan model generatif.
dgorissen
1
Silakan lihat jawaban saya yang diperbarui. Ya, maksud saya melihat di mana "prediksi acara khusus adalah maksimal" berdasarkan data mentah. Saya tidak mengerti apa yang Anda maksud dengan mendekatinya sebagai masalah klasifikasi standar :)
pir