56일차 토픽모델링(Topic Modeling)

차지예·2025년 8월 6일

생성AI

목록 보기
50/56
post-thumbnail

토픽 모델링 이론 정리

1. 잠재 의미 분석 (Latent Semantic Analysis, LSA)

🔹 개요

  • 단어의 의미(semantic)를 반영하지 못하는 DTM, TF-IDF의 한계를 극복하기 위해 제안된 방법
  • DTM 또는 TF-IDF 행렬에 특이값 분해(SVD) 를 적용하여 문서와 단어의 잠재 의미를 저차원 공간에 표현
  • LSA는 원래 정보 검색을 위한 방법이지만, 토픽 모델링에도 활용됨

🔹 핵심 수학 개념: 특이값 분해 (SVD)

A=UΣVTA = U \Sigma V^T
  • UU: 문서 벡터 (문서 × 토픽)
  • Σ\Sigma: 대각행렬 (특이값)
  • VTV^T: 단어 벡터 (토픽 × 단어)

🔹 Truncated SVD (절단된 SVD)

  • 가장 큰 특이값 상위 tt개만 선택하여 노이즈 제거 및 차원 축소
  • tt: 하이퍼파라미터 (토픽 수)

🔹 장단점

장점

  • 빠르고 구현이 쉬움
  • 문서/단어 간 유사도 파악 가능
  • 노이즈 제거 효과

단점

  • 새 문서 추가 시 전체 재계산 필요
  • 확률 기반이 아니므로 해석이 모호함

2. 잠재 디리클레 할당 (Latent Dirichlet Allocation, LDA)

🔹 개요

  • 확률적 토픽 모델링 기법
  • 각 문서는 여러 토픽의 혼합, 각 토픽은 여러 단어의 혼합이라고 가정

🔹 생성 모델 가정

  1. 문서의 토픽 분포를 디리클레 분포로 생성
  2. 단어마다:
    • 토픽을 확률적으로 선택
    • 선택한 토픽에서 단어를 확률적으로 선택

🔹 수학적 아이디어

  • p(topicdocument)p(topic \mid document): 문서 내 특정 토픽의 비중
  • p(wordtopic)p(word \mid topic): 토픽 내 특정 단어의 분포

🔹 LSA vs LDA 비교

항목LSALDA
방식SVD 기반 차원 축소베이지안 확률 모델
의미 기반수치적 근접확률 기반 해석 가능
입력DTM, TF-IDFDTM, TF-IDF
출력잠재 의미 벡터토픽-단어 / 문서-토픽 분포
단점업데이트 불가복잡한 계산, 느림

3. 사이킷런의 LDA (sklearn LDA)

🔹 주요 라이브러리

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

🔹 전체 흐름

  1. 문서 전처리
  2. CountVectorizer로 DTM 생성
  3. LatentDirichletAllocation 모델 학습

🔹 예시 코드

vectorizer = CountVectorizer(max_df=0.9, min_df=10, stop_words='english')
X = vectorizer.fit_transform(docs)

lda = LatentDirichletAllocation(n_components=10, random_state=42)
lda.fit(X)

4. BERT를 이용한 키워드 추출: 키버트 (KeyBERT)

🔹 개요

  • BERT를 활용해 문서의 의미 벡터를 얻고, 후보 키워드들과의 코사인 유사도를 계산해 핵심 키워드를 추출

🔹 작동 방식

  1. 문서 전체 임베딩 생성
  2. 후보 키워드 추출 (n-gram 등)
  3. 문서 임베딩과 후보 임베딩 간 코사인 유사도 계산
  4. 상위 N개 추출

🔹 예시 코드

from keybert import KeyBERT

kw_model = KeyBERT('distilbert-base-nli-mean-tokens')
doc = "BERT is a powerful model for extracting keyphrases from documents."

keywords = kw_model.extract_keywords(doc, top_n=5)
print(keywords)

5. 한국어 키버트 (KeyBERT for Korean)

🔹 전처리 필요사항

  • 한국어 BERT 모델 사용 권장:
    • klue/bert-base, skt/kobert-base-v1, snunlp/KR-SBERT-...
  • 형태소 분석기 설치: konlpy, mecab, soynlp

🔹 설치 및 사용 예시

pip install keybert transformers
from keybert import KeyBERT
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("snunlp/KR-SBERT-V40K-klueNLI-augSTS")
kw_model = KeyBERT(model)

doc_ko = "기후 변화는 지구의 생태계와 인류에 중대한 영향을 미치고 있다."
keywords = kw_model.extract_keywords(doc_ko, top_n=5)
print(keywords)

✅ 요약 비교

항목설명
LSASVD 기반 차원 축소, 문서/단어 의미 추출
LDA확률 분포 기반 토픽 모델링
Sklearn LDA사이킷런 기반 확률적 모델
KeyBERT문맥 임베딩 기반 키워드 추출
한국어 키버트한국어 전용 BERT + 형태소 분석

0개의 댓글