[python] scikit-learn을 활용한 토픽 모델링

토픽 모델링은 텍스트 데이터에서 주제를 추출하는 기술입니다. scikit-learn은 파이썬에서 토픽 모델링을 수행하기 위한 다양한 도구와 기능을 제공합니다. 이번 블로그 포스트에서는 scikit-learn을 사용하여 토픽 모델링을 수행하는 방법에 대해 알아보겠습니다.

데이터 준비

토픽 모델링을 수행하기 위해서는 텍스트 데이터가 필요합니다. 여기서는 영화 리뷰 데이터를 사용하여 예시를 진행하겠습니다. 데이터는 CSV 파일로 제공되며, 다음과 같은 형식으로 구성되어 있습니다.

| 리뷰                                          | 평점 |
|-----------------------------------------------|------|
| 이 영화 정말 재미있어요!                         | 5    |
| 스토리가 너무 지루해요.                            | 2    |
| 연기도 좋고 스토리도 흥미로워요!                      | 4    |

데이터 전처리

먼저, 데이터를 불러오고 전처리하는 작업이 필요합니다. scikit-learn에서는 CountVectorizer를 사용하여 텍스트 데이터를 벡터로 변환할 수 있습니다. 이를 통해 각 단어의 등장 빈도를 계산할 수 있습니다.

from sklearn.feature_extraction.text import CountVectorizer

# 데이터 로딩
data = pd.read_csv('영화_리뷰.csv')

# 텍스트 데이터 추출
text_data = data['리뷰']

# CountVectorizer 초기화 및 텍스트 데이터 변환
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(text_data)

토픽 모델링 수행

데이터 전처리가 완료되었으면, 이제 토픽 모델링을 수행할 수 있습니다. scikit-learn에서는 LatentDirichletAllocation 클래스를 제공하여 Latent Dirichlet Allocation(LDA) 알고리즘을 사용할 수 있습니다.

from sklearn.decomposition import LatentDirichletAllocation

# LDA 모델 초기화
lda_model = LatentDirichletAllocation(n_components=5)

# 토픽 모델링 수행
lda_model.fit(X)

결과 해석

토픽 모델링을 마치면, 우리는 각 토픽에 대한 단어의 중요도를 확인할 수 있습니다. 이를 통해 주제를 이해하고 토픽의 이름을 지정할 수 있습니다.

# 토픽별 단어 중요도 확인
topic_words = vectorizer.get_feature_names_out()
for topic_idx, topic in enumerate(lda_model.components_):
    top_words = [topic_words[i] for i in topic.argsort()[:-6:-1]]
    print(f"토픽 {topic_idx+1}: {' '.join(top_words)}")

여기서, n_components 인자는 생성할 토픽의 개수를 지정하는데, 적절한 값은 상황에 따라 달라질 수 있습니다.

결론

scikit-learn을 사용하면 쉽게 토픽 모델링을 수행할 수 있습니다. 이를 통해 텍스트 데이터에서 중요한 주제를 추출하고 분석할 수 있습니다. 참조자료를 참고하여 자세한 내용을 학습하시기 바랍니다.

참조자료