ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 텍스트 마이닝 (2) Latent Dirichlet Allocation (LDA)
    데이터 분석 (Data Analysis) 2023. 10. 22. 20:44
    SMALL

    LDA 란?

    LDA는 잠재 디리클레 할당이라는 의미로, 문서가 생성되는 과정을 확률 모형으로 모델링 하는 것이다. (선형 판별 분석 (Linear Discriminant Analysis) 아님!!) LDA는 Soft Clustering 의 한 형태이기도 하다. 각 문서는 여러 주제에 동시에 속할 수 있기 때문이다. 

    LDA는 텍스트 문서 집합에서 숨겨진 토픽을 발견하고, 이를 추론하는 통계 모델로 아래 두가지 가정 하에서 수행된다.

     

    가정

    (1) 각 문서가 여러 토픽으로 구성됨

    (2) 각 토픽은 단어의 확률 분포로 표현됨

    LDA 구현 과정 

    1. 문서를 수집하고, 이전 게시글에서 다룬 BoW 를 먼저 생성한다.

    2. 주제 수 K (>=2) 를 분석가가 임의로 설정하며, 각 주제가 단어의 분포를 따른다고 가정한다. 

    3. 각 문서가 주제에 대한 분포를 가진다고 가정하며, 주제와 단어의 관계를 모델링한다. 

    따라서, LDA 모델로 얻고자 하는 것은 1) 토픽별 단어 분포 ($\Theta$)와, 2) 문서별 토픽 분포 ($\Phi$) 이다. 

    LDA 동작 구조 (논문에서 발췌)

    Notation Meaning Unknown/Known
    $D$ 문서 수 Known
    $K$ 토픽 수 (분석가가 임의 지정) Known
    $N$ $d$번째 문서의 단어 수  Known
    $\Theta_d \sim Dir(\alpha)$ for $d \in \{1,2,\cdots,D\}$ 문서별 토픽 분포  Unknown -> 추정 필요 
    $\Phi_k \sim Dir(\beta)$ for $k \in \{1,2,\cdots, K\}$ 토픽별 단어 분포 Unknown -> 추정 필요
    $z_{d,n} \sim Multi(\Theta_d)$  특정 단어의 토픽 분포  Unknown -> 추정 필요
    $w_{d,n} \sim Multi(\Phi_{z_{d,n},n})$ $d$th 문서의 $n$th 단어 Known

     

    1) 토픽별 단어 분포($\Theta$)와, 2) 문서별 토픽 분포($\Phi$)는 각각 디리클레 분포 $Dir(\alpha)$, $Dir(\beta)$를 따른다고 가정한다. 여기서 Gibbs Sampling 을 통해 $z_{d,n}$ -> $\Phi$ -> $\Theta$ 순으로 업데이트를 하게되는데, 

    $$p(\Theta|data) \propto l(data|\Theta)p(\Theta)$$ 에서 현재 likelihood 파트가 Multinomial 분포를 따르므로, 이에 posterior와 prior 파트는 켤레 분포인 Dirichlet 분포를 따르는것이 계산상 이점이 있어, 디리클레 분포를 따르게 된다. (이 부분에서 LDA의 'D'가 왜 Dirichlet 이었는지 알 수 있다. )

     

    이 LDA 모델의 가장 중요한 점은 '단어에 적절한 주제 (Z) 를 할당하였는가' 인데 Gibbs Sampling 을 통해 이를 구현한다. (이 부분에서 LDA의 'L': 잠재, 'A': 할당 을 이해할 수 있다.) Gibbs Sampling 은 N개의 자료에서 N-1개는 고정시키고 한 차원에 대해서만 샘플링하여, 이를 합치는 개념이다. LDA에서는 다음과 같이 수행된다. 

     

    Gibbs Sampling 과정

    1. 각 단어에 임의의 주제를 설정한다. (Z을 임의로 설정)

    2. 하나의 단어만 제외하고 나머지 단어에 할당된 주제들이 모두 옳다고 가정한다. 

    3. 선택한 하나의 단어가 속한 문서의 주제 분포 $P(Topic|Document)$를 계산하고, 그 단어가 속한 주제의 단어 분포 $P(Word|Topic)$를 계산하여 곱한다. $P(Word|Topic)P(Topic|Document)$ 에서 높은 값을 냈던 Topic 을 하나 뽑아 해당 단어에 배정한다. 

    4. 2번으로 돌아가  $\Phi$와 $\Theta$가 수렴할때까지 반복한다. 

    LDA 성능 평가 

    Perliexity (혼잡도)

    모델이 데이터를 얼마나 잘 예측하는지 척도로 사용되며, 낮을수록 좋다.

    $$Perplexity(W) = exp(-1*(\sum(log(P(w|\theta,\phi)))/N))$$

    전체 Document 를 Train/Validation/Test로 나눠서 Train으로 LDA를 만들고 Validation으로 Perlexity 를 계산한다.

    Validation 셋의 Perplexity 값을 관찰하며 모델을 조정하며 최종 LDA모델을 구축한다. 

     

    Coherence (일관성)

    주제의 일관성을 측정하는 값으로, 높을수록 일관성이 높다고 판단한다. 

    단, coherence가 너무 높으면 정보의 양이 줄어드는 문제가 있어서 잘 조율해서 확인해야한다.

    LDA 장점과 단점 

    LDA 장점

    토픽을 추출하고, 문서를 토픽별로 분류할 수 있다. 문서 토픽을 확인해 문서를 요약할 수 있는 효과도 있다.

     

    LDA 단점

    K 를 분석가가 설정해야한다. 추출된 토픽이 단어들로만 구성되어있어, 어떤 의미를 가지는지 해석이 어려울 수 있다. 샘플링을 이용하는것으로 seed를 고정하지 않았다면 시행마다 결과가 달라질 수도 있다. 문서나 단어가 적을수록, 결과 변동성이 크다. 

     


    LDA 논문 링크: https://www.jmlr.org/papers/volume3/blei03a/blei03a.pdf

    참고 사이트1: https://rokrokss.com/post/2018/09/26/lda-%EC%9E%A0%EC%9E%AC-%EB%94%94%EB%A6%AC%ED%81%B4%EB%A0%88-%ED%95%A0%EB%8B%B9-latent-dirichlet-allocation-%EC%84%A4%EB%AA%85.html

    참고사이트 2: https://coredottoday.github.io/2018/09/17/%EB%AA%A8%EB%8D%B8-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0-%ED%8A%9C%EB%8B%9D/

    반응형
    LIST
Designed by Tistory.