[토픽 모델링] TOT 모델 (Topic Over Time)

Posted by 적분 ∫2tdt=t²+c
2017.12.01 16:57 그냥 공부

시간 축에 따라 문헌 집합 내에 등장하는 주제들이 어떻게 바뀌는지를 살피는 것은 많은 사람들이 관심을 보이는 분야입니다. 이를 위해 기존의 토픽 모델링에 시간 요소를 첨가하여 모델을 확장하려는 시도가 여럿이 있었습니다. 앞서 포스팅에서 정리된 것들을 되짚어보면, 1) DMR 토픽 모델에서는 범주형 메타데이터에 따른 주제 차이를 분석할 수 있으므로, 시간 정보를 이산화하여 범주형 메타데이터로 넣어 분석을 실시할수 있습니다. 2) 혹은 sLDA를 활용해 응답 변수로 그 문헌의 작성 시간을 주어, 주제 분포에 적당한 시간 값을 학습하는 방법도 있겠습니다. 위 방법들은 여러 방향으로 사용가능한 모델에 시간을 끼워넣어 기존의 모델을 재활용한 것입니다만, 이번 포스팅에서 소개할 Topic Over Time 모델은 오직 시간 정보를 다루기 위해 LDA를 확장한 모델입니다. 다른 방법들과 어떤 차이가 있는지 살펴보도록 합시다.


TOT 모델

시간이라는 것은 그 특성상 내재적으로 연속일 수 밖에 없습니다. 물론 사람들은 이 시간을 편의에 따라 이산화하여 날이라던지 달, 년 등의 구간으로 잘라서 생각하지만, 실제로 시간에 따라 일어나는 사건들은 사람의 시간 구분과는 별개로 일어나는 경우가 많습니다. 그런 점에서 시기별 주제 변화를 분석하기 위해서 DMR 토픽 모델링을 사용하는 것은 한계가 있을 수 밖에 없습니다. DMR은 범주형 메타데이터만을 받으므로, 연속적인 시간 정보를 임의로 이산화하여 범주화할수 밖에 없고 (예를 들어 1년 단위로 끊어, 연도 정보만을 사용할수 있겠죠. 이 경우 2017년 1월 1일과 2017년 12월 31일은 같은 2017로 범주화되지만, 2017년 12월 31일과 2018년 1월 1일은 다른 범주로 나뉘게 됩니다.) 개개의 범주들은 서로 독립이므로 간격을 전혀 고려할 수 없기 때문입니다. (명목형 변수들끼리는 거리를 계산할 수 없습니다. 실제 시간에서 '2017년'은 '2018년'과는 가깝지만 '2000년'과는 멀지만, 범주형 변수로 코딩된 이후에는 '빨강'과 '파랑', '노랑' 마냥 서로의 거리를 전혀 계산할 수 없게 되는 것이죠.)

따라서 2006년 Wang, Xuerui은 연속적인 시간 정보를 토픽 모델링에 사용할 수 있도록 시간 정보를 받아들이는 LDA 확장 모형을 제시했습니다.[각주:1] 각각의 주제가 고유한 시간별 확률분포를 지니게 한 것입니다. 기존의 LDA와 어떻게 다른지 그림으로 살펴보아요.



TOT에 T 요소가 추가된 것을 확인할 수 있습니다. 이는 앞서 말한 문헌의 시간값입니다. 이 값이 단어별로 부여된 이유는 깁스 샘플링시 계산을 용이하게 위해 그런것이고, 실제로는 같은 문헌 내의 T값은 모두 같다고 생각하시면 되겠습니다. 그리고 이 T값을 결정하는 잠재 변수들은 주제인 Z와 시간 분포를 결정하는 베타분포 ψ가 되겠습니다. 즉 주제별로 시간에 따른 확률분포를 베타분포로 가지고 있다고 생각하면 되겠는데요, 왜 하필 베타분포인지 생각해볼 필요가 있습니다.


위의 그림은 흔한 베타분포의 모양입니다. 원래는 동전을 던졌을때(베르누이 분포) α+1번 앞이 나오고, β+1번 뒤가 나왔을때, 원래 동전이 앞이 나올 확률 p가 몇이었을지를 추정하는데 사용되는 그런 분포였죠 (자세한 내용은 [잠재 디리클레 할당 파헤치기] 1. 베이즈 추론에서 찾아보실수 있습니다.) 여기서는 그런 베이즈 추론의 의미와는 별개로 그냥 그 그래프 형태가 볼록하고 밑넓이가 1이 되므로 베타분포를 선택한 것 같습니다. 대게 특정 시기에 사건이 발생하면 그 사건과 관련된 주제들이 그 시기에 몰려서 등장하기에 주제의 시간별 분포는 특정 지점에서 볼록한 모양이 되게 마련이기에 임의 지점에서 극대인 볼록한 형태를 표현할 수 있는 적절한 함수가 베타함수였겠죠. 그리고 파라미터가 오직 2개이기 때문에 추론해야할 변수도 적습니다. (전체 주제가 K개라면 LDA때 보다 K*2개의 변수만 추가로 더 추론하면 되니까요)


단, 시간 값을 베타 분포에 맞추기 위해서는 그 범위를 0~1로 한정할 필요가 있습니다. 이는 간단하게 문헌 집합 내에서 가장 오래된 시점을 0으로 잡고, 가장 최근 시점을 1로 잡고, 그 사이를 0~1의 값으로 선형 변환해주면 됩니다.


TOT 추론

모형이 LDA와 유사하기에, LDA에서 사용했던것처럼 깁스 샘플링을 이용해 추론을 진행할 수 있습니다. 간략하게 정리하자면 다음과 같아요.

  1. 먼저 문헌 내의 모든 단어에 대해 임의로 아무 주제나 부여한다.
  2. 문헌 집합 내에서 문헌 D를 가져와서
    1. 문헌 D에서 단어 i를 가져와서
    2. i를 제외하고, (문헌 내에서 주제 Z의 비중) * (주제 Z에서 어휘 W_i의 비중) * (주제 Z의 시간 분포 ψ_z에서 문헌의 시간 T_d가 나타날 확률)을 계산하여 그 값이 제일 높은 Z값을 찾아서, 단어 i의 주제로 부여한다.
    3. 1로 돌아가서 문헌 내 모든 단어에 대해 반복
  3. 2로 문헌 집합 내의 모든 문헌에 대해서 이를 반복한다.
  4. 모든 문헌 집합에 대한 반복이 끝났으면, 이제 주제 k에 대해
    1. 각각의 문헌마다 k의 비중을 계산하고, 그 문헌의 시간 값을 가져온다.
    2. 1에서 계산된 값을 바탕으로 주제 k의 시간 분포 ψ_k에서 해당 시간값들의 분포를 가장 잘 만족하는 파라미터를 찾는다.
    3. 2에서 찾은 파라미터로 ψ_k의 분포를 업데이트
  5. 4번으로 돌아가 모든 주제 k에 반복함.
  6. 분포가 수렴할때까지 2로 돌아가 반복적으로 샘플링한다

TOT 결과

Wang, X., & McCallum, A. (2006, August). Topics over time: a non-Markov continuous-time model of topical trends. In Proceedings of the 12th ACM SIGKDD international conference on Knowledge discovery and data mining (pp. 424-433). ACM. ISO 690 에서 가져왔음


위가 TOT의 결과로 얻게되는 데이터입니다. 먼저 녹색 선은 해당 주제의 ψ를 가지고 분포그래프를 그린것이고, 파란 막대는 실제로 문헌 집합 내에서 해당 시기에 대한 주제의 비중이 어떻게 나타나는지 표현한 것입니다. 아래의 단어들은 해당 주제에 속하는 단어 비중에 따라 단어를 나열한 것이구요. 그림에서 확인할 수 있다시피 특정 시기에 주제가 밀집해 있는것을 잘 잡아냅니다.


그리고 TOT가 얼마나 시기별 주제 분포를 잘 잡아내는지 확인하기 위해 주제간 KL-divergence를 계산했는데 NIPS 데이터에서 0.5728이 나왔습니다. LDA는 같은 데이터에서 0.5421이 나왔는데, TOT가 0.03정도 더 높네요. 이를 바탕으로 저자들은 TOT가 주제 간의 변별력이 더 높다고 주장했네요.


더 나아가 TOT 결과를 바탕으로 새로운 문헌이 입력되었을때 그 문헌의 시간 값을 예측하는 것도 가능한데요, 이를 통해 TOT의 유용성을 판단할 수도 있겠습니다. 저자들이 Address 데이터셋을 바탕으로 실험한 결과 LDA는 10%의 Accuracy를 보였지만, TOT에서는 19%, 거의 2배의 성능을 보였다고 합니다. (물론 아직 절대적으로 쓸만한 성능수치는 아닌듯하지만, 나름대로 예측성능에 개선이 있었다고 할 수 있겠습니다.)


생각해볼 문제

사실 모형 구조를 살펴보면 sLDA와 굉장히 유사하다는 것을 알 수 있습니다. sLDA나 TOT나 문헌의 주제 분포를 바탕으로 응답 변수(시간값)을 예측해낸다는 개념이 동일합니다. sLDA는 주제 분포에서 응답 변수를 예측하는데 (일반화된 선형 모형을 사용하여 여러 복잡한 분포를 모델링할 수 있다는 특징이 있습니다만) 기본적으로는 선형 모형을 사용합니다. 즉 TOT에서처럼 특정시기에만 증가했다가 다시 감소하는 형태를 모델링하는데에는 부적합한 부분이 있다고 할 수 있겠죠. 반면 거꾸로 TOT에서는 한 차례 볼록 솟은 분포는 모델링 가능하지만, 다른 형태의 분포는 잡아내기 어렵습니다. 주기적으로 상승하락을 반복하는 주제를 분석하기에는 부적합하겠습니다. 


그러면 시간 분포를 결정하는 ψ를 베타 분포말고 다른 분포로 사용하는 것은 어떨까요? 재미있는 고민이죠. 푸리에 변환을 이용한 분포를 사용한다면 (파라미터는 많이 늘어나서 학습이 조금 어려워지겠지만), 시간에 따라 주기성을 띄는 분포도 학습할 수 있지 않을까하는 생각도 듭니다. 여러가지 고민을 하게 한 단순하지만 재미난 모델이네요.


* 파이썬 구현 코드: https://github.com/ahmaurya/topics_over_time

  1. Wang, X., & McCallum, A. (2006, August). Topics over time: a non-Markov continuous-time model of topical trends. In Proceedings of the 12th ACM SIGKDD international conference on Knowledge discovery and data mining (pp. 424-433). ACM. ISO 690 [본문으로]
이 댓글을 비밀 댓글로