Latent Semantic Analysis

얼마 전 누군가 Singular Value Decomposition에 대해 물어오기에 생각이 나서 글을 남긴다.

LSA 혹은 LSI(Latent Semantic Indexing)는 문서(document)와 단어(term) 사이의 관계를 알아내는 기법이다. 예전에 'LDA에 대해서'에서도 언급했지만 LDA의 형님뻘 되는 방법이라고 볼 수도 있겠다.

LSA의 아이디어는 간단하다. 문서와 단어 사이의 관계를 나타내는 행렬이 있을 때, 이 행렬의 차원을 줄여서 원래의 행렬보다 간결하되 기존의 행렬의 성질을 유지하는 그런 행렬을 찾으면 이를 여러 가지 의미로 유익하게 사용할 수 있으리라는 것이다.

애초에 문서나 단어, 양쪽 다 매우 많은 경우가 보통이기 때문에 필연적으로 단어-문서 행렬은 크기가 어마어마하게 크다. 이는 computational cost라는 현실적인 문제에 부딪히게 되므로 차원을 줄여서 접근하는 방법은 가장 떠올리기 쉬운 방법의 하나이다. 하지만 그보다 더 중요한 것은 차원을 줄이는 것 자체가 overfitting을 줄여준다는 것이다. 이는 dimensionality reduction이 자체적으로 갖는 성질이다. LSA의 관점에서는 차원을 줄이는 행위가 노이즈를 줄이고 너무 희소한 행렬(overly sparse)을 덜 희소하게 만들어서 숨어 있는 의미를 찾는 역할을 한다.

조금 더 자세하게 LSA의 과정을 살펴보면 term-document 행렬이 있을 때, 이 행렬의 term vector 두 개의 내적은 두 단어 사이의 (문서에 대한) 상관관계를 나타낸다고 해석할 수 있다. 비슷한 맥락에서 두 document vector의 내적은 두 문서 사이의 (단어에 대한) 상관관계를 나타낸다. 이를 확장하여 앞서 언급한 term-document matrix에 자기 자신을 transpose하여 곱하면 이러한 상관관계의 행렬로 볼 수 있다. 이 행렬의 차원을 줄여서 앞서 말한 매력적인 성질을 갖는 근사 행렬을 구하는 것이 목적이다.

이 근사 행렬은 singular value decomposition이라는 방법을 사용해서 구하게 된다. Singular value decomposition은 여러 용도로 사용할 수 있는데, 여기에서는 행렬의 랭크(rank)를 줄이는 방법으로서 사용된다. Singular value decomposition 자체는 주어진 행렬을 의 세 행렬로 나눈다. 여기에서 중요한 것은 가운데에 있는 인데, 이 행렬은 diagonal matrix로 singular value라 불리는 녀석들로 구성된다. 이 에서 r개의 가장 큰 singular value만 남겨서 만들어지는 새로운 행렬을 라 하면 Eckart–Young theorem에 의해 는 기존의 행렬의 랭크를 r로 떨어뜨린 근사 행렬이 된다. 즉, singular value decomposition을 사용해서 우리가 찾고자 했던 원래 행렬의 차원을 떨어뜨린 새로운 행렬을 구할 수 있다. 이렇게 구한 새로운 행렬은 각각의 term vector는 concept space를 형성하고, document vector 끼리는 문서의 클러스터를 형성한다고 해석할 수 있다. 이 뒤로는 이 행렬의 활용만 남게 된다.

이런 종류의 기법을 논하는 글을 읽을 때마다 느끼는데, 역시 연구를 하고자 하면 최소한의 수학적 베이스가 갖춰지지 않고서는 정말 어렵다는 생각이 든다. 페이지 랭크도 그렇고 LSA도 그렇고 선형 대수적 기법을 가져와서 사용하는데, 애초에 그러한 테크닉이 존재한다는 사실도 모르면 이를 가져다 쓸 수 있을 리도 없으니 말이다. 비단 선형 대수뿐만이 아니라 현대 대수나 통계적인 기법은 여기저기에서 다양하게 사용된다. 그래서 꾸준히 기초를 다질 필요가 있다.

Next : 도메인 날리지, 모델링, 현실 세계
Prev : 취미
2 Replies
kek :

rotate scale rotate

2011-03-10 00:05:01

kek // 그렇다네

2011-03-10 00:33:51

E-mail은 비공개이며 스팸 확인용으로 사용됩니다. 댓글은 마크업 사용이 불가능하되 링크는 자동으로 링크가 걸리며 줄바꿈을 인식합니다.