[토픽모델링] 상관 토픽 모델(Correlated Topic Model)

Posted by 적분 ∫2tdt=t²+c
2019.08.08 01:32 그냥 공부

오랜만의 토픽 모델링 공부입니다. 오늘 포스팅할 토픽 모델은 Correlated Topic Model(CTM)입니다. 이 모델의 특징은 이름에서 알 수 있듯이 주제 간의 상관 관계를 고려할 수 있다는 것입니다. 이 모델은 LDA 토픽 모델을 개발하여 토픽 모델링이라는 기법을 태동시킨 장본인인 D. Blei가 2006년에 개발한 LDA의 업그레이드된 모형이라고 할 수 있습니다. LDACTM과는 다르게 주제 간의 상관 관계를 모형화하는 능력이 없습니다. 즉 각각의 주제가 항상 독립적이라고 가정을 했는데, CTM은 이를 개선하여 특정 주제가 등장하면 이와 연관된 다른 주제가 함께 등장할 가능성이 높다는 사실을 활용한다는게 특징입니다. 본 포스팅은 다음 논문을 참조하여 작성하였습니다.


Blei, D., & Lafferty, J. (2006). Correlated topic models. Advances in neural information processing systems18, 147.


LDA의 단순함

앞서 LDA 모형을 포스팅할 때 설명하였듯이, 이 모형은 한 문헌은 여러 개의 주제를 확률적으로 포함하고 있고, 문헌의 단어들은 각 주제가 확률적으로 포함하는 어휘들에서 표집(sampling)하여 작성된것이라고 가정하고 있습니다. 이 때 문헌별 주제분포 및 주제별 어휘분포의 사전 분포(바탕이 되는 분포)는 디리클레 분포로 둔다고 하였습니다. 문헌별 주제 분포 및 주제별 어휘분포가 디리클레 분포를 따른다는 것은 다음과 같은 의미입니다.

  • 특정 문헌 내에서 어떤 주제 A에 속하는 단어가 새로 발견될 확률은 그 문헌 내에서 지금까지 발견된 모든 단어의 개수 중 어떤 주제 A에 속한 단어가 발견된 개수의 비율과 비례한다.
  • 특정 주제 내에서 어떤 어휘 a가 새로 발견될 확률은 그 주제 내에서 지금까지 발견된 모든 단어의 개수 중 어휘 a의 개수의 비율과 비례한다.

길게 풀어써놓았지만, 간단합니다. 문헌에서 특정 주제 A가 나올 확률은 전체 문헌 내에서 그 주제 A가 차지하는 비율을 따라간다는 것입니다. 즉, 주제 A가 대부분 차지하는 경우 그 문헌에서 새로 단어를 뽑았을때 A가 나올 가능성이 높습니다. 그리고 이렇게 되면 A가 또 뽑혔기 때문에 문헌 내에서 A가 차지하는 비율은 더 늘어나죠. 따라서 다음 단어를 뽑으면 A가 나올 확률이 더 올라갑니다. 주제별 어휘분포의 경우도 마찬가지입니다.

문헌별 주제분포와 주제별 어휘분포를 결합한 식을 잘 풀어서 전개한 뒤, 이를 바탕으로 프로그램을 돌리면 놀랍게도 문헌 집합 내에서 주제들이 뽑혀나옵니다. (다시 봐도 아주 신기한 기법입니다.) 이렇듯 LDA는 문헌 집합에서 주제를 잘 추출하지만 항상 각각의 주제들이 독립적이라고 가정합니다. 그 이유는 디리클레 분포의 특징 때문인데, 앞서 설명한 것처럼 문헌 내에서 주제 A가 뽑힐 확률은 오직 그 전까지 문헌 내에서 뽑힌 A의 비율에만 의존하기 때문입니다. 다른 주제 B와 C에 대해서는 전혀 고려하지 않는 것이죠.
하지만 실제 문헌에서 뽑히는 주제의 경우 주제끼리 연관성이 있는 경우가 많습니다. 수학, 물리, 역사학, 지리학과 같은 주제들이 섞여 있는 문헌이라면 물리라는 주제가 나온 문헌에서는 수학이라는 주제가 나올 가능성이 역사학이라는 주제가 나올 가능성보다 높을 겁니다. 반대로 역사학이라는 주제가 나온 문헌에서는 지리학이라는 주제가 같이 나올 가능성이 높구요. LDA에서는 수학, 물리, 역사학, 지리학을 항상 별개의 주제로 보고, 이들 사이에 연관성을 전혀 고려하지 않습니다. 물론, 이걸 고려하지 않아도 주제를 추출하는데에는 문제가 없지만, 전체 주제의 개수가 늘어날 수록 LDA는 동일한 주제를 쪼개거나 다르지만 유사한 주제를 합쳐버리는 등의 한계를 드러내게 되지요.

