Перед внедрением эмбеддингов

При выборе провайдера эмбеддингов следует учитывать несколько факторов в зависимости от ваших потребностей и предпочтений:

  • Размер набора данных и специфика предметной области: размер обучающего набора данных модели и его релевантность для области, в которой вы хотите создавать эмбеддинги. Больший объем данных или более специализированные данные обычно дают лучшие эмбеддинги в конкретной области
  • Производительность при выводе: скорость поиска эмбеддингов и общая задержка. Это особенно важно для масштабных производственных развертываний
  • Возможности настройки: варианты продолжения обучения на частных данных или специализации моделей для очень конкретных областей. Это может улучшить производительность при работе с уникальной лексикой

Как получить эмбеддинги с помощью Anthropic

Anthropic не предлагает собственную модель эмбеддингов. Одним из провайдеров эмбеддингов, который имеет широкий спектр возможностей, охватывающих все вышеперечисленные соображения, является Voyage AI.

Voyage AI создает передовые модели эмбеддингов и предлагает настраиваемые модели для конкретных отраслей, таких как финансы и здравоохранение, или специальные модели, настроенные для отдельных клиентов.

Остальная часть этого руководства посвящена Voyage AI, но мы рекомендуем вам оценить различных поставщиков эмбеддингов, чтобы найти наиболее подходящий вариант для вашего конкретного случая.


Начало работы с Voyage AI

Ознакомьтесь с нашим блокнотом по эмбеддингам, чтобы увидеть пример реализации Voyage AI.

Чтобы получить доступ к эмбеддингам Voyage:

  1. Зарегистрируйтесь на сайте Voyage AI
  2. Получите API-ключ
  3. Установите API-ключ как переменную окружения для удобства:
Python
export VOYAGE_API_KEY="<your secret key>"

Вы можете создавать эмбеддинги, используя официальный Python-пакет voyageai или HTTP-запросы, как описано ниже.

Python-пакет Voyage

Пакет voyageai можно установить с помощью следующей команды:

Python
pip install -U voyageai

Затем вы можете создать объект клиента и начать использовать его для создания эмбеддингов ваших текстов:

Python
import voyageai

vo = voyageai.Client()
# Это автоматически использует переменную окружения VOYAGE_API_KEY.
# Альтернативно, вы можете использовать vo = voyageai.Client(api_key="<your secret key>")

texts = ["Sample text 1", "Sample text 2"]

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

result.embeddings будет списком из двух векторов эмбеддингов, каждый из которых содержит 1024 числа с плавающей точкой.

После выполнения вышеуказанного кода на экране будут напечатаны два эмбеддинга:

Python
[0.02012746, 0.01957859, ...]  # эмбеддинг для "Sample text 1"
[0.01429677, 0.03077182, ...]  # эмбеддинг для "Sample text 2"

При создании эмбеддингов вы можете указать несколько других аргументов для функции embed(). Вот спецификация:

voyageai.Client.embed(texts : List[str], model : str, input_type : Optional[str] = None, truncation : Optional[bool] = None)

  • texts (List[str]) - Список текстов в виде списка строк, например ["I like cats", "I also like dogs"]. В настоящее время максимальная длина списка составляет 128, а общее количество токенов в списке не более 320K для voyage-2 и 120K для voyage-large-2/voyage-code-2.
  • model (str) - Название модели. Рекомендуемые варианты: voyage-2, voyage-large-2, voyage-code-2.
  • input_type (str, необязательно, по умолчанию None) - Тип входного текста. По умолчанию None. Другие варианты: query, document
    • Когда input_type установлен в None, входной текст будет напрямую кодироваться моделью эмбеддингов Voyage. Альтернативно, когда входные данные являются документами или запросами, пользователи могут указать input_type как query или document соответственно. В таких случаях Voyage добавит специальный промпт к входному тексту и отправит расширенные входные данные в модель эмбеддингов
    • Для случаев поиска/извлечения мы рекомендуем указывать этот аргумент при кодировании запросов или документов для улучшения качества поиска. Эмбеддинги, созданные с аргументом input_type и без него, совместимы
  • truncation (bool, необязательно, по умолчанию None) - Следует ли обрезать входные тексты, чтобы они помещались в пределы контекста.
    • Если True, слишком длинные входные тексты будут обрезаны, чтобы поместиться в пределы контекста, прежде чем быть векторизованными моделью эмбеддингов
    • Если False, будет вызвана ошибка, если какой-либо текст превышает длину контекста
    • Если не указано (по умолчанию None), Voyage обрежет входной текст перед отправкой его в модель эмбеддингов, если он немного превышает длину контекстного окна. Если он значительно превышает длину контекстного окна, будет вызвана ошибка

HTTP API Voyage

Вы также можете получить эмбеддинги, отправив запрос к HTTP API Voyage. Например, вы можете отправить HTTP-запрос через команду curl в терминале:

Shell
curl https://api.voyageai.com/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $VOYAGE_API_KEY" \
  -d '{
    "input": ["Sample text 1", "Sample text 2"],
    "model": "voyage-2"
  }'

Ответ, который вы получите, будет JSON-объектом, содержащим эмбеддинги и использование токенов:

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

