토픽 모델링이란 문서 집합에 숨어 있는 주제를 찾아내는 것이다. 많은 양의 문서가 있을 때 사람이 이 문서를 다 읽고 핵심 주제를 찾는 것은 매우 많은 시간이 소모된다. 이 경우에 머신러닝 기반의 토픽 모델링을 적용해 숨어 있는 중요 주제를 효과적으로 찾아낼 수 있다. 사람이 수행하는 토픽 모델링은 더 함축적인 의미로 문장을 요약하는 것에 반해, 머신러닝 기반의 토픽 모델은 숨겨진 주제를 효과적으로 표현할 수 있는 중심 단어를 함축적으로 추출한다.
머신러닝 기반 초픽 모델링에 자주 사용되는 기법은 LSA와 LDA이다. 이번에는 LDA만 사용해서 토픽 분류를 진행해보았다. 사이킷런은 LDA 기반의 초픽 모델링을 LatentDirichletAllocation 클래스로 제공한다. 먼저 LDA 토픽 모델링을 위해 fetch_20newsgroups() API는 categories 파라미터를 통해 필요한 주체만 필터링해 추출하고 추출된 텍스트를 Count 기반으로 벡터화 변환하였다. 여기서 LDA는 Count기반의 벡터화만 사용한다. max_features=1000으로 word 피처의 개수를 제한하고, n_gram_range(1,2)로 설정하고 피처 벡터화 변환을 하였다.

CountVectorizer 객체 변수인 feat_vect 모두 7862개의 문서가 1000개의 피처로 구성된 행렬 데이터가 된 것을 알 수 있다. LatentDirichletAllocation 클래스의 n_components 파라미터를 이용해 토픽 개수를 조정할 수 있다. 여기서는 cats의 수를 8개로 앞서 추려놓았기 때문에 8로 설정해 주었다.

LatentDirichletAllocation.fit(데이터 세트)을 수행하면 LatentDirichletAllocation 객체는 components_ 속성값을 가지게 된다. components_는 개별 토픽 별로 각 word 피처가 얼마나 많이 그 토픽에 할당됐는지에 대한 수치를 가기고 있다. 높은 값일수록 해당 word 피처는 그 토픽의 중심 word가 된다.

components_는 array[8,1000]으로 구성돼 있다,. 8개의 토픽 별로 1000개의 word 피처가 해당 토픽 별로 연관도 값을 가지고 있다. 즉, components_array의 0번째 row, 10번째 col에 있는 값은 Topic #0에 대해서 피처 벡터화된 행렬에서 10번째 칼럼에 해당하는 피처가 Topic #0에 연관되는 수치 값을 가지고 있다. lda_model.components_ 값만으로는 각 토픽별 word 연관도를 보기가 어렵다. display_topics() 함수를 만들어서 각 토픽 별로 연관도가 높은 순으로 word를 나열해보자.

Topic #0의 경우 중동 분쟁과 관련된 내용들이. Topic #1의 경우는 기독교 관련 주제가, Topic #2는 중동분쟁에 관환 내용이, Topic #3는 애매하지만 윈도우 운영체제와 관련된 내용이, Topic #4는 명확하지 않고 일반적인 단어가 주를 이루고 있고, Topic #5는 의학에 관련한 주제어가, Topic #6도 명확하지 않고 일반적인 단어가 주를 이루고 있고, 마지막으로 Topic #7의 경우 애매하지만 컴퓨터 그래픽에 관한 내용이 있는 것을 알 수 있다. 토픽에 따라서 키워드들의 정확도 혹은 주제를 생각할 수 있는 정도의 함축성이 다른 것을 알 수 있다.
'Machine Learning' 카테고리의 다른 글
| [파이썬 머신러닝 완벽가이드(위키북스)] : 텍스트 분석 part6 문서 유사도 (0) | 2022.01.02 |
|---|---|
| [파이썬 머신러닝 완벽가이드(위키북스)] : 텍스트 분석 part5 토픽 모델링 (0) | 2021.12.29 |
| [파이썬 머신러닝 완벽가이드(위키북스)] : 텍스트 분석 part4 감성 분석 (0) | 2021.12.13 |
| [파이썬 머신러닝 완벽가이드(위키북스)] : 텍스트 분석 part3 뉴스그룹 분류 (0) | 2021.12.13 |
| [파이썬 머신러닝 완벽가이드(위키북스)] : 텍스트 분석 part2 BOW (0) | 2021.12.11 |
댓글