본문 바로가기
필기 노트/자연어 처리 입문

[자연어 처리 입문] 토픽 모델링 (Topic Modeling)

by misconstructed 2021. 1. 5.
728x90

<딥 러닝을 이용한 자연어 처리 입문> 읽고 간단하게 정리한 내용이다.

Topic modeling의 대표적인 예로, LSA와 LDA에 대해서 알아본다. 


주어진 문제의 추상적인 주제를 발견하는 것이 Topic modeling의 목표이다.

# LSA (Latent Semantic Analysis)

LSA (LSI 라고 부르기도 한다.) 는 DTM의 잠재된 (latent) 의미를 이끌어내는 방법이다. (DTM에 관련된 내용은 여기에서 확인할 수 있다.) LSA에 대해서 이야기하기 전에, 먼저 SVD(Singular Value Decomposition)에 대해서 이야기해보겠다. SVD는 m×n 차원의 행렬 A 를 3개의 행렬 U, ∑, 로 분해하는 방법이다. 이 때, U, V 는 직교행렬이고, ∑ 는 직사각 대각행렬(주대각선의 값을 제외한 모든 값이 0인 행렬)이다. 

[그림-1]

SVD를 구성하는 ∑에서 상위 t 개만 남기고 나머지 벡터들을 모두 삭제하는 것을 Truncated SVD 라고 한다. Truncated SVD를 구성하게 되면, 원본 A 를 복구하지는 못한다. 우리가 사용하는 t가 우리가 구하고자 하는 topic의 수를 의미하게 된다. t가 너무 크면 A의 다양한 의미를 확인할 수 있지만, 계산 비용이 너무 크고, t가 너무 작으면 상대적으로 중요하지 않은 정보를 삭제하고 계산비용이 적을 수 있지만, 너무 일반적인 topic만 제공할 수 있다는 단점이 있다. 

기존의 DTM, TF-TDF 등은 단어들의 의미를 고려하지 못한다는 단점이 있었다. 하지만, LSA에서는 기존에 구한 DTM, TF-IDF의 행렬에 대해서 truncated SVD를 수행하고, 수행한 결과에 대해서 단어들의 잠재의미를 끌어낼 수 있다. 쉽고 빠르게 구현할 수 있고, 기존의 방식들이 찾아내지 못한 단어들의 잠재적인 의미를 이끌어내서 유사도 등에서 성능을 낼 수 있다는 장점이 있지만, 새로운 문서가 추가되는 경우, 전체 연산을 처음부터 다시 수행해야 한다는 단점이 있다. 

# LDA (Latent Dirichlet Allocation)

LDA는 topic modeling의 또 다른 기법으로, 문서 집합으로부터 어떤 topic이 존재하는지 알아내는 방법이다. LDA를 위해서는 크게 두 가지 가정을 한다. 첫 번째로는 문서들은 topic의 혼합으로 구성된다는 것이다. 전체적으로 몇 개의 topic을 볼지는 사용자가 정하게 된다. 두 번째 가정은 topic들은 확률 분포에 기반해서 단어를 생성한다는 것이다. 우리는 LDA를 통해서 최종적으로 각 문서의 topic 분포와 각 topic에 대한 단어 분포를 구할 수 있다. LDA의 입력으로는 BoW, DRM, TF-IDF 등의 빈도수 기반의 행렬을 받는다. 

LDA는 문서를 구성할 때 다음과 같은 순서에 따라서 문서를 구성한다고 가정한다. 

  1. 문서에서 사용한 단어의 개수 N을 정한다.
  2. 문서에 사용한 topic의 혼합을 확률분포에 기반해서 결정한다.
  3. 문서에서 사용할 단어를 선택한다.
    1. topic 분포에서 topic T 를 확률적으로 선택한다.
    2. topic T 에서 단어의 출현 확률분포에 기반해서 문서에 사용할 단어를 선택한다.

LDA는 이렇게 문서를 구성하는 과정을 역으로 추적하는 역공학(reverse engineering)이라고 할 수 있다. LDA를 수행하는 과정을 다음과 같다.

  1. Topic 수 K를 지정한다.
  2. 문서를 구성하는 모든 단어를 K 개의 topic 중 하나에 할당한다.
    • 처음에는 모든 단어를 랜덤하게 할당한다.
    • 최종적으로 topic은 단어의 분포를 갖게 된다. 
  3. 어떤 문서의 단어 w는 잘못된 topic에 할당되어 있지만, 나머지 단어들은 올바르게 분류되었다고 가정한다. 
  4. 해당 단어 w에 대해서 topic을 재할당 한다. 해당 단어가 특정 topic에 존재할 확률과, 문서에 특정 topic이 할당될 활률은 결합확률로 추정해서 topic을 추출한다.
    • p(topic | document) : document의 단어 중 topic에 해당하는 단어들의 비율. 현재 문서에서 전체 단어들에 대한 topic의 비율
    • p(word | topic) : 단어 w 를 가지고 있는 문서 중, topic t 가 할당된 비율. 전체 문서에서 단어 w들이 할당된 topic의 비율을 고려

 

728x90

댓글