02 AI를 읽는 수학·통계·9 min read

AI는 무엇을 보고 ‘비슷하다’고 할까?거리·유사도·내적의 차이

AI가 비슷한 문서나 상품을 찾을 때는 어떤 기준으로 비교할까요? 거리는 얼마나 떨어졌는지 측정하고, 유사도는 정한 기준에서 얼마나 비슷한지 점수로 나타냅니다. 내적은 같은 위치의 값을 곱해 더하는 계산으로, 방향과 크기에 함께 영향을 받습니다. 같은 벡터도 기준에 따라 순위가 달라지는 예시와 점수 해석 시 확인할 조건을 설명합니다.

어두운 서재의 투명한 좌표 장치에서 여러 화살표의 끝점 간격과 방향 차이를 황동 측정 도구로 살펴보는 편집형 이미지
가깝다는 것과 같은 방향이라는 것은 다릅니다. AI가 비슷함을 계산하는 기준에 따라 결과의 순위도 달라질 수 있습니다. · DECHIVE

안녕하세요, DECHIVE입니다.

검색창에 질문을 넣으면 관련 문서가 나오고, 쇼핑몰에서는 내가 본 상품과 비슷한 상품을 추천합니다. AI가 ‘비슷한 것’을 찾아주는 장면입니다.

그런데 여기서 한 가지 궁금해집니다.

“무엇이 얼마나 같아야 비슷하다고 하는 걸까?”

가격이 비슷한 상품과 디자인이 비슷한 상품은 다릅니다. 문서도 단어가 많이 겹치는 것과 질문에 필요한 내용을 담고 있는 것은 다를 수 있습니다.

AI가 숫자로 표현한 데이터를 비교할 때도 기준이 필요합니다. 거리, 유사도, 내적은 그 기준을 이해하는 데 자주 등장하는 개념입니다.

한 문장으로 먼저 정리하면

거리는 두 대상이 얼마나 떨어졌는지 측정하는 값이고, 유사도는 정한 기준에서 얼마나 비슷한지 나타내는 점수입니다. 내적은 두 벡터의 같은 위치 값을 곱해 더하는 계산이며, 유사도 점수를 만드는 데 사용할 수 있습니다.

세 가지가 완전히 분리된 기능은 아닙니다. 내적을 이용해 유사도를 계산할 수 있고, 거리를 유사도 형태의 점수로 바꿀 수도 있습니다.[1]

다만 이름만 보고 모두 같은 의미로 해석해서는 안 됩니다. 어떤 계산을 했는지에 따라 작은 값이 좋은지, 큰 값이 좋은지, 벡터의 크기가 영향을 주는지가 달라집니다.

먼저 비교할 대상을 같은 방식으로 표현해야 합니다

벡터는 순서 있는 숫자 묶음으로 생각할 수 있습니다. 예를 들어 어떤 상품을 [가격, 무게]처럼 표현할 수 있습니다.

이때 비교하는 두 벡터의 첫 번째 자리는 같은 의미여야 합니다. 한쪽은 가격인데 다른 쪽은 무게라면 그대로 비교한 결과를 해석하기 어렵습니다.

문서와 이미지에서도 비슷합니다. 모델이 만든 숫자 표현인 임베딩을 비교한다면, 서로 비교하도록 설계된 표현인지 확인해야 합니다. 길이가 같다는 사실만으로 같은 좌표 체계를 사용한다는 뜻은 아닙니다.

계산식을 고르기 전에 무엇을 어떤 숫자로 표현했는가부터 확인해야 하는 이유입니다.

거리: 얼마나 떨어져 있는지 봅니다

지도에서 두 지점 사이의 간격을 떠올리면 됩니다. 일반적인 거리 계산에서는 값이 작을수록 가깝습니다.

대표적인 유클리드 거리는 두 점 사이의 직선거리를 구합니다. 각 좌표의 차이를 제곱해 더한 뒤 제곱근을 구하는 방식입니다.[2]

2차원 예시에서 기준점 Q가 [1, 1], 후보 A가 [1, 2]라고 하겠습니다. 첫 번째 좌표는 같고 두 번째 좌표만 1만큼 다르므로 거리는 1입니다.

