임베딩 심화: AI는 어떻게 단어의 의미를 벡터 공간에 학습할까?

지난 글에서는 Softmax가 여러 점수를 합계 1의 비율로 바꾸는 원리를 살펴봤습니다. 그런데 언어 모델이 Softmax로 다음 단어의 비율을 계산하려면, 그보다 먼저 단어와 문맥을 숫자로 표현해야 합니다. 이때 핵심 역할을 하는 것이 임베딩(Embedding)입니다.

임베딩을 단순히 “단어를 숫자 벡터로 바꾸는 기술”이라고만 기억하면 중요한 부분을 놓치기 쉽습니다. 어떤 숫자가 들어가는지, 비슷한 의미가 왜 가까워지는지, 같은 단어가 문장에 따라 왜 다르게 표현되는지를 이해해야 이후의 Attention 계산도 자연스럽게 연결됩니다. 이번 글에서는 임베딩을 하나의 학습된 의미 공간으로 바라보겠습니다.

임베딩은 단어에 붙인 번호가 아니다

문장을 모델에 넣기 전에는 먼저 토큰이라는 작은 단위로 나눕니다. 각 토큰에는 토큰 ID가 부여됩니다. 예를 들어 “고양이”가 125번이고 “강아지”가 387번일 수 있습니다. 하지만 125와 387이라는 숫자 자체에는 의미가 없습니다. 번호 차이가 262라고 해서 두 단어의 의미가 그만큼 멀다는 뜻도 아닙니다.

임베딩 층은 이 ID를 입력받아 해당 토큰에 대응하는 벡터를 꺼냅니다. 토큰이 1만 개이고 임베딩 차원이 4라면, 모델 안에는 대략 10,000행 × 4열의 임베딩 행렬이 있다고 생각할 수 있습니다. 각 행은 토큰 하나에 대응하고, 행 안의 네 숫자가 그 토큰의 현재 좌표입니다.

토큰 ID 125 → [0.21, -0.13, 0.42, 0.08]
토큰 ID 387 → [0.18, -0.09, 0.39, 0.11]

두 벡터가 비슷해 보이지만, 사람이 각 숫자를 보고 “첫 번째 값은 동물성, 두 번째 값은 귀여움”이라고 해석할 수 있는 것은 아닙니다. 실제 임베딩의 각 차원은 여러 특성이 섞인 채 학습되는 경우가 많습니다. 중요한 것은 개별 숫자의 이름보다 벡터 사이의 상대적 위치와 방향입니다.

TensorFlow의 단어 임베딩 안내도 임베딩을 정수 인덱스를 밀집 벡터로 바꾸는 조회표로 설명합니다. 이 표의 값은 사람이 정해 넣는 고정 코드가 아니라, 다른 신경망 가중치처럼 학습 과정에서 조정되는 매개변수입니다.

의미 공간은 어떻게 만들어질까?

처음부터 “고양이”와 “강아지”가 가까운 좌표를 받는 것은 아닙니다. 일반적으로 임베딩 값은 작은 무작위 값에서 시작합니다. 모델이 많은 학습 예시를 처리하며 예측하고, 정답과의 차이를 손실 함수로 계산하고, 역전파로 임베딩 행렬을 조금씩 수정합니다.

예를 들어 “나는 귀여운 고양이를 키운다”와 “나는 귀여운 강아지를 키운다”처럼 두 단어가 비슷한 문맥에서 반복해서 등장한다고 해보겠습니다. 모델이 주변 문맥이나 다음 토큰을 잘 예측하도록 학습되는 동안 두 단어는 비슷한 계산 역할을 요구받습니다. 그 결과 두 벡터는 관련된 방향으로 조정될 가능성이 커집니다.

이 과정을 다음과 같이 정리할 수 있습니다.

  1. 문장을 토큰 ID로 바꿉니다.
  2. 임베딩 행렬에서 각 ID의 벡터를 조회합니다.
  3. 모델이 문맥이나 정답을 예측합니다.
  4. 예측과 실제 정답의 차이로 손실을 계산합니다.
  5. 역전파가 오차 신호를 전달해 관련 임베딩 값과 다른 가중치를 조정합니다.

한 번의 수정으로 의미가 완성되는 것은 아닙니다. 수많은 문맥을 거치며 작은 수정이 누적되어야 구조가 나타납니다. 따라서 임베딩은 사전식 정의를 그대로 저장한 표라기보다, 주어진 데이터와 학습 목표에 유용하도록 압축된 관계에 가깝습니다.

가까운 벡터는 정확히 무엇이 비슷할까?

임베딩 공간에서 가까운 항목은 대체로 모델의 학습 목적에서 비슷한 역할을 합니다. Google의 임베딩 공간 설명에 따르면, 임베딩은 고차원 데이터를 더 낮은 차원의 벡터로 표현하고 항목 사이의 상대적 위치에 관계를 담습니다. 다만 그 관계는 과제에 따라 달라집니다.

음식 추천 모델이라면 “시리얼”과 “소시지”가 아침 식사라는 이유로 가까워질 수 있습니다. 채식 여부를 분류하는 모델에서는 둘이 멀어질 가능성이 큽니다. 같은 데이터라도 무엇을 맞히도록 학습했는지에 따라 유용한 배치가 달라지는 것입니다.

