[파이썬] Gensim LSI 모델에서의 토픽 추출

Gensim은 Python에서 자연어 처리를 위한 강력한 라이브러리입니다. 특히, LSI(Latent Semantic Indexing) 모델을 사용하여 토픽 모델링을 수행할 수 있습니다. 이 블로그 포스트에서는 Gensim을 사용하여 LSI 모델에서 토픽을 추출하는 방법에 대해 알아보겠습니다.

LSI 모델 개요

LSI 모델은 문서 집합에서 숨겨진 의미를 추출하기 위해 사용되는 토픽 모델링 기법입니다. LSI는 단어들의 공간적 유사성을 기반으로 문서를 표현하고, 각 문서와 토픽 간의 상관 관계를 계산합니다. 이를 통해 문서를 저차원의 의미 공간에 임베딩하여 토픽 추론이 가능해집니다.

Gensim을 사용한 LSI 모델링

Gensim을 사용하여 LSI 모델을 생성하고 토픽을 추출하는 과정은 다음과 같습니다:

  1. 텍스트 데이터 준비: LSI 모델을 학습하기 위해 텍스트 데이터를 전처리해야 합니다. 이는 토큰화, 불용어 제거, 스테밍 등의 작업을 포함할 수 있습니다.

  2. 말뭉치(corpus) 생성: 전처리된 텍스트 데이터를 토큰화된 형태로 변환하여 말뭉치(corpus)를 생성합니다. 말뭉치는 Gensim에서 LSI 모델을 학습하는 데 사용됩니다.

  3. 딕셔너리 생성: 말뭉치에서 사용된 단어들을 인덱싱하여 딕셔너리를 생성합니다. 이 딕셔너리를 사용하여 단어들을 숫자로 표현할 수 있습니다.

  4. LSI 모델 훈련: 말뭉치와 딕셔너리를 사용하여 LSI 모델을 훈련합니다. 이 단계에서 LSI 모델은 문서와 단어 간의 상관 관계를 파악하고, 단어를 주제(topic)로 임베딩합니다.

  5. 토픽 추출: 훈련된 LSI 모델을 사용하여 문서의 토픽을 추출합니다. 이는 문서가 어떤 주제와 관련이 있는지를 알려줍니다.

아래는 Gensim을 사용하여 LSI 모델을 훈련하고 토픽을 추출하는 예제 코드입니다:

from gensim import corpora, models
from nltk.tokenize import word_tokenize

# 텍스트 데이터 준비
documents = [
    "Gensim is a powerful library for natural language processing in Python.",
    "LSI model can be used for topic modeling in Gensim.",
    "Topic modeling is useful to discover hidden semantic patterns in text data."
]

# 텍스트 데이터 전처리
tokenized_documents = [word_tokenize(doc.lower()) for doc in documents]

# 말뭉치(corpus) 생성
dictionary = corpora.Dictionary(tokenized_documents)
corpus = [dictionary.doc2bow(tokenized_doc) for tokenized_doc in tokenized_documents]

# LSI 모델 훈련
lsi_model = models.LsiModel(corpus, id2word=dictionary, num_topics=2)

# 토픽 추출
topics = lsi_model.print_topics()
for topic in topics:
    print(topic)

위의 코드에서는 “Gensim is a powerful library for natural language processing in Python.”과 “LSI model can be used for topic modeling in Gensim.” 두 개의 문서를 사용하여 LSI 모델을 훈련합니다. 그리고 num_topics 매개변수를 사용하여 추출할 토픽의 수를 지정합니다. 마지막으로 print_topics() 메소드를 사용하여 추출된 토픽을 출력합니다.

위의 코드를 실행하면 다음과 같은 결과가 출력됩니다:

(0, '-0.593*"data" + -0.480*"text" + -0.240*"patterns" + -0.240*"semantic" + -0.240*"hidden" + -0.240*"discover" + -0.240*"useful" + 0.880*"gensim" + -0.240*"processing" + 0.240*"model"')
(1, '0.596*"gensim" + -0.491*"text" + -0.327*"data" + 0.317*"model" + 0.317*"topic" + 0.317*"used" + 0.317*"ls" + -0.282*"patterns" + -0.282*"semantic" + -0.282*"hidden"')

위의 결과는 두 개의 토픽이 각각 어떤 단어들로 이루어져 있는지를 보여줍니다.

이처럼 Gensim을 사용하여 LSI 모델을 훈련하고 토픽을 추출할 수 있습니다. LSI 모델은 문서의 의미를 파악하고 토픽 추론에 유용한 도구입니다.