BETAInsomnia Studyroom벡터의 각도로 문서 유사도 측정하기
벡터의 각도로 문서 유사도 측정하기

2022 Revised Curriculum · Career Elective

인공지능 수학

데이터를 숫자로 표현하고, 예측과 최적화에 사용되는 수학을 계산과 탐구로 연결합니다.

5개 단원과 14개 강의에서 인공지능의 판단 구조, 텍스트·이미지 데이터, 예측, 손실함수, 경사하강법과 책임 있는 수학 탐구를 학습합니다.

22개정 인공지능 수학 · Unit 2 · 언어를 수로 바꾸는 방법

벡터의 각도로 문서 유사도 측정하기

두 문서가 같은 주제를 다루는지 비교할 때 단어 수만 보면 긴 문서가 유리해질 수 있습니다. 코사인 유사도는 벡터를 단위 길이로 맞춘 뒤 방향을 비교하여 이 문제를 줄입니다.

이번 강의의 목표

내적, 벡터의 크기와 각도의 관계를 설명하고 두 문서의 코사인 유사도를 단계별로 계산합니다.

\[\mathbf{x}\cdot\mathbf{y}=\lVert\mathbf{x}\rVert\lVert\mathbf{y}\rVert\cos\theta\]

코사인 유사도

두 영벡터가 아닌 문서 벡터의 내적을 두 벡터의 크기 곱으로 나누면 길이 효과를 제거한 방향의 유사도를 얻습니다.

\[\operatorname{cosSim}(\mathbf{x},\mathbf{y})=\frac{\mathbf{x}\cdot\mathbf{y}}{\lVert\mathbf{x}\rVert_2\lVert\mathbf{y}\rVert_2}\]

값 해석

성분이 음수가 아닌 빈도·TF-IDF 벡터에서는 값이 1에 가까울수록 단어 구성 비율이 비슷하고 0이면 양의 가중치를 가진 공통 특징이 없습니다.

\[0\le\operatorname{cosSim}\le1\]

비교 기준 선택

유클리드 거리는 끝점 사이의 절대 차이에, 내적은 방향과 길이에, 코사인 유사도는 방향에 초점을 둡니다.

\[d_2(\mathbf{x},\mathbf{y})=\lVert\mathbf{x}-\mathbf{y}\rVert_2\]

왜 ‘각도’로 문서를 비교할까?

어휘 순서가 (수학, 데이터, 모델, 학습)일 때 짧은 문서와 그 내용을 두 번 반복한 문서를 생각해 봅시다.

짧은 문서

수학 데이터

\(\mathbf{x}=(1,1,0,0)\)
반복된 문서

수학 데이터 수학 데이터

\(\mathbf{y}=(2,2,0,0)=2\mathbf{x}\)

두 벡터의 끝점은 다르지만 원점에서 같은 방향을 가리킵니다. 반복 횟수보다 단어의 구성 비율에 관심이 있다면 두 문서를 가장 비슷하다고 판단하는 것이 자연스럽습니다.

\[d_2(\mathbf{x},\mathbf{y})=\sqrt{2},\qquad \operatorname{cosSim}(\mathbf{x},\mathbf{y})=1\]

공식은 어디에서 오는가?

벡터의 내적은 성분별 곱의 합으로 계산할 수도 있고, 두 벡터의 크기와 사이각으로 나타낼 수도 있습니다.

\[\mathbf{x}\cdot\mathbf{y}=\sum_{i=1}^{m}x_i y_i=\lVert\mathbf{x}\rVert_2\lVert\mathbf{y}\rVert_2\cos\theta\]

두 벡터가 영벡터가 아니라면 양변을 크기의 곱으로 나눌 수 있습니다.

\[\cos\theta=\frac{\sum_{i=1}^{m}x_i y_i}{\sqrt{\sum_{i=1}^{m}x_i^2}\sqrt{\sum_{i=1}^{m}y_i^2}}\]

즉 코사인 유사도는 새로운 임의의 공식이 아니라, 내적에서 두 벡터의 길이를 분리해 낸 값입니다.

방향이 가까울수록 코사인 유사도가 커진다세 문서 벡터의 방향을 2차원에 단순화해 나타낸 독자 제작 SVG입니다.
문서 벡터의 각도와 코사인 유사도 원점에서 문서 A는 오른쪽 위, 문서 B는 A와 가까운 방향, 문서 C는 위쪽 방향을 가리킨다. A와 B의 작은 각은 높은 유사도를 뜻한다. 문서 A문서 B문서 C작은 θ특징 1특징 2

그림은 개념을 보여 주기 위한 2차원 예입니다. 실제 문서 벡터는 어휘 수만큼 차원을 가지지만 내적과 크기를 이용하면 같은 방식으로 각도의 코사인을 계산할 수 있습니다.

