Gensim을 사용하여 문서 간 유사도 기반 검색 시스템 구현하기
많은 웹 사이트 및 문서들이 존재하는 현대 사회에서 문서 간 검색 시스템은 매우 중요합니다. 문서 간의 유사도를 기반으로 검색 시스템을 구현할 수 있다면 사용자가 원하는 정보를 더 효율적으로 찾을 수 있습니다. 이번 글에서는 Python에서 자연어 처리 라이브러리인 Gensim을 활용하여 문서 간 유사도 기반 검색 시스템을 구현하는 방법을 알아보겠습니다.
Gensim 소개
Gensim은 Python에서 자연어 처리 작업을 위한 라이브러리입니다. 이 라이브러리는 Word2Vec, Doc2Vec 등의 모델을 제공하며, 문서 간의 유사도 측정을 위해 사용됩니다. Gensim은 많은 언어와 형식으로 작성된 문서들을 처리할 수 있으며, 다양한 응용 분야에서 사용될 수 있습니다.
문서 간 유사도 기반 검색 시스템 구현 방법
- 문서 벡터화: Gensim에서는 TfidfVectorizer를 사용하여 문서를 벡터화할 수 있습니다. 이를 통해 각 문서를 고차원 벡터로 표현할 수 있으며, 이 벡터들은 문서 간의 유사도 측정에 사용됩니다.
from gensim.models import TfidfVectorizer
# 문서 데이터
documents = [
"Gensim은 자연어 처리를 위한 Python 라이브러리입니다.",
"문서 간 유사도를 기반으로 검색 시스템을 구현해보세요.",
"자연어 처리를 통해 문서의 의미를 파악할 수 있습니다."
]
# TfidfVectorizer로 문서 벡터화
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform(documents)
- 유사도 계산: 벡터화된 문서들을 사용하여 문서 간의 유사도를 계산할 수 있습니다. Gensim의 similarities 모듈을 활용하여 유사도를 계산할 수 있습니다.
from gensim import similarities
# 유사도 매트릭스 계산
index = similarities.SparseMatrixSimilarity(vectors, num_features=len(vectorizer.get_feature_names()))
similarity_matrix = index[vectors]
# 검색어 입력
query = "유사도 기반 검색 시스템"
# 검색어 벡터화
query_vector = vectorizer.transform([query])
# 유사도 계산
sims = index[query_vector]
sorted_sims = sorted(enumerate(sims), key=lambda item: -item[1])
- 검색 결과 출력: 검색 결과를 활용하여 사용자에게 적절한 문서를 제공하는 것이 중요합니다. 유사도가 높은 문서 순으로 검색 결과를 출력하면 됩니다.
for doc_index, similarity in sorted_sims:
print(f"문서 {doc_index + 1}: 유사도 {similarity:.4f}")
위의 코드 예시에서 검색어 “유사도 기반 검색 시스템”을 입력했을 때, 각 문서의 유사도가 출력됩니다.
이렇게 Gensim을 활용하여 문서 간의 유사도 기반 검색 시스템을 구현할 수 있습니다. Gensim은 다양한 자연어 처리 작업에 유용하게 사용될 수 있는 강력한 도구입니다.
관련 자료:
- Gensim 공식 문서: https://radimrehurek.com/gensim/
- scikit-learn 문서 벡터화: https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html
- Gensim 유사도 계산: https://radimrehurek.com/gensim/similarities/docsim.html
#Gensim #검색시스템