Les bases de données vectorielles permettent de stocker et d’indexer des données à haute dimension générées par des modèles d’apprentissage automatique. Elles sont la pierre angulaire de l’IA moderne, car elles permettent le stockage d’informations contextuelles et une recherche sémantique pertinente.
Bien qu’elles soient souvent associées à la génération augmentée par récupération (RAG), leurs applications vont bien au-delà. En détail, elles permettent la recherche sémantique, les systèmes de recommandation, la détection d’anomalies et bien d’autres applications.
Suivez ce guide pour comprendre ce que sont les bases de données vectorielles, comment elles fonctionnent, comment les utiliser dans un exemple complet et ce que l’avenir leur réserve !
Que sont les bases de données vectorielles ?
Les bases de données vectorielles sont des systèmes de stockage conçus pour contenir des données vectorielles. Dans ce contexte, un vecteur fait référence à une intégration numérique qui représente des données non structurées telles que du texte, des images ou de l’audio, généralement produites par un modèle d’apprentissage automatique.
Contrairement aux bases de données traditionnelles, les bases de données vectorielles stockent des données à haute dimension sous forme de vecteurs numériques denses et les indexent dans un espace à N dimensions, ce qui permet d’optimiser les recherches basées sur la similarité.
L’importance croissante des bases de données vectorielles dans l’IA/ML
Dans la plupart des cas, les bases de données SQL traditionnelles ne sont pas bien adaptées aux tâches d’IA et d’apprentissage automatique. En effet, elles stockent des données structurées et ne prennent en charge que les requêtes de correspondance exacte ou les recherches de similarité limitées. Elles ont donc du mal à gérer les contenus non structurés et à capturer les relations sémantiques entre les points de données.
Aujourd’hui, les applications d’IA nécessitent une compréhension contextuelle des données. Les bases de données relationnelles ne sont pas optimisées pour le stockage ou l’interrogation de ces données. Les bases de données vectorielles remédient à ces limitations en prenant en charge les recherches basées sur la similarité qui reflètent le sens et le contexte, ouvrant ainsi la voie à la compréhension sémantique des données.
Le scénario le plus courant pour cette technologie est la génération augmentée par la recherche (RAG), mais d’autres cas d’utilisation sont possibles :
- Moteurs de recherche sémantique
- Systèmes de recommandation
- Détection d’anomalies dans les séries de données temporelles
- Classification et recherche d’images dans le domaine de la vision par ordinateur
- Applications de traitement du langage naturel (NLP)
Fonctionnement des bases de données vectorielles
Les bases de données vectorielles gèrent les données sous la forme d’encastrements vectoriels, qui existent dans un espace à haute dimension. Chaque dimension représente une caractéristique des données, correspondant à une caractéristique spécifique des données d’origine (représentées sous forme d’encastrement) telles qu’elles sont interprétées par le modèle ML. Plus la dimensionnalité de l’intégration est élevée, plus la représentation est détaillée, ce qui permet une compréhension plus riche de la structure des données.
Pour trouver des données sémantiquement similaires, les bases de données vectorielles utilisent des mesures de similarité telles que :
- Similitude du cosinus: Mesure le cosinus de l’angle entre deux vecteurs pour évaluer la similitude de leur direction. Cette méthode est couramment utilisée pour les données textuelles.
- Distance euclidienne: Mesure la distance en ligne droite entre deux vecteurs, utile pour les données spatiales où la direction et la magnitude sont importantes.
- Similitude par produit point: Calcule le produit des composantes vectorielles correspondantes, un produit point plus élevé indiquant une plus grande similarité. Cette méthode est utile dans les systèmes de recommandation et les tâches de classement.
Tout comme les bases de données SQL et NoSQL utilisent des index pour accélérer l’interrogation des données, les bases de données vectorielles peuvent utiliser des techniques d’indexation avancées telles que :
- Voisin le plus proche (ANN): Accélère les recherches de similarités en approximant les vecteurs les plus proches, ce qui réduit le coût de calcul par rapport aux recherches exactes.
- Petit monde hiérarchique navigable (HNSW) : Représente les vecteurs dans une structure graphique pour une navigation plus rapide dans les grands espaces à haute dimension.
En outre, des techniques de partitionnement et de regroupement peuvent être appliquées pour organiser les données vectorielles en groupes plus petits et plus faciles à gérer. Ces méthodes améliorent à la fois l’efficacité du stockage et les performances de recherche.
Options populaires de bases de données vectorielles
Maintenant que vous savez ce que sont les bases de données vectorielles et comment fonctionne leur infrastructure de données IA, vous êtes prêt à explorer les options de bases de données vectorielles les plus populaires. Nous analyserons chacune d’entre elles en fonction des aspects suivants :
- Architecture
- Caractéristiques de performance
- Capacités d’intégration
- Modèle de tarification
- Les meilleurs cas d’utilisation
Si vous souhaitez savoir quelles sont les bases de données vectorielles qui se distinguent, consultez le tableau récapitulatif ci-dessous :
Nom de la base de données | Open Source/Commercial | Options d’hébergement | Meilleur pour | Aspects particuliers | Complexité de l’intégration |
---|---|---|---|---|---|
Pomme de pin | Commercial | Nuage sans serveur entièrement géré | Recherche sémantique, questions-réponses, chatbots | Lectures/écritures parallèles, intégration transparente d’OpenAI/Vercel, prise en charge de la mémoire à long terme | Faible – SDK pour de nombreuses langues, intégrations plug-and-play |
Weaviate | Open source et commercial | Auto-hébergé, cloud sans serveur, cloud d’entreprise géré. | Recherche dans les médias/le texte, classification, reconnaissance faciale | HNSW + indexation vectorielle plate, index inversés, intégration d’écosystèmes riches | Moyen – Large surface d’intégration, courbe d’apprentissage |
Milvus | Open source et commercial | Auto-hébergé, Zilliz Cloud | RAG, recommandation, recherche dans les médias, détection des anomalies | Partage de données, ingestion de flux, indexation de données multimodales | Moyen – Nombreux SDK, fonctionne avec les principaux frameworks AI/LLM |
Chroma | Open source et commercial | Auto-hébergé, Chroma Cloud | Applications légères, recherche de CV, chatbots d’IA | Mode en mémoire, API REST via Swagger, intégrations d’intégration riches | Faible – SDKs Python et TypeScript, conçus pour être faciles à utiliser |
Qdrant | Open source et commercial | Auto-hébergement, nuage géré, nuage hybride, nuage privé | RAG, recherche avancée, analyse, agents d’intelligence artificielle | Indexation modulaire des charges utiles/vecteurs, HNSW, mises à jour fines | Moyen – Large support API/client, évolutif et modulaire |
Il est temps de se plonger dans les options de base de données vectorielles sélectionnées !
Pomme de pin
- Architecture: Entièrement gérée, sans serveur
- Caractéristiques de performance
: Polylang placeholder ne pas modifier
- Capacités d’intégration
:Polylang placeholder do not modify
- Modèle de tarification
:Polylang placeholder ne pas modifier
- Meilleur cas d’utilisation
:Polylang placeholder do not modify
Weaviate
- Architecture: Modulaire, cloud-native
- Caractéristiques de performance
: Polylang placeholder ne pas modifier
- Capacités d’intégration
:Polylang placeholder do not modify
- Modèle de tarification
:Polylang placeholder ne pas modifier
- Meilleur cas d’utilisation
:Polylang placeholder do not modify
Milvus
- Architecture: Architecture de stockage partagé avec désagrégation du stockage et du calcul pour une évolutivité horizontale
- Caractéristiques de performance
: Polylang placeholder ne pas modifier
- Capacités d’intégration
:Polylang placeholder do not modify
- Modèle de tarification
:Polylang placeholder ne pas modifier
- Meilleur cas d’utilisation
:Polylang placeholder do not modify
Chroma
- Architecture: Serveur à nœud unique pour les petites applications ou distribué dans le nuage pour les applications plus importantes.
- Caractéristiques de performance
: Polylang placeholder ne pas modifier
- Capacités d’intégration
:Polylang placeholder do not modify
- Modèle de tarification
:Polylang placeholder ne pas modifier
- Meilleur cas d’utilisation
:Polylang placeholder do not modify
Qdrant
- Architecture: Hébergement local autonome ou déploiement distribué dans le nuage pour les applications de grande envergure et à locataires multiples.
- Caractéristiques de performance
: Polylang placeholder ne pas modifier
- Capacités d’intégration
:Polylang placeholder do not modify
- Modèle de tarification
:Polylang placeholder ne pas modifier
- Meilleur cas d’utilisation
:Polylang placeholder do not modify
Alimenter les bases de données vectorielles avec Bright Data
Les deux aspects clés qui influencent la qualité des encastrements vectoriels sont les suivants :
- Le modèle d’apprentissage automatique utilisé pour générer les encastrements.
- La qualité des données d’entrée introduites dans ce modèle.
Cela montre qu’un pipeline de base de données vectorielles n’est aussi puissant que les données qui l’alimentent. Si les embeddings sont produits à partir de données de faible qualité, incomplètes ou bruyantes, même les meilleurs modèles ML et bases de données vectorielles donneront des résultats médiocres.
Vous comprenez maintenant pourquoi il est si important de collecter des données propres, riches et complètes – et c’est là que Bright Data entre en jeu !
Bright Data est une plateforme leader de scraping web et de collecte de données qui vous permet de collecter de manière éthique et efficace des données web de haute qualité à grande échelle. Ses solutions de collecte de données peuvent extraire des données structurées en temps réel à partir de centaines de domaines. De plus, ces solutions peuvent être intégrées directement dans vos propres flux de travail afin d’améliorer les performances de vos scripts de scraping personnalisés.
Le principal avantage de cette approche de l’approvisionnement en données est que Bright Data s’occupe de tout. Il gère l’infrastructure, s’occupe de la rotation des adresses IP, contourne les protections anti-bots, analyse les données HTML et assure une couverture complète de la conformité.
Ces outils de scraping web vous permettent d’accéder à des données fraîches et structurées directement à partir de pages web. Le web étant la plus grande source de données, il est idéal d’y puiser pour générer des encastrements vectoriels riches en contexte. Ces encastrements peuvent ensuite alimenter un large éventail d’applications d’intelligence artificielle et de recherche, telles que :
- Informations sur les produits pour les recommandations en matière de commerce électronique
- Articles de presse pour la recherche sémantique et contextuelle
- Contenu des médias sociaux pour la détection et l’analyse des tendances
- Des listes d’entreprises pour des expériences tenant compte de la localisation
Des données brutes aux encodages vectoriels : Le processus de transformation
Le processus de transformation des données brutes en vecteurs intégrés se déroule en deux étapes :
- Prétraitement des données
- Génération de l’intégration
Décortiquons-les pour mieux comprendre le fonctionnement et les implications de chaque étape.
Étape 1. Prétraitement des données
Les données brutes ont tendance à être bruyantes, redondantes ou non structurées. La première étape de la transformation des données brutes en embeddings consiste à les nettoyer et à les normaliser. Ce processus permet d’améliorer la qualité et la cohérence des données d’entrée avant de les introduire dans un modèle d’apprentissage automatique pour la génération d’encastrements.
Par exemple, lorsqu’il s’agit d’utiliser des données web dans l’apprentissage automatique, les étapes de prétraitement les plus courantes sont les suivantes :
- Analyse du code HTML brut pour en extraire le contenu structuré.
- Réduction des espaces et normalisation des formats de données (par exemple, les prix, les dates et les symboles monétaires).
- Normaliser le texte en le convertissant en minuscules, en supprimant la ponctuation et en gérant les caractères HTML spéciaux.
- Déduplication du contenu pour éviter les informations redondantes.
Étape 2. Génération de l’intégration
Une fois les données nettoyées et prétraitées, elles peuvent être passées par un modèle d’intégration ML. Celui-ci les transforme alors en un vecteur numérique dense.
Le choix du modèle d’intégration dépend du type de données d’entrée et de la qualité de sortie souhaitée. Voici quelques méthodes courantes :
- Modèles d’intégration OpenAI: Ils génèrent des vecteurs de haute qualité, à usage général, avec une excellente compréhension sémantique.
- Sentence Transformers: Un cadre Python à source ouverte pour l’intégration de phrases, de textes et d’images à la pointe de la technologie. Il fonctionne localement et prend en charge de nombreux modèles pré-entraînés.
- Modèles d’intégration spécifiques à un domaine: affinés sur des ensembles de données spécialisés tels que des rapports financiers, des documents juridiques ou des textes biomédicaux afin d’obtenir des performances élevées dans des scénarios spécifiques.
Par exemple, voici comment vous pouvez utiliser les modèles d’intégration d’OpenAI pour générer une intégration
# requirement: pip install openai
from openai import OpenAI
client = OpenAI() # Reading the OpenAI key from the "OPENAI_API_KEY" env
# Sample input data (replace it with your input data)
input_data = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
"""
# Use an OpenAI embedding model for embedding generation
response = client.embeddings.create(
model="text-embedding-3-large",
input=input_data
)
# Get the embedding and print it
embedding = response.data[0].embedding
print(embedding)
Le résultat sera un vecteur à 3072 dimensions comme :
[
-0.005813355557620525,
# other 3070 elements...,
-0.006388738751411438
]
De même, voici comment vous pouvez produire des embeddings avec des transformateurs de phrases :
# requirement: pip install sentence_transformers
from sentence_transformers import SentenceTransformer
# Sample input data (replace it with your input data)
input_data = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
"""
# Load a pretrained Sentence Transformer model
model = SentenceTransformer("all-MiniLM-L6-v2")
# Embedding generation
embedding = model.encode(input_data)
# Print the resulting embedding
print(embedding)
Cette fois, le résultat sera un vecteur plus court de 384 dimensions :
[
-0.034803513,
# other 381 elements...,
-0.046595078
]
Il convient de noter qu’il existe un compromis entre la qualité de l’intégration et l’efficacité des calculs. Les grands modèles tels que ceux proposés par OpenAI produisent des encastrements riches et de haute précision, mais peuvent prendre du temps et même nécessiter des appels réseau à des modèles d’IA haut de gamme. D’autre part, les modèles locaux tels que ceux de SentenceTransformers sont gratuits et beaucoup plus rapides, mais peuvent sacrifier la nuance sémantique.
Le choix de la bonne stratégie d’intégration dépend de vos exigences en matière de performances et du niveau de précision sémantique que vous souhaitez atteindre.
Intégration pratique : Un guide pas à pas
Suivez les étapes ci-dessous et apprenez à passer des données brutes d’une page web à une recherche sémantique efficace avec un script Python.
Cette section du tutoriel vous guidera à travers le processus de :
- Utilisation de l’API Web Scraper de Bright Data pour récupérer des articles de presse de la BBC.
- Prétraitement des données extraites et préparation à la génération de l’incorporation.
- Génération d’enchâssements de textes à l’aide de SentenceTransformers.
- Mise en place de Milvus.
- Alimentation de la base de données vectorielles avec le texte traité et les encastrements.
- Effectuer des recherches pour extraire des articles de presse sémantiquement pertinents sur la base d’une requête de recherche.
Plongeons dans l’aventure !
Conditions préalables
Avant de commencer, assurez-vous que vous disposez des éléments suivants :
- Python 3+ installé localement
- Docker installé localement
- Un compte Bright Data
Si vous ne l’avez pas encore fait, installez Python et Docker sur votre machine, et créez un compte Bright Data gratuit.
Étape 1 : Collecte de données à l’aide de l’API Web Scraper de Bright Data
Il n’est pas toujours facile de récupérer des articles d’actualité sur , car de nombreux portails d’actualités protègent leurs pages par des mesures anti-scraping et anti-bots. Pour contourner ces protections de manière fiable et récupérer des données fraîches de la BBC, nous utiliserons l’API Web Scraper de Bright Data.
Cette API expose des points d’extrémité dédiés à la collecte de données structurées provenant de plus de 120 sites web populaires, dont la BBC. Voici comment fonctionne le processus de scraping :
- Vous faites une demande POST au point de terminaison approprié pour déclencher une tâche de scraping pour les URL spécifiées sur un domaine donné.
- Bright Data effectue la tâche de scraping sur le nuage.
- Vous interrogez périodiquement un autre point de terminaison jusqu’à ce que les données extraites soient prêtes (en format JSON, CSV ou autre).
Avant de vous lancer dans le code Python, assurez-vous d’installer la bibliothèque Requests:
pip install requests
Ensuite, consultez la documentation de Bright Data pour vous familiariser avec l’API Web Scraper. Récupérez également votre clé API.
Maintenant, utilisez le code ci-dessous pour récupérer les données de BBC news :
import requests
import json
import time
def trigger_bbc_news_articles_scraping(api_key, urls):
# Endpoint to trigger the Web Scraper API task
url = "https://api.brightdata.com/datasets/v3/trigger"
params = {
"dataset_id": "gd_ly5lkfzd1h8c85feyh", # ID of the BBC web scraper
"include_errors": "true",
}
# Convert the input data in the desired format to call the API
data = [{"url": url} for url in urls]
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
}
response = requests.post(url, headers=headers, params=params, json=data)
if response.status_code == 200:
snapshot_id = response.json()["snapshot_id"]
print(f"Request successful! Response: {snapshot_id}")
return response.json()["snapshot_id"]
else:
print(f"Request failed! Error: {response.status_code}")
print(response.text)
def poll_and_retrieve_snapshot(api_key, snapshot_id, output_file, polling_timeout=20):
snapshot_url = f"https://api.brightdata.com/datasets/v3/snapshot/{snapshot_id}?format=json"
headers = {
"Authorization": f"Bearer {api_key}"
}
print(f"Polling snapshot for ID: {snapshot_id}...")
while True:
response = requests.get(snapshot_url, headers=headers)
if response.status_code == 200:
print("Snapshot is ready. Downloading...")
snapshot_data = response.json()
# Write the snapshot to an output json file
with open(output_file, "w", encoding="utf-8") as file:
json.dump(snapshot_data, file, indent=4)
print(f"Snapshot saved to {output_file}")
return
elif response.status_code == 202:
print(F"Snapshot is not ready yet. Retrying in {polling_timeout} seconds...")
time.sleep(polling_timeout)
else:
print(f"Request failed! Error: {response.status_code}")
print(response.text)
break
if __name__ == "__main__":
BRIGHT_DATA_API_KEY = "<YOUR_BRIGHT_DATA_API_KEY>" # Replace it with your Bright Data's Web Scraper API key
# URLs of BBC articles to retrieve data from
urls = [
"https://www.bbc.com/sport/formula1/articles/c9dj0elnexyo",
"https://www.bbc.com/sport/formula1/articles/cgenqvv9309o",
"https://www.bbc.com/sport/formula1/articles/c78jng0q2dxo",
"https://www.bbc.com/sport/formula1/articles/cdrgdm4ye53o",
"https://www.bbc.com/sport/formula1/articles/czed4jk7eeeo",
"https://www.bbc.com/sport/football/articles/c807p94r41do",
"https://www.bbc.com/sport/football/articles/crgglxwge10o",
"https://www.bbc.com/sport/tennis/articles/cy700xne614o",
"https://www.bbc.com/sport/tennis/articles/c787dk9923ro",
"https://www.bbc.com/sport/golf/articles/ce3vjjq4dqzo"
]
snapshot_id = trigger_bbc_news_articles_scraping(BRIGHT_DATA_API_KEY, urls)
poll_and_retrieve_snapshot(BRIGHT_DATA_API_KEY, snapshot_id, "news-data.json")
Notez que les URL d’entrée que nous avons choisies font toutes référence à des articles sportifs de la BBC. Lancez le script ci-dessus, et vous obtiendrez un résultat comme celui-ci :
Request successful! Response: s_m9in0ojm4tu1v8h78
Polling snapshot for ID: s_m9in0ojm4tu1v8h78...
Snapshot is not ready yet. Retrying in 20 seconds...
# ...
Snapshot is not ready yet. Retrying in 20 seconds...
Snapshot is ready. Downloading...
Snapshot saved to news-data.json
Comme vous pouvez le voir, le script continue à interroger jusqu’à ce que les données soient prêtes. Une fois le processus terminé, vous trouverez dans le dossier de votre projet un fichier nommé news-data.json
contenant les données des articles scrappés au format JSON structuré.
Étape 2 : Nettoyage et préparation des données récupérées
Si vous ouvrez le fichier de données de sortie, vous verrez un tableau de nouvelles comme celui-ci :
[
{
"input": {
"url": "https://www.bbc.com/sport/football/articles/c807p94r41do",
"keyword": ""
},
"id": "c807p94r41do",
"url": "https://www.bbc.com/sport/football/articles/c807p94r41do",
"author": "BBC",
"headline": "Man City Women: What has gone wrong for WSL side this season?",
"topics": [
"Football",
"Women's Football"
],
"publication_date": "2025-04-13T19:35:45.288Z",
"content": "With their Women's Champions League qualification ...",
"videos": [],
"images": [
// ...
],
"related_articles": [
// ...
],
"keyword": null,
"timestamp": "2025-04-15T13:14:27.754Z"
}
// ...
]
Maintenant que vous avez obtenu vos données, l’étape suivante consiste à importer ce fichier, à en nettoyer le contenu et à le préparer pour la génération de ML embedding.
Dans ce cas, Bright Data fait déjà le gros du travail pour vous. Les données récupérées sont renvoyées dans un format analysé et structuré, de sorte que vous n’avez pas à vous préoccuper de l’analyse des données HTML.
Au lieu de cela, ce que vous voulez faire, c’est.. :
- Normaliser les espaces blancs, les nouvelles lignes et les tabulations dans le contenu du texte.
- Combinez le titre de l’article avec le contenu du corps de l’article pour former une chaîne de texte unique et propre, adaptée à la génération de l’intégration.
Pour faciliter la manipulation des données, il est recommandé d’utiliser Pandas. Vous pouvez l’installer avec :
pip install pandas
Charger le fichier news-data.json
de l’étape précédente et exécuter la logique de traitement des données :
import pandas as pd
import json
import re
# Load your JSON array
with open("news-data.json", "r") as f:
news_data = json.load(f)
# Normalize whitespaces/newlines/tabs for better embedding quality
def clean_text(text):
text = re.sub(r"\s+", " ", text)
return text.strip()
# Create a DataFrame
df = pd.DataFrame(news_data)
# Combine headline and cleaned content for embedding input
df["text_for_embedding"] = df["headline"].map(clean_text) + ". " + df["content"].map(clean_text)
# Ensure ID is a string
df["id"] = df["id"].astype(str)
Notez que le nouveau champ text_for_embedding
contient le contenu textuel agrégé et nettoyé, prêt à être intégré.
Étape 3 : Génération de l’imbrication
Utilisez SentenceTransformer pour générer des embeddings à partir du champ text_for_embedding
:
from sentence_transformers import SentenceTransformer
# Step 2 ...
# Initialize a model for embedding generation
model = SentenceTransformer("all-MiniLM-L6-v2")
# Generate embeddings
texts = df["text_for_embedding"].tolist()
embeddings = model.encode(texts, show_progress_bar=True, batch_size=16)
# Store the resulting emebeddings in the DataFrame
df["embedding"] = embeddings.tolist()
Puisque show_progress_bar
est fixé à True
, sentence_transformers
affichera une barre de progression dans le terminal pendant la génération de l’incorporation. Cela est particulièrement utile lors du traitement de grands ensembles de données, car l’opération peut prendre un certain temps.
Les intégrations vectorielles générées sont directement stockées dans la colonne d’intégration
du DataFrame original de l’étape 1.
Étape 4 : Choix et configuration de la base de données vectorielle
Milvus est un excellent choix pour une base de données vectorielle dans cet exemple parce qu’il est gratuit, open source, et qu’il prend en charge la recherche sémantique comme l’un de ses principaux cas d’utilisation.
Pour installer Milvus sur votre machine locale, suivez les pages de documentation officielle :
Une instance de Milvus doit s’exécuter localement sur le port 19530
.
Ensuite, installez pymilvus, le
client Python Milvus :
pip install pymilvus
Note: La version du serveur Milvus doit correspondre à la version du client Python. Des versions incompatibles peuvent entraîner des erreurs de connexion. Vous pouvez trouver les combinaisons de versions prises en charge sur la page des versions de Milvus GitHub. À ce jour, la combinaison suivante fonctionne :
- Version du serveur Milvus :
2.5.9
- Version de
pymilvus
:2.5.6
Étape 5 : Chargement des encastrements dans la base de données vectorielle
Utilisez pymilvus
pour vous connecter à votre serveur Milvus local, créer une collection news_articles
, définir son schéma et son index, et l’alimenter avec les embeddings :
from pymilvus import connections, utility, CollectionSchema, FieldSchema, DataType, Collection
# Step 4...
# Connect to Milvus
connections.connect("default", host="localhost", port="19530")
# Drop the "news_articles" collection if it already exists
if utility.has_collection("news_articles"):
utility.drop_collection("news_articles")
# Define the collection's schema
fields = [
FieldSchema(name="id", dtype=DataType.VARCHAR, is_primary=True, max_length=64),
FieldSchema(name="url", dtype=DataType.VARCHAR, max_length=65535),
FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=65535),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=384),
]
schema = CollectionSchema(fields, description="News article embeddings for semantic search")
collection = Collection(name="news_articles", schema=schema)
# Create an index on the embedding field
index_params = {
"metric_type": "COSINE",
"index_type": "HNSW",
}
collection.create_index(field_name="embedding", index_params=index_params)
# Load the collection for the first time
collection.load()
# Prepare data for insertion
ids = df["id"].tolist()
urls = df["url"].tolist()
texts = df["text_for_embedding"].tolist()
vectors = df["embedding"].tolist()
# Insert the data into the Milvus collection
collection.insert([ids, urls, texts, vectors])
collection.flush()
Après ces lignes de code, la collection news_articles
sur votre serveur Milvus local contiendra les données d’intégration, prêtes à prendre en charge les requêtes de recherche sémantique.
Étape 6 : Effectuer des recherches sémantiques
Définir une fonction pour effectuer une recherche sémantique sur la collection news_articles
:
# Step 5...
def search_news(query: str, top_k=3, score_threshold=0.5):
query_embedding = model.encode([query])
search_params = {"metric_type": "COSINE"}
results = collection.search(
data=query_embedding,
anns_field="embedding",
param=search_params,
limit=top_k,
output_fields=["id", "url", "text"]
)
for hits in results:
for hit in hits:
if hit.score >= score_threshold:
print(f"Score: {hit.score:.4f}")
print(f"URL: {hit.fields["url"]}")
print(f"Text: {hit.fields["text"][:300]}...\n")
Elle recherche les trois premiers résultats qui correspondent sémantiquement à la requête fournie, en ne renvoyant que ceux dont le score de similarité est supérieur à 0,5
. Étant donné que nous utilisons la similarité cosinus, le score va de -1
(complètement opposé) à 1
(correspondance parfaite).
Vous pouvez désormais effectuer une recherche sémantique sur la requête “Avenir de l’écurie Red Bull en Formule 1” avec :
search_news("Future of the Red Bull racing team in Formula 1")
Le résultat sera le suivant :
Score: 0.5736
URL: https://www.bbc.com/sport/formula1/articles/c9dj0elnexyo
Text: Max Verstappen: Red Bull adviser Helmut Marko has 'great concern' about world champion's future with team. Saudi Arabian Grand PrixVenue: Jeddah Dates: 18-20 April Race start: 18:00 BST on SundayCoverage: Live radio commentary of practice, qualifying and race online and BBC 5 Sports Extra; live text...
Score: 0.5715
URL: https://www.bbc.com/sport/formula1/articles/czed4jk7eeeo
Text: F1 engines: A return to V10 or hybrid - what's the future?. Christian Horner's phone rang. It was Bernie Ecclestone. Red Bull's team principal picked up, switched to speakerphone and placed it on the table in front of the assembled Formula 1 bosses.We're in the F1 Commission, Horner told Ecclestone....
Si vous lisez les articles retrouvés, vous verrez que la requête n’est pas littéralement présente dans le texte. Néanmoins, les articles retrouvés traitent clairement de l’avenir de Red Bull en Formule 1, ce quidémontre la puissance des vecteurs intégrés !
Optimisation des performances de la base de données vectorielle
Pour tirer le meilleur parti de votre base de données vectorielle, commencez par organiser vos données en collections significatives. Envisagez ensuite de mettre en œuvre le partage et le regroupement des données, et de définir des stratégies d’indexation optimisées pour vos modèles de requête spécifiques.
Gardez à l’esprit que nombre de ces optimisations sont plus efficaces une fois que votre processus de base de données vectorielles est mature. Cela se produit lorsque vous avez une bonne compréhension des données qui sont interrogées le plus fréquemment. Ce n’est qu’à ce moment-là que vous pourrez optimiser les performances en vous basant sur des modèles d’utilisation réels, plutôt que sur des hypothèses prématurées.
Parmi les autres problèmes de performance courants, citons la dérive de l’incorporation, l’incohérence des dimensions des vecteurs et les données périmées ou dupliquées. Pour y remédier, il convient de procéder régulièrement à une nouvelle incorporation, d’assurer la cohérence du schéma pour les données à haute dimension et de mettre en place des tâches de nettoyage automatisées.
Lorsque de nouvelles données entrent dans votre système, vous devrez également prendre en charge les mises à jour vectorielles en temps réel ou les insertions programmées par lots. À cet égard, n’oubliez pas que l’ingestion de données non vérifiées peut entraîner des encastrements bruyants et des résultats de recherche peu fiables.
Enfin, pour optimiser les bases de données à nœud unique, envisagez d’ajuster des paramètres tels que la précision de l’index, la dimensionnalité du vecteur et le nombre d’unités. Au fur et à mesure que votre charge de travail augmente, la mise à l’échelle horizontale est généralement préférée à la mise à l’échelle verticale. Vous pouvez donc vous retrouver avec plusieurs nœuds distribués, généralement dans le nuage.
Tendances futures des bases de données vectorielles
Les systèmes d’IA modernes sont encore relativement nouveaux et l’écosystème évolue rapidement. Les bases de données vectorielles étant le moteur d’une grande partie du mouvement de l’IA, la technologie elle-même s’adapte en permanence pour prendre en charge des applications de plus en plus complexes dans le monde réel.
Pour l’avenir, les tendances intéressantes qui façonnent l’avenir des bases de données vectorielles sont les suivantes :
- Intégration de la recherche hybride: Combinaison de la recherche vectorielle avec des systèmes relationnels ou NoSQL traditionnels pour permettre des requêtes plus flexibles sur des données structurées et non structurées.
- Prise en charge multimodale native: Permet le stockage unifié et l’interrogation d’encastrements provenant de diverses sources telles que le texte, les images, l’audio et la vidéo.
- Indexation et réglage plus intelligents: Utilisation de fonctionnalités telles que les paramètres auto-adaptés, le stockage économique et les intégrations de bases de données SQL pour améliorer l’évolutivité et la préparation de l’entreprise.
Conclusion
Comme vous l’avez appris dans ce guide, les bases de données vectorielles sont un élément essentiel du stockage des données d’apprentissage automatique. En particulier, vous avez compris ce que sont les bases de données vectorielles, comment elles fonctionnent, les meilleures options actuellement disponibles dans l’industrie et leur rôle vital dans l’infrastructure moderne des données d’IA.
Vous avez également vu comment passer de données brutes à des enchâssements stockés dans une base de données vectorielle pour un cas d’utilisation de recherche sémantique. Cela a mis en évidence l’importance de commencer avec des données complètes, fiables et à jour, et c’est exactement là que les solutions de web scraping de Bright Data entrent en jeu.
Commencez un essai gratuit avec Bright Data pour obtenir des données de haute qualité afin d’alimenter vos applications de bases de données vectorielles !
Aucune carte de crédit requise