코사인 유사도는 두 벡터 간의 각도를 기반으로 두 값이 얼마나 비슷한지 유사도를 측정하는 방법입니다. 값의 범위는 -1 ≤ cosine similarity ≤ 1이며, 값이 1에 가까울수록 두 벡터가 유사하고, 0이면 서로 독립적이며, -1에 가까울수록 반대 방향을 의미합니다.
수식:
TF-IDF(Term Frequency-Inverse Document Frequency)를 이용하여 단어 가중치를 반영한 후, 벡터 간의 코사인 유사도를 계산합니다.
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
# 비교할 문장 2개
text1 = "Natural Language Processing is interesting."
text2 = "I love learning about NLP."
# TF-IDF 벡터화
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform([text1, text2])
# 코사인 유사도 계산
cos_sim = cosine_similarity(tfidf_matrix[0:1], tfidf_matrix[1:2])
print("코사인 유사도:", cos_sim[0][0]) ✅ TF-IDF 방식의 장점: 단순한 단어 빈도가 아니라, 문서 전체에서 상대적인 중요도를 반영하여 유사도를 측정.
보다 정교한 의미 기반 유사도를 측정하려면 Word2Vec, GloVe, BERT 같은 사전 훈련된 모델을 사용하여 단어를 벡터화한 후 코사인 유사도를 계산할 수 있습니다.
import gensim.downloader as api
from numpy import dot
from numpy.linalg import norm
# Word2Vec 모델 로드 (Google News Pretrained Model)
model = api.load("word2vec-google-news-300")
# 단어 벡터 변환
vec1 = model["king"]
vec2 = model["queen"]
# 코사인 유사도 계산
cos_sim = dot(vec1, vec2) / (norm(vec1) * norm(vec2))
print("Word2Vec 코사인 유사도:", cos_sim) ✅ Word2Vec 방식의 장점: 단어 간의 의미적 유사도를 학습한 사전 훈련된 모델을 사용.
단순한 단어 빈도를 기반으로 문서 유사도를 계산할 수도 있습니다.
from sklearn.feature_extraction.text import CountVectorizer
# 문서 리스트
docs = ["I love NLP and deep learning",
"NLP is amazing and deep learning is powerful",
"Artificial Intelligence is the future of technology"]
# 단어 빈도 벡터화
vectorizer = CountVectorizer()
count_matrix = vectorizer.fit_transform(docs)
# 코사인 유사도 계산
cos_sim = cosine_similarity(count_matrix)
print("문서 간 코사인 유사도:\n", cos_sim) ✅ CountVectorizer 방식의 장점: 단어의 빈도를 기반으로 비교하여 단순한 문서 유사도를 빠르게 측정 가능.
| 방법 | 특징 | 장점 | 단점 |
|---|---|---|---|
| TF-IDF | 단어의 중요도를 반영하여 벡터화 | 가볍고 효과적 | 문맥 정보를 반영하지 못함 |
| Word2Vec/GloVe | 단어의 의미를 벡터로 변환 | 단어 간 의미적 관계 반영 가능 | 사전 훈련된 모델 필요 |
| BERT (Transformer 기반) | 문맥을 고려한 임베딩 제공 | 문장 수준에서 가장 정밀 | 학습된 모델이 무거움 |
| CountVectorizer | 단순한 단어 빈도 기반 비교 | 빠르고 직관적 | 의미적 관계를 반영하지 못함 |
어떤 방식이 필요하든, 코사인 유사도를 적용하면 문장, 단어, 문서 간의 유사도를 효과적으로 측정할 수 있습니다! 🚀
AI 감시 소프트웨어가 재택근무 시대를 끝내고 있다. 직원의 키스트로크·화면·표정까지 추적하는 기술의 실체와, 한국 직장인이 알아야…
정보보안기사 실기는 개념을 아는 것보다 로그를 읽고, 규칙을 쓰고, 계산하는 힘에서 점수가 갈립니다. 이번 글은…
호르무즈 해협 뉴스는 이제 '또 공격이 있었다'보다 '얼마나 늘었나'를 봐야 합니다. 이투데이가 FT와 영국해사무역기구(UKMTO) 등을…
이번 추석 연휴, 은행들은 쉬지 못했습니다. 연휴 기간 금융권에서 대규모 개인정보 유출 사고가 터졌기 때문입니다.…
"집 못 팔게 막으면 값이 내려가겠지." 서울 전역이 토지거래허가구역으로 묶이던 1년 전, 이런 기대가 있었습니다.…
다섯 거래일 연속 밀린 코스피가 오늘 아침 크게 반등했습니다. 오전 9시 12분 기준 6,165.02로 전…