
임베딩 모델을 사용하기 위해 필요한 패키지를 설치합니다.
pip install langchain-openai langchain-huggingface python-dotenv numpy
| 패키지 | 설명 |
|---|---|
langchain-openai | OpenAIEmbeddings |
langchain-huggingface | HuggingFaceEmbeddings (무료, 로컬 실행) |
python-dotenv | .env 파일에서 환경 변수 로드 |
numpy | 코사인 유사도 계산용 |
임베딩(Embedding)은 텍스트를 컴퓨터가 이해할 수 있는 숫자 벡터로 변환하는 기술입니다. 비슷한 의미의 텍스트는 비슷한 벡터값을 가지게 되어, 텍스트 간의 의미적 유사도를 계산할 수 있게 됩니다.
컴퓨터는 텍스트를 직접 이해할 수 없습니다. 임베딩을 통해 다음이 가능해집니다.
임베딩 벡터는 텍스트를 표현하는 숫자 배열입니다.
# 임베딩 벡터 예시 (실제로는 수백~수천 차원)
"인공지능" → [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에 가까울수록 유사합니다.
OpenAI의 임베딩 API를 사용합니다.
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]}")
무료 오픈소스 임베딩 모델을 로컬에서 실행합니다.
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 |
단일 텍스트를 벡터로 변환합니다. 주로 사용자 질문에 사용합니다.
vector = embeddings.embed_query("검색할 질문")
여러 문서를 벡터로 변환합니다. 문서 색인에 사용합니다.
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}")