코사인 유사성을 계산하려면 내적 공간에서 두 개의 0이 아닌 벡터 사이의 각도(세타)의 코사인을 측정해야 합니다. 이 측정은 코사인 유사성 점수를 생성합니다. 코사인 유사성 값의 범위는 -1에서 1까지입니다.
화살표를 비교하는 것과 같다고 생각하면 됩니다. 같은 방향을 가리키고 있다면 매우 유사하다는 것입니다. 직각인 화살표는 서로 관련이 없으며, 반대 방향을 가리키는 화살표는 서로 다른 화살표입니다.
이러한 각도 접근 방식은 많은 머신 러닝(ML), 자연어 처리(NLP) 및 인공 지능(AI) 시스템의 기초입니다. 이러한 기술은 데이터의 벡터 기반 표현에 의존하며, 이는 데이터를 숫자 형태로 변환하여 그 의미와 다른 데이터와의 유사성을 포착한다는 것을 의미합니다.
예를 들어 챗봇은 단어 임베딩 기술을 사용하여 텍스트를 벡터 형식으로 변환하고, 딥 러닝 모델을 사용하여 의도를 이해하고 유사성 검색 알고리즘을 사용하여 데이터베이스에서 가장 관련성이 높은 응답을 검색할 수 있습니다. 코사인 유사성은 이러한 각 단계를 가능하게 합니다.
업계 뉴스레터
Think 뉴스레터를 통해 AI, 자동화, 데이터 등 가장 중요하고 흥미로운 업계 동향에 대한 최신 소식을 받아보세요. IBM 개인정보 보호정책을 참조하세요.
구독한 뉴스레터는 영어로 제공됩니다. 모든 뉴스레터에는 구독 취소 링크가 있습니다. 여기에서 구독을 관리하거나 취소할 수 있습니다. 자세한 정보는 IBM 개인정보 보호정책을 참조하세요.
문장의 다음 단어를 예측하든, 근처의 식사할 장소를 제안하든, 디지털 라이프를 형성하는 많은 시스템은 유사성 측정에 의존합니다. 추천 엔진 및 대규모 언어 모델(LLM)과 같은 기술은 코사인 유사성을 사용하여 어떤 콘텐츠가 가장 관련성이 높고 어떤 응답이 가장 "의미가 있는지"를 식별합니다.
이러한 의사 결정은 고차원 또는 희소 데이터 세트의 데이터 요소 간의 관계를 분석하여 이루어집니다. 고전적인 텍스트 분석에서는 문서를 종종 숫자 표현으로 변환하는데, 이는 Bag of words(BoW)의 고급 형태인 tf-idf(단어 빈도-역문서 빈도)와 같은 기법을 사용합니다. BoW는 문서에 용어가 얼마나 자주 나타나는지 점수를 매기는 반면, tf-idf는 더 큰 데이터 세트에서 단어가 얼마나 흔하거나 드문지에 따라 해당 점수를 조정합니다.
고급 시스템은 신경망을 사용하여 다양한 유형의 데이터를 숫자 배열로 표현하는 데이터 포인트의 숫자 표현인 벡터 임베딩을 생성합니다. 예를 들어, "의사"와 "간호사"와 같은 단어는 벡터 공간에서 서로 가까이 나타날 수 있으며, 이는 모델이 이들을 연관된 것으로 간주한다는 것을 의미합니다. 이러한 임베딩은 대규모 비교를 더 빠르고 효율적으로 수행하기 위해 주성분 분석(PCA)과 같은 추가 단계를 거치는 경우가 많습니다.
두 접근 방식 모두에서 코사인 유사성은 결과 벡터들이 얼마나 밀접하게 정렬되어 있는지를 측정함으로써, 시스템이 복잡한 데이터 세트 전반에서 패턴과 관계를 식별하는 데 도움을 줍니다. NLP, AI 및 데이터 과학에서 코사인 유사성은 다음과 같은 측면에서 중심적인 역할을 합니다.
검색 엔진은 코사인 유사성을 사용하여 사용자 쿼리를 관련 문서와 일치시켜 정밀도와 순위 품질을 모두 개선합니다.
신경망과 LLM은 코사인 유사성을 사용하여 벡터 임베딩을 비교하여 입력 간의 의미론적 근접성을 평가합니다.
추천 시스템은 유사성 검색 기술을 적용하여 사용자 행동과 선호도에 맞는 제품, 미디어 또는 콘텐츠를 추천합니다.
코사인 유사성은 주제가 비슷한 문서를 그룹화하여 주제 모델링을 지원합니다. 이러한 주제 분포는 일반적으로 잠재 디리클레 할당(LDA)과 같은 방법을 사용하여 생성됩니다.
코사인 유사성은 텍스트 사용 사례 외에도 이미지 인식, 사기 탐지 및 고객 세분화와 같이 다차원 패턴을 빠르고 정확하게 비교해야 하는 모든 시나리오를 지원합니다.
핵심적으로 코사인 유사성은 두 벡터 사이의 각도의 코사인을 계산하여 두 벡터가 얼마나 정렬되어 있는지 측정합니다.
문서를 비교하는 것과 같은 실제 응용 사례에서는 데이터가 다차원 공간의 벡터로 표현됩니다. 각 차원은 특정 단어, 속성 또는 작업을 나타낼 수 있으며 해당 차원의 값은 해당 항목이 얼마나 눈에 띄거나 중요한지를 반영합니다.
코사인 유사성을 계산하려면 다음을 수행하세요.
공식은 다음과 같이 나타낼 수 있습니다.
코사인 유사성 = (A · B) / (||A|| × ||B||)
설명:
결과 점수는 -1에서 1 사이입니다.
좀 더 설명하자면, "king"과 "queen"이라는 두 단어를 떠올려 보세요.
둘 다 비슷한 맥락에서 사용됩니다. LLM에서 처리될 때, 각 단어는 수백만 개의 문장에서의 사용을 기반으로 의미를 포착하는 벡터 임베딩으로 변환됩니다. "king"과 "queen"은 "royal", "throne", "monarch"와 같은 단어 주변에 자주 등장하기 때문에, 두 단어의 임베딩은 거의 같은 방향을 가리킵니다.
이제 세 번째 단어 "apple"을 생각해 보겠습니다. "apple"은 일부 같은 문서에도 나타날 수 있지만, 주로 "fruit", "orchard", "crisp"와 같은 단어와 더 많이 연관됩니다. 이 벡터는 거의 반대 방향을 가리켜 코사인 유사성이 낮아집니다. 그래프에 표시하면 "king"과 "queen"의 화살표는 거의 나란히 이동하는 반면, "apple"의 화살표는 뚜렷한 각도로 벗어나게 됩니다.
성능을 최적화하고 관련 항목을 더 빠르게 검색하기 위해, 많은 조직은 이러한 임베딩을 벡터 데이터베이스에 저장합니다. 이는 고차원 벡터를 인덱싱해 검색을 개선하고 가장 유사한 결과를 반환하도록 설계된 툴입니다.
코사인 유사성은 더 넓은 유사성 측정 지표 에코시스템 중 하나일 뿐입니다. 각 지표는 서로 다른 방식으로 유사성을 평가하도록 설계되었으며, 다차원 공간에서 특정 유형의 데이터에 더 적합합니다. 예를 들면 다음과 같습니다.
자카드 유사성은 두 데이터 세트의 교집합 크기를 합집합 크기로 나누어 겹침 정도를 측정합니다. 이는 태그, 클릭, 제품 조회와 같은 범주형 또는 이진 데이터가 포함된 데이터 세트에 흔히 적용되며, 추천 시스템에서 특히 유용합니다. 자카드는 존재 여부에만 집중하며, 빈도나 크기는 고려하지 않습니다.
벡터 A와 B의 내적은 두 벡터가 얼마나 같은 방향을 가리키는지를 반영하지만, 크기를 정규화하지는 않습니다. 이 요소로 인해 확장에 민감합니다. 큰 값을 가진 벡터는 방향이 다르더라도 더 유사하게 나타날 수 있습니다.
코사인 유사성은 벡터의 내적을 벡터 크기의 곱으로 나누어(코사인 유사성 공식) 이 지표를 개선합니다. 따라서 코사인 유사성은 길이가 다른 0이 아닌 벡터를 비교할 때, 특히 고차원 데이터 세트에서 더 안정적입니다.
실제로 조직은 데이터 세트의 구조와 피하고자 하는 비유사성의 유형에 따라 코사인 유사성 측정과 다른 지표를 함께 사용하는 경우가 많습니다.
예를 들어, NLP나 LLM 애플리케이션의 유사성 검색은 종종 딥 러닝 알고리즘으로 학습된 임베딩 모델과 코사인 거리를 결합합니다. 코사인 유사성 계산은 오픈 소스 툴인 Scikit-learn, TensorFlow, PyTorch 등에 통합되어 있어, 데이터 과학자가 대규모 데이터 세트에서 코사인 유사성을 더 쉽게 계산할 수 있습니다.
다양한 시스템에서의 역할을 고려할 때, 코사인 유사성은 기존 유사성 지표에 비해 여러 장점을 제공합니다.
장점에도 불구하고 코사인 유사성에는 다음과 같은 한계가 있습니다.
코사인 유사성에서 최대한의 가치를 얻기 위해 조직은 다음을 고려할 수 있습니다.
조직은 계산 전에 벡터를 정규화하여 스케일 일관성과 유효한 결과를 보장할 수 있으며, 특히 고차원 입력을 사용할 때 유용합니다.
기업은 데이터 세트를 정리하여 0 벡터를 제거하거나 표시해야 하며, 그렇지 않으면 코사인 유사성 계산 중 “0으로 나누기” 오류가 발생합니다.
여러 차원의 유사성이 필요한 경우, 조직은 코사인 유사성을 자카드 유사성, 유클리드 거리와 같은 추가 지표와 결합할 수 있습니다.
배포 전에 기업은 코사인 유사성이 실제 조건을 반영한 환경에서 잘 작동하는지 평가해야 하며, 특히 애플리케이션 프로그래밍 인터페이스(API)와 같은 실시간 시스템에서 그렇습니다.
조직은 성숙한 오픈 소스 라이브러리를 활용해 대규모 코사인 유사성 계산을 효율적으로 수행할 수 있습니다. 예를 들어 Scikit-learn은 Python 모듈 경로 sklearn.metrics.pairwise를 통해 바로 사용할 수 있는 코사인 유사성 함수를 제공합니다.
또는 NumPy를 사용해 공식을 Python 코드로 직접 구현할 수도 있습니다.
“cosine_similarity = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))”
화살표와 마찬가지로 코사인 유사성은 조직이 방향을 맞추는 데 도움을 줍니다. 검색 결과를 매칭하거나 데이터 기반 의사 결정을 지원하는 경우 등에서, 코사인 유사성은 강력한 인사이트를 제공하고 다양한 사용 사례에서 경험을 개인화하는 데 도움을 줍니다.
기업이 성공하려면 데이터를 활용하여 고객 충성도를 높이고 비즈니스 프로세스를 자동화하며 AI 기반 솔루션으로 혁신을 이루어야 합니다.
IBM Consulting을 통해 엔터프라이즈 데이터의 가치를 실현하여 비즈니스 이점을 제공하는 인사이트 중심의 조직을 구축하세요.
더 나은 의사 결정을 위한 AI 기반 인사이트인 Cognos Analytics 12.0을 소개합니다.