AI 가이드 · 14분 읽기

AI 임베딩이란? 벡터, 유사도, RAG 알아보기

임베딩은 텍스트를 벡터로 변환해 비슷한 의미를 가깝게 표현합니다. 단어·문장·문서 임베딩과 코사인 유사도, RAG에서 관련 정보를 검색하는 방법을 알아보고 모델의 차원과 가격, 벡터 간 거리가 검색 결과에 미치는 영향도 함께 살펴봅니다.

어두운 남색 벡터 공간에 빛나는 점 무리 세 개가 있고 호박색 무리 가까이에 더 밝은 검색 질의의 불꽃이 있는 모습

AI에서 임베딩은 비슷한 의미가 가까이 놓이는 수학적 공간에서 텍스트나 다른 데이터를 표현하는 수치 벡터, 즉 부동소수점 숫자의 목록입니다. 머신러닝 모델은 벡터 임베딩으로 개념 사이의 관련성을 측정하고, 의미 검색을 수행하며, RAG 시스템에서 관련 맥락을 검색합니다.

저는 첫 검색 파이프라인을 구축하는 엔지니어에게 임베딩을 설명할 때 지리 대신 주제가 놓인 지도를 상상해 보라고 합니다. 키워드 일치는 두 문자열에 정확히 같은 글자가 있는지 확인하므로 한 문서에는 개, 다른 문서에는 강아지라고 적혀 있으면 제대로 작동하지 않습니다. 벡터 임베딩은 의미를 좌표로 바꾸어 소프트웨어가 기본적인 기하학으로 개념을 비교하게 함으로써 이 차이를 해결합니다.

벡터 임베딩은 의미를 어떻게 표현할까?

벡터 임베딩은 단어, 구문, 이미지 같은 복잡한 입력을 다차원 임베딩 공간의 좌표로 변환하여 의미를 표현합니다. Stanford HAI의 AI 정의 용어집에 따르면 임베딩은 수학적 공간에서 비슷한 항목을 가까이 배치합니다. 따라서 개와 강아지 같은 단어는 가까운 벡터를 받고, 개와 토스트는 멀리 떨어집니다.

OpenAI의 임베딩 가이드는 임베딩을 그 거리가 텍스트 문자열의 관련성을 측정하는 부동소수점 숫자 벡터로 정의합니다. 두 벡터 사이의 거리가 작으면 관련성이 높고, 거리가 크면 관련성이 낮습니다. IBM Think는 여러 데이터 유형에 걸쳐 같은 원리를 설명합니다. 벡터 임베딩은 텍스트나 이미지 같은 비수학적 입력을 머신러닝 모델이 처리할 수 있는 숫자 배열로 변환하여, 현실에서 더 비슷한 항목에 더 비슷한 벡터를 부여합니다.

Google의 Machine Learning Crash Course는 엔지니어의 작업 방식에 영향을 주는 임베딩 공간의 실용적 속성 세 가지를 덧붙입니다.

  • 저차원 투영: 모델은 고차원의 원시 입력을 더 조밀하고 차원이 낮은 임베딩 공간에 투영하는 경우가 많습니다. 이 공간에서는 거리를 상대적 유사도로 수학적으로 계산할 수 있습니다.
  • 개별 좌표의 불투명성: 학습된 임베딩의 개별 차원을 사람이 명확하게 이름 붙인 개념으로 해석할 수 있는 경우는 드뭅니다. 의미는 배열의 모든 숫자가 이루는 전체 위치와 방향에 담깁니다.
  • 작업 특수성: 임베딩은 보통 특정 작업을 위해 학습되므로, 의미 기반 텍스트 검색에 최적화된 벡터 공간은 상품 추천을 위해 학습된 공간과 다릅니다.

벡터는 정확한 철자가 아니라 관련성을 인코딩하므로 OpenAI는 임베딩의 일반적인 실제 운영 용도 여섯 가지로 검색(질의 관련성에 따라 결과 순위 지정), 군집화, 추천, 이상 탐지, 다양성 측정, 분류(문자열에 가장 가까운 레이블 할당)를 제시합니다.

단어, 문장, 문서 임베딩 설명

단어, 문장, 문서 임베딩은 모델이 하나의 벡터로 압축하는 텍스트의 양이 다릅니다. 적절한 단위를 선택하면 시스템이 개별 용어, 짧은 사용자 질의, 여러 문단으로 된 구절 중 무엇을 추적할지가 결정됩니다.

단어 임베딩