계산 예제 · 앞 강의의 세 문서 비교

앞 강의에서 만든 벡터 \(\mathbf{d}_1=(1,1,1,0)\), \(\mathbf{d}_2=(0,1,1,1)\), \(\mathbf{d}_3=(1,0,1,1)\)을 그대로 사용합니다.

  1. 내적: \(\mathbf{d}_1\cdot\mathbf{d}_2=1\times0+1\times1+1\times1+0\times1=2\)
  2. 각 벡터의 크기: \(\lVert\mathbf{d}_1\rVert_2=\lVert\mathbf{d}_2\rVert_2=\sqrt{3}\)
  3. 크기의 곱: \(\sqrt{3}\times\sqrt{3}=3\)
  4. 나누기: \(\operatorname{cosSim}(\mathbf{d}_1,\mathbf{d}_2)=2/3\approx0.667\)

두 문서는 ‘데이터’와 ‘모델’이라는 두 좌표를 공유합니다. 같은 방식으로 계산하면 세 쌍의 유사도는 모두 \(2/3\)입니다. 공통 토큰 수와 각 벡터의 크기가 모두 같기 때문입니다.

단위 벡터로 보면 더 간단하다

L2 정규화는 벡터를 자신의 크기로 나누어 길이를 1로 만드는 과정입니다.

\[\widehat{\mathbf{x}}=\frac{\mathbf{x}}{\lVert\mathbf{x}\rVert_2},\qquad\lVert\widehat{\mathbf{x}}\rVert_2=1\]

정규화된 두 벡터에서는 크기의 곱이 1이므로 코사인 유사도가 곧 내적입니다.

\[\operatorname{cosSim}(\mathbf{x},\mathbf{y})=\widehat{\mathbf{x}}\cdot\widehat{\mathbf{y}}\]
원래 벡터단어의 양과 방향 포함\(\mathbf{x}\)
L2 정규화길이를 1로 변환\(\widehat{\mathbf{x}}\)
정규화 후 내적방향 유사도 계산\(\widehat{\mathbf{x}}\cdot\widehat{\mathbf{y}}\)

세 가지 비교 방법은 무엇을 다르게 보는가?

측도계산길이의 영향값의 해석
유클리드 거리\(\lVert\mathbf{x}-\mathbf{y}\rVert_2\)받음작을수록 가까움
내적\(\mathbf{x}\cdot\mathbf{y}\)받음대체로 클수록 유사
코사인 유사도\(\frac{\mathbf{x}\cdot\mathbf{y}}{\lVert\mathbf{x}\rVert_2\lVert\mathbf{y}\rVert_2}\)배율에는 불변클수록 방향이 가까움

예를 들어 \(\mathbf{y}=c\mathbf{x}\)이고 \(c>0\)이면 코사인 유사도는 항상 1입니다. 따라서 문서 길이 자체가 중요한 과제라면 코사인 값만 사용하지 말고 총 토큰 수 같은 특징을 따로 보존해야 합니다.

범위는 언제 -1부터 1인가?

일반적인 실수 벡터의 코사인 유사도 범위는 \([-1,1]\)입니다. 같은 방향은 1, 직교하면 0, 반대 방향은 -1입니다.

\[-1\le\cos\theta\le1\]

하지만 출현 횟수나 일반적인 TF-IDF처럼 모든 성분이 음수가 아니면 내적도 음수가 될 수 없어 보통 \([0,1]\) 범위에 놓입니다. 음수 가중치가 가능한 다른 표현에서는 음수 유사도도 나올 수 있습니다.

영벡터는 계산할 수 없다

전처리 후 알려진 토큰이 하나도 남지 않으면 \(\mathbf{0}\)이 됩니다. 크기가 0이므로 공식의 분모가 0이 되어 코사인 유사도는 정의되지 않습니다.

\[\lVert\mathbf{0}\rVert_2=0\quad\Rightarrow\quad\frac{\mathbf{0}\cdot\mathbf{y}}{0\cdot\lVert\mathbf{y}\rVert_2}\text{ 는 정의되지 않음}\]

프로그램에서는 계산 전에 영벡터를 검사하고 ‘비교 불가’로 처리할지, 별도의 규칙으로 0을 반환할지 명시해야 합니다. 0을 반환하더라도 그것은 수학적 값이 아니라 구현상의 약속입니다.

여러 문서를 한 번에 비교하기

행마다 L2 정규화한 문서 벡터를 쌓아 행렬 \(\widehat{X}\)를 만들면 모든 문서 쌍의 유사도를 행렬곱으로 계산할 수 있습니다.

