# LDA - 잠재 디리클레 할당

## 개요

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-Ln8Bi1BT_z5OwvpTxU5%2F-Ln8DJ7jXPrj9Q9LLEhY%2Fimage.png?alt=media\&token=97a010bf-756a-416b-b843-186cd26480fb)

잠재 디리클레 할당(Latent Dirichlet Allocation, LDA)은 토픽 모델링의 대표적인 알고리즘이다. LDA는 문서들은 토픽들의 혼합으로 구성 있으며, 토픽들은 확률 분포에 기반하여 단어들을 생성한다고 가정 하에 수행된다. LDA는 특정 데이터가 주어지면, 문서가 생성되던 과정을 역추적하는 과정을 수행한다.

## **잠재 디리클레 할당(Latent Dirichlet Allocation, LDA)**

LDA 또한 문서 집합에서 토픽이 몇 개가 존재할지 가정하는 것을 하이퍼 파라미터로 취급한다.  LDA 또한 LSA와 마찬가지로 전처리 과정을 거친 DTM이 입력되어야 한다. 적절하게 학습된 LDA는 **각 문서의 토픽 분포**와 **각 토픽 내의 단어 분포**를 추정하여 입력된 문서의 토픽을 아래와 같이 추정한다.

### **각 문서의 토픽 분포**

문서1 : 토픽 A 100%\
문서2 : 토픽 B 100%\
문서3 : 토픽 B 60%, 토픽 A 40%

### **각 토픽의 단어 분포**

토픽A : **사과 20%, 바나나 40%, 먹어요 40%**, 귀여운 0%, 강아지 0%, 깜찍하고 0%, 좋아요 0%\
토픽B : 사과 0%, 바나나 0%, 먹어요 0%, **귀여운 33%, 강아지 33%, 깜찍하고 16%, 좋아요 16%**

## LDA 모델 아키텍쳐

LDA는 다음과 같은 가정 하에 알고리즘을 수행한다.

* 빈도수 기반의 표현 방법이며, 단어의 순서는 토픽에 기여하지 않는다.
* 하나의 문서는 복수의 토픽으로 이루어져 있다.
* 문서는 복수의 토픽을 담기 위한 단어를 토픽의 확률 분포에 의해 결정한다.

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-Ln8Bi1BT_z5OwvpTxU5%2F-Ln8Fwk0h5Ntbx5OA-YL%2Fimage.png?alt=media\&token=d399fa72-b1ad-4fd3-a97d-ef5ce5773a54)

LDA가 가정하는 문서 생성과정은 다음과 같다. D는 말뭉치 전체 문서 개수, K는 전체 토픽 수(하이퍼 파라터), N은 d번째 문서의 단어 수를 의미한.  여기서 관찰 가능한 변수는 d번째 문서에 등장한 n번째 단어 W(d,n)이 유일하다. \
머신은 이 정보 만을 가지고 하이퍼 파라미터를 제외한 모든 잠재 변수를 추정하는 과정을 수행한다.

## LDA 수행 순서

LDA는 다음과 같은 작동 방식으로 문서의 주제 분류를 수행한다.

### 하이퍼 파라미터 토픽의 갯수 K를 할당

LDA는 토픽의 개수 K를 입력받으면, K개의 토픽이 M개의 전체 문서에 걸쳐 분포되어 있다고 가정한다.

### &#x20;**모든 단어를 k개 중 하나의 토픽에 할당**

LDA는 모든 문서의 모든 단어에 대해서 k개 중 하나의 토픽을 랜덤으로 할당한다. 이 작업이 끝나면 각 문서는 토픽을 가지며, 토픽은 단어 분포를 가지는 상태이지만, 랜덤으로 할당하였기 때문에 이 결과는 대부분 틀린 결과일 것이다. \
만약 한 단어가 한 문서에서 2회 이상 등장하였다면, 이것 역시 각 단어는 서로 다른 토픽에 할당되었을 확률도 높다.

### &#x20;**모든 문서의 모든 단어에 대해서 아래의 사항을 반복**

LDA는 각 단어의 토픽을 할당할 때, 어떤 문서의 각 단어 w는 자신은 잘못된 토픽에 할당 있지만, 다른 단어들은 전부 올바른 토픽에 할당돼 있는 상태라고 가정한다.

해당 가정 아래하에 LDA는 크게 2가지 기준으로 해당 단어의 토픽을 재할당한다.

* **p(topic t | document d) : 문서 d의 단어들 중 토픽 t에 해당하는 단어들의 비율**
* **p(word w | topic t) : 단어 w를 갖고 있는 모든 문서들 중 토픽 t가 할당된 비율**&#x20;

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LnYG3XCRkIJjCWmcjX2%2F-LnYIYppLvYmaQWOz2N8%2Fimage.png?alt=media\&token=d7eb98f6-a132-47a9-b09b-71d9bcd4d4f5)

해당 과정을 반복함으로 모든 단어에 대한 토픽 할당은 점점 수렴 상태로 통일되게 된다. d번째 문서 i번째 단어의 토픽 zd,i가 j번째에 할당될 확률은 다음과 같다.

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LnYG3XCRkIJjCWmcjX2%2F-LnYIqr-SFkZVYHjE93v%2Fimage.png?alt=media\&token=da0b1173-6c79-47b3-a265-53b9934ff3a5)

위 수식에 사용된 각 변수 값은 아래와 같다.

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LnYG3XCRkIJjCWmcjX2%2F-LnYJ14nTKgMVuIYBa-G%2Fimage.png?alt=media\&token=2e1a65c4-88f5-4eed-b31d-8082405c9ae0)

위와 같은 과정을 통해 아래의 예제처럼 apple 단어의 토픽이 미할당된 상태일 경우, B의 토픽을 가질 확률이 높아진다.

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LnYJMUjLA1vWYxSnJGh%2F-LnYJXNZ8YHiNlb5GFtW%2Fimage.png?alt=media\&token=3ffef4fa-cad8-463f-88ef-5d805a23a577)

## 최적의 파라미터 도출과정

앞서 언급하였듯이, LDA의 토픽수 K는 사용자가 지정하는 하이퍼 파라미터이다.   최적 토픽수 또한 여러 실험을 통해 구해야 하는 미지수이며, 보편적으로 최적 토픽수를 구하는 데 쓰는 **Perplexity, Topic Coherence**지표가 존재한다.

**Perplexity**의 기본 아이디어는 토픽을 생성하는 데에 기여를한 각 단어의 발생확률이 Test Data Set에서 높을 수록 잘 만들어진 모델이라는 개념이다.

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LnYOu6YnxrG1m9iJGIl%2F-LnYPTRNkwdgnPhrSyCy%2Fimage.png?alt=media\&token=4f4fd7db-e822-46c7-8fdf-fb6ba9a26783)

**Coherence**는 주제의 일관성을 측정한다. 토픽에 높게 기여한 상위 단어 간의 유사도를 계산하면 실제로 해당 주제가 의미론적으로 일치하는 단어들끼리 모여있는지 알 수 있는 셈이다.

![](https://3577294876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-L_Wo7SRUvbKJuPojzzZ%2F-LnYOu6YnxrG1m9iJGIl%2F-LnYPcp-30-vXlWev0OI%2Fimage.png?alt=media\&token=cbc1765f-c335-4990-891b-26025b9637e7)

## LDA 모델 분석

LDA는 단어가 특정 토픽에 존재할 확률과 문서에 특정 토픽이 존재할 확률을 이용하는 통계에 기반한 알고리즘이다. 단어에 기반하여 토픽을 구분하기 때문에 새로운 문서가 입력되어 있더라도 학습된 데이터 모델이 충분하다는 가정 하에 테스트 데이터 내에서도 준수한 성능을 보여주고 있다.
