토픽 모델링(Topic Modeling)
기계 학습 및 자연어 처리 분야에서 토픽(주제)이라는 문서 집합의 추상적인 주제를 발견하기 위한 통계적 모델 중 하나
텍스트 본문의 숨겨진 의미 구조를 발견하기 위해 사용되는 텍스트 마이닝 기법
- 카운트 기반 Bag of Words(BoW)에 기반한 문서 단어 행렬(DTM; Document-Term matrix), TF_IDF를 이용한 단어 빈도수만으로는 문서의 주제(잠재 의미)를 찾아내는데 한계가 존재.
- 카운트 기반 Bag of Words(BoW)에 기반한 문서 단어 행렬(DTM; Document-Term matrix), TF_IDF를 이용한 단어 빈도수만으로는 문서의 주제(잠재 의미)를 찾아내는데 한계가 존재.
토픽모델링에 자주 사용되는 기법은 잠재의미 분석(LSA; Latent Semantic Analysis)와 잠재 디리클레 할당(LDA; Latent Dirichlet Allocation)이다.
잠재 의미 분석(Latent Semantic Analysis, LSA)?
특이값 분해(SVD; Singular Value Decomposition)을 활용하여 문서에 함축된 주제를 찾아 내는 방법
데이터가 큰 경우에 차원축소의 효과가 커짐. 실제 네이버, 카카오 등 협업에서 많이 사용하는 방법
장점
- 잠재 의미 분석은 입력데이터의 크기가 m x n이고 문서당 평균 단어수가 c일 경우 계산복잡도가 O(mnc)이어서 그다지 무거운 알고리즘이 아니며, 쉽고 빠르게 구현 가능.
단점
- 문서에 포함된 단어가 정규 분포를 따라야 LSA 적용가능.
- 새로운 문서나 단어가 추가되면 처음부터 작업을 새로 시작해야 한다.
LSA 관련 논문
Deerwester et ak.(1990)과 Landauer and Dumais(1997)은 이 기법을 적용하면 단어와 문맥 간의 내재적인 의미(latent/hidden meaning)을 효과적으로 보존할 수 있게 돼 결과적으로 문서 간 유사도 측정 등 모델의 성능 향상에 도움을 줄 수 있다.
Rapp(2003)은 입력 데이터의 노이즈 제거, Vozalis and Margaritis(2003)은 입력데이터의 sparsity(희소행렬)를 줄이게 돼 효과가 좋다고 결론.
특이값 분해(Singular Value Decomposition, SVD)?
- 정방행렬을 고유값(eigenvalue)과 고유벡터(eigenvector)로 분해하는 고유값분해(eigen decomposition)의 개념을 기본으로 행렬을 분해 하는 차원축소 기법.
- 고유값과 고유벡터를 기하학적으로 봤을 때, 행렬(선형변환) A의
고유벡터
는 선형변환 A에 의해 방향은 보존되고 스케일(scale)만 변화되는 방향 벡터를 나타내고,
고유값
은 그 고유벡터의 변화되는 스케일 정도를 나타내는 값이다.
✏ 여기서 고유값 분해에 대해서 잠깐 알아보면,
고유값 분해(eigen decomposition)
고유값 분해는 정방행렬(n×n)에 대해서만 가능.
행렬 A를 선형변환으로 봤을 때, A에 대해 Av=λv를 만족하는 0이 아닌 v벡터를 고유벡터(eigenvector)라 하고 이 상수λ 값을 고유값(eigenvalue)라 한다.
Av=λv
행렬 A의 고유값을 λi, 고유벡터를 vi, i = 1, 2,…, n이라고 하자.
Av1=λ1v1 Av2=λ2v2 ⋮ Avn=λnvn 위의 식을 한번에 정리하면,A[v1v2⋯vn]=[λ1v1λ2v2⋯λnvn]
=[v1v2⋯vn] [λ10λ2⋱0λn] 행렬 A의 고유 벡터들을 열 벡터로 하는 행렬을 P, 고유값을 대각원소로 가지는 대각 행렬을 Λ라 하면 다음 식이 성립한다.
AP=P\Lambda A=P\Lambda P^{-1} 이를 행렬 A에 대한 고유값 분해(eigen decomposition)라고 한다. 다시 반복하면, 행렬 A는 자신의 고유벡터들을 열벡터로 하는 행렬(P)과 고유값을 대각원소로 하는 행렬(Λ)의 곱으로 대각화 분해 가능하다.
※ 고유값분해가능조건-일차독립 : 어떤 벡터들의 집합 {v1, …, vn}이 있을 때, 이들 벡터들 중 어느 한 벡터도 다른 벡터들의 일차결합으로 표현될 수 없으면 이 벡터들은 서로 일차독립이라고 정의(full-rank 개념)
고유값 분해는 정방 행렬에 대해서만 가능하지만, 특이값 분해는 모든 직각 행렬에 대하여 분해가 가능, 행렬 A를 다음과 같이 3개의 행렬의 곱으로 분해하는 것을 의미한다.
대칭행렬은 항상 고유값 분해가 가능하며 직교 행렬로 대각화 할 수 있다. 여기서 AA^T와 A^TA(=(AA^T)^T)는 모두 대칭핼렬 이므로 고유값 분해가 가능 한 것이다.
실수 공간에서 임의의 m × n 행렬에 대한 특이값분해(SVD)는 다음과 같다.
A=UΣV^T 를 살펴보면,
m × n 크기의 행렬을 U와 m × n 크기의 ∑, n × n 크기의 V^T로 나눌 수 있다.
여기서 각 3개의 행렬은 다음과 같은 조건을 만족한다.
U:m×m 직교행렬 (AA^T=U(ΣΣ^T)U^T) ➭ U는 AA^T의 고유벡터들로 구성된 행렬
Σ:m×n 직사각 대각행렬
V:n×n 직교행렬 (A^TA=V(Σ^TΣ)V^T) ➭ V는 A^TA의 고유벡터들로 구성된 행렬
AA^T 의 고유벡터 정의의 예시로, 행렬 A를 제곱식을 정리하면 아래와 같다.
AA^T = UΣV^T(UΣV^T)^T
= UΣV^TVΣU^T
= UΣ^2U^T
= UΛU^T
행렬 U와 V에 속한 벡터를 특이 벡터(Singular Vector)라 한다. 또한, 아래와 같이 모든 특이벡터는 서로 직교하는 성질을 가짐.
행렬 Σ의 대각원소의 값은 행렬 A의 특이값이며, 모두 0보다 크거나 같으며 내림차순으로 정렬돼 있다. 행렬 Σ의 k번째 대각원소에 해당하는 특이값 Σ_k는 행렬 AA^T 혹은A^TA의 k번째 고유값에 제곱근을 취한 값과 같고 대각성분을 제외한 나머지는 ’0이다.
특이값분해(SVD)의 기하학적 의미
행렬을 x' = Ax와 같이 좌표공간에서의 선형변환으로 봤을 때,
직교행렬(orthogonal matrix)의 기하학적 의미는 회전변환(rotation transformation) 또는 반전된(reflected) 회전변환,
대각행렬(diagonal maxtrix)의 기하학적 의미는 각 좌표성분으로의 스케일변환(scale transformation)이다.따라서 아래 그림과 같이, 식 A = UΣV^T에서 U, V는 직교행렬, Σ는 대각행렬이므로 Ax는 x를 먼저 V^T에 의해 회전시킨 후 Σ로 스케일을 변화시키고 다시 U로 회전시키는 것임을 알 수 있다.
이차원을 가정하고 위 그림을 보면 \sum행렬에 의한 형태의 변화는 첫번째 특이 값 \sigma_1은 변환된 타원 장축의 길이, 두번째 특이 값 \sigma_2는 타원의 단축의 길이에 해당한다. 행렬V^T와U는 회전의 변환만 준다. 종합적으로 선형 변환 A에 의한 도형의 변환결과는 형태적으로 보면 오로지 A의 특이값에 의해서만 결정됨을 알 수 있다.
Full SVD
- 아래와 같이 행렬 A(m × n)를 행렬 U(m × m)와 \sum(m × n)와 V^T(n × n)으로 분해하는 것을 full SVD라 부른다.
- reduced SVD
- full SVD에서 3개의 행렬에서 일부 벡터들을 삭제 하여데이터의 차원을 줄여 사용.
- 잠재 의미 분석에서는 절단된 특이값 분해(Truncated SVD)를 사용한다.
- full SVD에서 3개의 행렬에서 일부 벡터들을 삭제 하여데이터의 차원을 줄여 사용.
- Thin SVD
\sum행렬의 비대각파트와 그에 해당하는 U행렬의 부분을 제거, A를 원상복귀할 수 있다.
Compact SVD
Compact_SVD
\sum행렬의 비대각파트와 특이값이 0인부분도 함께 제거하고 그에 해당하는 U행렬의 부분을 제거, A를 원상복귀할 수 있다.
Truncated SVD
Truncated_SVD
\sum 행렬의 특이값 가운데 상위 t개만 골라낸 형태로 그에 해당하는 U와 V 행렬에 A행렬을 원상복귀할 수 없게 되지만 데이터 정보를 압축함에도 행령 A에 근사하게 된다. Truncated SVD는 잠재의미 분석에서 사용된다.
다음과 같은 문서들이 있다고 가정하고, 이를 토대로 단어-문서행렬을 만들면 아래와 같다.
- 잠재의미분석이란 위와 같은 단어-문서행렬(Word-Document Matrix), 단어-문맥행렬(window based co-occurrence matrix) 등 입력 데이터에 특이값 분해를 수행해 데이터의 차원수를 줄여 계산 효율성을 키우는 한편 행간에 숨어있는(latent) 의미를 이끌어내기 위한 방법론으로 위의 Truncated SVD를 사용한다. 즉, n개의 문서를 m개의 단어로 표현된 행렬을 만들고 특이값중 연구자가 선택한 상위 k개만 골라내 차원을 축소여, 단어와 문맥간의 내저적 의미를 발견 하는 방법이다.
[References]
https://wikidocs.net/30708
https://darkpgmr.tistory.com
https://ratsgo.github.io
'Data analysis' 카테고리의 다른 글
토픽모델링(Topic Modeling)-잠재 디리클레 할당(Latent Dirichlet Allocation, LDA)(1) (0) | 2020.09.24 |
---|---|
N-gram (0) | 2020.08.07 |
KNN(K-Nearest Neighbor), 최근접 이웃법(1) (0) | 2020.07.28 |
Bayesian Network (0) | 2020.05.26 |