메인 콘텐츠로 건너뛰기

개요

Embedding은 텍스트의 수치 벡터 표현으로, 의미 정보를 담습니다. 이를 통해 서로 다른 텍스트 간의 “거리”나 “유사도”와 같은 수학적 연산을 수행할 수 있습니다. 의미 검색, 클러스터링, 추천, 이상 탐지, 분류 등 많은 AI 애플리케이션의 기초 기능입니다. YouRouter는 단일 통합 API로 주요 embedding 모델을 제공합니다.

사용법

from openai import OpenAI

client = OpenAI(
    api_key="your-api-key-here",
    base_url="https://api.yourouter.ai/v1"
)

response = client.embeddings.create(
    input="The quick brown fox jumps over the lazy dog",
    model="text-embedding-ada-002"
)

embedding = response.data[0].embedding
print(f"Embedding dimensions: {len(embedding)}")

배치 처리

효율을 위해 input에 문자열 배열을 전달하여 여러 embedding을 한 번에 생성할 수 있습니다.
response = client.embeddings.create(
    input=[
        "First sentence to embed.",
        "Another sentence for batch processing."
    ],
    model="text-embedding-ada-002"
)

for i, data in enumerate(response.data):
    print(f"Embedding for input {i+1}: {len(data.embedding)} dimensions")

매개변수

input
string or array
필수
embedding할 텍스트. 단일 문자열 또는 문자열 배열일 수 있습니다.
model
string
필수
사용할 embedding 모델 ID(예: text-embedding-ada-002).
encoding_format
string
기본값:"float"
반환 embedding의 인코딩 형식. float 또는 base64를 선택할 수 있습니다. base64는 JSON 크기를 줄이는 데 도움이 됩니다.
user
string
최종 사용자를 나타내는 고유 식별자로, 모니터링 및 오용 탐지에 사용할 수 있습니다.

사용 사례

의미 검색

의미 검색은 키워드의 정확한 일치에 의존하지 않고, 사용자 질의와 의미적으로 더 관련된 콘텐츠를 찾습니다. 구현은 보통 질의 벡터와 문서 벡터 간 유사도를 비교합니다.
import numpy as np
from scipy.spatial.distance import cosine

documents = [
    "The sky is blue and beautiful.",
    "The sun is the star at the center of the Solar System.",
    "Artificial intelligence will reshape our world."
]

doc_embeddings = [
    client.embeddings.create(input=doc, model="text-embedding-ada-002").data[0].embedding
    for doc in documents
]

query = "What is the future of AI?"
query_embedding = client.embeddings.create(input=query, model="text-embedding-ada-002").data[0].embedding

similarities = [1 - cosine(query_embedding, doc_emb) for doc_emb in doc_embeddings]
most_similar_index = np.argmax(similarities)

print(f"Query: '{query}'")
print(f"Most similar document: '{documents[most_similar_index]}'")

분류 및 클러스터링

Embedding은 강력한 머신러닝 특징이기도 합니다. 감성 분석이나 주제 분류 등 분류기에 입력하거나, 클러스터링 알고리즘으로 유사 콘텐츠를 그룹화할 수 있습니다.

모범 사례

최신 embedding 모델은 이미 강건하지만, 특정 시나리오에서는 관련 없는 문자 제거나 기본 정규화와 같은 가벼운 전처리가 도움이 될 수 있습니다. 다만 의미 맥락을 잃을 수 있으므로 과도한 stemming이나 불용어 제거는 권장하지 않습니다.
여러 텍스트를 처리할 때는 배열을 전달해 배치 embedding을 우선하세요. 네트워크 왕복을 크게 줄이고 지연을 낮출 수 있습니다.
인기 검색어나 자주 쓰는 제목처럼 동일 텍스트에 대해 embedding을 자주 호출한다면 Redis나 인메모리 캐시 등 캐시 계층을 두는 것이 좋습니다. API 호출을 줄이고 비용을 절감하며 성능을 높일 수 있습니다.

확장: 벡터 데이터베이스

embedding 수가 수천 개를 넘어가면 전수 비교로 유사도를 계산하는 것이 점점 느려집니다. 이 경우 보통 벡터 데이터베이스를 도입합니다. 벡터 데이터베이스는 대규모 벡터를 효율적으로 저장·검색하도록 설계되어 수백만~수십억 개의 embedding 검색을 지원합니다. HNSW, IVF 등 인덱스 알고리즘으로 근사 최근접 이웃 검색을 수행하여 속도와 정확도의 균형을 맞춥니다. 일반적인 선택지:
  • 클라우드 서비스: Pinecone, Zilliz Cloud
  • 오픈소스 / 자체 호스팅: Weaviate, Milvus, Chroma, Qdrant