주로 자연어 처리에서 활용되는 LDA(Latent Dirichlet Allocation, 잠재 디리클레 할당)는 문서의 토픽을 결정하는 확률적 토픽 모델(topic model)이다. 미리 알고 있는 토픽별 단어수 분포를 활용하여 이 문서가 어떠한 토픽을 다루고 있는지 결정 짓는다.

즉, [개미,반도체,공매도]와 같은 단어들이 많이 포함된 뉴스 기사를 경제 카테고리에 [대통령,국회]와 같은 단어들이 많이 포함된 뉴스 기사를 정치 카테고리에 배정하는 과정들을 생각하면 된다.

기본적으로 LDA는 이산형(discrete) 데이터에 대한 확률적 생성 모형이다. LDA는 앞서 언급한 것처럼 문서에서 발견된 단어의 빈도를 바탕으로 문서의 토픽을 결정한다. 이를 위해 우리는 단어의 교환성(exchangeablity)이란 중요한 가정을 하게 된다. 이는 단어의 순서를 무시하더라도 단순히 단어의 빈도만 가지고도 문서의 주제를 표현할 수 있다고 판단하는 것이다. 단어의 유무만 중요할 뿐, 단어의 순서는 중요하지 않다는게 LDA의 가정이다. 따라서 LDA 모형에서는 놀랍게도 “Samsung beats TSMC” 라는 문장과 “TSMC beats Samsung” 이란 문장을 차이가 없다고 간주한다.

논의를 더 이어가기에 앞서 우리는 이후 자주 활용할 용어에 대한 정의를 내릴 필요가 있다.

  • 단어(word) : 하나의 독립적인 의미를 가진 글자이며 이산형 데이터의 기본 단위(basis unit)
  • 문서(document) : 여러 단어로 구성된 것(sequence of words)
  • 토픽(topic) : 단어의 분포로 특징지어지는 잠재 다항변수(latent multinomial variable)

LDA

위의 이미지는 LDA를 소개하는데 활용되는 가장 대표적인 이미지다. 가장 왼쪽에 있는 박스는 각각이 하나의 토픽과 매칭된다. 하나의 토픽 안에는 각 토픽에서 출현할 가능성이 높은 단어들이 포함되어있다. 첫번째 토픽은 [gene, dna, genetic] 과 같은 단어들이 적혀있는 것을 보니 유전과 관련된 토픽일 것이다. 반면 마지막에 있는 토픽은 [data number computer]인 것을 보아하니 IT와 관련된 토픽일 것이라고 생각할 수 있다.

문서에서는 각 토픽에 포함된 단어들이 관찰되는 빈도를 보여주고 있다. 노란색이 가장 많은 것을 보아하니 이 문서는 유전과 관련된 주제를 이야기하고 있을 것으로 판단된다. 이미지에서 가장 우측에 있는 토픽의 분포를 확인하는 작업은 LDA에서 가장 중요한 과정이다. LDA는 이러한 과정을 반영한 2가지 가정에서 출발한다.

  • 각 토픽은 단어들이 혼합되어 생성 된다. (Each topic is a mixture over words)
  • 각 문서는 토픽들이 혼합되어 생성 된다. (Each document is a mixture over topics)

notation setting

전체 D개의 문서(document)가 있다고 하자. 전체 토픽(topic)의 개수는 T개이며 이 토픽은 총 M개의 단어가 포함된 사전에서 비롯되었다고 생각하자.

d번째 문서에서 사용한 단어들을 벡터로 표현하면 다음과 같을 것이다. 여기서 \(N_{d}\)는 d번째 문서에 포함된 단어의 총 개수를 의미하며, 이 단어들은 앞서 정의내린 사전에 속한 M개의 단어들 중 하나에 해당한다.

\[w^{(d)} = \left(w_{1}^{(d)},...,w_{n}^{(d)},...,w_{N_{d}}^{(d)} \right)\]

d번째 문서에서 사용한 단어들의 vector를 형성하기 위해서는 우리는 아래의 그림과 같은 2가지 Matrix 형태의 데이터가 필요하다.

LDA

  • D : 전체 문서의 개수
  • T : 전체 토픽의 개수
  • M : D개의 문서에 포함된 전체 단어의 갯수
  • \(\phi^{(t)}\) : 토픽 t에서의 단어의 확률 분포를 M-dimensional Vector로 표현
  • \(\theta^{(d)}\) : 문서 d에 대한 토픽의 확률 분포를 T-dimensional Vector로 표현
  • d번째 문서에서 관측된 단어 모음 : \(w^{(d)} = (w_{1}^{(d)},...,w_{N_{d}}^{(d)})\)

LDA Modeling

LDA 과정을 Bayesian Network 형식으로 표현하면 아래의 그림과 같다.

LDA

글을 쓰는 과정을 생각 해보자. 우선 글의 주제를 정하고 이후 글을 쓰는 과정에서 어떤 단어들을 선택해 전체적인 글을 구성해갈지 고민하게 된다. LDA 모델이 작동하는 과정도 이와 동일하다.

  • 문서 d에 대해 T개의 토픽 중 하나를 \(\theta^{(d)}\)의 확률로 선택한다. 여기서 \(z_{n}^{(d)}\)는 \(\theta^{(d)}\)를 parameter로 하는 Multinomial 분포를 따른다고 볼 수 있다.
\[z_{n}^{(d)}\vert\theta \sim \text{Multinomial}(\theta^{(d)})\]
  • 1번의 과정을 통해 우리는 문서 d의 토픽을 결정지었다. 그렇다면 각 토픽 별로 M개의 단어가 등장할 확률 \(\phi^{(t)}\) 를 반영하여 단어를 선택하게 된다.
