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

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

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

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

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

Voyage рекомендует использовать следующие модели текстовых эмбеддингов:
МодельДлина контекстаРазмерность эмбеддингаОписание
voyage-3-large32,0001024 (по умолчанию), 256, 512, 2048Лучшее качество поиска общего назначения и многоязычного поиска. См. блог-пост для подробностей.
voyage-3.532,0001024 (по умолчанию), 256, 512, 2048Оптимизирована для качества поиска общего назначения и многоязычного поиска. См. блог-пост для подробностей.
voyage-3.5-lite32,0001024 (по умолчанию), 256, 512, 2048Оптимизирована для задержки и стоимости. См. блог-пост для подробностей.
voyage-code-332,0001024 (по умолчанию), 256, 512, 2048Оптимизирована для поиска кода. См. блог-пост для подробностей.
voyage-finance-232,0001024Оптимизирована для поиска и RAG в области финансов. См. блог-пост для подробностей.
voyage-law-216,0001024Оптимизирована для юридического поиска и поиска с длинным контекстом и RAG. Также улучшенная производительность во всех доменах. См. блог-пост для подробностей.
Кроме того, рекомендуются следующие мультимодальные модели эмбеддингов:
МодельДлина контекстаРазмерность эмбеддингаОписание
voyage-multimodal-3320001024Богатая мультимодальная модель эмбеддингов, которая может векторизовать чередующийся текст и изображения, богатые содержанием, такие как скриншоты PDF-файлов, слайды, таблицы, фигуры и многое другое. См. блог-пост для подробностей.
Нужна помощь в выборе модели текстовых эмбеддингов? Ознакомьтесь с FAQ.

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

Для доступа к эмбеддингам Voyage:
  1. Зарегистрируйтесь на веб-сайте Voyage AI
  2. Получите API-ключ
  3. Установите API-ключ как переменную окружения для удобства:
export VOYAGE_API_KEY="<your secret key>"
Вы можете получить эмбеддинги, используя либо официальный Python-пакет voyageai, либо 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 = ["Sample text 1", "Sample text 2"]

result = vo.embed(texts, model="voyage-3.5", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])
result.embeddings будет списком из двух векторов эмбеддингов, каждый содержащий 1024 числа с плавающей точкой. После выполнения приведенного выше кода два эмбеддинга будут выведены на экран:
[-0.013131560757756233, 0.019828535616397858, ...]   # эмбеддинг для "Sample text 1"
[-0.0069352793507277966, 0.020878976210951805, ...]  # эмбеддинг для "Sample text 2"
При создании эмбеддингов вы можете указать несколько других аргументов для функции embed(). Для получения дополнительной информации о пакете Voyage python см. документацию Voyage.

HTTP API Voyage

Вы также можете получить эмбеддинги, запросив HTTP API Voyage. Например, вы можете отправить HTTP-запрос через команду curl в терминале:
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-3.5"
  }'
Ответ, который вы получите, — это JSON-объект, содержащий эмбеддинги и использование токенов:
{
  "object": "list",
  "data": [
    {
      "embedding": [-0.013131560757756233, 0.019828535616397858, ...],
      "index": 0
    },
    {
      "embedding": [-0.0069352793507277966, 0.020878976210951805, ...],
      "index": 1
    }
  ],
  "model": "voyage-3.5",
  "usage": {
    "total_tokens": 10
  }
}

Для получения дополнительной информации о HTTP API Voyage см. документацию Voyage.

AWS Marketplace

Эмбеддинги Voyage доступны на AWS Marketplace. Инструкции по доступу к Voyage на AWS доступны здесь.

Пример быстрого старта

Теперь, когда мы знаем, как получить эмбеддинги, давайте рассмотрим краткий пример. Предположим, у нас есть небольшой корпус из шести документов для поиска
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 для преобразования каждого из них в вектор эмбеддинга
import voyageai

vo = voyageai.Client()

# Встраиваем документы
doc_embds = vo.embed(
    documents, model="voyage-3.5", input_type="document"
).embeddings
Эмбеддинги позволят нам выполнять семантический поиск / извлечение в векторном пространстве. Учитывая пример запроса,
query = "When is Apple's conference call scheduled?"
мы преобразуем его в эмбеддинг и проводим поиск ближайшего соседа, чтобы найти наиболее релевантный документ на основе расстояния в пространстве эмбеддингов.
import numpy as np

