시퀀스 내 이벤트 예측을위한 LSTM 활용


9

다음 1 차원 시퀀스를 가정하십시오.

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

A, B, C, ..여기의 문자 는 '일반적인'이벤트를 나타냅니다.

#, $, %, ...여기의 기호 는 '특별한'이벤트를 나타냅니다

모든 이벤트 사이의 시간 간격은 일정하지 않습니다 (몇 초에서 며칠까지). 과거 이벤트가 계속 될수록 미래 이벤트에 영향을 줄 가능성은 적습니다. 이상적으로 이러한 시간 지연을 명시 적으로 고려할 수 있습니다.

10000 개의 일반 이벤트 유형과 100 개의 특수 이벤트 유형이 있습니다. 특별 이벤트 이전의 일반 이벤트의 양은 다양하지만 100-300을 초과하지는 않습니다.

근본적으로 나는 특별 이벤트를 예측하는 일반적인 이벤트 시퀀스의 패턴을 찾는 데 관심이 있습니다.

이제 특징 벡터 생성 + 표준 분류, 연관 규칙 학습, HMM 등 다양한 방식으로이 방법에 접근 할 수 있습니다.

이 경우 LSTM 기반 네트워크가 어떻게 가장 적합한 지 궁금합니다. Karparthy의 char-rnn 과 같은 일을 하고 역사가 주어진 다음 사건을 예측하는 것이 간단 합니다. 그런 다음 새로운 시퀀스

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

모델을 통해 실행할 수 있으며 다음에 어떤 특별한 이벤트가 일어날 지 알 수 있습니다. 그러나 제대로 맞지는 않습니다.

이것은 임시 분류 문제이므로 Alex Graves가 설명한 Connectionist Temporal Classification을 사용하는 것이 좋습니다 .

그러나 지금 너무 많은 투자를하기 전에 LSTM이 얼마나 적합한 지 실험 해 볼 수있는 쉽고 빠른 방법을 찾고 있습니다. Tensorflow는 어느 시점에서 CTC 예제 를 볼 수 있지만 아직은 아닙니다.

따라서 내 (하위) 질문은 다음과 같습니다.

  1. 위의 문제를 감안할 때 LSTM을 실험하고 싶다면 char-rnn 유형 접근법을 시도해 볼 가치가 있습니다. 탄알을 물고 CTC를 파악해야하거나 시작하기에 더 좋은 곳이 있습니까?
  2. 이벤트 간 타이밍 정보를 명시 적으로 통합하는 방법 이벤트가없는 고정 시계를 사용하면 분명히 작동하지만 못생긴 것 같습니다.
  3. LSTM을 훈련시킬 수 있다고 가정하면 모델을 검사하여 어떤 종류의 이벤트 '모티브'를 포착했는지 확인할 수 있습니까? (즉, convnets의 필터와 유사)

모든 샘플 코드 (파이썬 선호)는 항상 도움이됩니다.

편집 : 시퀀스에 약간의 노이즈가 있음을 추가하기 만하면됩니다. 일부 이벤트는 무시해도되지만 정확히 사전에 말할 수있는 것은 아닙니다. 따라서 이상적으로는 모델 (및 모델에서 파생 된 모티프)이 이에 대해 강력합니다.


이것은 어떤 종류의 데이터 세트입니까?
pir

@felbo : 나는 명시 적으로 불행하게도 말을하지만, 어차피 하드웨어에서 데이터, 하지 재무 / 영업 / 광고 / ..
dgorissen

확인. 실제로 ~ 10k 이벤트 유형이있는 경우 원 핫 인코딩 (제 답변에)이 문제가 될 수 있습니다. word2vec 줄을 따라 무언가를 할 수 있으므로 ~ 300 개의 입력 크기 만 가질 수 있습니다. 마찬가지로 10k 옵션 중 다음 이벤트 유형을 예측하는 데 문제가있을 수 있습니다. 대신 100 개의 특수 유형을 예측 한 다음 10k 일반 이벤트 모두에 대해 '정상 이벤트'클래스를 예측하기 위해 문제를 재구성하는 것이 합리적입니다.
pir

분명히하기 위해 : 나는 당신이 이런 종류의 문제에 대해 많은 양의 데이터를 가지고 있다고 가정합니다.
pir

@felbo : 그렇습니다. 인덱스를 사용하고 word2vec와 같은 벡터 임베딩을 배우거나 차원을 줄이기 위해 이벤트를 클래스로 그룹화하려고 생각했습니다. 예측 측면에서도 비슷하다.
dgorissen

