— 의미를 숫자로 바꾸는 법, 그리고 보이지 않는 차원을 믿는 법
우리는 "컴퓨터는 단어를 어떻게 이해할까?"라는 질문에서 출발했다. 컴퓨터는 글자를 모른다. 컴퓨터가 아는 건 오직 숫자뿐이다. 그래서 단어의 의미를 숫자로 바꿔 쥐여줘야 한다. 이 한 가지 고민을 끝까지 따라가다 보면, 우리는 자연스럽게 '벡터'라는 개념에 도착하게 된다.
가장 단순한 생각부터 해보자. 단어마다 번호를 하나씩 붙이는 것이다.
사과 = 1 바나나 = 2 자동차 = 3
구분은 된다. 하지만 숫자에는 우리가 의도하지 않은 함정이 숨어 있다. 숫자는 한 줄로 세우는 순간, 저절로 순서와 거리를 갖게 된다.
사과와 바나나는 둘 다 과일이라 가까워야 하고, 자동차는 멀리 떨어져야 한다. 하지만 숫자 한 줄로는 이 관계를 표현할 자유가 없다. 줄 하나 위에서는 모든 것이 일렬로만 놓이기 때문이다.
그렇다면 숫자를 하나가 아니라 두 개씩 주면 어떨까?
사과 = (3, 8) 바나나 = (2, 7) 자동차 = (9, 1)
숫자가 두 개라는 건, 단어를 한 줄이 아니라 평면(2차원) 위에 점으로 찍을 수 있다는 뜻이다. 가로축 하나, 세로축 하나. 이제 사과와 바나나는 가까이, 자동차는 멀리 놓을 수 있다.
두 축으로 겹쳐버린다면? 답은 단순하다. 세 번째 축을 추가한다. 예를 들어 "먹을 수 있는 정도"라는 축을 넣으면, 크기·딱딱함이 비슷했던 돌멩이와 밤이 위아래로 쫙 갈라진다.
그런데 곧 또 이런 생각이 든다. "기준이 크기·딱딱함·먹을 수 있나, 셋뿐일까? 색깔도, 살아있나 죽었나도, 비싼가 싼가도 있는데… 기준은 수백 개도 넘잖아."
맞다. 그래서 진짜 임베딩은 축이 2개도 3개도 아니라 수백, 수천 개다. 영준님이 RAG에서 쓰는 임베딩이 768차원, 1536차원, 3072차원인 이유가 바로 이것이다. 사람은 그림으로 못 그릴 뿐, 컴퓨터는 단어 하나를 수천 개 기준 위의 좌표로 들고 있다.
지금까지 우리가 한 일 — 숫자를 순서대로 나열해서 어떤 공간 위의 한 점(또는 화살표)을 나타내는 것. 이것이 바로 벡터(vector)의 정의다.
벡터 = 숫자를 순서대로 나열한 것. 그 숫자들이 공간 위의 위치(점)나 방향(화살표)을 가리킨다.
숫자가 몇 개냐 = 몇 차원 벡터냐. (3,8) → 2차원 벡터 / 숫자 1536개 → 1536차원 벡터.
여기서 가장 솔직하고 중요한 벽을 만난다. 우리는 3차원까지밖에 그림으로 그릴 수 없다. 4차원, 1536차원은 아무리 애써도 머릿속에 떠오르지 않는다. 그래서 벡터가 글로는 이해돼도 마음으로는 잘 안 믿어진다. 사람은 보이는 건 더 믿고, 안 보이는 건 덜 믿으니까.
4차원 이상을 그림으로 못 그리는 건 지극히 정상이다. 머리가 부족해서가 아니라, 인간의 시각 자체가 3차원 세계에 맞춰 진화했기 때문이다. 평생 수학만 한 사람도 4차원을 "본" 적은 없다.
그들도 그림으로는 안 그린다. 대신 3차원에서 확실히 체득한 감각을 그대로 데려가서 믿는다. 거리를 재는 법, 두 화살표가 같은 방향이면 닮았다는 느낌 — 이걸 2·3차원에서 몸에 새겨두고, 고차원에서는 "계산 규칙이 똑같으니 그 느낌도 똑같이 살아있다"고 믿는 것이다.
컬럼 3개짜리 표는 머릿속에 그려지지만 1536개짜리는 안 그려진다. 그렇다고 그 표를 못 다루는가? 아니다. "각 컬럼끼리 빼서 제곱해 더한다" 같은 규칙은 컬럼이 몇 개든 똑같이 적용된다. 벡터가 정확히 이렇다. 그림은 3차원에서 끝나지만, 규칙은 무한 차원까지 그대로 따라간다.
사실 영준님은 이미 이 전략을 무의식적으로 쓰고 있었다. RAG에서 1536차원을 한 번도 "본" 적 없으면서도, "방향이 비슷하면(코사인 유사도가 높으면) 의미가 비슷하다"는 2차원의 느낌을 그대로 믿고 잘 써왔으니까. 우리는 그걸 의식적으로, 2·3차원에서 탄탄히 다지기만 하면 된다.
벡터를 "화살표"로 보면, 두 화살표가 얼마나 같은 방향을 보는지를 잴 수 있다. 그게 바로 내적(dot product)이고, 영준님이 매일 쓰는 코사인 유사도의 정체다. "왜 내적이 닮음을 재는 도구인지"를 다음에 손으로 느껴볼 것이다.