Ce module constitue le pipeline de vectorisation batch et d'ingestion vectorielle pour le projet RAMEAU de l'ABES. Il prend en entrée des exports de notices bibliographiques (RAMEAU), calcule les représentations vectorielles (embeddings) via des modèles de Transformers, effectue des agrégations par moyenne de vecteurs sur les vedettes-matières, et alimente la base de données vectorielle Qdrant ou les index FAISS.
- Vue d'ensemble & Architecture
- Fonctionnalités Principales
- Description des Scripts
- Ajustements Sécurité & Corrections Appliquées
- Endpoints du Web Service REST (
load_qdrant_ws.py) - Pipeline de Vectorisation Batch (
rameau_vectorize.py) - Installation & Déploiement
- Tests & Évaluation
Le composant de vectorisation orchestre le traitement par lots volumineux de notices bibliographiques.
┌─────────────────────────────────────────────────────────────┐
│ Export RAMEAU (CSV/TSV Tabulé) │
│ (export_rameau.csv / export_rameau_update.csv) │
└──────────────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Orchestrateur FastAPI │
│ (`load_qdrant_ws.py`) │
└──────────────────────────────┬──────────────────────────────┘
│ Execution Local / Docker GPU
▼
┌─────────────────────────────────────────────────────────────┐
│ Calculateur d'Embeddings Batch │
│ (`rameau_vectorize.py`) │
│ • Encodage par mini-lots (SentenceTransformers) │
│ • Explosion des chaînes / concepts RAMEAU │
│ • Agrégation vectorielle par moyenne (NumPy/Pandas) │
└──────────────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Base Vectorielle Qdrant (INT8) │
│ Collection RAMEAU (Port 6333) │
└─────────────────────────────────────────────────────────────┘
- Calcul par Lots Optimisé (Batching) : Traitement des corpus par lots de 5 000 notices pour maximiser le rendement mémoire et GPU sans risque de dépassement de RAM.
- Support Multi-modèles :
allMin:all-MiniLM-L6-v2distiluse:distiluse-base-multilingual-cased-v2e5-large:intfloat/multilingual-e5-large
- Agrégation de Vecteurs par Concept : Pour une vedette RAMEAU donnée, les vecteurs de tous les documents associés sont regroupés et moyennés pour créer l'empreinte vectorielle unique de la vedette.
- Alimentation Qdrant avec Quantification INT8 : Ingestion optimisée dans Qdrant avec quantification scalaire (
INT8) maintenue en RAM pour une vitesse de recherche maximale. - Orchestration Hybride (Host / Conteneur Docker GPU) : Détection automatique de l'environnement d'exécution (
is_docker()) et lancement de conteneurs Docker éphémères munis du passthrough GPU si nécessaire.
| Fichier | Rôle |
|---|---|
load_qdrant_ws.py |
Web service REST FastAPI (Port 8100) servant d'API d'orchestration pour lancer les tâches de vectorisation et télécharger les logs d'exécution. |
rameau_vectorize.py |
Script Batch / CLI qui effectue le nettoyage des CSV, le calcul des embeddings, l'agrégation et l'ingestion dans Qdrant. |
Déclenche une tâche de vectorisation en arrière-plan.
action(str) : Type de tâche (init,update,auto,restore).conceptsORchains(str) : Type de sujet (concepts,chains).alias_model(str) : Modèle (allMin,distiluse,e5-large).avec_these(str) : Périmètre (only_mono,only_theses,with_theses).
curl -X GET "http://localhost:8100/lanceVectorisation/?action=update&conceptsORchains=concepts&alias_model=allMin&avec_these=only_mono"Permet de consulter / télécharger le fichier journal d'une exécution de vectorisation spécifique.
action,conceptsORchains,alias_model,avec_these
Permet de téléverser un nouveau fichier d'export de notices (export_rameau.csv ou export_rameau_update.csv) sur le serveur.
Le script CLI s'exécute directement en ligne de commande :
python rameau_vectorize.py --action init --conceptsORchains concepts --alias_model allMin --avec_these only_mono--action/-a:init(recharge tout),update(mise à jour différentielle),auto(détection selon la date des fichiers),restore(ré-ingestion dans Qdrant depuis l'archive.pkl).--conceptsORchains/-c:conceptsouchains.--alias_model/-m:allMin,distiluse,e5-large.--avec_these/-t:only_mono,only_theses,with_theses.
- Python 3.10+
- GPU NVIDIA recommandé (avec drivers CUDA) pour l'accélération
SentenceTransformer. - Docker Engine (si exécution conteneurisée).
Cloner le dépôt et installer les dépendances Python spécifiées dans le fichier requirements.txt :
# Création d'un environnement virtuel (recommandé)
python -m venv venv
source venv/bin/activate # Sur Linux/macOS
# venv/Scripts/activate # Sur Windows
# Installation des paquets
pip install --upgrade pip
pip install -r requirements.txtpython -m uvicorn load_qdrant_ws:app --host 0.0.0.0 --port 8100Le dossier test/ contient les scripts de validation technique de l'environnement de vectorisation.
Ce script s'assure que la machine dispose des prérequis matériels nécessaires (mémoire RAM disponible) et valide la cohérence des arguments passés en ligne de commande pour le pipeline de vectorisation batch (rameau_vectorize.py). Il évite les plantages système en plein milieu d'une exécution de vectorisation lourde.
Exécution :
python test/test_preflight_checks.py --action update --conceptsORchains concepts --alias_model allMin --avec_these only_mono- test_data.csv : Fichier de référence contenant la liste de PPN exclus de l'entraînement (et donc du calcul de la moyenne vectorielle par concept). Il garantit que le pipeline d'ingestion n'introduit aucun biais sur l'ensemble d'évaluation (pas de data leakage).