답변:


4

귀하의 데이터는 일련의 토큰으로 보입니다. LSTM 자동 인코더를 구축하고 인코더가 시퀀스의 첫 번째 부분과 디코더의 고정 된 표현을 학습하여 나머지를 예측하도록합니다.

이 표현들은 당신의 모티브가 될 것입니다.

참조 :

Bahdanau, D., Cho, K., & Bengio, Y. (2014). 조정하고 번역하는 공동 학습으로 신경 기계 번역. arXiv 프리 프린트 arXiv : 1409.0473.

Srivastava, N., Mansimov, E., & Salakhutdinov, R. (2015). LSTM을 사용한 비디오 표현에 대한 감독되지 않은 학습. arXiv 프리 프린트 arXiv : 1502.04681.


1

가장 중요한 부분은 분류 문제를 "구문"하는 방법입니다. 즉, 입력을 나타내는 방법과 출력하려는 ​​항목을 의미합니다. 다양한 유형의 이벤트가 있으므로 임베딩을 배우는 데 필요합니다. 예를 들어 Keras에서 직접 수행 할 수 있습니다. 이 예제를 볼 수 있습니다데이터에서 직접 포함을 배우는 방법에 대해 설명합니다. 또 다른 접근법은 word2vec와 같은 감독되지 않은 접근법을 사용하여 미리 임베딩을 배우는 것입니다. 그러나 관련 작업을 수행하고 임베딩을 생성하도록 교육해야하기 때문에 더 많은 작업이 필요합니다. 데이터가 충분하면 포함을 직접 학습하는 것이 더 쉽습니다 (약간 덜 효과적이지만). 출력의 경우 모든 다른 유형의 이벤트를 예측하는 것이 아니라 문제를 실현할 수있는 특수 이벤트 및 "백그라운드 클래스"만 예측합니다. 모든 단일 클래스를 실제로 예측하려면 몇 가지 트릭을 사용해야합니다 (word2vec가 어떻게 수행하는지 살펴보십시오).

이벤트 사이의 시간과 관련하여. LSTM에 추가 차원으로 간단히 추가 할 수 있습니다 (예 : Keras에서이를 수행하는 방법에 대한 예는 참조 ). 이것은 쉽게 할 수 있고 LSTM이 시간적 차이를 고려할 수있게합니다.

나는 네트워크의 시간적 특성을 "풀림"으로써 주제를 시각화하는 방법을 모른다. 생성 네트워크를 사용하여 일부 주제를 생성 할 수 있지만 해석하기 어려울 수 있습니다. 주제를 탐색하는 한 가지 방법은 예를 들어 길이 20-100의 비특이적 이벤트의 상위 10 만개의 가장 일반적인 시퀀스를 간단히 찾아 훈련 된 모델에 입력하고 최종 softmax 레이어에서 출력되는 확률을 추출하는 것입니다. 이런 식으로 특정 특수 이벤트에 연결된 시퀀스를 찾을 수 있습니다. 그러나 데이터를 보지 않고이 모티브 접근 방식이 실현 가능 / 유용한 것인지 말하기는 어렵습니다.


분명해 지려면 주제 측면에서, 원시 데이터를보고 특정 최소 길이의 가장 일반적인 하위 시퀀스를 추출하거나 빈번한 항목 세트 마이닝을 사용하여 생성 한 다음 특별한 이벤트 예측이 최대 인 위치를 확인하는 것을 의미합니다. 이 경우 표준 분류 문제로 접근하는 것이 더 쉬운 것 같습니다.
dgorissen

나는 반복 모델의 시간 의존적 특성이 유용한 검사를 할 수 있기를 바랐다. 또는 '역방향'으로 모델을 실행하는 것이 좋습니다. 각 특수 이벤트 유형의 예측 신뢰도를 최대화하고 결과로 어떤 시퀀스가 ​​발생하는지 확인하십시오. 그러나 이것이 어떻게 작동하고 생성 모델이 필요한지는 확실하지 않습니다.
dgorissen

1
업데이트 된 답변을 참조하십시오. 예, 원시 데이터를 기준으로 "특별 이벤트 예측이 최대"인 위치를 확인하는 것을 의미합니다. 표준 분류 문제로 접근하는 것에 대한 당신의 의미를 이해하지 못합니다 :)
pir
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.