Modèle2Vec
Model2Vec est une technique d'intégration légère et performante qui transforme les modèles Sentence Transformer en modèles statiques compacts. Elle réduit la taille du modèle jusqu'à 50 fois et accélère l'inférence jusqu'à 500 fois, avec une perte de performance minimale. Model2Vec est idéal lorsque les ressources des appareils sont limitées.
Milvus s'intègre aux modèles Model2Vec via la classe Model2VecEmbeddingFunction. Cette classe fournit des méthodes pour encoder les documents et les requêtes à l'aide des modèles Model2Vec pré-entraînés et pour renvoyer les embeddings sous forme de vecteurs denses compatibles avec l'indexation Milvus.
Elle prend en charge à la fois le chargement de modèles à partir du Hugging Face Hub et le téléchargement de modèles Model2Vec locaux, ce qui offre une certaine souplesse pour le déploiement dans divers environnements.
Pour utiliser cette fonctionnalité, installez les dépendances nécessaires :
pip install --upgrade pymilvus
pip install "pymilvus[model]"
Ensuite, instanciez la fonction Model2VecEmbeddingFunction:
from pymilvus import model
model2vec_ef = model.dense.Model2VecEmbeddingFunction(
model_source='minishlab/potion-base-8M', # or local directory
)
Paramètres:
model_source(chaîne)
Spécifie la source du modèle Model2Vec à utiliser pour générer des embeddings. Il existe deux méthodes de chargement des modèles :
Chargement à partir du Hugging Face Hub (recommandé) :
- Fournir le nom du modèle sous forme de chaîne (par exemple,
"minishlab/potion-base-8M"). - Les options du modèle sont listées comme suit :
minishlab/potion-base-8M(par défaut)minishlab/potion-base-4Mminishlab/potion-base-2Mminishlab/potion-base-32Mminishlab/potion-retrieval-32M
- Fournir le nom du modèle sous forme de chaîne (par exemple,
Chargement local :
- Indiquer le chemin d'accès au fichier local où le modèle Model2Vec est stocké (par exemple,
"/path/to/local/model").
- Indiquer le chemin d'accès au fichier local où le modèle Model2Vec est stocké (par exemple,
Pour créer des embeddings pour les documents, utilisez la méthode 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)
Le résultat attendu est similaire à ce qui suit :
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,)
Pour créer des embeddings pour les requêtes, utilisez la méthode 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)
Le résultat attendu est similaire à ce qui suit :
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,)