Конечная точка эмбеддингов Voyage AI - https://api.voyageai.com/v1/embeddings (POST). Заголовок запроса должен содержать API-ключ. Тело запроса - это JSON-объект, содержащий следующие аргументы:

  • input (str, List[str]) - Одна текстовая строка или список текстов в виде списка строк. В настоящее время максимальная длина списка составляет 128, а общее количество токенов в списке не более 320K для voyage-2 и 120K для voyage-large-2/voyage-code-2.
  • model (str) - Название модели. Рекомендуемые варианты: voyage-2, voyage-large-2, voyage-code-2.
  • input_type (str, необязательно, по умолчанию None) - Тип входного текста. По умолчанию None. Другие варианты: query, document
  • truncation (bool, необязательно, по умолчанию None) - Следует ли обрезать входные тексты, чтобы они помещались в пределы контекста
    • Если True, слишком длинные входные тексты будут обрезаны, чтобы поместиться в пределы контекста, прежде чем быть векторизованными моделью эмбеддингов
    • Если False, будет вызвана ошибка, если какой-либо текст превышает длину контекста
    • Если не указано (по умолчанию None), Voyage обрежет входной текст перед отправкой его в модель эмбеддингов, если он немного превышает длину контекстного окна. Если он значительно превышает длину контекстного окна, будет вызвана ошибка
  • encoding_format (str, необязательно, по умолчанию None) - Формат, в котором кодируются эмбеддинги. Voyage в настоящее время поддерживает два варианта:
    • Если не указано (по умолчанию None): эмбеддинги представлены в виде списков чисел с плавающей точкой
    • "base64": эмбеддинги сжаты до кодировок Base64

Пример использования эмбеддингов Voyage

Теперь, когда мы знаем, как получить эмбеддинги с помощью Voyage, давайте посмотрим на них в действии на коротком примере.

Предположим, у нас есть небольшой корпус из шести документов для поиска

Python
documents = [
    "The Mediterranean diet emphasizes fish, olive oil, and vegetables, believed to reduce chronic diseases.",
    "Photosynthesis in plants converts light energy into glucose and produces essential oxygen.",
    "20th-century innovations, from radios to smartphones, centered on electronic advancements.",
    "Rivers provide water, irrigation, and habitat for aquatic species, vital for ecosystems.",
    "Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.",
    "Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' endure in literature."
]

Сначала мы используем Voyage для преобразования каждого из них в вектор эмбеддинга

Python
import voyageai

vo = voyageai.Client()

# Создаем эмбеддинги документов
doc_embds = vo.embed(
    documents, model="voyage-2", input_type="document"
).embeddings

Эмбеддинги позволят нам выполнять семантический поиск / извлечение в векторном пространстве. Затем мы можем преобразовать пример запроса,

Python
query = "When is Apple's conference call scheduled?"

в эмбеддинг, а затем провести поиск ближайших соседей, чтобы найти наиболее релевантный документ на основе расстояния в пространстве эмбеддингов.

Python
import numpy as np

# Создаем эмбеддинг запроса
query_embd = vo.embed(
    [query], model="voyage-2", 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's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.

Доступные модели Voyage

Voyage рекомендует использовать следующие модели эмбеддингов:

МодельДлина контекстаРазмерность эмбеддингаОписание
voyage-large-2160001536Самая мощная универсальная модель эмбеддингов Voyage AI.
voyage-code-2160001536Оптимизирована для поиска кода (на 17% лучше альтернатив), а также достигает наилучших результатов на универсальных корпусах. Подробности в этом блог-посте Voyage.
voyage-240001024Базовая универсальная модель эмбеддингов, оптимизированная как для задержки, так и для качества.
voyage-lite-02-instruct40001024Обучена на инструкциях для задач классификации, кластеризации и определения текстового сходства предложений, которые являются единственными рекомендуемыми случаями использования этой модели.

voyage-2 и voyage-large-2 - это универсальные модели эмбеддингов, которые достигают передовых результатов во всех областях и сохраняют высокую эффективность. voyage-code-2 оптимизирована для области кода, предлагая в 4 раза большую длину контекста для более гибкого использования, хотя и с относительно более высокой задержкой.

Voyage активно разрабатывает более продвинутые и специализированные модели, а также предлагает услуги по тонкой настройке для создания специальных моделей для отдельных клиентов. Напишите вашему менеджеру по работе с клиентами Anthropic или обратитесь в службу поддержки Anthropic для получения дополнительной информации о специальных моделях.

  • voyage-finance-2: скоро
  • voyage-law-2: скоро
  • voyage-multilingual-2: скоро
  • voyage-healthcare-2: скоро

Voyage на AWS Marketplace

Эмбеддинги Voyage также доступны на AWS Marketplace. Вот инструкции по доступу к Voyage на AWS:

  1. Подпишитесь на пакет модели
    1. Перейдите на страницу списка пакетов моделей и выберите модель для развертывания
    2. Нажмите кнопку Continue to subscribe
    3. Внимательно просмотрите детали на странице Subscribe to this software. Если вы согласны со стандартным Лицензионным соглашением конечного пользователя (EULA), ценообразованием и условиями поддержки, нажмите “Accept Offer”
    4. После выбора Continue to configuration и выбора региона вам будет представлен Product Arn. Это ARN пакета модели, необходимый для создания развертываемой модели с помощью Boto3
      1. Скопируйте ARN, соответствующий выбранному региону, и используйте его в следующей ячейке
  2. Разверните пакет модели

Отсюда создайте пространство JupyterLab в Sagemaker Studio, загрузите блокнот Voyage и следуйте инструкциям внутри.


FAQ


Цены

Посетите страницу с ценами Voyage для получения самой актуальной информации о ценах.