단어 임베딩은 단일 단어나 AI 토큰에 할당된 밀집 벡터입니다. Tomas Mikolov와 동료들이 2013년에 소개한 word2vec 같은 정적 단어 임베딩은 어휘의 각 단어에 고정된 전역 벡터 하나를 할당합니다. Google의 Machine Learning Crash Course가 설명하듯, 단어 주변의 문맥을 예측하도록 학습된 모델은 비슷한 문맥에 나타나는 단어가 관련된 의미를 지닌다고 가정합니다.

정적 단어 임베딩에는 잘 알려진 한계가 있습니다. 금융기관을 뜻하는 bank와 강둑을 뜻하는 bank처럼 한 단어의 모든 의미를 벡터 하나가 동시에 표현해야 합니다. Google은 François Chollet의 Deep Learning with Python을 인용하여 정적 단어 임베딩에서 256, 512, 1024 같은 차원 수가 흔히 사용되었다고도 설명합니다.

문장 임베딩

문장 임베딩은 단어마다 별도 벡터를 만드는 대신 구문이나 문장 전체를 하나의 벡터로 변환합니다. IBM에 따르면 문장 임베딩은 완전한 구문의 결합된 의미를 포착하며, 검색 및 질의응답 작업에서 사용자 질의를 인코딩하는 데 흔히 사용됩니다. 문장 전체를 인코딩하면 같은 단어가 서로 다른 순서로 나열된 문자열을 구별하는 데 도움이 됩니다.

문서 임베딩

문서 임베딩은 더 긴 구절, 글의 한 부분, 문서 청크 전체를 하나의 벡터로 표현합니다. 간단한 기본 접근법은 단어 벡터의 평균을 내어 결합하지만, 이 방법은 구조와 미묘한 차이를 놓치는 경우가 많습니다. 전용 텍스트 임베딩 모델은 구절 전체를 한 번에 인코딩합니다. 실제 검색 시스템에서 팀은 책 전체를 하나의 벡터로 압축하는 경우가 드뭅니다. 대신 긴 파일을 더 작은 청크로 나누고 청크마다 임베딩 하나를 생성합니다.

임베딩 유형 입력 단위 일반적인 벡터 단위 주요 역할과 한계
단어 임베딩 단일 단어 또는 토큰 어휘 항목당 벡터 하나 용어의 유사성을 포착하며, word2vec 같은 정적 모델은 단어의 모든 의미를 하나의 벡터에 합침
문장 임베딩 구문 또는 단일 문장 질의 또는 줄당 벡터 하나 구문 수준의 의도를 포착하며 검색 질의와 질의응답에 흔히 사용됨
문서 임베딩 구절 또는 문서 청크 청크 또는 문서당 벡터 하나 코퍼스 검색을 지원하며, 긴 문서는 보통 임베딩 전에 분할해야 함

임베딩 차원은 무엇을 뜻할까?

임베딩 차원은 벡터의 길이, 즉 모델이 각 입력에 대해 출력하는 부동소수점 숫자의 개수를 나타냅니다. 큰 벡터는 미묘한 의미 차이를 인코딩할 수 있는 용량이 더 크고, 작은 벡터는 메모리 사용량과 인덱스 크기, 비교 연산량을 줄입니다.

OpenAI의 3세대 임베딩 모델은 이 절충 관계를 직접 보여 줍니다. 2026년 11월 14일 기준 OpenAI 공식 문서의 기본 출력 길이는 text-embedding-3-small이 1536차원, text-embedding-3-large가 3072차원입니다. 두 모델 모두 API 요청에서 선택적 dimensions 매개변수를 받아들이므로 개발자는 임베딩의 개념 표현 특성을 잃지 않고 더 짧은 벡터를 요청할 수 있습니다.

OpenAI는 뒤쪽 숫자를 깔끔하게 제거할 수 있도록 두 3세대 모델을 학습시켰습니다. 2026년 11월 14일 기준 OpenAI 임베딩 가이드에 따르면 text-embedding-3-large를 256차원으로 줄여도 MTEB 벤치마크에서 줄이지 않은 1536차원의 text-embedding-ada-002 임베딩보다 성능이 높습니다. 벡터 데이터베이스가 1024차원의 엄격한 상한을 적용하는 경우에도 개발자는 dimensions를 1024로 설정해 text-embedding-3-large를 호출할 수 있다고 OpenAI는 설명합니다. 이때 약간의 정확도를 포기하는 대신 호환성을 얻고 저장 공간을 줄입니다.