\[w_{n}^{(d)}\vert z_{n}^{(d)},\phi \sim \text{Multinomial}(\phi^{z_{n}^{(d)}})\]

우리의 관심 parameter는 \(\phi^{(t)}\)와 \(\theta^{(d)}\)이며 이 두 parameter에 대한 Prior distribution을 설정해야 한다. 두가지 모두 일반적으로 Dirichlet 분포를 부여한다.

\[\begin{align} \phi^{(t)} &\sim \text{Dirichlet}_{M}(\beta) \nonumber \\ \theta^{(d)} &\sim \text{Dirichlet}_{T}(\alpha) \nonumber \end{align}\]

LDA 모델을 실현하기 위한 방법으로 Gibbs Sampler와 Variational Inference 2가지 방법을 모두 사용 가능하다. Gibbs Sampler 방법으로 내용을 소개하고자 하는데 내용이 길어지므로 별도의 포스팅을 통해 LDA의 Gibbs Sampler 과정을 소개하겠다.

다만 어떤 방식을 선택하던간에 Factorization은 필수적으로 진행하는 과정이므로 이번 포스팅에서는 LDA를 위한 Factorization까지 포스팅하겠다.

Target Posterior Distribution은 \(p(z,\phi,\theta\vert w)\)이며 이는 다음과 같이 Factorization 될 수 있다.

\[\begin{align} p(z,\phi,\theta \vert w) &\propto p(z,\phi,\theta,w) \propto p(w\vert z,\phi)p(z\vert\theta)p(\phi)p(\theta) \nonumber \\ &\propto \prod_{d=1}^{D}\prod_{n=1}^{N_{d}}p(w_{n}^{(d)}\vert z_{n}^{(d)},\phi)\prod_{d=1}^{D}\prod_{n=1}^{N_{d}}p(z_{n}^{(d)}\vert\theta)\prod_{t=1}^{T}p(\phi^{(t)})\prod_{d=1}^{D}p(\theta^{(d)}) \nonumber \end{align}\]

앞서 우리는 \(\theta,\phi\)가 Dirichlet 분포를 따르는 것으로 Prior를 설정하였다.

먼저 \(p(w_{n}^{(d)}\vert z_{n}^{(d)},\phi)\) 의 probability distribution 형태를 생각해보자. 이 상황은 문서 d의 토픽이 t로 결정된 상황이다.

이 문서 d에서는 총 M개의 단어 중에서 어떤 단어는 활용되고 어떤 단어는 활용되지 않는다.

토픽 t의 m번째 단어의 확률을 \(\phi_{m}^{(t)}\)로 표현할 수 있다. 이 단어의 출현 여부(Y/N)은 \((\phi_{m}^{(t)})^{I(w_{n}^{(d)}=m)}\) 으로 표현 가능하다. 모든 토픽에 대해 단어가 나타날 확률은 다음과 같이 표현이 가능할 것이다.

\[p(w_{n}^{(d)}\vert z_{n}^{(d)},\phi) = \prod_{t=1}^{T}\left(\prod_{m=1}^{M}(\phi_{m}^{(t)})^{I(w_{n}^{(d)}=m)}\right)^{I(z_{n}^{(d)}=t)}\]

다음으로 \(p(z_{n}^{(d)}\vert\theta)\) 의 probability distribution 형태를 생각해보자. 문서 d에 대해 각 토픽에 대응하는 확률은 \(\theta_{t}^{(d)}\) 로 표현 가능하다. 이 토픽이 t번째 토픽에 해당하는지 여부는 \((\theta^{(d)}_{t})^{I(z_{n}^{(d)}=t)}\) 로 표현이 가능하다. 전체 T개 topic에 대해서는 다음과 같이 표현이 가능할 것이다.

\[p(z_{n}^{(d)}\vert\theta) = \prod_{t=1}^{T}(\theta^{(d)}_{t})^{I(z_{n}^{(d)}=t)}\]

따라서 우리가 구하고자 하는 Target Posterior Distribution은 다음과 같은 형태를 가질 것이다.

\[\begin{align} p(z,\phi,\theta\vert w) &\propto \prod_{d=1}^{D}\prod_{n=1}^{N_{d}}\prod_{t=1}^{T}\left(\prod_{m=1}^{M}(\phi_{m}^{(t)})^{I(w_{n}^{(d)}=m)}\right)^{I(z_{n}^{(d)}=t)} \nonumber \\ &\prod_{d=1}^{D}\prod_{n=1}^{N_{d}}\prod_{t=1}^{T}(\theta^{(d)}_{t})^{I(z_{n}^{(d)}=t)}\prod_{t=1}^{T}\prod_{m=1}^{M}(\phi_{m}^{(t)})^{\beta-1}\prod_{d=1}^{D}\prod_{t=1}^{T}(\theta_{t}^{(d)})^{\alpha-1} \nonumber \end{align}\]

이를 log 형태로 표현하면 조금 더 간결하게 표현가능하기 때문에 log 형태를 취한 것을 이용하기로 하자.

\[\begin{align} \log{ p(z,\phi,\theta,w) } &\propto \sum_{d=1}^{D}\sum_{n=1}^{N_{d}}\sum_{t=1}^{T}\sum_{m=1}^{M}I(z_{n}^{(d)}=t)I(w_{n}^{(d)}=m)\log{(\phi_{m}^{(t)})} \nonumber \\ &+ \sum_{d}\sum_{n}\sum_{t}I(z_{n}^{(d)}=t)\log{(\theta_{t}^{(d)})} \nonumber \\ &+ \sum_{t}\sum_{m}(\beta-1)\log{(\phi_{m}^{(t)})}+\sum_{d}\sum_{t}(\alpha-1)\log{(\theta_{t}^{(d)})} \end{align}\]

참조 문헌

  1. Understand the LDA
  2. 단단한 머신러닝