728x90
토픽 모델링(Topic Modeling)은 비구조적인 텍스트 데이터에서 주제를 식별하고 추출하는 기술이다. 비지도학습 기법으로, 주어진 문서 집합에서 어떤 주제들이 존재하는지를 자동으로 파악한다. 주제에 관련된 단어, 문장, 문서 등을 발견하고 그룹화할 수 있다. 뉴스 기사, 논문, 고객 리뷰 등에서 키워드를 추출하거나 감성 분석을 하는 등 다양한 텍스트 분석에 사용된다.
대표적인 알고리즘으로는 Latent Dirichlet Allocation(LDA)가 있다. 이 알고리즘은 문서의 모음을 입력받아 각 문서가 어떤 주제들을 다루고 있는지 추정한다.
가장 널리 알려진 토픽 모델링 알고리즘 중 하나는 Latent Dirichlet Allocation (LDA)이다. LDA는 문서-단어 행렬(Document-Term Matrix)을 입력으로 받아 문서들의 토픽 분포와 각 토픽 내에서의 단어 분포를 추정합니다.
토픽 모델링은 문서 집합에서 숨겨진 구조를 발견하고 이를 통해 의미 있는 정보를 추출하는 데에 유용하다. 예를 들어, 뉴스 기사 집합에서 토픽 모델링을 수행하면 "스포츠", "경제", "정치" 등의 주제를 추출할 수 있다. 이를 통해 특정 주제에 대한 문서를 검색하거나 관련된 문서를 군집화하는 등의 작업을 수행할 수 있다.
토픽 모델링은 정보 검색, 자연어 처리, 문서 분석 등 다양한 분야에서 활용되며, 대용량의 텍스트 데이터를 다룰 때 특히 유용한 도구이다.
- 토픽 모델링 알고리즘
- 잠재 의미 분석(Latent Semantic Analysis, LSA): 토픽 모델링에 아이디어를 제공한 알고리즘. LSA->LDA로 발전
- 잠재 디리클레 할당(Latent Dirichlet Allocation, LDA): 문서가 생성되는 과정을 역추적.
- 한국어 키버트(Korean KeyBERT)
# 필요한 라이브러리 불러오기
from gensim import corpora
from gensim.models import LdaModel
from gensim.test.utils import common_texts
# 예시 문서 리스트
documents = [
"apple orange fruit",
"banana fruit",
"orange fruit",
"apple fruit",
"banana orange fruit"
]
# 문서를 토큰화하여 리스트로 변환
tokenized_docs = [doc.split() for doc in documents]
# 단어에 고유한 ID를 부여하는 사전(dictionary) 생성
dictionary = corpora.Dictionary(tokenized_docs)
# 문서를 단어 ID들의 리스트로 변환
corpus = [dictionary.doc2bow(tokens) for tokens in tokenized_docs]
# LDA 모델 생성과 학습
lda_model = LdaModel(corpus=corpus, id2word=dictionary, num_topics=2, passes=10)
# 학습된 토픽 확인
for idx, topic in lda_model.print_topics(-1):
print(f"토픽 {idx}: {topic}")
# 특정 문서의 토픽 확인
new_doc = "apple banana"
new_doc_bow = dictionary.doc2bow(new_doc.split())
print(f"문서의 토픽 분포: {lda_model.get_document_topics(new_doc_bow)}")
토픽 0: 0.617*"fruit" + 0.238*"orange" + 0.227*"apple" + 0.147*"banana"
토픽 1: 0.591*"fruit" + 0.387*"orange" + 0.269*"banana" + 0.134*"apple"
문서의 토픽 분포: [(0, 0.41553798), (1, 0.58446205)]
728x90
'자연어 처리(NLP) 공부' 카테고리의 다른 글
[NLP 스터디] Scaled Dot-Product Attention (0) | 2023.05.22 |
---|---|
[NLP 스터디] 자연어 처리 기법 GloVe, Swivel, ELMo (0) | 2023.05.22 |
[NLP 스터디] FastText, *서브워드 (0) | 2023.05.10 |
희소 표현 VS. 밀집 표현 (0) | 2023.05.08 |
[NLP 스터디] 임베딩, Word2Vec (0) | 2023.05.08 |