Assuma a seguinte sequência dimensional 1:
A, B, C, Z, B, B, #, C, C, C, V, $, W, A, % ...
As cartas A, B, C, ..
aqui representam eventos "comuns".
Os símbolos #, $, %, ...
aqui representam eventos 'especiais'
O espaçamento temporal entre todos os eventos não é uniforme (de segundos a dias), embora quanto mais no passado um evento seja menos provável é que ele influencie eventos futuros. Idealmente, posso levar em consideração esses atrasos explicitamente.
Existem na ordem de 10000 tipos de eventos comuns e na ordem de 100 tipos de eventos especiais. A quantidade de eventos comuns que precede um evento especial varia, mas é improvável que seja superior a 100-300.
Fundamentalmente, estou interessado em procurar padrões na sequência de eventos comum que acabam sendo preditivos para os eventos especiais.
Agora você pode abordar isso de diferentes maneiras: criando vetores de recursos + classificação padrão, aprendizado de regras de associação, HMMs etc.
Nesse caso, estou curioso para saber como uma rede baseada em LSTM se encaixaria melhor. Simples seria fazer algo como o caráter de Karparthy e prever o próximo evento dado uma história. Então, para uma nova sequência
C, Z, Q, V, V, ... , V, W
Você pode executá-lo através do modelo e ver qual evento especial é mais provável que venha a seguir. Mas não parece o ajuste certo.
Como esse é um problema de classificação temporal, parece que a coisa certa a se fazer é usar a Classificação Temporal Conexional, conforme descrito por Alex Graves .
No entanto, antes de investir muito no momento, estou procurando algo mais fácil e rápido de experimentar para ter uma ideia de como os LSTMs se encaixariam aqui. O Tensorflow verá um exemplo da CTC em algum momento, mas ainda não.
Então, minhas (sub) perguntas são:
- Dado o problema acima e gostaria de experimentar os LSTMs, vale a pena tentar a abordagem do tipo char-rnn, devo morder a bala e me familiarizar com o CTC, ou existe um lugar melhor para começar.
- Como você incorporaria explicitamente informações de tempo entre eventos. Usar um relógio fixo com eventos sem operação obviamente funciona, mas parece feio.
- Supondo que eu consegui treinar um LSTM, há uma maneira de inspecionar o modelo para ver que tipo de evento 'motivos' ele pegou? (ou seja, análogo aos filtros nos convnets)
Qualquer código de amostra (preferencialmente python) sempre útil.
Edit: Apenas para adicionar que há algum ruído na sequência. Alguns eventos podem ser ignorados com segurança, mas exatamente quais nem sempre é possível dizer com antecedência. Então, idealmente, o modelo (e os motivos derivados dele) é robusto contra isso.