반면 후보 B가 [3, 3]이라면 두 좌표가 각각 2씩 다릅니다. 거리는 √(2² + 2²), 약 2.828입니다.

따라서 이 기준에서는 A가 Q에 더 가깝습니다.

모든 거리가 직선거리인 것은 아닙니다. 좌표별 차이의 절댓값을 더하는 맨해튼 거리처럼 다른 계산법도 있습니다. 어떤 차이를 얼마나 중요하게 볼 것인지에 따라 적절한 거리 정의가 달라집니다.

유사도: 무엇을 비슷하다고 볼지 정합니다

유사도는 보통 값이 클수록 더 비슷하다고 해석하도록 정한 점수입니다. 하지만 유사도라는 이름 하나에 단일한 공식이 정해져 있는 것은 아닙니다.

단어의 겹침을 볼 수도 있고, 벡터의 방향을 볼 수도 있습니다. 어떤 모델이 학습한 관계를 점수로 만들 수도 있습니다.

예를 들어 두 사람이 책과 영화를 얼마나 좋아하는지 [책, 영화]라는 가상의 숫자 두 개로 표현한다고 하겠습니다.

[1, 1]과 [3, 3]은 숫자의 크기는 다르지만 두 값의 비율은 같습니다. 벡터를 원점에서 출발하는 화살표로 그리면 같은 방향을 향합니다.

이런 방향의 유사성을 측정하는 대표적인 방법이 코사인 유사도입니다. 0이 아닌 두 실수 벡터에서 길이의 영향을 나누어 제거하고 방향을 비교합니다.[3]

코사인 유사도의 자세한 원리와 사용법은 다음 주제에서 다룹니다. 여기서는 끝점이 가깝다는 것과 방향이 비슷하다는 것이 다르다는 점을 먼저 기억하면 됩니다.

내적: 같은 자리끼리 곱한 뒤 더합니다

내적은 계산 방법부터 보면 어렵지 않습니다. 이 글에서는 실수 좌표를 가진 벡터의 표준 내적을 설명합니다.

[1, 1] · [1, 2] = 1×1 + 1×2 = 3

같은 위치의 숫자를 곱한 다음 모두 더합니다. 결과는 벡터가 아니라 숫자 하나입니다.[4]

후보를 [3, 3]으로 바꾸면 다음과 같습니다.

[1, 1] · [3, 3] = 1×3 + 1×3 = 6

내적을 큰 값이 우선인 비교 점수로 사용한다면, 두 후보 중 B가 앞에 옵니다.

기하학적으로 표준 내적은 두 벡터의 길이의 곱과 사이각의 코사인으로 나타낼 수 있습니다.[5] 따라서 방향만 비교하는 값은 아닙니다. 벡터의 크기도 영향을 줍니다.

이 때문에 “내적이 더 크니 방향이 더 비슷하다”라고 바로 단정하면 안 됩니다. 방향이 같아도 길이가 달라지면 내적이 달라질 수 있습니다.

같은 데이터도 비교 기준에 따라 순위가 달라집니다

기준 Q와 두 후보를 다시 모아보겠습니다.

  • 기준 Q: [1, 1]
  • 후보 A: [1, 2]
  • 후보 B: [3, 3]

이 값은 원리를 설명하기 위한 DECHIVE의 가상 예시입니다. 특정 문서나 상품의 실제 임베딩이 아닙니다.

  • 유클리드 거리 — 작을수록 가까움: Q와 A 1.000 · Q와 B 2.828 · 이 기준에서 우선하는 후보 A
  • 내적 — 큰 점수를 우선한다고 정할 때: Q와 A 3 · Q와 B 6 · 이 기준에서 우선하는 후보 B
  • 코사인 유사도 — 클수록 방향이 비슷함: Q와 A 0.949 · Q와 B 1.000 · 이 기준에서 우선하는 후보 B

소수는 셋째 자리까지 반올림한 값입니다.

