LSA라는 개념을 처음 접했을때만 해도 상당히 신기한 알고리즘이라고 생각을 했다.
서로 다른 두개의 문서 하나의 문서에서는 자동차라는 의미로 automobile로 표현하고 다른 하나의 문서에서는 car 라고 표현했다고 했을때
두개의 문서가 모두 자동차에 대한 문서이면 단어들이 유사할테고
다른 단어들의 유사성을 바탕으로 automobile과 car과 동일한 의미의 단어일것이다를
행렬 인수 분해를 통해 밝혀내는 방법이다.
이 방법은 앞에서 이야기한대로 행렬 인수분해를 통해 차원 축수를 하고 텀과 문서의 특징들을 축소된 차원에 표현하는 건데
안타깝게 계산량이 많은데에 반해 병렬처리가 어렵다고 한다.
그래서 구글에서 뉴스를 보는 사용자들에 대해서 클러스터링을 시도 하였는데 LSA가 아니고 PLSA라는 방법을 선택하였다.
전자는 행렬 인수 분해라는 방법이고 후자는 조건부 확률로 계산이 가능한 방법이다. 두번째 방법은 병렬처리가 가능하여 많은 수의 사용자를
클러스터링하는 문제에서도 mapreduce 프레임웍을 통해 많은 시간을 단축시킬수 있었다고 한다.
이 포스트에서는 적고자 하는 것은 위에서 언급한 LSA나 PLSA가 아니고 이런 종류의 알고리즘중에 가장 성능이 좋다는 LDA라는 방법이다.
LDA라는 방법에 대한 논문이나 자료는 많으니 직접 찾아서 공부하면 될것 같고 LSA관련 소스를 하나 찾았는데
이 소스를 분석하고자 한다.
첨언 : plsa와 lda의 차이점을 보자면 plsa는 학습 데이터에 상당히 의존적인 알고리즘으로 경우에 따라서는 over fitting 되는 문제가 있을수 있다.
그에 비해 lda는 알파 베타 값이라는 임의의 변수로 smoothing하여 over fitting이 덜하다고 한다.
우선 관련 자료는 http://www.cs.princeton.edu/~blei/lda-c/에 있다.
LDA 논문 : http://www.cs.princeton.edu/~blei/papers/BleiNgJordan2003.pdf
이사이트에 보면 ap.tgz 라는 테스트 데이터 파일이 있는데
우선 이파일을 구조와 정보에 대해서 보면 다음과 같다.
-rw-r--r-- 1 jchern jchern 1926191 10월 22 2004 ap.dat
-rw-r--r-- 1 jchern jchern 5745932 10월 22 2004 ap.txt
-rw-r--r-- 1 jchern jchern 85532 10월 22 2004 vocab.txt
5273 baptist
'알고리즘' 카테고리의 다른 글
희소행렬 (sparse matrix) - yale format (0) | 2013.05.09 |
---|---|
YAHOO_LDA (0) | 2013.01.25 |
mapreduce and (in) search (0) | 2011.05.17 |
Animation of Lempel-Ziv Encoding Algorithm (0) | 2010.09.28 |
라그랑제 승수 ( Lagrange multipliers ) (0) | 2009.09.11 |