코사인 유사도
고급코사인 유사도는 AI 문맥에서 자주 등장하는 개념입니다. 이 페이지는 고급 난이도로 코사인 유사도의 뜻과 쓰임을 빠르게 이해할 수 있도록 정리한 AI 용어사전 항목입니다.
코사인 유사도를 처음 보는 독자도 헷갈리지 않도록 정의와 맥락를 한 페이지에 묶었습니다. 아래 설명을 먼저 읽고, 이어서 연결된 개념과 글까지 보면 이해가 훨씬 빨라집니다.
코사인 유사도(Cosine Similarity)는 두 벡터 사이의 각도(코사인 값)를 이용해 유사도를 측정하는 수학적 방법입니다. 결과값은 -1(완전 반대)부터 1(완전 동일)까지이며, AI에서는 주로 임베딩 벡터 간 의미적 유사도 비교에 사용됩니다.
코사인 유사도의 핵심 장점은 벡터의 크기(길이)에 영향을 받지 않는다는 점입니다. 짧은 문장과 긴 문장을 비교할 때도 의미의 방향성만 비교하므로 공정한 결과를 냅니다. 시맨틱 검색, RAG, 추천 시스템, 문서 중복 감지 등 임베딩을 다루는 모든 곳에서 핵심 거리 함수로 사용됩니다.
예시로, '인공지능'과 'AI'의 임베딩 벡터 간 코사인 유사도는 0.95에 가깝고, '인공지능'과 '요리 레시피'는 0.2 이하일 것입니다. Pinecone, Qdrant 같은 벡터 DB는 내부적으로 코사인 유사도(또는 내적)를 사용해 가장 가까운 벡터를 빠르게 검색합니다. NumPy로는 np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))로 계산합니다.
두 사람이 같은 방향을 바라보고 있는지 각도로 판단하는 것입니다. 키(벡터 크기)가 달라도 같은 곳을 보면 유사도가 높습니다.
수학적으로 좀 더 풀어보면, 코사인 유사도는 두 벡터 A와 B의 내적(dot product)을 각각의 크기(norm)의 곱으로 나눈 값입니다. 두 벡터가 같은 방향을 가리키면 코사인 값은 1에 가까워지고, 수직으로 교차하면 0이 되며, 완전히 반대 방향이면 -1이 됩니다. AI의 텍스트 임베딩에서는 보통 0에서 1 사이의 값이 나오는데, 이는 임베딩 모델이 음수 방향을 잘 사용하지 않기 때문입니다.
코사인 유사도가 널리 사용되는 이유는 텍스트 길이에 강건하다는 특성 때문입니다. 예를 들어 '오늘 날씨가 맑다'와 '오늘은 하늘이 맑고 햇살이 화창한 날씨입니다'는 길이가 다르지만 의미는 비슷합니다. 단순히 단어 수나 글자 수를 비교하면 이 둘의 유사성을 제대로 파악하기 어렵습니다. 하지만 코사인 유사도는 벡터의 방향만 비교하므로 길이 차이를 무시하고 의미 유사성을 잘 포착합니다.
실제 AI 시스템에서 코사인 유사도가 활용되는 곳은 매우 다양합니다. RAG 시스템에서는 사용자 질문의 임베딩과 문서 데이터베이스 안의 청크들을 비교해 가장 관련성 높은 내용을 찾습니다. 추천 시스템에서는 사용자 행동 패턴을 벡터로 표현하고, 비슷한 패턴을 가진 다른 사용자나 아이템을 추천하는 데 사용합니다. 문서 중복 감지에서는 두 문서의 코사인 유사도가 0.95 이상이면 중복으로 판단하는 식으로 기준을 설정합니다.
코사인 유사도에도 한계가 있습니다. 벡터의 크기 정보를 완전히 무시하기 때문에, 단어 빈도나 문서 분량이 중요한 경우에는 적합하지 않을 수 있습니다. 또한 임베딩 모델의 품질에 크게 의존하므로, 잘못된 임베딩을 사용하면 코사인 유사도가 높아도 의미적으로 관계없는 문장이 유사하다고 판단될 수 있습니다. 이런 경우 유클리드 거리(Euclidean Distance)나 내적(Dot Product)을 대안으로 고려합니다.
코사인 유사도는 벡터 검색 데이터베이스의 핵심 연산으로, 수백만 개의 벡터 중에서 가장 유사한 것을 빠르게 찾는 ANN(Approximate Nearest Neighbor) 알고리즘과 결합해서 사용됩니다. Pinecone, Weaviate, Chroma, Qdrant 같은 벡터 데이터베이스들은 모두 코사인 유사도를 기본 거리 메트릭 중 하나로 지원합니다. AI 애플리케이션을 개발하거나 RAG 파이프라인을 구축할 때 이 개념을 이해하면 검색 품질을 최적화하는 데 큰 도움이 됩니다.
코사인 유사도를 실제로 설정할 때 임계값(threshold)을 어떻게 잡느냐가 시스템 품질을 좌우합니다. RAG 시스템에서 코사인 유사도 0.7 이상인 문서만 컨텍스트에 포함한다면, 너무 낮게 잡으면 관련 없는 정보가 들어오고 너무 높게 잡으면 유용한 정보가 누락됩니다. 적절한 임계값은 사용하는 임베딩 모델과 데이터 특성에 따라 다르므로, 실제 데이터로 평가해 가면서 조정하는 과정이 필요합니다. 일반적으로 도메인 특화 데이터는 높은 임계값이, 일반 지식 기반은 낮은 임계값이 더 나은 결과를 보입니다.
임베딩 모델 선택은 코사인 유사도 성능에 직접 영향을 줍니다. OpenAI의 text-embedding-3-large, Cohere의 embed-multilingual, 한국어 전용 모델 등 다양한 임베딩 모델이 있습니다. 한국어 문서를 다룰 때는 한국어 데이터로 학습된 모델이 더 정확한 코사인 유사도 값을 제공합니다. 영어 중심 임베딩 모델을 한국어에 그대로 쓰면 의미적으로 유사한 문장들의 코사인 유사도가 낮게 나오는 경우가 있습니다. 그래서 다국어 또는 한국어 특화 임베딩 모델을 선택하는 것이 한국어 기반 서비스에서는 중요한 결정 사항입니다.
코사인 유사도는 AI 분야 밖에서도 폭넓게 쓰입니다. 자연어 처리에서는 문서 분류, 감성 분석, 표절 감지에 사용됩니다. 정보 검색 시스템에서는 검색 쿼리와 문서의 유사도를 측정해 검색 순위를 결정합니다. 생물정보학에서는 유전자 발현 데이터의 패턴 유사도 분석에도 사용됩니다. AI와 머신러닝이 확산되면서 코사인 유사도는 데이터 과학의 기본 도구로 자리 잡았으며, 이를 이해하면 다양한 AI 시스템의 동작 원리를 더 깊이 파악할 수 있습니다.
