코사인 유사도는 두 벡터 간의 각도를 기반으로 두 값이 얼마나 비슷한지 유사도를 측정하는 방법입니다. 값의 범위는 -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 | 단순한 단어 빈도 기반 비교 | 빠르고 직관적 | 의미적 관계를 반영하지 못함 |
어떤 방식이 필요하든, 코사인 유사도를 적용하면 문장, 단어, 문서 간의 유사도를 효과적으로 측정할 수 있습니다! 🚀
윈도우 운영체제의 노트북에서는 iPhone 유선 테더링이 잘 안되는 경우가 많습니다. 보통 iPhone의 드라이버가 설치가 안되있어서인…
안녕하세요, 혹시 이런 생각해 본 적 없으신가요? "내가 투자한 회사는 누가 감시하고, 어떻게 운영될까?" 오늘은…
1. Gemini CLI란 무엇인가요? Gemini CLI는 터미널 환경에서 직접 Gemini 모델과 상호작용할 수 있도록 만들어진…
과적합은 머신러닝에서 학습용데이터를 과하게 학습하여, 실제데이터를 예측하지 못하는 현상을 말합니다. 인공지능(AI)의 학습 방법은 우리가 시험공부를…