Gensim을 사용하여 문서 간 유사도 계산하기

자연어 처리를 위해 Gensim 라이브러리는 많은 유용한 기능을 제공합니다. 그 중 하나는 문서 간의 유사도를 계산하는 기능입니다. 이 기능을 사용하면 문서 간의 관련성을 평가하거나 유사한 문서를 찾는 등의 다양한 작업을 수행할 수 있습니다.

이번 블로그 포스트에서는 Gensim을 사용하여 문서 간 유사도를 계산하는 방법에 대해 알아보겠습니다.

1. Gensim 설치

먼저 Gensim을 설치해야 합니다. 아래 명령을 사용하여 Gensim을 설치할 수 있습니다.

pip install gensim

2. 문서 벡터화

문서 간의 유사도를 계산하려면 먼저 문서를 벡터로 표현해야 합니다. 이를 위해서는 문서를 토큰화하고 단어를 벡터로 변환해야 합니다.

from gensim import corpora, models

# 문서를 토큰화하여 단어 리스트로 변환
documents = [
    "나는 사과를 좋아합니다.",
    "사과는 맛있습니다.",
    "바나나는 나무에 열리는 과일입니다."
]

tokenized_documents = [document.lower().split() for document in documents]

# 단어와 인덱스를 매핑하는 사전 생성
dictionary = corpora.Dictionary(tokenized_documents)

# 문서를 BoW(bag-of-words) 벡터로 변환
bow_documents = [dictionary.doc2bow(document) for document in tokenized_documents]

# TF-IDF 모델을 사용하여 단어 벡터를 계산
tfidf_model = models.TfidfModel(bow_documents)
tfidf_documents = [tfidf_model[bow_document] for bow_document in bow_documents]

위 코드에서는 문서를 토큰화하여 단어 리스트로 변환한 후, 사전을 생성해 각 단어와 인덱스를 매핑합니다. 그리고 문서를 BoW 벡터로 변환한 후에 TF-IDF 모델을 사용하여 단어 벡터를 계산합니다.

3. 유사도 계산

이제 문서 간의 유사도를 계산할 준비가 되었습니다. 유사도를 계산하기 위해서는 두 개의 문서 벡터를 비교해야 합니다.

from gensim import similarities

# 유사도를 계산할 문서를 생성
query_document = "사과는 맛있습니다."
tokenized_query = query_document.lower().split()
bow_query = dictionary.doc2bow(tokenized_query)
tfidf_query = tfidf_model[bow_query]

# 유사도 매트릭스를 구성
index = similarities.MatrixSimilarity(tfidf_documents)

# 쿼리 문서와 다른 문서 간의 유사도를 계산
sims = index[tfidf_query]

# 유사도 결과 출력
print(sims)

위 코드에서는 유사도를 계산할 쿼리 문서를 생성하고, BoW 벡터, TF-IDF 벡터를 계산합니다. 그리고 유사도 매트릭스를 구성한 후, 쿼리 문서와 다른 문서 간의 유사도를 계산합니다.

결론

Gensim을 사용하여 문서 간의 유사도를 계산하는 방법에 대해 알아보았습니다. 이를 통해 문서 간의 관련성을 평가하거나 유사한 문서를 찾는 등의 다양한 자연어 처리 작업을 수행할 수 있습니다. Gensim은 효율적이고 다양한 기능을 제공하는 라이브러리이므로 자연어 처리에 관심이 있는 개발자에게 유용한 도구입니다.

#Gensim #자연어처리