[파이썬] 문서 간의 유사도 개념과 예제

문서 간의 유사도를 계산하는 방법 중 하나는 코사인 유사도(Cosine Similarity)입니다. 코사인 유사도는 문서를 벡터로 표현하고 벡터 간의 각도를 측정하여 유사도를 계산하는 방법입니다. Gensim 라이브러리를 사용하여 코사인 유사도를 계산하는 예제를 보여드리겠습니다.

from gensim.models import TfidfModel
from gensim.corpora import Dictionary
from gensim.matutils import corpus2dense
from sklearn.metrics.pairwise import cosine_similarity

## 텍스트 데이터 준비
corpus = [
    "I enjoy reading books",
    "Natural language processing is fun",
    "Word embeddings capture semantic meaning"
]

## 간단한 전처리와 토큰화
tokenized_corpus = [text.split() for text in corpus]

## 단어 사전 생성
dictionary = Dictionary(tokenized_corpus)

## 문서-단어 매트릭스 생성
corpus_bow = [dictionary.doc2bow(tokens) for tokens in tokenized_corpus]

## TF-IDF 변환
tfidf_model = TfidfModel(corpus_bow)
corpus_tfidf = tfidf_model[corpus_bow]

## TF-IDF 벡터를 밀집 행렬로 변환
dense_matrix = corpus2dense(corpus_tfidf, num_terms=len(dictionary)).T

## 코사인 유사도 계산
cosine_similarities = cosine_similarity(dense_matrix)

## 문서 간 유사도 출력
for i in range(len(corpus)):
    for j in range(i + 1, len(corpus)):
        print(f"Similarity between documents {i+1} and {j+1}: {cosine_similarities[i][j]:.4f}")` 

위의 코드에서는 Gensim을 사용하여 TF-IDF 변환을 수행한 후, TF-IDF 벡터를 밀집 행렬로 변환합니다. 그 다음 sklearncosine_similarity 함수를 사용하여 문서 간의 코사인 유사도를 계산합니다.

이 예제를 통해 각 문서 간의 유사도를 측정하는 방법을 확인할 수 있습니다. 코사인 유사도는 문서의 유사도를 0과 1 사이의 값으로 나타내며, 1에 가까울수록 유사도가 높다는 것을 의미합니다.