CTM, 로지스틱 정규분포를 도입하다

문헌별 주제분포의 사전 분포(prior)를 디리클레 분포로 두면 주제 간의 상관 관계를 고려할 수 없습니다. 디리클레 분포는 독립성을 가정하기 때문이죠. 따라서 이를 대체할 만한 분포가 필요합니다. 다변수 통계에서 상관관계(correlation)와 항상 같이 따라 다니는 개념이 공분산(covariance)입니다. 또 공분산과 연결되는 개념이 정규분포(normal distribution)이지요. 우리는 여러 개의 주제를 포함하는 분포를 다루고 싶으므로 다변수 정규분포(multivariate normal distribution)를 고려해야 합니다. 

다양한 개념이 한꺼번에 쏟아져 나와 당황하셨을텐데, 하나씩 차근차근 짚어보도록 하겠습니다.


정규분포

먼저 정규 분포입니다.

자주 보던 종 모양의 곡선입니다. 이 종모양의 곡선은 2가지 파라미터에 의해 조절됩니다. 하나는 종 모양의 중심점을 결정하는 평균(mean, 흔히 μ로 표현), 다른 하나는 종이 옆으로 얼마나 퍼졌는지를 결정하는 분산(variance, 흔히 σ²로 표현)입니다. 즉 이 두 가지 파라미터를 주면 언제든지 이 곡선을 정확하게 그릴수가 있습니다. Y축은 이 분포에서 임의의 점을 뽑았을때 그 점이 뽑힐 확률을 뜻합니다. 즉 Y축이 가장 높은 지점이 뽑힐 확률이 가장 높은 지점이 되며 양쪽 가장자리는 Y축 높이가 낮으므로 뽑힐 확률이 낮습니다.


다변수 정규분포

정규분포를 다차원으로 확장하는 것도 가능합니다.

이는 X축과 Y축이 정규분포를 따르는 2차원 정규분포의 모양입니다. 이 분포에서 임의의 점(X, Y)을 뽑아 검정으로 찍으면 위의 그림처럼 중심부에 잔뜩 찍히고 주변부에는 조금만 찍히는 모양이 됩니다. 2차원 정규분포를 결정하는 두 개의 파라미터는 1차원과 동일하게 평균과 분산입니다. 단, 2차원에서부터는 분산을 공분산(covariance)라고 부릅니다. 이 경우 평균은 2차원 벡터 형태로, 공분산은 2x2행렬 형태로 표현됩니다.


평균은 전체 분포의 중심점을 결정하며, 공분산 행렬(Σ)은 전체 분포가 어떤 방향으로 얼마나 퍼져있는지를 결정합니다.

σ_xx와 σ_yy(대각 원소)만 값을 가진 경우 x축과 y축 방향으로 동일하게 퍼진 모양이 됩니다.


σ_xy (σ_yx, 비대각 원소)가 0이 아닌 경우 x축이 변할때 y축도 같이 변하는 경향이 증가합니다. 만약 이 값이 음수라면 x축이 늘어날때 y축은 감소하는 방향으로 경향이 바뀝니다.


2차원보다 더 고차원의 정규분포도 생각할 수 있습니다. 이것이 다변수 정규분포입니다.


로지스틱 다변수 정규분포

따라서 문헌별 주제분포가 다변수 정규분포를 따른다고 가정하면 공분산의 비대각선 원소를 설정함에 따라 둘 이상의 변수가 함께 움직이거나 반대로 움직이게 할 수 있습니다. 즉 주제 간의 상관관계를 모형에 포함할 수 있다는 것이죠. 그런데 다변수 정규분포를 쓰기에는 큰 문제가 있습니다. 정규분포는 정의역이 무한합니다. 즉 정규분포에서 점을 하나 뽑았을때 그 점이 위치할 수 있는 영역은 -∞에서 ∞사이입니다. 양쪽 가장자리가 뽑힐 확률이 0에 가깝긴 하지만 절대로 0이 되진 않기 때문에 뽑힐 가능성이 결국엔 있다는 것이죠. 그러나 우리가 원하는 주제분포는 확률이어야 합니다. 즉 0~1사이의 값이어야하는 것이죠. 따라서 다변수 정규분포를 그대로 사용할 수 없습니다. 따라서 로지스틱 정규분포(logistic noraml distribution, logit-normal distribution)를 사용하게 됩니다. 
이름이 굉장히 어려워보이지만 사실 정규분포에 소프트맥스(Softmax)를 씌운것에 불과합니다. 즉, 다변수 정규분포에서 (-1, 0, 1)이 뽑혔다고 하면 다음과 같이 변환하여 출력하는 것이죠.