A는 Q의 끝점에 더 가깝습니다. B는 Q와 정확히 같은 방향이고, 길이는 더 깁니다.

두 결과가 다르다고 어느 한쪽의 계산이 틀린 것은 아닙니다. 서로 다른 성질을 비교했기 때문에 순위가 달라진 것입니다.

기준 벡터 Q가 1,1이고 후보 A가 1,2, 후보 B가 3,3일 때의 좌표와 유클리드 거리·내적·코사인 유사도 결과를 비교하는 도식
Q에 더 가까운 후보는 A이지만, 내적과 코사인 유사도가 더 큰 후보는 B입니다. DECHIVE의 가상 2차원 벡터 예시이며 소수는 셋째 자리까지 반올림했습니다. · DECHIVE

벡터의 길이를 맞추면 관계가 달라집니다

0이 아닌 벡터를 자기 길이로 나누어 길이를 1로 만드는 작업을 L2 정규화라고 합니다. 방향은 유지하면서 길이를 맞추는 것입니다.

두 벡터를 모두 이렇게 정규화하면 표준 내적과 코사인 유사도가 같아집니다.[3]

또한 단위 길이인 두 벡터 사이에서는 다음 관계가 성립합니다.

유클리드 거리의 제곱 = 2 − 2 × 코사인 유사도

따라서 두 벡터 모두 길이가 1인 조건에서는 코사인 유사도가 클수록 유클리드 거리가 작아집니다. 이 관계는 앞서 설명한 정의에서 얻을 수 있는 수학적 결과입니다.

반대로 벡터의 길이를 그대로 둔 상황에서, 거리·내적·코사인 유사도가 언제나 같은 순위를 만든다고 생각하면 안 됩니다.

정규화가 무조건 더 좋은 것도 아닙니다. 벡터의 크기에 필요한 정보가 담겨 있다면 이를 제거할지 판단해야 합니다. 사용하는 모델과 비교 방식이 기대하는 조건을 따라야 합니다.

숫자의 단위도 결과에 영향을 줍니다

가격과 평점을 한 벡터에 넣는다고 생각해 보겠습니다. 가격은 수만 단위인데 평점은 1~5 사이일 수 있습니다.

이런 값을 그대로 거리 계산에 넣으면, 가격의 숫자 차이가 평점의 차이보다 훨씬 크게 작용할 수 있습니다. 원을 천 원 단위로 바꾸는 것만으로도 두 특징이 계산에 기여하는 비율이 달라집니다.

scikit-learn의 공식 예제도 특징별 숫자 범위가 다르면 거리 기반 이웃 관계가 달라질 수 있음을 보여줍니다.[6]

따라서 특징별 스케일 조정이나 가중치가 필요할 수 있습니다. 다만 모든 값을 똑같이 맞추는 것이 정답은 아닙니다. 무엇을 더 중요하게 비교할 것인지에 맞춰 결정해야 합니다.

여기서 특징별 스케일 조정과 벡터 전체의 길이를 1로 맞추는 L2 정규화는 구분해야 합니다. 전자는 각 좌표의 척도를, 후자는 한 벡터의 길이를 다루는 서로 다른 작업입니다.

높은 유사도가 사실의 일치까지 보장할까요?

그렇지 않습니다. 비교 점수는 정한 표현과 계산법에서의 관계를 나타냅니다.

예를 들어 환불 규정을 찾았는데, 현재 규정과 과거 규정 모두 질문과 비슷한 주제를 다룰 수 있습니다. 주제가 가깝다는 이유만으로 어느 규정이 지금 적용되는지까지 결정할 수는 없습니다.

따라서 검색 결과의 유사도가 높아도 날짜와 적용 대상, 예외 조건을 원문에서 확인해야 합니다. 서로 반대되는 문장도 주제와 단어가 겹칠 수 있으므로, 내용이 같은 주장인지도 별도로 봐야 합니다.

또한 유사도 0.9가 ‘90% 확률로 정답’이라는 뜻은 아닙니다. 그 값이 확률로 해석되도록 별도의 근거가 마련되어 있지 않다면, 비교 점수를 정답 확률로 읽으면 안 됩니다.