API에서 받은 벡터를 수동으로 줄이는 개발자는 그 후 L2 길이 정규화를 적용해야 합니다. 임베딩을 만들 때 dimensions 매개변수를 직접 전달하면 수동 후처리를 피할 수 있으며, 이는 OpenAI가 권장하는 방법입니다.

코사인 유사도는 임베딩을 어떻게 비교할까?

코사인 유사도는 두 임베딩 벡터 사이 각도의 코사인을 측정하여 두 벡터를 비교합니다. 코사인 유사도는 벡터의 크기 자체가 아니라 임베딩 공간에서의 방향을 평가하므로, 같은 의미 방향을 가리키는 두 구절은 길이가 달라도 높은 점수를 받습니다.

일반적인 벡터에서 코사인 유사도의 범위는 -1부터 1까지입니다.

  • 1: 두 벡터가 정확히 같은 방향을 가리키며 유사도가 최대임을 뜻합니다.
  • 0: 두 벡터가 직교하며 의미가 상관관계가 없음을 뜻합니다.
  • -1: 두 벡터가 반대 방향을 가리킵니다.

유클리드 거리는 임베딩 공간의 두 점 사이 직선거리를 측정하는 대체 지표입니다. 어떤 거리 함수를 선택해야 하는지에 대해 OpenAI의 임베딩 FAQ는 코사인 유사도를 명시적으로 권장하면서, OpenAI 벡터에서는 지표 선택이 보통 큰 차이를 만들지 않는다고 설명합니다. OpenAI API가 반환하는 모든 임베딩은 이미 길이 1로 정규화되어 있으므로 코사인 유사도는 내적과 같고, 코사인 유사도와 유클리드 거리는 동일한 검색 순위를 만듭니다.

RAG에서 임베딩은 어떻게 사용될까?

임베딩은 언어 모델이 답변을 작성하기 전에 사용자의 질문을 저장된 문서 청크와 대조함으로써 검색 증강 생성(RAG)을 지원합니다. RAG 파이프라인은 사전 학습 중에 기억한 사실에만 의존하는 대신 벡터 유사도를 사용하여 비공개 또는 최신 텍스트 모음을 검색합니다.

질의응답과 텍스트 검색에 관한 OpenAI의 지침에 따라 표준 RAG 파이프라인은 다섯 단계를 거칩니다.

  1. 코퍼스를 청크로 나누기: 긴 원본 문서를 작은 구절로 나누어 각 벡터가 하나의 집중된 개념을 표현하게 합니다. 구체적인 분할 전략은 RAG를 위한 문서 분할 방법 가이드에서 다룹니다.
  2. 청크 임베딩 및 인덱싱: 각 청크를 임베딩 모델에 보내고 결과 벡터를 원본 텍스트와 함께 저장합니다. OpenAI는 대규모 모음에서 빠르게 검색할 때 벡터 데이터베이스에 벡터를 저장할 것을 권장합니다.
  3. 사용자 질의 임베딩: 들어온 질문을 정확히 같은 임베딩 모델에 전달하여 질의가 인덱싱된 청크와 같은 수학적 공간에 놓이게 합니다.
  4. 최근접 이웃 검색: 코사인 유사도 또는 정규화된 벡터의 내적 같은 유사도 점수를 계산하고 가장 잘 일치하는 청크를 가져옵니다.
  5. 모델에 맥락 전달: 검색한 텍스트 청크를 언어 모델의 프롬프트에 삽입하여 원본 자료에 근거한 답변을 생성하게 합니다.

청크 크기와 검색 임계값은 문서 구조와 질의 패턴에 따라 크게 달라지므로, 팀은 하나의 보편적인 청크 크기에 의존하지 말고 실제 코퍼스에서 분할 전략을 테스트해야 합니다.

OpenAI 임베딩 모델, 제한 및 가격

2026년 11월 14일 기준 OpenAI의 임베딩 API는 고정된 토큰 제한과 토큰당 가격이 적용되는 주요 텍스트 모델 세 가지를 제공합니다. 개발자는 input과 model을 포함하는 POST https://api.openai.com/v1/embeddings 요청을 보내 벡터를 생성하며, 선택적으로 dimensions(3세대 모델)와 encoding_format(기본값 float 또는 base64)을 지정할 수 있습니다.

