코사인 유사도 (Cosine Similarity)

컴퓨터과학·AI
한 줄 정의: 두 벡터가 가리키는 방향이 얼마나 비슷한지를 각도로 측정해서, 두 데이터가 서로 얼마나 유사한지를 나타내는 방법입니다.

쉽게 풀면

두 사람이 나침반을 들고 각자 방향을 가리킨다고 해봅시다. 두 사람이 얼마나 멀리 떨어져 서 있는지는 상관없이, 가리키는 "방향"이 비슷하면 둘은 비슷한 생각을 하고 있다고 볼 수 있습니다. 코사인 유사도는 이와 같은 방식으로, 문서나 단어를 숫자들의 목록(벡터)으로 바꾼 뒤 두 벡터가 가리키는 방향의 각도를 비교합니다. 각도가 0도에 가까우면(같은 방향) 유사도는 1에 가까워지고, 90도로 완전히 다르면 0에 가까워집니다. 글의 길이 차이에 영향을 받지 않고 "내용의 방향성"만 비교할 수 있어서 문서 간 유사도 비교에 널리 쓰입니다.

왜 중요한가

코사인 유사도는 계산이 간단하면서도 벡터의 크기 차이에 영향을 받지 않아, 자연어처리·정보검색·추천시스템 등 텍스트나 임베딩을 다루는 거의 모든 인공지능 분야에서 표준적인 유사도 척도로 쓰입니다. 검색엔진이 질의와 가장 관련 있는 문서를 찾거나, 추천시스템이 비슷한 취향의 사용자를 찾는 등 실무에서도 핵심적인 역할을 합니다.

논문에서는 이렇게 쓰입니다

"두 문서 임베딩 벡터 간 코사인 유사도가 0.85로 나타나 두 텍스트가 의미적으로 유사함을 확인하였다."

이 문장은 두 글을 벡터로 변환한 뒤 방향을 비교한 결과, 두 글의 의미가 상당히 비슷하다는 것을 수치로 보여준 것입니다.

"사용자-아이템 평점 벡터 간 코사인 유사도를 기반으로 취향이 유사한 이웃 사용자를 선정하여 협업 필터링 추천을 수행하였다."

추천시스템 연구에서는 사용자나 상품을 벡터로 표현한 뒤 코사인 유사도로 서로 얼마나 취향이 비슷한지를 계산해 추천 후보를 좁힌다.

"이미지 검색 과제에서 질의 이미지와 데이터베이스 이미지의 특징 벡터 간 코사인 유사도를 계산하여 상위 k개의 유사 이미지를 검색하였다."

컴퓨터비전 분야에서도 이미지를 특징 벡터로 변환한 뒤 코사인 유사도를 이용해 비슷한 이미지를 찾는 방식이 흔히 쓰인다.

조금 더 깊게 보면

코사인 유사도는 두 벡터의 내적을 각 벡터의 크기(노름)로 나눈 값으로, 결과값이 1에 가까울수록 방향이 같고 -1에 가까울수록 정반대 방향임을 뜻하며 0은 서로 직교함을 의미합니다. 워드투벡(Word2Vec)이나 BERT 같은 임베딩 모델이 널리 쓰이면서 코사인 유사도는 단어·문장·이미지 등 다양한 데이터의 의미적 유사성을 비교하는 표준 도구가 되었으며, 벡터 차원이 매우 높아지는 경우에도 비교적 안정적으로 작동한다는 점이 실무에서 선호되는 이유 중 하나입니다.

주의할 점

코사인 유사도는 벡터의 "방향"만 비교하므로, 벡터의 크기(길이) 차이는 반영하지 않습니다. 그래서 데이터를 임베딩으로 바꾸어 비교할 때 흔히 쓰이지만, 크기 자체가 중요한 정보인 경우에는 유클리드 거리 같은 다른 척도가 더 적합할 수 있습니다.

관련 용어