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

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

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

Как получить эмбеддинги с 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>"

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

Пакет Voyage Python

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

Python
pip install -U voyageai

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

Python
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-2", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])

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

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

Python
[0.02012746, 0.01957859, ...]  # эмбеддинг для "Образец текста 1"
[0.01429677, 0.03077182, ...]  # эмбеддинг для "Образец текста 2"

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

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

  • texts (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
    • Когда 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": ["Образец текста 1", "Образец текста 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 = [
    "Средиземноморская диета делает упор на рыбу, оливковое масло и овощи, считается, что она снижает риск хронических заболеваний.",
    "Фотосинтез в растениях преобразует энергию света в глюкозу и производит необходимый кислород.",
    "Инновации 20-го века, от радио до смартфонов, были сосредоточены на электронных достижениях.",
    "Реки обеспечивают воду, орошение и среду обитания для водных видов, жизненно важных для экосистем.",
    "Конференц-звонок Apple для обсуждения результатов четвертого финансового квартала и обновлений бизнеса запланирован на четверг, 2 ноября 2023 года, в 14:00 по тихоокеанскому времени / 17:00 по восточному времени.",
    "Произведения Шекспира, такие как 'Гамлет' и 'Сон в летнюю ночь', остаются в литературе."
]

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

Python
import voyageai

vo = voyageai.Client()

# Встраиваем документы
doc_embds = vo.embed(
    documents, model="voyage-2", input_type="document"
).embeddings

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

Python
query = "Когда запланирован конференц-звонок Apple?"

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

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 для обсуждения результатов четвертого финансового квартала и об обновлениях бизнеса запланирован на четверг, 2 ноября 2023 года, в 14:00 по тихоокеанскому времени / 17:00 по восточному времени.

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

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

МодельДлина контекстаРазмерность эмбеддингаОписание
voyage-large-2160001536Самая мощная универсальная модель эмбеддингов Voyage AI.
voyage-code-2160001536Оптимизирована для извлечения кода (на 17% лучше альтернатив), а также SoTA на универсальных корпусах. Подробности смотрите в блоге 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 для получения самой актуальной информации о ценах.