🚀 Essayez Zilliz Cloud, la version entièrement gérée de Milvus, gratuitement—découvrez des performances 10x plus rapides ! Essayez maintenant>>

milvus-logo
LFAI
  • Home
  • Blog
  • Présentation de l'intégration de PyMilvus avec les modèles d'intégration

Présentation de l'intégration de PyMilvus avec les modèles d'intégration

  • Engineering
June 05, 2024
Stephen Batifol

Milvus est une base de données vectorielles open-source conçue spécifiquement pour les applications d'IA. Que vous travailliez sur l'apprentissage automatique, l'apprentissage profond ou tout autre projet lié à l'IA, Milvus offre un moyen robuste et efficace de traiter des données vectorielles à grande échelle.

Désormais, grâce à l'intégration du module de modèle dans PyMilvus, le SDK Python pour Milvus, il est encore plus facile d'ajouter des modèles d'Embedding et de Reranking. Cette intégration simplifie la transformation de vos données en vecteurs consultables ou le reclassement des résultats pour des résultats plus précis, comme dans Retrieval Augmented Generation (RAG).

Dans ce blog, nous passerons en revue les modèles d'intégration dense, les modèles d'intégration clairsemée et les modèles de reclassement et nous montrerons comment les utiliser en pratique à l'aide de Milvus Lite, une version légère de Milvus qui peut être exécutée localement dans vos applications Python.

Encastrements denses et épars

Avant de vous expliquer comment utiliser nos intégrations, examinons les deux principales catégories d'encastrements vectoriels.

Lesencastrements vectoriels se répartissent généralement en deux catégories principales : Les encastrements denses et les encastrements épars.

  • Les embeddings denses sont des vecteurs à haute dimension dans lesquels la plupart ou tous les éléments sont non nuls, ce qui les rend idéaux pour encoder la sémantique d'un texte ou une signification floue.

  • Les embeddings épars sont des vecteurs à haute dimension dont de nombreux éléments sont nuls, ce qui les rend plus adaptés à l'encodage de concepts exacts ou adjacents.

Milvus prend en charge les deux types d'intégration et propose une recherche hybride. La recherche hybride vous permet d'effectuer des recherches dans différents champs vectoriels au sein d'une même collection. Ces vecteurs peuvent représenter différentes facettes des données, utiliser divers modèles d'intégration ou employer des méthodes de traitement des données distinctes, en combinant les résultats à l'aide de reclasseurs.

Comment utiliser nos intégrations d'intégration et de reclassement ?

Dans les sections suivantes, nous présentons trois exemples pratiques d'utilisation de nos intégrations pour générer des embeddings et effectuer des recherches vectorielles.

Exemple 1 : Utilisation de la fonction d'intégration par défaut pour générer des vecteurs denses

Vous devez installer le client pymilvus avec le package model pour utiliser les fonctions d'intégration et de reranking avec Milvus.

pip install "pymilvus[model]"

Cette étape installe Milvus Lite, qui vous permet d'exécuter Milvus localement dans votre application Python. Elle inclut également le sous-paquet modèle, qui comprend tous les utilitaires pour l'incorporation et le reranking.

Le sous-paquetage de modèle prend en charge divers modèles d'intégration, y compris ceux d'OpenAI, Sentence Transformers, BGE-M3, BM25, SPLADE et les modèles pré-entraînés de Jina AI.

Cet exemple utilise le modèle DefaultEmbeddingFunction, basé sur le modèle all-MiniLM-L6-v2 Sentence Transformer pour plus de simplicité. Le modèle pèse environ 70 Mo et sera téléchargé lors de la première utilisation :

from pymilvus import model

# This will download "all-MiniLM-L6-v2", a lightweight model.
ef = model.DefaultEmbeddingFunction()

# Data from which embeddings are to be generated
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.",
]

embeddings = ef.encode_documents(docs)

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

Le résultat attendu devrait ressembler à ce qui suit :