# Встраиваем запрос
query_embd = vo.embed(
    [query], model="voyage-3.5", 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.
Если вы ищете подробный набор кулинарных книг о том, как делать RAG с эмбеддингами, включая векторные базы данных, ознакомьтесь с нашей кулинарной книгой RAG.

FAQ

Модели эмбеддингов полагаются на мощные нейронные сети для захвата и сжатия семантического контекста, подобно генеративным моделям. Команда опытных исследователей ИИ Voyage оптимизирует каждый компонент процесса эмбеддинга, включая:
  • Архитектуру модели
  • Сбор данных
  • Функции потерь
  • Выбор оптимизатора
Узнайте больше о техническом подходе Voyage в их блоге.
Для эмбеддингов общего назначения мы рекомендуем:
  • voyage-3-large: Лучшее качество
  • voyage-3.5-lite: Наименьшая задержка и стоимость
  • voyage-3.5: Сбалансированная производительность с превосходным качеством поиска по конкурентоспособной цене
Для поиска используйте параметр input_type, чтобы указать, является ли текст запросом или типом документа.Модели для конкретных доменов:
  • Юридические задачи: voyage-law-2
  • Код и документация по программированию: voyage-code-3
  • Задачи, связанные с финансами: voyage-finance-2
Вы можете использовать эмбеддинги Voyage с любой из функций: сходство скалярного произведения, косинусное сходство или евклидово расстояние. Объяснение о сходстве эмбеддингов можно найти здесь.Эмбеддинги Voyage AI нормализованы до длины 1, что означает, что:
  • Косинусное сходство эквивалентно сходству скалярного произведения, при этом последнее может быть вычислено быстрее.
  • Косинусное сходство и евклидово расстояние приведут к идентичным рейтингам.
Пожалуйста, см. эту страницу.
Для всех задач поиска и случаев использования (например, RAG) мы рекомендуем использовать параметр input_type для указания того, является ли входной текст запросом или документом. Не опускайте input_type и не устанавливайте input_type=None. Указание того, является ли входной текст запросом или документом, может создать лучшие представления плотных векторов для поиска, что может привести к лучшему качеству поиска.При использовании параметра input_type специальные подсказки добавляются к входному тексту перед встраиванием. В частности:
📘 Подсказки, связанные с input_type
  • Для запроса подсказка: “Represent the query for retrieving supporting documents: ”.
  • Для документа подсказка: “Represent the document for retrieval: ”.
  • Пример
    • Когда input_type="query", запрос типа “When is Apple’s conference call scheduled?” станет “Represent the query for retrieving supporting documents: When is Apple’s conference call scheduled?”
    • Когда input_type="document", запрос типа “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.” станет “Represent the document for retrieval: 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-large-2-instruct, как следует из названия, обучена отвечать на дополнительные инструкции, которые добавляются к входному тексту. Для классификации, кластеризации или других подзадач MTEB используйте инструкции здесь.
Квантование в эмбеддингах преобразует значения высокой точности, такие как 32-битные числа с плавающей точкой одинарной точности, в форматы более низкой точности, такие как 8-битные целые числа или 1-битные двоичные значения, уменьшая хранение, память и затраты в 4 и 32 раза соответственно. Поддерживаемые модели Voyage позволяют квантование, указывая тип выходных данных с параметром output_dtype:
  • float: Каждый возвращаемый эмбеддинг представляет собой список 32-битных (4-байтных) чисел с плавающей точкой одинарной точности. Это значение по умолчанию и обеспечивает наивысшую точность / точность поиска.
  • int8 и uint8: Каждый возвращаемый эмбеддинг представляет собой список 8-битных (1-байтных) целых чисел в диапазоне от -128 до 127 и от 0 до 255 соответственно.
  • binary и ubinary: Каждый возвращаемый эмбеддинг представляет собой список 8-битных целых чисел, которые представляют упакованные в биты, квантованные однобитные значения эмбеддинга: int8 для binary и uint8 для ubinary. Длина возвращаемого списка целых чисел составляет 1/8 от фактической размерности эмбеддинга. Двоичный тип использует метод смещенного двоичного кода, о котором вы можете узнать больше в FAQ ниже.
Пример двоичного квантования Рассмотрим следующие восемь значений эмбеддинга: -0.03955078, 0.006214142, -0.07446289, -0.039001465, 0.0046463013, 0.00030612946, -0.08496094 и 0.03994751. При двоичном квантовании значения, меньшие или равные нулю, будут квантованы в двоичный ноль, а положительные значения — в двоичную единицу, что приведет к следующей двоичной последовательности: 0, 1, 0, 0, 1, 1, 0, 1. Эти восемь битов затем упаковываются в одно 8-битное целое число, 01001101 (с левым битом как наиболее значимым битом).
  • ubinary: Двоичная последовательность напрямую преобразуется и представляется как беззнаковое целое число (uint8) 77.
  • binary: Двоичная последовательность представляется как знаковое целое число (int8) -51, вычисленное с использованием метода смещенного двоичного кода (77 - 128 = -51).
Обучение Matryoshka создает эмбеддинги с представлениями от грубых к тонким в одном векторе. Модели Voyage, такие как voyage-code-3, которые поддерживают несколько выходных размерностей, генерируют такие эмбеддинги Matryoshka. Вы можете усечь эти векторы, сохранив ведущее подмножество размерностей. Например, следующий код Python демонстрирует, как усечь 1024-мерные векторы до 256 размерностей:
import voyageai
import numpy as np

def embd_normalize(v: np.ndarray) -> np.ndarray:
    """
    Нормализовать строки 2D массива numpy до единичных векторов, разделив каждую строку на ее евклидову
    норму. Вызывает ValueError, если какая-либо строка имеет норму ноль, чтобы предотвратить деление на ноль.
    """
    row_norms = np.linalg.norm(v, axis=1, keepdims=True)
    if np.any(row_norms == 0):
        raise ValueError("Cannot normalize rows with a norm of zero.")
    return v / row_norms


vo = voyageai.Client()

# Генерируем векторы voyage-code-3, которые по умолчанию являются 1024-мерными числами с плавающей точкой
embd = vo.embed(['Sample text 1', 'Sample text 2'], model='voyage-code-3').embeddings

# Устанавливаем более короткую размерность
short_dim = 256

# Изменяем размер и нормализуем векторы до более короткой размерности
resized_embd = embd_normalize(np.array(embd)[:, :short_dim]).tolist()

Ценообразование

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