2012년 1월 5일 목요일

한국어로 LDA(Latent Dirichlet Allocation) 돌리기

 최근 데이터마이닝(data mining)분야에서 매우 핫한 키워드가 있다.
Latent Dirichlet Allocation 혹은 그냥 LDA로 불리우는 알고리즘이다.
기존의 LSI와 비슷한 용도로 사용되는 알고리즘인데, 특정 문서 혹은 문서집합들에서 주제를 추출하는데 활용된다.

알고리즘에 대한 개념적인 설명과 활용방법은 다른 블로거가 LDA 겉핥기, LDA실습 이라는 글에 잘 정리되어 있다.

따라서 여기서는 어떻게 LDA를 돌려보거나, 혹은 활용할 수 있는지에 대해 설명하려한다.
물론 데이터마이닝 전공자들은 많은 시간을 들여 LDA에 대해 공부하고, 라이브러리를 찾아서 부딛혀 볼 수 있고, 정 안되면 논문을 보고 직접 알고리즘을 구현해 볼 수 있을 것이다.
하지만, 타 분야에서 이를 단지 활용해보고 싶거나, 어떤 알고리즘인지 일단 돌려보고 싶은 사람들에겐 이건 너무 가혹하다..  왜냐면 많은 텍스트 마아닝 라이브러리는 어렵고, 배워야할 것들이 매우 많다.

LDA에 대한 소개는 위의 링크들에서 잘 설명되고 있으니 알고리즘에 대한 설명은 건너뛰고, LDA를 블랙박스시스템으로 놓고서 설명하면
이 블랙박스 시스템의
입력텍스트 문서의 집합이고
출력모델링된 토픽들의 집합이다.

기존의 벡터 스페이스 모델과 달리 LSI나 LDA에서는 각각의 문서들이 여럿의 토픽, 즉 주제들과 연관지어질 수 있고, 문서에 등장하는 단어들은 그 토픽들을 이루기 위한 요소들로 여긴다. 즉, 문서에 사용된 단어들이 토픽을 구성하고, 토픽이 합쳐져서 문서를 구성하는 형태로 문서를 가정, 혹은 모델링 하고 있다. LDA는 단어들간의 문서내에서의 동시등장(co-occurrence) 빈도를 확률화하여 이로부터 숨겨진 토픽들을 도출하는 역할을 한다.
LDA의 출력 값은 아래와 같은 알흠다운 그림을 그릴 수 있게 해주는데, 아래의그림은 LDA(정확히는 L-LDA)를 활용해 특정 트위터 타임라인의 주제를 도출한 그림이다.
[출처: Characterizing Microblogs with Topic Models by Daniel Ramage, Susan Dumais, and Dan Liebling, May 2010, In Proc. ICWSM 2010]

이제 본격적으로 LDA를 돌려보기 위해서는 블랙박스시스템역할을 해줄 LDA 라이브러리와 분석할 대상 데이터가 필요한다.

LDA라이브러리는 java 기반으로 만들어진 MALLET 을 썼는데,
첫째로는, 국내 연구자들이 많이 사용하는 java를 기반으로 구현되었으며,
둘째로는, Eclipse에서 라이브러리 형태로 가져다 쓰기 용이하고,
마지막으로는 텍스트 인코딩에 UTF-8을 기본으로 쓰고 있어서, 한국어 처리에 문제가 없다는 매우 큰 장점을 가진다.

분석대상 될 입력데이터는 MALLET역시 한글에 대한 분석을 지원하지 않으므로, 전처리를 필요로 한다. 전처리를 위해서는 국민대의 한국어 형태소 분석 라이브러리인 HAM을 활용할 수 있다.

생각보다 내용이 길어져 MALLET의 구동과 HAM을 통한 데이터 전처리 과정은 다음 글에서 이어가야겠다.


댓글 2개:

  1. 주인장님, Mallet로 어떻게 돌리는지 예시 연재 부탁드립니다~!!

    답글삭제
  2. 작성자가 댓글을 삭제했습니다.

    답글삭제