이값은 계산하면 약 (0.09, 0.24, 0.67)이 됩니다.


Correlated Topic Model

CTM은 LDA에서 문헌별 주제분포를 디리클레 분포 대신 로지스틱 정규분포로 대체한 것입니다. 디리클레 분포에서 하이퍼 파라미터는 α 하나였지만, 로지스틱 정규분포는 μ(평균)과 Σ(공분산)로 두 개입니다. 

그리고 공분산의 비대각 원소가 0인 경우, 주제 간의 상관 관계가 0이 되기 때문에, CTM은 LDA와 동일하게 됩니다. 즉, CTM은 LDA를 더 강력하게 일반화시킨 버전이라고 볼 수 있겠습니다. 또 다른 장점도 있는데, 학습이 끝난뒤 공분산 행렬을 봄으로써 어떤 주제끼리 연관성이 있는지 볼 수 있습니다. 특정 비대각 원소가 0이라면 이는 두 주제가 서로 상관이 없음을 의미하며, 반대로 이 값이 크다면 두 주제는 깊은 상관관계를 드러낸다고 이야기할 수 있습니다.



실험해보자

2016년 한국 정치/사회 분야 뉴스 데이터가 마침 있어서 이걸 가지고 CTM 모형을 돌려보았습니다. 구현은 Mimno, D., Wallach, H., & McCallum, A. (2008, December). Gibbs sampling for logistic normal topic models with graph-based priors. In NIPS Workshop on Analyzing Graphs (Vol. 61).에 제안된 깁스 샘플링 기반 로지스틱 정규분포 추론을 이용했습니다. 총 주제 개수는 48, 베타 샘플의 개수는 50, μ = 영벡터, Σ = 단위행렬로 초기값을 주었습니다.


생성된 주제 중 23개만 추려내서 주제 간의 관계도를 그려보았어요. 공분산 행렬에서 상관계수를 계산하였습니다. 상관계수가 0.33 이상인 주제 사이에는 간선을 그려넣었고, 간선 위에는 상관계수를 표시하였습니다. CTM에 따르면 가장 관계가 깊은 주제는 #21 중국 사드 배치와  #17 북한의 한반도 위협으로 밝혀졌습니다. 두번째로는 #13 특검 수사#15 최순실 재판이 있구요.


시험 삼아 구현한 CTM 모형은 조금 더 다듬어서 다음 버전의 tomotopy에 새 모듈로 추가할 예정입니다. 이거 구현해보느라 근 며칠 컴퓨터 앞에 매달려 있었는데 보람찬 시간이었습니다~

이 댓글을 비밀 댓글로
    • 하리무
    • 2019.08.09 10:10
    정-독을 했는데, 그래도 수식설명은 넘나어렵네염. tomoto업데이트를 기다리겠숩니다!!! ㅎ_ㅎ
    • 뉴비
    • 2019.09.22 13:18
    안녕하세요. 포스팅 잘 읽고 있습니다.
    한 가지 궁금한 게 있는데 기존 LDA에서 CTM으로 업그레이드 되면서 파라미터 베타 사라지는 것인가요?
    디리클레 분포가 2개 였던거 같은데 소문자 파이였던 디리클레 분포는 어떻게 된건가요?
    • 아니요, 주제별 단어분포(하이퍼파라미터 베타와 디리클레 분포 φ)는 그대로 있습니다. CTM에서는 기존 LDA의 θ(문헌별 주제분포)가 디리클레 분포에서 로지스틱 정규분포로 바뀐 것입니다. φ는 바뀐게 없고 두 모델에서 모두 동일하게 작동합니다.
      • 뉴비
      • 2019.09.25 16:39
      기존 LDA의 디리클레 분포(주제별 단어 분포와 문서집합에서 주제분포)에서 주제별 단어분포는 그대로 디리클레 분포를 사용하고 주제분포가 로지스틱 정규분포로 대체되었고 파라미터 알파 1개에서 2개의 파라미터로 입력된다는 것이죠?
    • 네, 맞습니다.
      • 뉴비
      • 2019.09.30 19:02
      알려주셔서 정말 감사드립니다.
      tomoto 잘 사용하고 있습니다!!