토픽모델링 - LDA(Latent Dirichlet Allocation) 방법론 정리
- 쇼셜이노베이션융합전공
- 조회수8838
- 2021-07-21
이번 글에서는 말뭉치로부터 토픽을 추출하는 토픽모델링(Topic Modeling) 기법 가운데 하나인 잠재디리클레할당(Latent Dirichlet Allocation, LDA)에 대해 살펴보도록 하겠습니다.
LDA란 주어진 문서에 대하여 각 문서에 어떤 주제들이 존재하는지에 대한 확률모형입니다. LDA는 토픽별 단어의 분포, 문서별 토픽의 분포를 모두 추정해 냅니다. LDA의 개략적인 도식은 다음과 같습니다.
* 출처: 엠포스 데이터랩_토픽모델링(LDA) 방법론 정리
LDA는 특정 토픽에 특정 단어가 나타날 확률을 내어 줍니다. 예컨대 위 그림에서 노란색 토픽엔 gene이라는 단어가 등장할 확률이 0.04, dna는 0.02, genetic은 0.01입니다. 이 노란색 토픽은 대략 ‘유전자’ 관련 주제라는 걸 알 수 있습니다.
주어진 문서를 보면 파란색, 빨간색 토픽에 해당하는 단어보다는 노란색 토픽에 해당하는 단어들이 많습니다. 따라서 위 문서의 메인 주제는 노란색 토픽(유전자 관련)일 가능성이 큽니다. 이렇듯 문서의 토픽 비중 또한 LDA의 산출 결과물입니다. 위 그림 우측에 있는 ‘Topic proportions & assignments’가 LDA의 핵심 프로세스입니다.
LDA의 순서는 아래와 같습니다.
1. 문서 집합에서 얻은 분포로부터 토픽을 뽑는다.
2. 해당 토픽에 해당하는 단어들을 뽑는다.
모델 아키텍처
* 출처: LDA를 이용한 온라인 리뷰의 다중 토픽별 감성분석
위 그림은 LDA의 문서생성과정을 도식화한 것입니다. 색이 있는 노드는 관찰변수, 색이 없는 노드는 랜덤변수, 이외의 노드는 잠재변수를 나타내며, 노드 간 관계는 화살표를 통해표현되고, 사각형은 각 문서, 토픽, 단어의 수를 의미합니다. 먼저, 디리클레 분포를 따르는 토픽의 어휘 분포와 문서의 토픽 분포를 생성한 뒤, 각문서 내 단어마다 토픽을 추출하고, 해당 토픽의어휘 분포에서 단어를 추출하는 문서 생성 과정을 확률적으로 모델링 한 것입니다.
LDA 모델의 변수
우선 각 변수를 설명하겠습니다. β_k는 K번째 토픽에 해당하는 벡터입니다. 말뭉치 전체의 단어 개수만큼의 길이를 가졌습니다. 아래 그림을 보면 Topic1, 2, 3가 있는데 이 것은 β_1, β_2,β_3를 나타냅니다. β는 하이퍼 파라미터 η에 영향을 받게 됩니다.
* 출처: Topic Modeling, LDA (https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/06/01/LDA/)
다음으로 θ_d는 d번째 문서가 가진 토픽 비중을 나타내는 벡터입니다. 전체 토픽 개수 K만큼의 길이를 가집니다. 예컨대 θ_1은 아래 표에서 첫번째 행벅터, θ_5 은 다섯번째 행벡터가 됩니다. θ_d의 각 요소값은 k번째 토픽이 해당 d번째 문서에서 차지하는 비중을 나타냅니다. θ_d는 확률이므로 모든 요소의 합은 1이 됩니다(아래 표 기준으로는 행의 합이 1).
* 출처: Topic Modeling, LDA (https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/06/01/LDA/)
θ_d 역시 하이퍼파라메터 α에 영향을 받습니다. 이는 LDA가 문서의 토픽비중 θ_d이 디리클레분포를 따른다는 가정을 취하기 때문입니다.
이번엔 Z_d,n에 대해 살펴보겠습니다. Z_d,n은 d번째 문서 n번째 단어가 어떤 토픽에 해당하는지 할당해주는 역할을 합니다. 예컨대 세번째 문서의 첫번째 단어는 ‘Topic2’일 가능성이 높겠네요. Topic1과 2가 뽑힐 확률이 각각 0.375, 0.625이거든요.
W_d,n은 문서에 등장하는 단어를 할당해주는 역할을 합니다. β_k와 Z_d,n에 동시에 영향을 받습니다. 의미는 이렇습니다. Doc3의 첫번째 단어(Z_3,1)가 실제로 Topic2에 할당됐다고 하면, W_3,1은 Money가 될 가능성이 높겠네요. Topic2의 단어 분포 가운데 Money가 0.313으로 가장 높기 때문입니다.
LDA 모델의 변수
지금까지 LDA가 가정하는 문서생성과정과 잠재변수들이 어떤 역할을 하는지 설명했습니다. 이제는 W_d,n를 가지고 잠재변수를 역으로 추정하는 inference 과정을 살펴보겠습니다. 다시 말해 LDA는 토픽의 단어분포와 문서의 토픽분포의 결합으로 문서 내 단어들이 생성된다고 가정합니다. LDA의 inference는 실제 관찰가능한 문서 내 단어를 가지고 우리가 알고 싶은 토픽의 단어분포, 문서의 토픽분포를 추정하는 과정입니다.
여기에서 LDA가 가정하는 문서생성과정이 합리적이라면 해당 확률과정이 우리가 갖고 있는 말뭉치를 제대로 설명할 수 있을 것입니다. 바꿔 말해 토픽의 단어분포와 문서의 토픽분포의 결합확률이 커지도록 해야 한다는 이야기입니다. 확률과정과 결합확률을 각각 그림과 수식으로 나타내면 다음과 같습니다. (Z_d,n:per-word topic assignment, θ_d:per-document topic proportions, β_k:per-corpus topic distributions)
위 수식에서 사용자가 지정한 하이퍼파라메터 n,α 와 우리가 말뭉치로부터 관찰가능한 W_d,n을 제외한 모든 변수가 미지수가 됩니다. 따라서 사후확률(posterior) p(z,β,θ|w)를 최대로 만드는 z,β,θ를 찾아야 합니다. 이것이 LDA의 inference 입니다. 그런데 사후확률을 계산하려면 분포에 해당하는 p(w)를 반드시 구해야 합니다. 이는 베이즈 정리에서 evidence로 불리는 것으로, p(w)는 잠재변수 z,β,θ의 모든 경우의 수를 고려한 각 단어(w)의 등장 확률을 가리킵니다. 그러나 p(w)를 단번에 계산하는 것이 어려워 깁스 샘플링을 사용하게 됩니다.
LDA와 깁스 샘플링
LDA에서는 나머지 변수는 고정시킨 채 한 변수만을 변화시키되, 불필요한 일부 변수를 샘플링에서 제외하는 collapsed gibbs sampling 기법을 씁니다. LDA에서는 p(z,β,θ|w)를 구할 때 β,θ를 계산에서 생략합니다. 깁스 샘플링으로 구한 z로 계산할 수가 있게 되기 때문입니다. LDA의 깁스 샘플링 과정을 나타낸 수식은 다음과 같습니다.
위 식의 의미는 이렇습니다. 말뭉치가 주어졌기 때문에 w는 우리가 이미 알고 있는 값입니다. z는 각 단어가 어떤 토픽에 할당돼 있는지를 나타내는 변수인데요. z−i는 i번째 단어의 토픽 정보를 제외한 모든 단어의 토픽 정보를 가리킵니다. 식 전체적으로는 w와 z−i가 주어졌을 때 문서의 i번째 단어의 토픽이 j일 확률을 나타냅니다. 아래 그림을 보면 record가 z_i라고 보면 되고, 나머지 단어들이 z_-i를 나타냅니다. 그래서 이 나머지 단어들을 가지고 record가 어떤 토픽에 속하는지 알아보는 것이 LDA의 깁스샘플링 과정입니다.
* 출처: Topic Modeling, LDA (https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/06/01/LDA/)
그런데 중요한 것은 하나의 단어만이 아니라 문서 안에 모든 단어들을 record처럼 중심단어로 두고 다 깁스샘플링을 진행하는 것 입니다. 그렇게 되면 당연히 모든 단어에 대한 토픽 정보가 나타나게 될 것이며, 이 과정을 1000회-1만회 정도 반복 수행하면 어느 순간부터는 모든 단어에 대한 토픽 할당 정보가 수렴하게 됩니다. 또한, LDA로 학습된 모델을 평가하는 perplexity, Coherence Model 등의 지표가 있으니 이 지표들을 적용하여 더욱 섬세한 모델링을 만들어냅니다. 데이터 분석의 끝은 이게 아니기에, 해당 방법론으로만 끝낼 수는 없습니다. LDA는 방대한 양의 문서들이 어떤 내용을 말하고 있는지에 대한 큰 맥락들을 크게 묶어 살펴보게 해주는 기법이라고 할 수 있습니다. 그렇기 때문에 추가적으로 다른 방법들과 함께 사용하며 텍스트들을 살펴 보며 인사이트를 얻어내는 것이 중요하다고 생각합니다.
LDA 방법론을 이용한 온라인 리뷰의 토픽분석에 대한 논문을 첨부합니다.
* Topic Modeling, LDA
https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/06/01/LDA/
* LDA를 사용하여 한글 데이터 토픽 모델링하기
https://happy-obok.tistory.com/5
* LDA를 이용한 온라인 리뷰의 다중 토픽별 감성분석*
- TripAdvisor 사례를 중심으로 -
* 출처: https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/06/01/LDA/ |