점수를 볼 때 무엇을 확인하면 될까요?

  1. 무엇을 비교했나요? 원래 특징값인지, 학습된 임베딩인지 확인합니다.
  2. 어떤 계산을 사용했나요? 거리인지 내적인지, 특정 유사도인지 봅니다.
  3. 어느 방향이 좋은가요? 값이 작아야 가까운지, 커야 우선하는지 확인합니다.
  4. 어떤 전처리를 했나요? 축의 순서, 특징 단위, 스케일 조정, 벡터 정규화 여부를 확인합니다.
  5. 점수가 무엇을 보장하나요? 검색 후보의 관련성인지, 사실의 일치인지, 확률인지 구분합니다.

계산식을 전부 외우지 않아도 이 질문을 할 수 있습니다. ‘유사도가 높다’는 설명을 구체적인 조건으로 바꾸는 방법입니다.

흔한 오해

“거리와 유사도는 이름만 다른 같은 값이다.” 서로 관련지어 정의할 수 있지만, 사용한 공식과 전처리에 따라 다른 순위를 만들 수 있습니다.

“내적은 방향만 비교한다.” 표준 내적에는 두 벡터의 길이도 영향을 줍니다. 두 벡터 모두 단위 길이로 맞춘 조건에서는 코사인 유사도와 같아집니다.

“유사도는 항상 0부터 1 사이다.” 계산법에 따라 범위가 다릅니다. 표준 내적은 1보다 클 수 있고 음수도 나올 수 있습니다. 0이 아닌 실수 벡터의 코사인 유사도는 -1부터 1 사이입니다.

“내적이 0이면 현실에서도 아무 관련이 없다.” 두 벡터가 모두 0이 아닐 때 표준 내적이 0이면 수학적으로 직교한다는 뜻입니다. 현실의 관계가 없다는 결론은 표현 방식과 맥락을 따로 살펴야 합니다.

“가장 비슷하게 검색된 문서가 곧 정답이다.” 정한 기준에서 우선순위가 높다는 뜻입니다. 적용 조건과 사실 여부는 원문으로 확인해야 합니다.

그래서 무엇을 기억해야 할까요?

AI가 비슷한 것을 찾는다는 말에는 비교 기준이 숨어 있습니다.

거리는 떨어진 정도를 측정합니다. 유사도는 정한 관점에서의 비슷함을 점수로 나타냅니다. 내적은 대응하는 숫자를 곱해 더하는 계산으로, 유사도와 모델 계산에 활용될 수 있습니다.

같은 벡터도 무엇을 측정하느냐에 따라 순위가 달라집니다. 데이터의 표현, 단위, 정규화 조건도 결과에 영향을 줍니다.

‘얼마나 비슷한가?’를 보기 전에, ‘무엇을 기준으로 비슷하다고 계산했는가?’를 확인하세요.

그 기준을 알아야 높은 점수를 어디까지 믿을 수 있는지 판단할 수 있습니다. 숫자로 비교한 결과를 실제 의미와 연결하는 일은 계산이 끝난 뒤에도 남아 있습니다.

확인한 자료

  1. scikit-learn — Pairwise metrics, Affinities and Kernels: 거리와 유사도 관련 비교 방식, 내적과 정규화 관계 확인.
  2. SciPy — scipy.spatial.distance.euclidean: 유클리드 거리 정의 확인.
  3. scikit-learn — cosine_similarity: 정규화된 내적으로 계산하는 코사인 유사도 확인.
  4. NumPy — numpy.dot: 실수 1차원 배열의 내적 연산 확인.
  5. OpenStax — Calculus Volume 3, The Dot Product: 표준 내적의 좌표 계산과 길이·사이각 관계 확인.
  6. scikit-learn — Importance of Feature Scaling: 특징의 숫자 범위가 거리 기반 비교에 미치는 영향 확인.

KEYWORDS

  • 거리
  • 유사도
  • 내적
  • 벡터
  • 유클리드 거리
  • 코사인 유사도
  • 정규화
  • 임베딩
← Knowledge 목록