또한 가깝다는 말은 인간이 생각하는 모든 의미가 같다는 뜻이 아닙니다. “좋다”와 “나쁘다”는 뜻은 반대지만 비슷한 문장 구조와 주제에서 자주 등장하므로 가까워질 수 있습니다. 임베딩은 사전의 동의어 목록이 아니라 데이터에서 관찰된 사용 패턴을 반영하기 때문입니다.

정적 임베딩과 문맥 임베딩의 차이

정적 임베딩: 단어마다 벡터 하나

Word2Vec 같은 정적 임베딩은 한 단어에 하나의 대표 벡터를 부여합니다. 구조가 단순하고 재사용하기 쉽지만 다의어를 구분하기 어렵습니다. “은행에서 돈을 찾았다”의 은행과 “강가의 은행나무”처럼 형태가 같고 뜻이 다른 표현도 하나의 좌표로 뭉칠 수 있습니다.

문맥 임베딩: 주변 단어에 따라 표현이 변함

Transformer 기반 언어 모델에서는 입력 토큰이 처음에 임베딩 벡터로 바뀐 뒤, 여러 Self-Attention 층을 통과하면서 주변 토큰의 정보가 섞입니다. 그래서 같은 토큰이라도 문장 속 위치와 문맥에 따라 최종 표현이 달라집니다. 엄밀히 말하면 처음 조회한 토큰 임베딩과 여러 층을 거친 문맥 표현은 구분해야 합니다.

예를 들어 “배를 먹었다”, “배가 항구에 도착했다”, “배가 아프다”에서 글자 ‘배’는 같지만 주변 단어가 각각 과일, 선박, 신체라는 의미를 드러냅니다. Attention은 어떤 주변 토큰을 참고할지 계산하고, 그 결과 서로 다른 문맥 벡터가 만들어집니다.

임베딩 차원이 높으면 무조건 좋을까?

차원은 벡터를 이루는 숫자의 개수입니다. 차원이 늘면 더 복잡하고 미세한 관계를 담을 여지가 커집니다. 하지만 저장 공간과 계산량도 늘고, 데이터가 부족하면 추가 차원을 제대로 학습하지 못할 수 있습니다. 적절한 차원은 어휘 규모, 데이터 양, 모델 구조, 수행할 과제에 따라 달라집니다.

2차원 그림에서는 점들을 눈으로 볼 수 있지만 실제 임베딩은 수백 개 이상의 차원을 사용할 수 있습니다. 시각화를 위해 PCA나 t-SNE 같은 방법으로 2차원에 축소하면 전체 구조의 일부만 보존됩니다. 그림에서 점이 가까워 보인다는 이유만으로 원래 고차원 공간에서도 반드시 같은 관계라고 단정해서는 안 됩니다.

임베딩을 비교할 때 확인할 세 가지

  • 같은 모델에서 만든 벡터인가? 서로 다른 모델의 좌표축은 기준이 다르므로 그대로 비교하기 어렵습니다.
  • 비교 기준이 목적에 맞는가? 코사인 유사도는 방향, 유클리드 거리는 좌표 사이 거리, 내적은 방향과 크기를 함께 반영합니다.
  • 점수의 기준을 검증했는가? 코사인 유사도 0.8을 곧바로 “의미가 80% 같다”고 읽을 수는 없습니다. 실제 데이터에서 검색 품질과 임계값을 확인해야 합니다.

임베딩에는 학습 데이터의 편향도 반영될 수 있습니다. 자주 등장하지 않은 표현, 새로운 용어, 특정 언어나 집단의 표현은 충분히 학습되지 않을 수 있습니다. 따라서 검색이나 추천 시스템에서는 대표 데이터로 결과를 평가하고, 중요한 판단을 유사도 점수 하나에만 맡기지 않는 편이 안전합니다.

Softmax와 임베딩은 어디에서 만날까?

임베딩은 입력 토큰을 벡터로 바꾸는 출발점이고, Softmax는 모델이 만든 여러 점수를 비교 가능한 비율로 바꾸는 마지막 단계에서 자주 사용됩니다. 언어 모델을 단순화하면 다음 흐름으로 볼 수 있습니다.

토큰 ID → 임베딩 → Transformer 층 → 로짓 → Softmax → 다음 토큰 비율

하지만 임베딩과 Softmax가 완전히 떨어져 있는 것은 아닙니다. 다음 글에서 다룰 Attention에서는 현재 토큰의 표현으로부터 Query와 Key를 만들고, 두 벡터의 내적으로 관련성 점수를 계산합니다. 이어서 Softmax가 여러 점수를 비율로 바꾸고, 그 비율만큼 Value 정보를 섞습니다.

정리

임베딩은 토큰 ID를 의미 있는 계산에 사용할 수 있는 밀집 벡터로 바꾸는 학습 가능한 표입니다. 비슷한 문맥과 역할을 가진 항목은 학습 목표에 따라 가까운 위치나 비슷한 방향을 갖게 됩니다. 다만 가까움의 의미는 데이터와 과제에 종속되며, 각 차원을 사람이 곧바로 해석할 수 있는 것도 아닙니다.

정적 임베딩은 단어마다 하나의 벡터를 사용하지만, Transformer는 Attention을 통해 주변 정보를 반영한 문맥 표현을 만듭니다. 다음 글에서는 이 연결을 한 단계 더 구체화해, Query와 Key의 내적으로 Attention Score를 직접 만들고 Softmax가 어디에 적용되는지 숫자 예제로 살펴보겠습니다.

댓글

이 블로그의 인기 게시물

AI의 학습 과정

AI란 무엇일까?

머신러닝과 딥러닝이란?