[파이썬] Gensim에서의 Dynamic Topic Model

Dynamic Topic Model

Gensim은 파이썬을 위한 자연어 처리 라이브러리로, 다양한 텍스트 분석 작업에 사용됩니다. 이 중에서도 Dynamic Topic Model(DTM)은 텍스트 데이터의 변화를 감지하고 시간에 따라 topic의 분포를 추적하는 기능을 제공합니다. 이번 글에서는 Gensim을 이용하여 DTM을 구현하는 방법에 대해 알아보겠습니다.

DTM의 개요 DTM은 문서들이 시간의 흐름에 따라 변화하는 방식을 모델링하는 확률적인 방법입니다. DTM은 Latent Dirichlet Allocation(LDA)의 확장 버전으로, 시계열 데이터에 적합한 변종입니다. DTM은 문서들이 시간 단위별로 topic의 분포를 가지며, 이러한 분포 변화를 통해 문서 간의 유사성을 파악할 수 있습니다.

Gensim을 이용한 DTM 구현

먼저 Gensim을 설치해야 합니다. 터미널에서 다음 명령어를 실행합니다:

!pip install gensim

Gensim을 설치한 후, DTM 모델을 구현하기 위해 필요한 추가 라이브러리를 import 합니다.

from gensim.models import DtmModel
from gensim import corpora
from gensim.utils import simple_preprocess

DTM 모델을 생성하기 위해 데이터를 전처리해야 합니다. 예를 들어, 다음과 같은 문서들이 시간별로 제공된다고 가정해 봅시다.

documents = [
    ["apple", "banana", "orange"],
    ["apple", "orange", "pear", "grape"],
    ["banana", "pear", "grape", "kiwi"],
    ["orange", "pear", "grape"],
    ["kiwi", "strawberry", "banana"]
]

전처리 과정에서는 문서들을 단어로 분리하고, 각 단어를 고유한 ID로 맵핑해야 합니다.

# 단어들의 리스트 생성
word_list = [simple_preprocess(document) for document in documents]

# 단어들의 dictionary 생성
dictionary = corpora.Dictionary(word_list)

# 단어들을 corpus 형태로 변환
corpus = [dictionary.doc2bow(words) for words in word_list]

이제 DTM 모델을 생성하고 학습할 준비가 완료되었습니다.

# DTM 모델 생성
model = DtmModel(
    corpus=corpus,
    id2word=dictionary,
    time_slices=[1, 2, 3, 4, 5],
    num_topics=3
)

# DTM 모델 학습
model.train()

DTM 모델을 학습한 후, 특정 시간 슬라이스에 대한 topic 분포를 확인할 수 있습니다.

# 시간 슬라이스 1에 대한 topic 분포 확인
topic_distribution = model.show_topic_topics(time=1)
print(topic_distribution)

결론 Gensim을 이용하여 DTM을 구현하는 방법에 대해 알아보았습니다. DTM은 문서들의 시간적인 변화를 고려하여 topic 분포를 추적하는 모델로, 시계열 텍스트 데이터에 유용합니다. Gensim에서 제공하는 DTM 모듈을 사용하면 손쉽게 DTM을 구현하고 분석할 수 있습니다.