임베딩(Embedding) 이해하기

gclee·2026년 1월 21일

LangChain-RAG

목록 보기
9/13

라이브러리 설치

임베딩 모델을 사용하기 위해 필요한 패키지를 설치합니다.

pip install langchain-openai langchain-huggingface python-dotenv numpy
패키지설명
langchain-openaiOpenAIEmbeddings
langchain-huggingfaceHuggingFaceEmbeddings (무료, 로컬 실행)
python-dotenv.env 파일에서 환경 변수 로드
numpy코사인 유사도 계산용

임베딩 소개

임베딩(Embedding)은 텍스트를 컴퓨터가 이해할 수 있는 숫자 벡터로 변환하는 기술입니다. 비슷한 의미의 텍스트는 비슷한 벡터값을 가지게 되어, 텍스트 간의 의미적 유사도를 계산할 수 있게 됩니다.

임베딩이 필요한 이유

컴퓨터는 텍스트를 직접 이해할 수 없습니다. 임베딩을 통해 다음이 가능해집니다.

  • 유사도 계산: 두 텍스트가 얼마나 비슷한지 수치로 측정
  • 벡터 검색: 질문과 유사한 문서를 빠르게 찾기
  • 클러스터링: 비슷한 의미의 텍스트 그룹화

임베딩 벡터란?

임베딩 벡터는 텍스트를 표현하는 숫자 배열입니다.

  • 차원: 벡터의 크기 (예: 1536차원, 1024차원)
  • : -1에서 1 사이의 실수
  • 의미: 각 차원이 특정 의미적 특성을 표현
# 임베딩 벡터 예시 (실제로는 수백~수천 차원)
"인공지능"[0.12, -0.34, 0.56, ..., 0.78]
"AI"[0.11, -0.33, 0.55, ..., 0.77]  # 비슷한 값
"요리법"[-0.45, 0.23, -0.12, ..., 0.34]  # 다른 값

코사인 유사도란?

두 벡터 간의 유사도를 측정하는 방법입니다. -1에서 1 사이의 값을 가지며, 1에 가까울수록 유사합니다.

  • 1: 완전히 동일한 방향 (매우 유사)
  • 0: 직교 (관련 없음)
  • -1: 반대 방향 (정반대)

LangChain의 임베딩 모델

OpenAIEmbeddings

OpenAI의 임베딩 API를 사용합니다.

  • 장점: 높은 품질, 사용 간편
  • 단점: API 비용 발생
  • 차원: 1536 (text-embedding-ada-002)
from langchain_openai import OpenAIEmbeddings
from dotenv import load_dotenv

load_dotenv()

embeddings = OpenAIEmbeddings()
vector = embeddings.embed_query("인공지능이란 무엇인가?")

print(f"벡터 차원: {len(vector)}")
print(f"벡터 일부: {vector[:5]}")

HuggingFaceEmbeddings

무료 오픈소스 임베딩 모델을 로컬에서 실행합니다.

  • 장점: 무료, 로컬 실행, 개인정보 보호
  • 단점: 모델 다운로드 필요, 초기 로딩 시간
  • 차원: 모델마다 다름 (bge-m3: 1024)
from langchain_huggingface import HuggingFaceEmbeddings

model_name = "BAAI/bge-m3"
embeddings = HuggingFaceEmbeddings(model_name=model_name)

vector = embeddings.embed_query("인공지능이란 무엇인가?")

print(f"벡터 차원: {len(vector)}")
print(f"벡터 일부: {vector[:5]}")

임베딩 모델 비교

모델비용실행 환경차원용량
OpenAIEmbeddings유료클라우드1536-
HuggingFace bge-m3무료로컬1024~2GB

임베딩의 주요 메서드

1. embed_query()

단일 텍스트를 벡터로 변환합니다. 주로 사용자 질문에 사용합니다.

vector = embeddings.embed_query("검색할 질문")

2. embed_documents()

여러 문서를 벡터로 변환합니다. 문서 색인에 사용합니다.

documents = ["문서1", "문서2", "문서3"]
vectors = embeddings.embed_documents(documents)

유사도 계산 예제

import numpy as np
from langchain_huggingface import HuggingFaceEmbeddings

# 임베딩 모델 준비
embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-m3")

# 텍스트 임베딩
texts = ["인공지능 기술", "AI 기술", "요리 레시피"]
vectors = embeddings.embed_documents(texts)

# 코사인 유사도 계산 함수
def cosine_similarity(v1, v2):
    return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

# 유사도 비교
print(f"'인공지능 기술' vs 'AI 기술': {cosine_similarity(vectors[0], vectors[1]):.4f}")
print(f"'인공지능 기술' vs '요리 레시피': {cosine_similarity(vectors[0], vectors[2]):.4f}")

0개의 댓글