Model2Vec

Model2Vec - это легкая и высокопроизводительная техника встраивания, которая преобразует модели Sentence Transformer в компактные статические модели. Она позволяет уменьшить размер модели до 50 раз и ускорить вывод до 500 раз с минимальными потерями производительности. Model2Vec идеально подходит для устройств с ограниченными ресурсами.

Milvus интегрируется с моделями Model2Vec через класс Model2VecEmbeddingFunction. Этот класс предоставляет методы для кодирования документов и запросов с помощью предварительно обученных моделей Model2Vec и возвращает вложения в виде плотных векторов, совместимых с индексацией Milvus.

Он поддерживает как загрузку моделей из Hugging Face Hub, так и загрузку локальных моделей Model2Vec, что обеспечивает гибкость при развертывании в различных средах.

Чтобы воспользоваться этой функцией, установите необходимые зависимости:

pip install --upgrade pymilvus
pip install "pymilvus[model]"

Затем инстанцируйте Model2VecEmbeddingFunction:

from pymilvus import model

model2vec_ef = model.dense.Model2VecEmbeddingFunction(
    model_source='minishlab/potion-base-8M', # or local directory
)

Параметры:

  • model_source(string)

    Указывает источник модели Model2Vec, которая будет использоваться для генерации вкраплений. Поддерживается два способа загрузки моделей:

    1. Загрузка из Hugging Face Hub (рекомендуется):

      • Укажите имя модели в виде строки (например, "minishlab/potion-base-8M").
      • Опции модели перечислены ниже:
        • minishlab/potion-base-8M (По умолчанию)
        • minishlab/potion-base-4M
        • minishlab/potion-base-2M
        • minishlab/potion-base-32M
        • minishlab/potion-retrieval-32M
    2. Загрузка локально:

      • Укажите путь к локальному файлу, где хранится модель Model2Vec (например, "/path/to/local/model").

Чтобы создать вкрапления для документов, используйте метод encode_documents():

docs = [
    "Artificial intelligence was founded as an academic discipline in 1956.",
    "Alan Turing was the first person to conduct substantial research in AI.",
    "Born in Maida Vale, London, Turing was raised in southern England.",
]

docs_embeddings = model2vec_ef.encode_documents(docs)

# Print embeddings
print("Embeddings:", docs_embeddings)
# Print dimension and shape of embeddings
print("Dim:", model2vec_ef.dim, docs_embeddings[0].shape)

Ожидаемый результат будет похож на следующий:

Embeddings: [array([ 0.02220882,  0.11436888, -0.15094341,  0.08149259,  0.20425692,
       -0.15727402, -0.25320682, -0.00669029,  0.03157463,  0.08974048,
       -0.00148778, -0.01803541,  0.00230828, -0.0137875 , -0.19242321,
...
       -7.29782460e-03, -2.15345751e-02, -4.13905866e-02,  3.70773636e-02,
        5.45082428e-02,  1.36436718e-02,  1.38598625e-02,  3.91175086e-03],
      dtype=float32)]
Dim: 256 (256,)

Для создания вкраплений для запросов используйте метод encode_queries():

queries = ["When was artificial intelligence founded", 
           "Where was Alan Turing born?"]

query_embeddings = model2vec_ef.encode_queries(queries)

# Print embeddings
print("Embeddings:", query_embeddings)
# Print dimension and shape of embeddings
print("Dim", model2vec_ef.dim, query_embeddings[0].shape)

Ожидаемый результат похож на следующий:

Embeddings: [array([-1.87109038e-02, -2.81724217e-03, -1.67356253e-01, -5.30372337e-02,
        1.08304240e-01, -1.09269567e-01, -2.53464818e-01, -1.77880954e-02,
        3.05427872e-02,  1.68244764e-01, -7.25950347e-03, -2.52178032e-02,
...
        8.60440824e-03,  2.12906860e-03,  1.50156394e-02, -1.29304864e-02,
       -3.66544276e-02,  5.01735881e-03, -1.53137008e-02,  9.57900891e-04],
      dtype=float32)]
Dim 256 (256,)
Содержание

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?