\[S=\widehat{X}\widehat{X}^{\mathsf T},\qquad S_{ij}=\operatorname{cosSim}(\mathbf{x}_i,\mathbf{x}_j)\]
앞 강의의 세 문서로 만든 코사인 유사도 행렬
문서\(d_1\)\(d_2\)\(d_3\)
\(d_1\)1.0000.6670.667
\(d_2\)0.6671.0000.667
\(d_3\)0.6670.6671.000

대각 원소는 문서와 자기 자신의 유사도이므로 1이고, \(S_{ij}=S_{ji}\)이므로 행렬은 대칭입니다. 검색에서는 질의 벡터와 각 문서의 유사도를 구해 큰 값부터 정렬할 수 있지만, 기준값은 과제와 검증 자료로 정해야 합니다.

표현이 바뀌면 유사도도 바뀐다

어휘와 토큰화

‘수학은’과 ‘수학을’을 다른 좌표로 두면 실제보다 덜 비슷하게 계산될 수 있습니다.

빈도와 TF-IDF

모든 문서에 흔한 단어의 가중치를 낮추면 구별되는 핵심 단어가 비교에 더 크게 작용할 수 있습니다.

어순과 문맥

단어 주머니 벡터는 같은 빈도만 가지면 어순이 달라도 유사도 1이 될 수 있습니다.

기준값과 공정성

‘0.8 이상이면 같은 주제’ 같은 기준은 보편 법칙이 아닙니다. 언어·문서 길이·사용 집단별 오류를 검증해야 합니다.

코사인 유사도는 벡터에 들어 있는 정보만 비교합니다. 높은 값이 두 문장의 의미가 반드시 같다는 증명도 아니고, 낮은 값이 관련성이 전혀 없다는 증명도 아닙니다.

활동 1 · 손으로 계산하기

\(\mathbf{a}=(2,1,0)\), \(\mathbf{b}=(1,2,0)\), \(\mathbf{c}=(0,0,3)\)일 때 \(\operatorname{cosSim}(\mathbf{a},\mathbf{b})\)와 \(\operatorname{cosSim}(\mathbf{a},\mathbf{c})\)를 구하세요.

정답과 해설 보기

\(\mathbf{a}\cdot\mathbf{b}=4\), 두 크기는 모두 \(\sqrt5\)이므로 첫 값은 \(4/5=0.8\)입니다. \(\mathbf{a}\cdot\mathbf{c}=0\)이므로 두 번째 값은 0입니다.

활동 2 · 가장 가까운 문서 찾기

질의 \(\mathbf{q}=(1,1,0)\)와 후보 \(\mathbf{p}_1=(3,3,0)\), \(\mathbf{p}_2=(1,1,1)\), \(\mathbf{p}_3=(0,0,2)\)가 있습니다. 코사인 유사도가 가장 큰 후보를 찾고 이유를 설명하세요.

정답과 해설 보기

\(\mathbf{p}_1=3\mathbf{q}\)이므로 유사도는 1입니다. \(\mathbf{p}_2\)와는 \(2/\sqrt6\approx0.816\), \(\mathbf{p}_3\)와는 0이므로 가장 가까운 후보는 \(\mathbf{p}_1\)입니다. 절대 빈도는 다르지만 방향이 같습니다.

공개 자료 참고 및 저작권 안내

개념의 정확성과 구현상의 주의점을 확인하기 위해 다음 공개 자료를 참고했습니다.

외부 자료의 문장, 코드, 예제, 표 또는 그림을 복제하지 않았습니다. 한국어 문서, 모든 계산값, 활동, 비교표와 SVG 벡터 그림은 이 강의를 위해 독립적으로 작성했습니다. 링크 자료를 직접 재사용할 때에는 최신 라이선스와 출처 표시 조건을 다시 확인하세요.

학습 원칙

계산 결과만 제시하지 않고 사용한 데이터, 수학적 가정, 평가 기준과 적용 한계를 함께 설명합니다. 개인정보와 편향 가능성을 확인하고 인공지능의 출력을 확정된 사실로 해석하지 않습니다.

교육과정 구성 근거

국가교육과정정보센터의 2022 개정 교육과정, 한국과학창의재단 수학과 교육과정 개발 연구, 부산광역시교육청 고교학점제 과목 안내를 과목 성격과 내용 범위 확인에 참고했습니다. 단원 구성, 강의명, 설명과 예시는 이 사이트의 학습 흐름에 맞게 독립적으로 작성했습니다.

Checkpoint

어휘 순서가 (수학, 데이터, 모델)일 때 문서 A=(2,1,1), B=(4,2,2), C=(0,1,1)의 코사인 유사도 A-B와 A-C를 각각 계산하세요. 이어서 A-B의 유클리드 거리가 0이 아닌데도 코사인 유사도가 1인 이유와, 영벡터 문서를 처리할 규칙을 설명하세요.