이론공부/데이터분석

[텍스트분석] 토픽 모델링

Zziii 2025. 1. 3. 16:58
728x90
반응형

토픽모델링(Topic Modeling)

문서 집합에서 숨겨진 주제를 자동으로 추출하는 기법

지도학습/비지도학습 있으나 주로 비지도학습을 사용하며, 주제별로 요약하거나 문서간의 유사성을 

분석할때 활용

 

<비지도학습>

LDA(Latent Dirichlet Allocation)

문서를 주제의 혼합으로 주제를 단어의 혼합으로 가정하는 확률적 모델

문서> 주제> 단어라는 계층적 구조를 따름

각 문서는 다수의 주제에 속할 수 있으며, 각 주제는 단어 집합의 분포로 표현

LDA는 문서에서 단어가 생성되는 과정을 확률적으로 추정하여 주제를 발견

 

정리해서 말하면,

  1. 문서는 여러 주제의 혼합물:
    • 각 문서는 여러 주제(topic)에 속할 수 있으며, 주제별로 가중치를 가짐.
  2. 주제는 단어의 확률 분포:
    • 각 주제는 특정 단어들에 대한 확률 분포를 가짐.
  3. 단어는 주제에서 샘플링된 결과:
    • 문서의 각 단어는 해당 문서의 주제 분포에서 주제를 선택한 후, 그 주제에서 단어를 샘플링한 결과로 간주.
  1.  

LDA(Latent Dirichlet Allocation) 기본절차

1. 문서 전처리 : 불용어제거, 소문자 변환, 토큰화 등의 작업 수행.

2. 토픽 수 결정 : 분석 목표에 따라 미리 정의하거나, 평가 지표를 활용하여 최적의 토픽 수를 선택

3. LDA 모델 학습 : 각 문서에 대해 주제 분포와 단어 분포를 추정

4. 결과 해석 : 각 주제에 속한 주요 단어와 문서별 주제 분포를 분석

 

*토픽 수 결정하는방법

-직관적 판단

-Perplexity : 모델의 예측 정확성을 평가 (값이 낮을수록 좋음)

-Coherence Score : 토픽 내 단어간의 일관성을 측정 (값이 높을수록 측정)

 

LDA(Latent Dirichlet Allocation) 모델 및 시각화 코드

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation
import pyLDAvis
import pyLDAvis.sklearn

# 예제 데이터
documents = [
    "I love reading books about machine learning.",
    "Data science is a growing field with exciting opportunities.",
    "Deep learning is a subset of machine learning.",
    "Natural language processing is a fascinating topic.",
    "I enjoy reading about artificial intelligence."
]

# 문서 벡터화
vectorizer = CountVectorizer(stop_words='english')
doc_term_matrix = vectorizer.fit_transform(documents)

# LDA 모델 학습
n_topics = 3
lda_model = LatentDirichletAllocation(n_components=n_topics, random_state=42)
lda_model.fit(doc_term_matrix)

# pyLDAvis 시각화
panel = pyLDAvis.sklearn.prepare(lda_model, doc_term_matrix, vectorizer, mds='tsne')
pyLDAvis.display(panel)

 

 

BERTopic

BERT 임베딩과 군집화를 결합한 최신 토픽 모델링 방법

 

1. 문서 임베딩 생성

사전 학습된 언어모델을 사용하여 문장을 벡터화

각 문장을 고차원 임베딩 공간으로 변환

*임베딩 : 고차원 데이터를 저차원의 연속공간으로 변환하는 기법

 

2. 차원 축소(UMAP)

UMAP(Unified Mainfold Approximation and Projection)을 사용해 고차원 임베딩을 2~5차원으로 축소

문서간의 거리를 유지하면서 시각화와 군집화를 용이하게 만듦

*UMAP : 군집 구조 보존력이 뛰어난 차원 축소 기법

 

3. 군집화(HDBSCAN)

HDBSCAN을 사용하여 문서를 군집화

군집 크기와 밀도 기반으로 토픽을 형성

*HDBSCAN : 밀도기반 클러스터링 알고리즘(추후정리)

 

4. 토픽 표현 

각 군집의 주요 단어를 분석하여 해당 군집을 대표하는 토픽을 생성

 

BERTopic Python 코드

from bertopic import BERTopic

# 예제 데이터
documents = [
    "I love reading books about machine learning.",
    "Data science is a growing field with exciting opportunities.",
    "Deep learning is a subset of machine learning.",
    "Natural language processing is a fascinating topic.",
    "I enjoy reading about artificial intelligence."
]

# BERTopic 모델 생성 및 학습
topic_model = BERTopic()
topics, probs = topic_model.fit_transform(documents)

# 토픽 정보 확인
print(topic_model.get_topic_info())

# 토픽 시각화
topic_model.visualize_topics()

 

 

 

 

<지도학습>

지도학습을 사용하는 이유

특정 토픽이나 주제에 대한 사전 정보를 반영하고 싶을때

문서가 사전에 정의된 주제로 분류되어 있을때

예측 모델을 학습하면서 주제와 문서간의 관계를 동시에 학습하려고 할때

 

sLDA(Supervised Latent Dirichlet Allocation)

- LDA를 확장한 모델로, 문서의 토픽 분포와 함께 문서 수준의 레이블을 학습

- 문서의 레이블을 활용해 각 토픽이 레이블과 연관되는 정도를 학습

 

L-LDA(Labelled Latent Dirichlet Allocation)

- 각 문서가 하나 이상의 사전 정의된 레이블을 가지고 있을때 LDA를 확장하여 레이블 정보를 반영

- 각 토픽이 특정 레이블에 매핑되므로 해석이 명확

 

728x90
반응형