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:
- 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.
- Bagaimana Anda akan secara eksplisit memasukkan informasi waktu antar peristiwa. Menggunakan jam tetap dengan acara no-op jelas bekerja tetapi tampaknya jelek.
- 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.
Jawaban:
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.
sumber
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.
sumber