Dizi içi olay tahmini için LSTM'nin en iyi kullanımı


9

Aşağıdaki 1 boyutlu diziyi varsayalım:

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

A, B, C, ..Buradaki mektuplar 'sıradan' olayları temsil eder.

#, $, %, ...Buradaki semboller 'özel' olayları temsil eder

Tüm olaylar arasındaki zamansal aralık eşit değildir (saniyeler, günler arası) geçmişte bir olay ne kadar ileri giderse gelecekteki olayları etkileme olasılığı o kadar az olur. İdeal olarak, bu zaman gecikmelerini açıkça dikkate alabilirim.

10000 adet sıradan olay türü ve 100 adet özel olay türü vardır. Özel bir olaydan önceki olağan olayların miktarı değişir, ancak 100-300'den fazla olması muhtemel değildir.

Temelde sıradan olay dizisinde özel olaylar için öngörücü olan kalıplar aramakla ilgileniyorum.

Şimdi buna farklı şekillerde yaklaşabilirsiniz: özellik vektörleri + standart sınıflandırma, ilişkilendirme kuralı öğrenme, HMM'ler vb.

Bu durumda, LSTM tabanlı bir ağın nasıl en iyi olacağını merak ediyorum. Açıkçası, Karparthy'nin char-rnn gibi bir şey yapmak ve bir tarih verilen bir sonraki olayı tahmin etmek olacaktır. Sonra yeni bir dizi için

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

Bunu modelden geçirebilir ve bir sonraki etkinliğin hangi özel etkinliğin mümkün olduğunu görebilirsiniz. Ancak doğru uyumu pek hissetmiyor.

Bu geçici bir sınıflandırma problemi olduğundan, Alex Graves tarafından tarif edildiği gibi Bağlantıcı Geçici Sınıflandırma kullanmaktır .

Ancak, şu anda çok fazla yatırım yapmadan önce, LSTM'lerin buraya ne kadar iyi uyduğunu anlamak için denemek için daha kolay ve daha hızlı bir şey arıyorum. Tensorflow bir noktada bir CTC örneği görecek , ancak henüz görmeyecek .

Yani (alt) sorularım:

  1. Yukarıdaki sorun göz önüne alındığında ve ben LSTMs ile denemek istiyorum char-rnn tipi yaklaşım denemeye değer olduğunu, mermi ısırmak ve CTC ile kavramak olsun, ya da başlamak için daha iyi bir yer var mı.
  2. Olaylar arası zamanlama bilgilerini nasıl açıkça dahil edersiniz? İşlemsel olmayan olaylarla sabit bir saat kullanmak açıkça işe yarıyor ama çirkin görünüyor.
  3. Bir LSTM eğitmeyi başardığımı varsayarak, modeli ne tür bir olay 'motifleri' aldığını görmek için incelemenin bir yolu var mı? (yani, konnetteki filtrelere benzer)

Herhangi bir örnek kod (tercih edilen python) her zaman yardımcı olur.

Düzenleme: Sadece dizide biraz gürültü olduğunu eklemek için. Bazı olaylar güvenli bir şekilde göz ardı edilebilir, ancak hangilerinin önceden söylenmesi her zaman mümkün değildir. İdeal olarak model (ve ondan türetilen motifler) buna karşı sağlamdır.


Bu ne tür bir veri kümesi?
pir

@felbo: ​​Ne yazık ki açık bir şekilde söyleyemem ama finansal / satış / reklamlar / değil donanımdan verileri
dgorissen

Tamam. Aslında, ~ 10k olay türleriniz varsa, bir sıcak kodlama (cevabımda) sorunlu olabilir. Belki de word2vec çizgileri boyunca bir şeyler yapabilirsiniz, böylece sadece ~ 300 giriş boyutuna sahip olursunuz. Benzer şekilde, bir sonraki etkinlik türünü 10 bin seçenek arasından tahmin etmek muhtemelen sorunludur. Bunun yerine, sadece 100 özel türü ve daha sonra tüm 10k normal olaylar için bir 'normal olay' sınıfını tahmin etmek problemi yeniden çerçevelendirmek mantıklı olacaktır.
pir

Açık olmak gerekirse: Bu tür bir sorun için tonlarca veriye sahip olduğunuzu varsayıyorum.
pir

@felbo: ​​gerçekten. Sadece bir indeks kullanmayı, word2vec gibi bir vektörü öğrenmeyi ya da boyutları azaltmak için olayları sınıflara ayırmayı düşünüyordum. Tahmin tarafında da benzer, aynı fikirde.
dgorissen

Yanıtlar:


4

