Embeddings
임베딩은 유사한 텍스트, 이미지 또는 항목을 서로 가깝게 배치하는 학습된 벡터입니다. 임베딩 생성, 비교, 대규모 검색 방법을 다룹니다.
임베딩은 단어, 이미지, 제품 또는 사용자와 같은 항목을 나타내는 학습된 숫자 벡터입니다. 의미나 내용이 비슷한 항목은 서로 가까운 벡터로 표현됩니다. 이 벡터 공간의 거리는 유사도 척도가 되므로 소프트웨어가 원시 픽셀이나 문자열 대신 벡터를 비교해 검색하고 군집화하고 추천하고 분류할 수 있습니다. 임베딩은 신경망 내부에서 실제로 사용하는 표현이기도 합니다. 대규모 언어 모델(LLM)은 첫 번째 트랜스포머 계층에 입력하기 전에 모든 토큰을 임베딩으로 변환하며, 비전 모델은 백본을 통해 이미지를 특징 벡터로 변환합니다. 검색에 사용하는 임베딩은 일반적으로 수백 개에서 수천 개 차원으로 구성되어 원시 입력의 값 수보다 훨씬 적습니다.
임베딩 생성 방식#
임베딩은 두 종류의 학습된 구성 요소에서 생성됩니다.
- 조회 테이블: 토큰, 제품 ID, 사용자 ID와 같은 이산 항목의 경우 임베딩 계층은 항목마다 학습 가능한 행 하나를 저장하며, 항목을 조회하면 해당 행을 반환합니다. PyTorch의
nn.Embedding은 이러한 테이블입니다. 테이블의 행은 무작위 값으로 초기화되고 모델의 나머지 부분과 함께 역전파를 통해 업데이트되므로, 학습 작업에서 비슷한 역할을 하는 항목은 서로 비슷한 벡터를 향해 이동합니다. - 인코더: 이미지, 오디오, 자유 형식 텍스트의 경우 네트워크가 전체 입력을 하나의 벡터로 매핑합니다. 이때 CNN의 특징 맵을 풀링하거나 트랜스포머의 출력 토큰을 읽는 경우가 많습니다. 분류와 같은 작업을 위해 학습된 인코더는 부산물로 유용한 임베딩을 생성하고, 대조 학습을 통해 학습된 인코더는 임베딩 공간을 직접 형성합니다. CLIP은 이미지와 해당 캡션을 하나의 공유 공간에 배치하는 방식으로 이를 수행합니다.
2013년 Google의 Tomas Mikolov와 동료들이 발표한 Word2vec은 이러한 학습이 얼마나 많은 구조를 포착하는지 보여 주었습니다. 단어 벡터에서 vector("King") − vector("Man") + vector("Woman")은 vector("Queen")과 가장 가까운 위치에 놓이며, 공개된 사전 학습된 Google News 벡터는 300차원 공간에서 300만 개의 단어와 구문을 다룹니다.
임베딩 비교#
코사인 유사도는 두 벡터의 방향을 비교하며, 값의 범위는 −1부터 1까지입니다. 내적은 벡터의 길이도 고려하고, 유클리드 거리는 두 벡터 사이의 직선 거리를 측정합니다. 많은 시스템은 임베딩을 단위 길이로 정규화합니다. 그러면 코사인 유사도와 내적이 동일해지고, 유클리드 거리와 동일한 순서로 이웃을 정렬합니다. YOLO26 모델은 embed()를 통해 이미지 임베딩을 생성합니다. 이 기능은 예측 헤드를 건너뛰고 모델의 끝에서 두 번째 계층 출력을 평균 풀링하여 이미지마다 벡터 하나를 반환합니다.
import torch.nn.functional as F
from ultralytics import YOLO
from ultralytics.utils import ASSETS
# Load a YOLO26 classification model trained on ImageNet
model = YOLO("yolo26n-cls.pt")
# embed() returns one pooled feature vector per image instead of predictions
bus, zidane = model.embed([ASSETS / "bus.jpg", ASSETS / "zidane.jpg"])
print(f"Embedding length: {bus.shape[0]}")
# Higher cosine similarity means the model sees more similar content
print(f"Cosine similarity: {F.cosine_similarity(bus, zidane, dim=0).item():.3f}")YOLO26n-cls의 임베딩은 256차원 벡터로, 백본을 끝내는 어텐션 블록의 풀링된 출력입니다. 두 번째 줄은 함께 제공된 샘플 사진 두 장의 코사인 유사도를 출력합니다. 전체 컬렉션에 저장된 임베딩을 대상으로 같은 비교를 수행하면 이미지 유사도 검색 결과의 순위를 정할 수 있습니다.
대규모 임베딩 검색#
수백만 개의 저장 벡터와 쿼리를 하나씩 비교하면 너무 느리므로, 벡터 데이터베이스는 그래프 기반 HNSW 인덱스나 역파일 인덱스와 같은 근사 최근접 이웃 인덱스를 구축합니다. 이 인덱스는 컬렉션의 일부만 검사하면서 가까운 일치 항목을 찾습니다. 컬렉션은 한 번 임베딩하고, 각 쿼리는 검색 시점에 동일한 인코더로 임베딩합니다. 텍스트로 이미지를 검색할 때는 쌍을 이루는 텍스트 인코더를 사용합니다.
저장 공간은 정확도만큼이나 설계에 큰 영향을 미칩니다. 마트료시카 표현 학습은 앞쪽 차원만으로도 작동하는 임베딩을 학습하므로 벡터를 잘라 공간을 절약할 수 있고, 벡터 양자화는 각 벡터를 몇 바이트로 압축합니다. 하이브리드 검색은 임베딩 유사도와 키워드 매칭을 결합합니다.
응용 분야#
- 시맨틱 검색 및 검색 증강 생성(RAG): 텍스트 임베딩은 의미를 기준으로 구절을 검색하므로, "자동차 보험 청구"에 관한 쿼리로 "자동차 보험 약관"이라고 표현된 문서도 찾을 수 있습니다. RAG는 검색된 구절을 컨텍스트로 LLM에 전달합니다.
- 추천 시스템: 사용자와 항목을 하나의 공간에 임베딩하고, 사용자 벡터와 가장 가까운 항목을 추천 후보로 선택합니다.
- 제로샷 분류: 이미지와 텍스트가 공유하는 공간을 사용하는 모델은 이미지 임베딩과 텍스트로 작성된 클래스 이름의 임베딩을 비교해 이미지를 분류합니다.
- 객체 재식별: 외형 임베딩은 카메라 간 이동이나 트랙의 공백이 발생한 경우에도 동일한 사람이나 차량을 연결합니다.
- 데이터셋 탐색: t-SNE 또는 UMAP을 사용해 임베딩을 2차원으로 투영하면 데이터셋의 클러스터, 거의 중복된 항목, 이상치를 확인할 수 있습니다.
임베딩과 관련 용어 비교#
- 잠재 공간: 임베딩이 차지하는 벡터 공간입니다. "잠재 표현"과 "임베딩"은 흔히 동의어로 사용됩니다.
- 특징 추출: 원시 데이터를 특징으로 변환하는 모든 과정입니다. 임베딩은 벡터 간 거리에 의미가 담기도록 학습된 특징 벡터입니다.
- 토큰화: 텍스트를 토큰으로 나누고 각 토큰을 정수 ID에 매핑합니다. 그런 다음 임베딩 계층이 각 ID를 벡터에 매핑합니다.
- 원-핫 인코딩: 어휘의 i번째 항목을 i번째 위치에 1이 있고 나머지는 0인 벡터로 표현합니다. 따라서 모든 항목 쌍의 거리가 같으며 인코딩에는 유사도 정보가 없습니다. 원-핫 벡터에 임베딩 테이블의 가중치 행렬을 곱하면 정확히 하나의 행이 선택됩니다. 임베딩 조회는 이 곱셈을 수행하지 않고도 동일한 결과를 반환합니다.