Embeddings: [array([-3.09392996e-02, -1.80662833e-02,  1.34775648e-02,  2.77156215e-02,
      -4.86349640e-03, -3.12581174e-02, -3.55921760e-02,  5.76934684e-03,
       2.80773244e-03,  1.35783911e-01,  3.59678417e-02,  6.17732145e-02,
...
      -4.61330153e-02, -4.85207550e-02,  3.13997865e-02,  7.82178566e-02,
      -4.75336798e-02,  5.21207601e-02,  9.04406682e-02, -5.36676683e-02],
     dtype=float32)]
Dim: 384 (384,)

Exemple 2 : Générer des vecteurs épars à l'aide du modèle BM25

BM25 est une méthode bien connue qui utilise les fréquences d'occurrence des mots pour déterminer la pertinence entre les requêtes et les documents. Dans cet exemple, nous allons montrer comment utiliser BM25EmbeddingFunction pour générer des embeddings épars pour les requêtes et les documents.

Dans BM25, il est important de calculer les statistiques de vos documents pour obtenir l'IDF (Inverse Document Frequency), qui peut représenter les modèles dans vos documents. L'IDF mesure la quantité d'informations fournies par un mot, qu'il soit courant ou rare dans tous les documents.

from pymilvus.model.sparse import BM25EmbeddingFunction

# 1. Prepare a small corpus to search
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.",
]
query = "Where was Turing born?"
bm25_ef = BM25EmbeddingFunction()

# 2. Fit the corpus to get BM25 model parameters on your documents.
bm25_ef.fit(docs)

# 3. Store the fitted parameters to expedite future processing.
bm25_ef.save("bm25_params.json")

# 4. Load the saved params
new_bm25_ef = BM25EmbeddingFunction()
new_bm25_ef.load("bm25_params.json")

docs_embeddings = new_bm25_ef.encode_documents(docs)
query_embeddings = new_bm25_ef.encode_queries([query])
print("Dim:", new_bm25_ef.dim, list(docs_embeddings)[0].shape)

Exemple 3 : Utilisation d'un ReRanker

Un système de recherche vise à trouver les résultats les plus pertinents rapidement et efficacement. Traditionnellement, des méthodes telles que BM25 ou TF-IDF ont été utilisées pour classer les résultats de recherche sur la base de la correspondance des mots-clés. Les méthodes récentes, telles que la similarité cosinus basée sur l'intégration, sont simples mais peuvent parfois manquer les subtilités de la langue et, surtout, l'interaction entre les documents et l'intention d'une requête.

C'est là que l'utilisation d'un reclasseur peut s'avérer utile. Un reclasseur est un modèle d'IA avancé qui prend l'ensemble initial de résultats d'une recherche - souvent fourni par une recherche basée sur les embeddings/tokens - et les réévalue pour s'assurer qu'ils correspondent mieux à l'intention de l'utilisateur. Il va au-delà de la correspondance superficielle des termes pour prendre en compte l'interaction plus profonde entre la requête de recherche et le contenu des documents.

Pour cet exemple, nous utiliserons le Jina AI Reranker.

from pymilvus.model.reranker import JinaRerankFunction

jina_api_key = "<YOUR_JINA_API_KEY>"

rf = JinaRerankFunction("jina-reranker-v1-base-en", jina_api_key)

query = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"

documents = [
   "In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
   "The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
   "In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
   "The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems."
]

results = rf(query, documents)

for result in results:
   print(f"Index: {result.index}")
   print(f"Score: {result.score:.6f}")
   print(f"Text: {result.text}\n")

Le résultat attendu est similaire à ce qui suit :

Index: 1
Score: 0.937096
Text: The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.

Index: 3
Score: 0.354210
Text: The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.

Index: 0
Score: 0.349866
Text: In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.

Index: 2
Score: 0.272896
Text: In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.

Suivez-nous sur GitHub et rejoignez notre Discord !

Si vous avez aimé cet article de blog, pensez à étoiler Milvus sur GitHub, et n'hésitez pas à rejoindre notre Discord! 💙

Like the article? Spread the word

Continuer à Lire