임베딩 구현 전 고려사항

임베딩 제공자를 선택할 때, 귀하의 필요와 선호도에 따라 고려할 수 있는 여러 요소들이 있습니다:

  • 데이터셋 크기 및 도메인 특수성: 모델 학습 데이터셋의 크기와 임베딩하고자 하는 도메인과의 관련성. 더 크거나 도메인에 특화된 데이터는 일반적으로 해당 도메인에서 더 나은 임베딩을 생성합니다
  • 추론 성능: 임베딩 검색 속도와 종단간 지연 시간. 이는 특히 대규모 프로덕션 배포에서 중요한 고려사항입니다
  • 커스터마이제이션: 비공개 데이터에 대한 지속적인 학습 옵션이나 매우 특정한 도메인을 위한 모델의 특수화. 이는 고유한 어휘에 대한 성능을 향상시킬 수 있습니다

Anthropic으로 임베딩을 얻는 방법

Anthropic은 자체 임베딩 모델을 제공하지 않습니다. 위의 모든 고려사항을 포괄하는 다양한 옵션과 기능을 가진 임베딩 제공자 중 하나는 Voyage AI입니다.

Voyage AI는 최첨단 임베딩 모델을 제작하고 금융과 의료와 같은 특정 산업 도메인을 위한 맞춤형 모델이나 개별 고객을 위한 맞춤 미세조정 모델을 제공합니다.

이 가이드의 나머지 부분은 Voyage AI에 대한 것이지만, 귀하의 특정 사용 사례에 가장 적합한 것을 찾기 위해 다양한 임베딩 공급업체를 평가해 보시기를 권장합니다.

사용 가능한 모델

Voyage는 다음과 같은 텍스트 임베딩 모델을 사용할 것을 권장합니다:

모델컨텍스트 길이임베딩 차원설명
voyage-3-large32,0001024 (기본), 256, 512, 2048최고의 범용 및 다국어 검색 품질.
voyage-332,0001024범용 및 다국어 검색 품질에 최적화. 자세한 내용은 블로그 포스트를 참조하세요.
voyage-3-lite32,000512지연 시간과 비용에 최적화. 자세한 내용은 블로그 포스트를 참조하세요.
voyage-code-332,0001024 (기본), 256, 512, 2048코드 검색에 최적화. 자세한 내용은 블로그 포스트를 참조하세요.
voyage-finance-232,0001024금융 검색 및 RAG에 최적화. 자세한 내용은 블로그 포스트를 참조하세요.
voyage-law-216,0001024법률긴 컨텍스트 검색과 RAG에 최적화. 모든 도메인에서 성능이 향상되었습니다. 자세한 내용은 블로그 포스트를 참조하세요.

추가로, 다음과 같은 멀티모달 임베딩 모델이 권장됩니다:

모델컨텍스트 길이임베딩 차원설명
voyage-multimodal-3320001024PDF, 슬라이드, 표, 그림 등의 스크린샷과 같은 텍스트와 내용이 풍부한 이미지가 혼합된 것을 벡터화할 수 있는 풍부한 멀티모달 임베딩 모델. 자세한 내용은 블로그 포스트를 참조하세요.

어떤 텍스트 임베딩 모델을 사용해야 할지 결정하는 데 도움이 필요하신가요? FAQ를 확인해보세요.

Voyage AI 시작하기

Voyage 임베딩에 접근하려면:

  1. Voyage AI의 웹사이트에서 가입하세요
  2. API 키를 받으세요
  3. 편의를 위해 API 키를 환경 변수로 설정하세요:
export VOYAGE_API_KEY="<your secret key>"

공식 voyageai Python 패키지나 HTTP 요청을 사용하여 임베딩을 얻을 수 있습니다. 아래에서 자세히 설명하겠습니다.

Voyage Python 패키지

voyageai 패키지는 다음 명령어를 사용하여 설치할 수 있습니다:

pip install -U voyageai

그런 다음, 클라이언트 객체를 생성하고 이를 사용하여 텍스트를 임베딩할 수 있습니다:

import voyageai

vo = voyageai.Client()
# 이는 자동으로 환경 변수 VOYAGE_API_KEY를 사용합니다.
# 또는 vo = voyageai.Client(api_key="<your secret key>")를 사용할 수 있습니다

texts = ["샘플 텍스트 1", "샘플 텍스트 2"]

result = vo.embed(texts, model="voyage-3", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])

result.embeddings는 각각 1024개의 부동소수점 숫자를 포함하는 두 개의 임베딩 벡터 리스트가 됩니다. 위의 코드를 실행하면 두 임베딩이 화면에 출력됩니다:

