[python] gensim을 활용한 문서 유사도 계산 성능 향상을 위한 트릭 소개

Gensim은 Python에서 자연어 처리를 위한 라이브러리로, 토픽 모델링 및 문서 유사도 계산과 같은 작업에 유용합니다. 그러나 대규모 문서 집합에 대해 문서 유사도를 계산할 때 성능 문제가 발생할 수 있습니다. 이번 글에서는 Gensim을 사용하여 문서 유사도 계산 성능을 향상하기 위한 몇 가지 트릭을 소개하겠습니다.

목차

  1. 불필요한 계산 방지
  2. 메모리 효율적인 데이터 구조 사용
  3. 병렬 처리를 통한 속도 향상
  4. 결론

불필요한 계산 방지

Gensim의 Doc2Vec 또는 Word2Vec을 사용하여 문서 유사도를 계산할 때, 불필요한 계산을 피하는 것이 중요합니다. 문서 집합이 클 경우, 중요하지 않은 계산을 줄이면 성능을 향상시킬 수 있습니다. 예를 들어, 유사도를 계산할 때 중요하지 않은 단어를 제외하거나, 빈도가 낮은 단어를 무시할 수 있습니다.

# 빈도가 낮은 단어 무시 예제
from gensim.models import TfidfModel
from gensim.corpora import Dictionary

# 텍스트 데이터를 토큰화하여 사전을 생성
tokenized_texts = [["apple", "banana", "apple"], ["orange", "orange"]]
dictionary = Dictionary(tokenized_texts)

# TF-IDF 모델 학습
corpus = [dictionary.doc2bow(text) for text in tokenized_texts]
tfidf = TfidfModel(corpus, id2word=dictionary)

# 빈도가 낮은 단어 무시
tfidf.minimum_document_frequency = 2
tfidf[corpus]

메모리 효율적인 데이터 구조 사용

Gensim에서는 메모리를 효율적으로 사용하기 위해 SparseMatrixSimilarity와 같은 데이터 구조를 제공합니다. 이를 사용하여 대규모 문서 집합에 대한 유사도 계산 성능을 향상시킬 수 있습니다.

from gensim.similarities import SparseMatrixSimilarity
from gensim.models import TfidfModel
from gensim.corpora import Dictionary

# TF-IDF 모델 학습
tfidf_model = TfidfModel(corpus)

# SparseMatrixSimilarity를 사용한 유사도 계산
index = SparseMatrixSimilarity(tfidf_model[corpus], num_features=len(dictionary))
sims = index[tfidf_model[query]]

병렬 처리를 통한 속도 향상

Gensim은 병렬 처리를 통해 문서 유사도 계산의 속도를 향상시킬 수 있습니다. Word2Vec 모델의 학습 뿐만 아니라, 문서 집합에 대한 유사도 계산에서도 병렬 처리를 활용할 수 있습니다.

from gensim.models import Word2Vec
from gensim.models import KeyedVectors

# 병렬 처리를 통한 Word2Vec 모델 학습
model = Word2Vec(sentences, workers=4)

# 병렬 처리를 통한 문서 유사도 계산
similarities = model.wv.most_similar('word', topn=5)

결론

Gensim을 사용하여 문서 유사도 계산의 성능을 향상시키기 위해 불필요한 계산을 줄이고, 메모리 효율적인 데이터 구조를 사용하며, 병렬 처리를 활용하는 여러 가지 방법을 살펴보았습니다. 이러한 트릭들을 적용하여 대규모 문서 집합에 대한 문서 유사도 계산 성능을 향상시킬 수 있습니다.

참고 문헌: