Embeddings
Текстовые эмбеддинги - это числовые представления текста, которые позволяют измерять семантическое сходство. Это руководство знакомит с эмбеддингами, их применением и тем, как использовать модели эмбеддингов для таких задач, как поиск, рекомендации и обнаружение аномалий.
Перед внедрением эмбеддингов
При выборе провайдера эмбеддингов есть несколько факторов, которые вы можете учитывать в зависимости от ваших потребностей и предпочтений:
- Размер набора данных и специфика домена: размер набора данных для обучения модели и его релевантность домену, который вы хотите встроить. Более крупные или специфичные для домена данные обычно дают лучшие эмбеддинги внутри домена
- Производительность вывода: скорость поиска эмбеддингов и общая задержка. Это особенно важно учитывать для крупномасштабных производственных развертываний
- Настройка: возможности для продолжения обучения на частных данных или специализации моделей для очень специфичных доменов. Это может улучшить производительность на уникальных словарях
Как получить эмбеддинги с Anthropic
Anthropic не предлагает собственную модель эмбеддингов. Одним из провайдеров эмбеддингов, который имеет широкий выбор опций и возможностей, охватывающих все вышеперечисленные соображения, является Voyage AI.
Voyage AI создает современные модели эмбеддингов и предлагает настраиваемые модели для конкретных отраслевых доменов, таких как финансы и здравоохранение, или индивидуальные модели, дообученные для отдельных клиентов.
Остальная часть этого руководства предназначена для Voyage AI, но мы рекомендуем вам оценить различных поставщиков эмбеддингов, чтобы найти наиболее подходящий для вашего конкретного варианта использования.
Начало работы с Voyage AI
Чтобы получить доступ к эмбеддингам Voyage:
- Зарегистрируйтесь на сайте Voyage AI
- Получите API ключ
- Установите 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-2", 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()
. Вот спецификация:
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
и без него, совместимы
- Когда input_type установлен в
- truncation (bool, необязательно, по умолчанию
None
) - Следует ли обрезать входные тексты, чтобы они соответствовали длине контекста.- Если
True
, слишком длинные входные тексты будут обрезаны, чтобы соответствовать длине контекста, перед векторизацией моделью эмбеддингов - Если
False
, будет вызвана ошибка, если какой-либо заданный текст превышает длину контекста - Если не указано (по умолчанию
None
), 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": ["Образец текста 1", "Образец текста 2"],
"model": "voyage-2"
}'
Ответ, который вы получите, представляет собой JSON-объект, содержащий эмбеддинги и использование токенов:
{
"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, давайте посмотрим на это в действии с кратким примером.
Предположим, у нас есть небольшой корпус из шести документов для извлечения
documents = [
"Средиземноморская диета делает упор на рыбу, оливковое масло и овощи, считается, что она снижает риск хронических заболеваний.",
"Фотосинтез в растениях преобразует энергию света в глюкозу и производит необходимый кислород.",
"Инновации 20-го века, от радио до смартфонов, были сосредоточены на электронных достижениях.",
"Реки обеспечивают воду, орошение и среду обитания для водных видов, жизненно важных для экосистем.",
"Конференц-звонок Apple для обсуждения результатов четвертого финансового квартала и обновлений бизнеса запланирован на четверг, 2 ноября 2023 года, в 14:00 по тихоокеанскому времени / 17:00 по восточному времени.",
"Произведения Шекспира, такие как 'Гамлет' и 'Сон в летнюю ночь', остаются в литературе."
]
Сначала мы используем Voyage, чтобы преобразовать каждый из них в вектор эмбеддинга
import voyageai
vo = voyageai.Client()
# Встраиваем документы
doc_embds = vo.embed(
documents, model="voyage-2", input_type="document"
).embeddings
Эмбеддинги позволят нам выполнять семантический поиск/извлечение в векторном пространстве. Затем мы можем преобразовать пример запроса,
query = "Когда запланирован конференц-звонок Apple?"
в эмбеддинг, а затем провести поиск ближайших соседей, чтобы найти наиболее релевантный документ на основе расстояния в пространстве эмбеддингов.
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-2 | 16000 | 1536 | Самая мощная универсальная модель эмбеддингов Voyage AI. |
voyage-code-2 | 16000 | 1536 | Оптимизирована для извлечения кода (на 17% лучше альтернатив), а также SoTA на универсальных корпусах. Подробности смотрите в блоге Voyage. |
voyage-2 | 4000 | 1024 | Базовая универсальная модель эмбеддингов, оптимизированная как для задержки, так и для качества. |
voyage-lite-02-instruct | 4000 | 1024 | Обученная на инструкциях для задач классификации, кластеризации и текстового сходства предложений, которые являются единственными рекомендуемыми вариантами использования для этой модели. |
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:
- Подпишитесь на пакет модели
- Перейдите на страницу списка пакетов моделей и выберите модель для развертывания
- Нажмите кнопку
Continue to subscribe
- Внимательно ознакомьтесь с деталями на странице
Subscribe to this software
. Если вы согласны со стандартным лицензионным соглашением конечного пользователя (EULA), ценами и условиями поддержки, нажмите “Accept Offer” - После выбора
Continue to configuration
и выбора региона вам будет представлен Product Arn. Это ARN пакета модели, необходимый для создания развертываемой модели с помощью Boto3- Скопируйте ARN, соответствующий выбранному вами региону, и используйте его в следующей ячейке
- Разверните пакет модели
Отсюда создайте пространство JupyterLab в Sagemaker Studio, загрузите блокнот Voyage и следуйте инструкциям внутри.
FAQ
Цены
Посетите страницу цен Voyage для получения самой актуальной информации о ценах.