벡터 임베딩이란 무엇인가
신경망이 텍스트를 고차원 공간의 밀집 벡터로 변환하는 방식, 의미적으로 유사한 텍스트가 가까운 벡터를 생성하는 이유, 코사인 유사도가 측정하는 대상을 이해합니다.
벡터 임베딩이란 무엇인가은(는) CoddyKit의 무료 AI Engineering Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Engineering Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Engineering Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
숫자에 담긴 의미
벡터 임베딩은 텍스트 일부의 의미를 나타내는 숫자 목록(벡터)입니다. 신경망은 단어를 원시 문자열로 저장하는 대신 의미론적 의미를 조밀한 숫자 배열로 인코딩하는 방법을 학습합니다. 의미가 비슷한 두 텍스트는 이 고차원 공간에서 서로 가까운 벡터를 생성합니다.
고차원 벡터 공간
최신 임베딩은 일반적으로 768~3072개의 차원을 가집니다. 각 차원은 명시적으로 프로그래밍하지 않아도 주제, 감정, 문체, 관계 등 의미의 잠재적 특징을 포착합니다. 그 결과 의미론적 관계를 측정 가능한 거리로 나타낼 수 있는 풍부한 기하학적 공간이 만들어집니다.
예를 들어 text-embedding-3-small은 1536차원 벡터를 생성하고, text-embedding-3-large는 3072차원 벡터를 생성합니다.
신경망은 임베딩을 학습하는 방법
임베딩 모델은 대규모 텍스트 말뭉치로 학습하며, 누락된 단어를 예측하거나(마스크 언어 모델링) 의미적으로 유사한 쌍과 유사하지 않은 쌍을 구별합니다. 학습 중 네트워크는 유사한 텍스트가 학습된 벡터 공간에서 자연스럽게 함께 모일 때까지 수백만 개의 가중치를 조정합니다.
이 때문에 임베딩을 조밀한 표현이라고 부릅니다. 대부분의 값이 0인 희소 원-핫 인코딩과 달리 모든 차원이 정보를 전달하기 때문입니다.
코사인 유사도: 가까운 정도 측정
코사인 유사도는 두 벡터 사이의 각도를 측정하여 -1에서 1 사이의 값을 반환합니다. 점수가 1이면 벡터가 정확히 같은 방향을 가리킨다는 뜻이고(의미가 동일함), 0이면 직교한다는 뜻이며(서로 관련 없음), -1이면 반대 방향을 가리킨다는 뜻입니다.
텍스트에서는 벡터의 크기를 무시하고 방향에만 집중하므로 유클리드 거리보다 코사인 유사도를 선호합니다. 따라서 텍스트 길이의 차이에도 안정적으로 대응할 수 있습니다.
import numpy as np
def cosine_similarity(vec_a, vec_b):
dot_product = np.dot(vec_a, vec_b)
norm_a = np.linalg.norm(vec_a)
norm_b = np.linalg.norm(vec_b)
return dot_product / (norm_a * norm_b)
# Example with tiny 3D vectors
v1 = np.array([0.8, 0.2, 0.5])
v2 = np.array([0.9, 0.1, 0.4])
print(cosine_similarity(v1, v2)) # Close to 1.0의미론적 유사도가 중요한 이유
기존 키워드 검색은 사용자가 바꾸어 표현하면 제대로 작동하지 않습니다. automobile을 검색하면 cars에 관한 문서를 찾지 못하는 식입니다. 벡터 임베딩은 정확히 어떤 단어를 사용했는지와 관계없이 의미가 같은 텍스트를 가까운 벡터로 매핑하므로 이 문제를 해결합니다.
이를 통해 단어의 겹침이 아니라 의미를 기준으로 가장 관련성 높은 결과를 찾는 의미론적 검색이 가능해집니다. 이는 RAG 시스템에 필요한 핵심 기능입니다.
시각화한 임베딩 벡터
문장을 2차원 지도에 표시한다고 상상해 보십시오(단순화한 비유입니다). machine learning에 관한 문장은 한 영역에 모이고, cooking에 관한 문장은 다른 영역에 모이며, sports에 관한 문장은 세 번째 군집을 이룹니다. 벡터 임베딩은 이 지도를 수천 개의 차원으로 만들어 냅니다.
king - man + woman ≈ queen과 같은 유명한 관계는 이 공간에서 실제로 이루어지는 산술 연산입니다. 벡터 연산이 의미론적 유추를 인코딩하는 것입니다.
간단한 임베딩 생성
OpenAI 임베딩 API는 텍스트를 받아 부동 소수점 수 목록을 반환합니다. 한 번의 API 호출로 문장 하나 또는 전체 문단을 임베딩할 수 있습니다. 반환되는 벡터는 입력 길이와 관계없이 고정된 차원을 가집니다.
중요: 입력이 길어져도 벡터가 더 커지지는 않습니다. 여전히 같은 고정 크기의 벡터가 생성됩니다. 다만 매우 긴 텍스트는 모델이 모든 내용을 고정된 공간으로 압축하기 때문에 세부적인 정보가 손실될 수 있습니다.
from openai import OpenAI
client = OpenAI() # uses OPENAI_API_KEY from environment
response = client.embeddings.create(
model='text-embedding-3-small',
input='Vector embeddings capture semantic meaning.'
)
embedding = response.data[0].embedding
print(f'Dimensions: {len(embedding)}') # 1536
print(f'First 5 values: {embedding[:5]}')여러 텍스트를 한 번에 임베딩하기
input 매개변수에 목록을 전달하면 한 번의 API 호출로 여러 문자열을 임베딩할 수 있습니다. 텍스트마다 한 번씩 요청하는 것보다 네트워크 왕복을 줄이고 API가 계산을 일괄 처리할 수 있으므로 훨씬 효율적입니다.
응답에는 입력마다 하나의 임베딩 객체가 원래 순서대로 포함되므로, 원본 텍스트와 함께 묶을 수 있습니다.
from openai import OpenAI
client = OpenAI()
texts = [
'Python is a programming language.',
'Snakes are reptiles.',
'Machine learning requires data.'
]
response = client.embeddings.create(
model='text-embedding-3-small',
input=texts
)
for text, result in zip(texts, response.data):
print(f'{text[:30]}... -> {len(result.embedding)}D vector')내적과 코사인 유사도 비교
임베딩이 L2 정규화되어 있다면(크기가 1인 단위 벡터), 내적은 코사인 유사도와 같습니다. OpenAI의 임베딩 모델은 정규화된 벡터를 반환하므로 두 측정값 중 어느 것이든 사용할 수 있으며, 내적을 계산하는 편이 약간 더 빠릅니다.
그러나 정규화되지 않았을 수 있는 서로 다른 모델 또는 출처의 임베딩을 결합할 때는 잘못된 결과를 피하기 위해 항상 코사인 유사도를 명시적으로 계산하십시오.
import numpy as np
def normalize(vec):
return vec / np.linalg.norm(vec)
v1 = normalize(np.array([3.0, 4.0, 0.0]))
v2 = normalize(np.array([4.0, 3.0, 0.0]))
# For unit vectors: dot product == cosine similarity
dot = np.dot(v1, v2)
print(f'Dot product: {dot:.4f}') # same as cosine sim임베딩과 원-핫 인코딩 비교
원-핫 인코딩은 각 단어를 정확히 하나의 1과 나머지 0으로 이루어진 벡터로 나타냅니다. 5만 개의 단어로 이루어진 어휘는 5만 차원 벡터를 생성하며, 거의 대부분이 0이므로 매우 비효율적입니다.
조밀한 임베딩은 768~3072개의 차원을 사용하지만 모든 차원이 실제 정보를 전달합니다. 공간은 10~20배 더 작으면서도 동의어, 유추, 조합적 의미 등 원-핫 인코딩으로는 완전히 놓치는 훨씬 더 많은 뉘앙스를 포착합니다.
임베딩의 일반적인 활용 사례
의미론적 검색 외에도 임베딩은 다양한 실용적 애플리케이션을 뒷받침합니다.
- 의미론적 검색 — 키워드가 아니라 의미로 문서 찾기
- 추천 시스템 — 사용자가 좋아한 항목과 유사한 항목 추천
- 군집화 — 주제별로 문서를 자동 그룹화
- 분류 — 임베딩을 선형 분류기에 입력
- 중복 제거 — 거의 중복된 콘텐츠 탐지
모든 RAG 시스템은 사용자 질의와 관련 문서 조각을 연결하기 위해 임베딩에 의존합니다.
빠른 확인
이 단원에서 배운 AI 엔지니어링 개념을 제대로 이해했는지 확인하십시오.
단원 요약
이 단원에서는 벡터 임베딩이 의미론적 의미를 조밀한 숫자 배열로 인코딩한다는 점, 코사인 유사도가 벡터의 방향을 비교하여 의미적 가까움을 측정한다는 점, 그리고 OpenAI 임베딩 API가 한 번의 호출로 텍스트를 고정 크기 벡터로 변환한다는 점을 배웠습니다. 다음으로 OpenAI 모델을 사용하여 실제로 임베딩을 생성하고 비교하는 방법을 살펴보겠습니다.
자주 묻는 질문
“벡터 임베딩이란 무엇인가” 강의는 무료인가요?
네 — “벡터 임베딩이란 무엇인가” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Engineering Academy 강의 전체를 잠금 해제할 수 있습니다. AI Engineering Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“벡터 임베딩이란 무엇인가”에서 뭘 배우나요?
신경망이 텍스트를 고차원 공간의 밀집 벡터로 변환하는 방식, 의미적으로 유사한 텍스트가 가까운 벡터를 생성하는 이유, 코사인 유사도가 측정하는 대상을 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 AI Engineering Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Engineering Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Engineering Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“벡터 임베딩이란 무엇인가” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Engineering Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Engineering Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 벡터 임베딩이란 무엇인가
- OpenAI로 임베딩 생성하기
- NumPy로 의미 검색하기
- 임베딩 군집화 및 시각화