Verileriniz sadece token dizileri gibi görünüyor. Bir LSTM otomatik kodlayıcı oluşturmayı deneyin ve kodlayıcının, dizinizin ilk bölümünün ve kod çözücünün kalanını tahmin etmek için bazı sabit temsillerini öğrenmesine izin verin.

Bu temsiller sizin motifleriniz olacaktır.

Ref:

Bahdanau, D., Cho, K. ve Bengio, Y. (2014). Sinir makinesi çevirisini birlikte öğrenerek hizalamayı ve çevirmeyi öğrenir. arXiv ön baskı arXiv: 1409.0473.

Srivastava, N., Mansimov, E. ve Salakhutdinov, R. (2015). LSTM'leri kullanarak video gösterimlerinin denetimsiz öğrenimi. arXiv ön baskı arXiv: 1502.04681.


1

En önemli kısım sınıflandırma problemini nasıl "ifade ettiğiniz", yani girdiyi nasıl temsil ettiğiniz ve neyi çıktılamak istediğinizdir. Çok farklı etkinlik türlerine sahip olduğunuzu görünce, bunların gömülmesini öğrenmeniz gerekir. Bu doğrudan örneğin Keras'ta yapılabilir. Bu örneği görebilirsinizdoğrudan verilerden bir katıştırma nasıl öğrenilir. Başka bir yaklaşım, word2vec gibi denetimsiz bir yaklaşım kullanarak önceden yerleştirmeyi öğrenmek olacaktır. Bununla birlikte, ilgili bir görev bulmanız ve gömme oluşturmak için bunu eğitmeniz gerektiğinden, bu sizin açınızdan daha fazla çalışma gerektirir. Yeterli veriye sahip olduğunuz göz önüne alındığında, yerleştirmeyi doğrudan öğrenmek daha kolaydır (biraz daha az etkili olsa da). Çıktı için, tüm farklı olay türlerini tahmin etmem, ancak sorunu mümkün kılmak için sadece özel olayları ve bir "arka plan sınıfı" tahmin ediyorum. Gerçekten her bir sınıfı tahmin edebilmek istiyorsanız, o zaman bazı hileler kullanmanız gerekir (word2vec'in bunu nasıl yaptığına bakın).

Olaylar arasındaki zamanla ilgili. Sadece (örneğin bkz ek bir boyut olarak da LSTM o ekleyebilirsiniz bu keras içinde bunun nasıl bir örnek için). Bunu yapmak kolay olurdu ve LSTM'nin zamansal farkı hesaba katmasına izin verecektir.

Ağın zamansal doğasını "açığa çıkararak" motifleri görselleştirmenin hiçbir yolunu bilmiyorum. Üretken bir ağ kullanarak bazı motifler oluşturabilirsiniz, ancak yorumlanması muhtemelen zor olacaktır. Motifleri keşfetmenin bir yolu, örneğin uzunluk 20-100 gibi özel olmayan olayların en yaygın 100000 sekansını bulmak, bunları eğitimli modele girmek ve son softmax katmanından olasılık çıktısını çıkarmak olabilir. Bu şekilde, belirli özel olaylara bağlı sekanslar bulabilirsiniz. Ancak, bu motif yaklaşımının verilerinize bakmadan uygulanabilir / yararlı olup olmadığını söylemek zordur.


Sadece net olmak için. Motif tarafında, ham verilere bakmak ve belirli bir minimum uzunluğun en yaygın alt sekanslarını çıkarmak (veya bunları oluşturmak için sık sık öğe kümesi madenciliği kullanmak) ve daha sonra özel olay tahminlerinin en yüksek düzeyde olduğunu görmek mi istiyorsunuz? Bu durumda, standart bir sınıflandırma problemi olarak yaklaşmak daha kolay gibi görünüyor, değil mi?
dgorissen

Tekrarlayan bir modelin zamana bağlı doğasının bir tür yararlı denetime izin vereceğini umuyordum. Alternatif olarak belki de yapılacak şey, modeli 'ters' yönde çalıştırmak olacaktır. Her özel etkinlik türünün tahmin güvenini en üst düzeye çıkarın ve ne tür dizilerle sonuçlandığını görün. Bununla birlikte, bunun nasıl çalışacağından ve belki de üretken bir modele ihtiyaç duyduğundan emin değilim.
dgorissen

1
Lütfen güncellenmiş cevabıma bakın. Evet, ham verilere dayanarak "özel olay tahminlerinin en üst düzeyde olduğu" ifadesini görüyorum. Standart bir sınıflandırma problemi olarak yaklaşmakla ilgili ne demek istediğini anlamıyorum :)
pir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.