나열된 OpenAI 임베딩 모델 세 가지에는 동일한 요청 제한이 적용됩니다. 단일 입력당 최대 8,192 토큰, 입력 배열당 최대 2,048개 항목, API 호출 하나의 모든 입력을 합쳐 최대 300,000 토큰입니다. 빈 문자열은 거부됩니다. 요청을 보내기 전에 로컬에서 토큰을 세려면 OpenAI는 tiktoken과 함께 cl100k_base 인코딩을 사용할 것을 권장합니다. 세 모델 모두 OpenAI의 Batch API도 지원합니다.

모델 기본 차원 최대 입력 토큰 100만 토큰당 가격(2026년 11월 14일) 1달러당 대략적인 페이지 수(페이지당 ~800 토큰) OpenAI가 공개한 MTEB 점수
text-embedding-3-small 1536 8,192 $0.02 62,500 62.3%
text-embedding-3-large 3072 8,192 $0.13 9,615 64.6%
text-embedding-ada-002 1536 8,192 $0.10 12,500 61.0%

이 수치는 2026년 11월 14일 기준 OpenAI 가격 페이지와 임베딩 가이드에서 직접 가져왔습니다. OpenAI는 text-embedding-3-small을 text-embedding-ada-002의 개선된 후속 모델로 설명하고, text-embedding-3-large를 영어와 비영어 작업 모두에서 가장 성능이 뛰어난 모델로 소개합니다. 위 MTEB 백분율은 어디까지나 해당 날짜에 OpenAI가 자체 문서에 공개한 벤치마크이며, 모든 임베딩 제공업체를 비교한 최신 독립 업계 순위로 보아서는 안 됩니다.

FAQ

벡터 임베딩과 토큰의 차이는 무엇인가요?

토큰은 모델이 읽고 요금을 부과하는 단어 또는 단어의 일부 같은 입력 텍스트 조각입니다. 벡터 임베딩은 하나 이상의 토큰이 지닌 의미를 표현하기 위해 모델이 출력하는 부동소수점 숫자의 밀집 배열입니다. OpenAI 임베딩 모델에 최대 8,192 토큰을 전달하여 벡터 하나를 받을 수 있습니다.

OpenAI의 dimensions 매개변수는 임베딩 정확도를 낮추나요?

dimensions 매개변수로 벡터를 줄이면 약간의 정확도를 포기하는 대신 저장 및 연산 비용을 낮출 수 있습니다. OpenAI는 3세대 모델이 개념 표현을 유지하면서 뒤쪽 숫자를 제거할 수 있도록 학습되었다고 설명합니다. 2026년 11월 14일 기준 OpenAI에 따르면 256차원 text-embedding-3-large 벡터는 MTEB에서 줄이지 않은 1536차원 text-embedding-ada-002 벡터보다 여전히 우수합니다.

OpenAI 임베딩에는 코사인 유사도와 유클리드 거리 중 무엇을 사용해야 하나요?

OpenAI가 권장하는 지표는 코사인 유사도이지만 두 함수는 OpenAI 벡터에서 동일한 순위를 제공합니다. OpenAI 임베딩은 길이 1로 정규화되어 있으므로 코사인 유사도는 수학적으로 내적과 같고, 유클리드 거리는 정확히 같은 순서를 유지합니다. 다른 출처의 일반적인 정규화되지 않은 벡터에서는 코사인 유사도가 크기 대신 각도만을 고려합니다.

임베딩 모델은 최근 사건을 알고 있나요?

OpenAI의 3세대 임베딩 모델인 text-embedding-3-small과 text-embedding-3-large는 2021년 9월 이후 발생한 사건을 알지 못합니다. OpenAI는 임베딩 FAQ에서 이 지식의 종료 시점이 일반적으로 텍스트 생성 모델보다 임베딩에 덜 제한적이라고 설명하지만, 특정 분야의 질의나 종료 시점 이후의 질의에서는 일치 품질이 떨어질 수 있습니다.

OpenAI API를 통해 생성된 임베딩의 소유자는 누구인가요?

OpenAI 공식 FAQ에 따르면 고객은 자신이 보낸 입력과 임베딩을 포함하여 OpenAI 모델이 생성한 출력 벡터를 모두 소유합니다. OpenAI는 이 소유권이 자사의 임베딩 엔드포인트 전반에 적용되며, API 사용이 관련 법률을 준수하도록 할 책임은 사용자에게 있다고 설명합니다.

출처

작성자

Chunyu Cai

Chunyu Cai는 Lotook, LLC의 CEO이자 기업가로, AI 모델과 에이전트, 그리고 이들이 일상 업무를 어떻게 바꾸는지에 관해 글을 씁니다. Chunyu Cai는 Imperial College London에서 석사 학위를 받았습니다.