[0.02012746, 0.01957859, ...]  # "샘플 텍스트 1"의 임베딩
[0.01429677, 0.03077182, ...]  # "샘플 텍스트 2"의 임베딩

임베딩을 생성할 때 embed() 함수에 몇 가지 다른 인수를 지정할 수도 있습니다. 여기에서 사양에 대해 자세히 읽어보세요

Voyage HTTP API

Voyage HTTP API를 요청하여 임베딩을 얻을 수도 있습니다. 예를 들어, 터미널에서 curl 명령을 통해 HTTP 요청을 보낼 수 있습니다:

curl https://api.voyageai.com/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $VOYAGE_API_KEY" \
  -d '{
    "input": ["샘플 텍스트 1", "샘플 텍스트 2"],
    "model": "voyage-3"
  }'

받게 될 응답은 임베딩과 토큰 사용량을 포함하는 JSON 객체입니다:

{
  "object": "list",
  "data": [
    {
      "embedding": [0.02012746, 0.01957859, ...],
      "index": 0
    },
    {
      "embedding": [0.01429677, 0.03077182, ...],
      "index": 1
    }
  ],
  "model": "voyage-3",
  "usage": {
    "total_tokens": 10
  }
}

임베딩 엔드포인트에 대해 Voyage 문서에서 자세히 읽어볼 수 있습니다.

AWS Marketplace

Voyage 임베딩은 AWS Marketplace에서도 사용할 수 있습니다. AWS에서 Voyage에 접근하는 방법에 대한 지침은 여기에서 확인할 수 있습니다.

빠른 시작 예제

이제 임베딩을 얻는 방법을 알았으니, 간단한 예제를 살펴보겠습니다.

검색할 6개의 문서로 구성된 작은 코퍼스가 있다고 가정해봅시다.

documents = [
    "지중해식 식단은 생선, 올리브 오일, 채소를 강조하며, 만성 질환을 줄이는 것으로 알려져 있습니다.",
    "식물의 광합성은 빛 에너지를 포도당으로 전환하고 필수적인 산소를 생산합니다.",
    "20세기 혁신은 라디오에서 스마트폰에 이르기까지 전자 기술의 발전을 중심으로 이루어졌습니다.",
    "강은 물, 관개, 수생 생물의 서식지를 제공하며, 생태계에 매우 중요합니다.",
    "Apple의 4분기 재무 결과와 사업 업데이트를 논의하기 위한 컨퍼런스 콜이 2023년 11월 2일 목요일 오후 2시(PT) / 오후 5시(ET)로 예정되어 있습니다.",
    "셰익스피어의 작품인 '햄릿'과 '한 여름 밤의 꿈'은 문학에서 영원히 남을 것입니다."
]

먼저 Voyage를 사용하여 각각을 임베딩 벡터로 변환하겠습니다.

import voyageai

vo = voyageai.Client()

# 문서 임베딩
doc_embds = vo.embed(
    documents, model="voyage-3", input_type="document"
).embeddings

임베딩을 사용하면 벡터 공간에서 의미론적 검색/검색을 수행할 수 있습니다. 예시 쿼리가 주어졌을 때,

query = "Apple의 컨퍼런스 콜은 언제로 예정되어 있나요?"

이를 임베딩으로 변환하고, 임베딩 공간에서의 거리를 기반으로 가장 관련성 높은 문서를 찾기 위해 최근접 이웃 검색을 수행합니다.

import numpy as np

# 쿼리 임베딩
query_embd = vo.embed(
    [query], model="voyage-3", input_type="query"
).embeddings[0]

# 유사도 계산
# Voyage 임베딩은 길이가 1로 정규화되어 있으므로 내적과
# 코사인 유사도는 동일합니다.
similarities = np.dot(doc_embds, query_embd)

retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])

문서와 쿼리를 임베딩할 때 각각 input_type="document"input_type="query"를 사용한다는 점에 주목하세요. 더 자세한 사양은 여기에서 찾을 수 있습니다.

출력은 쿼리와 가장 관련성이 높은 5번째 문서가 될 것입니다:

Apple의 4분기 재무 결과와 사업 업데이트를 논의하기 위한 컨퍼런스 콜이 2023년 11월 2일 목요일 오후 2시(PT) / 오후 5시(ET)로 예정되어 있습니다.

임베딩을 사용한 RAG에 대한 자세한 쿡북을 찾고 계시다면, 벡터 데이터베이스를 포함하여 우리의 RAG 쿡북을 확인해보세요.

FAQ

가격

가장 최신의 가격 정보는 Voyage의 가격 페이지를 방문하세요.