PGVector pour la voix : plongée dans les embeddings à haute dimension
November 5, 2024
•min read
Ingénierie
Par l’équipe IdentityCall AI | Ingénierie | 10 min de lecture
De l’audio aux mathématiques
Comment rechercher une « voix » dans une base de données ? Vous ne pouvez pas interroger WHERE voice = 'John'.
Vous avez besoin d’embeddings vectoriels.
Cet article explique comment IdentityCall exploite PostgreSQL + pgvector pour réaliser une identification biométrique ultrarapide sur des millions d’empreintes vocales.
Le pipeline de vectorisation
- Génération du spectrogramme : l’audio brut (WAV) est converti en cepstre à échelle de Mel (spectrogramme).
- Réseau encodeur (ResNet/interaction) : un réseau de neurones profond traite le spectrogramme, semblable à une image.
- Extraction de l’embedding : l’avant-dernière couche du réseau produit un tableau de nombres de taille fixe (float32).
- Dimension : 256 pour Voice ID (compact, centré sur l’identité).
- Dimension : 768 pour la recherche sémantique (plus riche, centré sur le sens).
Exemple d’embedding : [-0.024, 0.551, -0.112, ...]
Pourquoi PGVector ?
Traditionnellement, les vecteurs étaient stockés dans des bases de données spécialisées (Pinecone, Milvus).
pgvector nous permet de stocker les embeddings à côté des données relationnelles (ID utilisateur, journaux d’appels) dans notre base de données Postgres principale.
La distance de « similarité cosinus »
Pour trouver une correspondance, nous ne cherchons pas une correspondance exacte (l’audio n’est jamais identique). Nous cherchons le « plus proche voisin » dans l’espace à 256 dimensions.
Nous utilisons la distance cosinus (qui identifie l’angle entre deux vecteurs).
- Distance 0.0 : identiques.
- Distance < 0.2 : correspondance à haute confiance (même locuteur).
- Distance > 0.4 : locuteur différent.
Indexation pour gagner en vitesse (IVFFlat vs HNSW)
Balayer 1 million de vecteurs de façon linéaire est trop lent (la latence !). Nous utilisons l’indexation.
- HNSW (Hierarchical Navigable Small World) : l’étalon-or. Il construit un graphe qui permet à la recherche de « zoomer » sur le voisinage pertinent de vecteurs en quelques millisecondes.
-- Example PGVector Query
SELECT id, speaker_name, 1 - (embedding <=> '[...]'::vector) AS confidence
FROM voice_profiles
ORDER BY embedding <=> '[...]'::vector
LIMIT 1;
L’avantage architectural
En conservant les vecteurs dans Postgres, nous préservons la conformité ACID et l’intégrité référentielle. Nous pouvons supprimer un utilisateur et effacer en cascade ses vecteurs vocaux instantanément, un atout majeur pour le RGPD (droit à l’oubli).
Stockez la voix. Interrogez les mathématiques. Développez avec l’API IdentityCall.
Tags:
