잠재 디리클레 할당(LDA)은
주어진 문서들에 대하여
각 문서에 어떤 토픽(주제)들이 존재하는지에 대한 확률 모형이다.
말뭉치 이면에 잠재된 토픽(주제)를 추출함으로써 토픽 모델링(topic modeling)이라 부르기도 한다.
문서들의 토픽 활률 분포로 각각 알아낸 다음 이를 이용해 문서를 임베딩한는 것이다.
참고 자료는 다음과 같다.
1. 글쓴이가 글을 쓸 때 의도를 가지고 쓴다.
2. 그러므로 그 의도에 유사한 주제들이 글 속에 뭉텅이씩 차지하고 있을 것이다.
3. 그리고 주제에 해당하는 단어들이 글 속에 쓰였을 것이다. 특정 주제에 대한 글을 쓸 때 자주 쓰는 단어들 말이다.
하지만, 우리가 볼 수 있는 것은 문서(글) 내의 단어들 뿐이다.
우리는 단어들로부터 문서의 의도를 추출해내고 그 의도가 문서를 대표함으로써 임베딩이 가능해진다.
의도를 추출하기 위해서는 단어에서 주제, 주제에서 의도로 거슬러 올라가면 된다.
이런 일련의 과정을 계산을 위해 명시해 줄 수 있다.
다시 정리하면,
1. 문서 내 주제의 개수를 정한다.
2. 주제들은 문서 내에서 확률로써 분포하고 있으므로 랜덤으로 주제들을 선택한다.
3. 선택된 주제에 해당하는 단어들 중에 한 단어가 랜덤으로 선택된다.
4. 그 단어가 문서 내에 생성된다.
5. 2로 돌아가 반복하여 단어들을 계속 생성해낸다.
이를 하나의 구조로 나타내면 다음과 같다.
각 파라미터에 대한 설명은 다음과 같고, 네모친 영역의 대문자 D,N,K는 각 개수만큼 반복하여 계산한다는 것이다.
이렇게 보면,
문서 내에서 단어를 생성 할 때에는, 확률에 의해 주제를 선택하는 것을 한 과정과,
그 선택된 주제에 담겨있는 단어 등장 확률 정보에 따른 단어 선택 과정이 서로 다른 hyperparameter를 두어 계산한다는 것을 알 수 있다.
그리고 여기에 이름에 Dirichlet이 들어가는 이유가 등항한다.
이를 이해하려면, 사전확률과 사후확률을 이해해야 한다.
간단히 말해
사전확률(prior probability) : 현재 가지고 있는 정보만을 기초로 하여 정한 초기 확률
사후확률(posterior probability) : 사건 발생 후에 일어날 것이라고 생각되어지는 확률
+ 추가된 정보로 부터 사전 정보를 새롭게 수정한 확률(수정확률)
+ 이는 조건부 확률로 표현가능(베이즈 정리로 부터)
이다. 여기서 우리는 주제 선택, 단어 선택 이라는 두 가지 과정을 거쳐 단어를 생성해낸다.
특정 단어가 생성된 확률은
사건이 발생하고 난 이후에 수정되며 최종적으로 단어 생성에 도달 했을 때야만 얻을 수 있는 확률이
사후확률이 조건부 확률로 표현되는 것이다.
이때, 디리클레 분포란
3가지 이상의 경우에 대해 정보의 개수나 분포에 의해 각 정보의 사전 확률들이 정해졌을 때,
여러가지 경우가 발생하는 사건을 관찰해 나가면서,
각 사건이 일어난 시점에 대해 다음 시도를 할 때 선택 확률이,
기존의 사전 확률과 얼마나 유사한지를 수치로써 나타낸다.
이 수치들에 따른 분포를 만든다.
우리는 이 수치를 이용하여 사건들을 관찰해 나가면서,
그 사건에서 각각의 경우가 발생할 확률의 추정치를 더 좋게 개선해 나갈 수 있다.
이에 대한 자세한 설명은 다음 링크에서 이해 가능하다.
결국, 문서에서 주제를 선택하는 과정, 주제에서 단어를 선택하는 과정이 디리클레 분포에서 선택하는 과정이기 때문에 이름에 Dirichlet이 들어갔다.
이제 수식을 통해 LDA를 파해치기 전
이 사후확률(문서 내에서 최종적으로 한 단어를 생성할 확률)을 베이즈 정리에 의해 조건부 확률로 표현하는 이유를 이해하고 넘어가는게 좋겠다.
베이즈 정리만 툭 던지고 가기 보다는 강화학습 확률계산에서 중요한 개념인 Theorem on Total Probability 까지 집고 넘어가겠다.
Theorem on Total Probability
Theorem on Total Probability은 간단히 말해 한 확률을 다른 확률들로 나누어 표현하는 것이다.
이는 아직 모르지만 알고자 하는 확률을 이미 알고 있는 확률들로 구성하여 확률을 맞추는 것을 가능하게 만든다.
Bayes' Rule
베이즈 정리는 다음과 같다. 왜 저 식을 쓸까?
'조건부 확률의 앞 뒤를 교환하고 싶을 때' 저 식을 이용해 쉽게 구할 수 있기 때문이다.
저 식은 간단한 조건부 확률 식으로 부터 쉽게 유도해 낼 수 있다.
여기에 보너스로 Theorem on Total Probability를 응용하여 이 기법의 강력함을 느껴보자.
다음과 같이 미지의 확률을 구해내는 것을 볼 수 있다.
다시 베이즈 정리로 돌아와 조건부 확률의 앞 뒤를 바꿔 원하는 값을 구하는 과정이 LDA에 등장할 것이므로 잘 이해해 두는 것이 좋다.
이제 수식을 통해 LDA를 파해쳐 보자
문서 생성 프로세스는 다음과 같을 것이다.
이때 우리의 최종 목표는
단어 w를 뽑았을 때, 그에 맞는 z,β,θ 가 선택되야 하므로
저 조건부 확률이 최대로 만드는 z,β,θ를 찾아야 한다.(p(w)는 β,θ 에 따라 정해진다)
이때 깁스 샘플링을 통해 사후확률을 근사한다.
이 과정에서 z를 알 수 있다면 β,θ는 자동적으로 정해지므로 z(주제,토픽)만을 추론하면 된다.
깁스 샘플링을 적용한 LDA식은 다음과 같다.
수식으로 보면 이해가 어렵다. 이에 대한 이해는
위 링크의 3. LDA의 수행하기를 참조하거나,
https://bab2min.tistory.com/569
위 링크를 참조하면 정확하게 이해가 가능하다.
이해가 되었다면 다시 위의 식을 마지막으로 확인하여 체크하면 좋을 것이다.
결국 깁스 샘플링을 통해 토픽과 단어간의 할당이 가능한 이유를 식을 통해 이해해보면 다음과 같다.
그 단어가 속한 문헌의 주제분포(P(Topic | Document)) 를 통해
'한 문서 내에서는 글쓴이의 의도에 따라 비슷한 토픽이 등장하는 경향성이 있으므로
의미상 유사한 단어들이 유사한 토픽을 가질 확률을 높임' 과 동시에
그 단어가 속한 주제의 단어분포(P(Word | Topic))를 통해
'같은 모양의 단어들의 토픽을 유사화' 하고
게다가
동철이의어(배,밤 등..)는 의미에 따라 각각 서로 다른 확률로써 존재하게 되는데
똑같이 생긴 단어라도 그들이 사용된 토픽들 중에서도 그 단어에 대해 더 많은 사용빈도를 가지면 그 토픽에 해당될 단어일 확률을 증가시켜 준다는 것을 이해 할 수 있다.
이를 통해 단어들에 토픽들을 할당하는 것이 가능하다는 것을 알 수 있다
이를 1000회에서 1만회 정도하면 그 결과가 수렴한다고 한다.
(+하지만 아무리 반복횟수를 높여서 값이 안정되게 한다고 하더라도 실행시마다 결과가 달라질 수 있는 가능성을 안고 있어 근본적인 한계를 가졌다고 볼 수 있다.)
수렴 완료되면 그 결과를 가지고 베이즈 정리에 따라
W는 실제 단어, Z는 그 단어에 배정된 주제 번호,
P(Z) 는 문서 내 주제 분포로 부터,
P(W|Z) 는 주제 분포내 단어 분포로부터,
P(W) 는 β,θ 로부터 구해
P(Z|W) 를 가장 높게 하여 그 단어의 주제를 가장 잘맞추는 상태의 Z(주제 번호)를 구하는 것이 목적임을 알 수 있다.
(아까 베이즈 정리 활용해 이미 아는 P(W|Z) 로부터 P(Z|W)를 표현하였다.)
'Tensorflow 2 NLP(자연어처리) > 문장 임베딩' 카테고리의 다른 글
[4-4] Word2Vec에서 Doc2Vec까지 (0) | 2021.11.13 |
---|---|
[4-3] 잠재 의미 분석(LSA), TF-IDF를 이용한 문서 임베딩 (0) | 2021.11.13 |
[4-2] PCA(주성분 분석)와 SVD(특이값 분해) 차원축소를 완벽하게 이해하기 (0) | 2021.11.13 |
[4-1] 가중 임베딩, SIF(Smooth Inverse Frequency)란? (0) | 2021.11.13 |