Latent Dirichlet Allocation (LDA)

#Latent-Dirichlet-Allocation-(LDA)
  • Latent Dirichlet Allocation (LDA)는 베이지안 기법을 이용해 문서에 존재 된 토픽을 추정하는 텍스트 마이닝 기법
  • LDA의 기본이 되는 Gibbs sampling 기법을 수식과 예제와 함께 살펴 보자

목차

1. 기본 개념 2. Generative Process 3. Inference 4. Gibbs Sampling 5. Collapsed Gibbs Samping

1. 기본 개념

#1.-기본-개념

1) 모델

  • 문서에는 잠재된 보이지 않는 토픽이 존재
  • 문서는 여러 가지 잠재 토픽으로 구성
  • 문서 안의 단어는 토픽에서 생성 된 것
  • 문서를 구성하는 토픽의 확률과 토픽을 구성하는 단어의 확률을 추정하는 것이 목표

2) 가정

  • Bag of words: 단어의 순서는 중요하지 않음 ex) 나는 밥을 먹었다 <=> 먹었다 나는 밥을
  • Exchangeability: Bag of words 가정을 확률적으로 표현한 것으로 모수가 주어졌을 때 Conditionally iid라는 가정

2. Generative Process

#2.-Generative-Process

1) Notation

  • Vocabulary: 모든 단어의 unique한 집합(사전)
  • 단어: vocabulary에 있는 항목으로 1부터 @@0@@까지 index가지고 있음
  • 문서: @@1@@개의 단어의 순열로 @@2@@

2) Generative Process

Loading output library...
  • @@0@@
  • @@0@@
  • @@0@@는 단어의 위치로 @@1@@ @@2@@

<정리>

Corpus 수준에서 Dirichlet 분포를 통해 파리미터 @@0@@와 @@1@@가 발생하고
@@2@@는 문서에 대한 토픽의 확률로 Categorical 분포를 통해 문서의 토픽 @@3@@가 발생
문서의 토픽이 @@4@@면 이에 대응하는 확률 @@5@@로 Categorical 분포를 통해 단어가 생성

3) Generative process 예제

데이터 소개 및 요약

  • Wikipedia에서 수집한 경제학과 스포츠에 대한 6개의 문서를 위의 과정 적용
  • @@0@@: 모든 문서에 총 526 종류의 단어가 존재
  • @@1@@: 총 6개의 문서 존재
  • 각 문서의 길이: @@2@@
Loading output library...

전처리:

명사만 추출
한글자 짜리 단어 제거

Vocabulary size, 문서 수 확인

문서마다 단어 수 확인

단어 사전 만들기

  • 각 단어에 대한 index를 부여, 예를 들어 경제라는 단어는 24번으로 입력
Loading output library...

Hyperparamter 설정

@@0@@ 2개의 토픽이 있다고 가정

@@1@@
@@2@@

생성 과정

1) @@0@@

@@0@@=>문서마다 토픽의 확률

Loading output library...

문서마다 할당 된 토픽의 확률

2) @@0@@=>토픽마다 단어의 확률

Loading output library...

토픽을 구성하는 단어의 확률

3) @@0@@를 샘플링

Loading output library...

문서1과 문서 2에 생성된 단어 5개씩

3. Inference

#3.-Inference

위의 과정은 결국

  • 모든 random variable @@0@@의 Joint pdf @@1@@로 분자의 경우 위의 과정을 통해 추정할 수 있지만 분모는 intractable하기 때문에 직접적으로 구할 수가 없음
  • 베이지안에서 가장 많이 사용하는 방법 중 하나인 Gibbs Sampling을 통해 이 문제 해결 가능
  • 결합 분포 @@0@@는 Gibbs sampling을 통해 추정할 수 있음
  • Gibbs sampling은 위의 결합 분포의 주변부 분포
    @@1@@
    @@2@@
    @@3@@
    를 이용하여 iterative 하게 샘플링해서 구할 수 있음

1) Joint pdf

먼저 원하는 조건부 분포를 유도하기 위해서 모든 random variable의 결합 분포를 구함

@@0@@

2) Conditional pdf of @@0@@

@@0@@

여기서 @@1@@번째 문서 외 나머지 문서들의 토픽 분포

3) Conditional pdf of @@0@@

@@0@@

3) Conditional distribution of z

@@0@@

결국 세가지의 조건부 사후 분포가 Dirichlet와 Multinomial 분포로 심플해지는 장점이 있음

4) Gibbs sampling 구현

하이퍼 파라미터 @@0@@ 설정 및 @@1@@, @@2@@, @@3@@의 초기치 설정

1) @@0@@ 샘플링

Loading output library...
  • 직관적으로는 토픽 중 하나는 경제 기사, 하나는 SNS에 대한 주제로 구성 되어야 됨
  • 하지만 두 토픽의 분포가 뚜렷하게 구분이 가지 않음
Loading output library...

각 토픽을 구성하는 단어를 상위 10개씩 정렬

왜 경제와 SNS로 토픽이 명확하게 구분되지 않았을까?

  • Iteration이 부족해서 아직 수렴하지 않았을 수 있음
    =>@@0@@의 잘 못된 설정
    => 두 파라미터는 문서의 토픽을 명확하게 나누는데 영향을 주고 작을 수록 토픽이 명확하게 나눠짐
  • 추정된 잠재된 토픽이 경제와 SNS가 아닌 다른 토픽일 가능성
    => 해석하기 어려운 방향으로 추정됐을 수 있음

5. Collapsed Gibbs Sampling

#5.-Collapsed-Gibbs-Sampling
  • LDA에 Gibbs sampling을 적용했을 때 너무 느리다는 단점이 있었음
  • 파라미터에 대한 inference보다는 사후 분포의 직접적인 예측이 목적일 수 있음
  • 이때 @@0@@, @@1@@의 inerence가 관심사가 아니고 잠재 토픽 @@2@@만 관심사라면?
  • Collapsed Gibbs는 @@3@@, @@4@@를 marginalize out하여 계산을 simple하게 만드는 방법
  • 이제 @@5@@가 관심사

1) @@0@@의 추정

@@0@@

@@0@@에 할당 될 확률

=> z에 대한 사후 분포가 비율로 심플하게 나타나짐

하이퍼 파라미터 설정

초기치 설정

@@0@@ 추정

update할 때 현재 상태는 카운트 안 함

2. @@0@@, @@1@@

@@0@@는 iteration 없이 z를 추정하는 과정에서 계산된 것을 이용하여 추정

Loading output library...

1~3번 문서는 토픽 1일 확률이 높고 4~6은 토픽 2의 확률이 매우 높음

=> 두 종류의 문서가 뚜렷하게 구분 됨

Loading output library...
Loading output library...
  • 토픽을 구성하는 상위 단어를 봤을 때 토픽 1은 SNS 관련 단어가 많이 나오고 토픽 2는 경제학 관련 단어로 구성됨
  • 경제 문서에서 영희 철수와 같은 사람의 이름으로 비유를 많이 해서 이와 같은 단어가 상위 단어가 됐을 가능성이 있음
  • 고유명사 처리 및 전처리를 더 할 필요성이 있음

Collpased Gibbs Sampling 문제점

  • 여전히 하이퍼 파라미터 설정에서 자유롭지 못함
  • Gibbs sampling 보다 속도는 훨씬 빠르지만 정확성은 떨어짐

출처