Skip to main content
PGVector voor stem: verdieping in hoogdimensionale embeddings

PGVector voor stem: verdieping in hoogdimensionale embeddings

November 5, 2024

5

min read

Engineering

Door het IdentityCall AI-team | Engineering | 10 min leestijd

Van audio naar wiskunde

Hoe zoek je een “stem” in een database? Je kunt niet WHERE voice = 'John' opvragen.
Je hebt vector-embeddings nodig.

Dit artikel legt uit hoe IdentityCall PostgreSQL + pgvector gebruikt om razendsnelle biometrische identificatie uit te voeren op miljoenen stemafdrukken.

De vectorisatiepijplijn

  1. Spectrogramgeneratie: de ruwe audio (WAV) wordt omgezet in een Mel-frequentiecepstrum (spectrogram).
  2. Encodernetwerk (ResNet/interaction): een diep neuraal netwerk verwerkt het beeldachtige spectrogram.
  3. Embedding-extractie: de voorlaatste laag van het netwerk levert een array van getallen met vaste grootte (float32).
    • Dimensie: 256 voor Voice ID (compact, gericht op identiteit).
    • Dimensie: 768 voor semantisch zoeken (rijker, gericht op betekenis).

Voorbeeld-embedding: [-0.024, 0.551, -0.112, ...]

Waarom PGVector?

Traditioneel werden vectoren opgeslagen in gespecialiseerde databases (Pinecone, Milvus).
pgvector stelt ons in staat embeddings naast relationele data (gebruikers-ID, gesprekslogs) op te slaan in onze primaire Postgres-database.

De afstand op basis van “cosinusgelijkenis”

Om een match te vinden zoeken we niet naar een exacte match (audio is nooit identiek). We zoeken de “dichtstbijzijnde buur” in de 256-dimensionale ruimte.
We gebruiken cosinusafstand (die de hoek tussen twee vectoren bepaalt).

  • Afstand 0.0: identiek.
  • Afstand < 0.2: match met hoge betrouwbaarheid (dezelfde spreker).
  • Afstand > 0.4: andere spreker.

Indexeren voor snelheid (IVFFlat vs HNSW)

1 miljoen vectoren lineair scannen is te traag (latentie!). We gebruiken indexering.

  • HNSW (Hierarchical Navigable Small World): de gouden standaard. Het bouwt een graaf waarmee de zoekopdracht in milliseconden kan “inzoomen” op de relevante buurt van vectoren.
-- Example PGVector Query
SELECT id, speaker_name, 1 - (embedding <=> '[...]'::vector) AS confidence
FROM voice_profiles
ORDER BY embedding <=> '[...]'::vector
LIMIT 1;

Het architectuurvoordeel

Door de vectoren in Postgres te houden behouden we ACID-compliance en referentiële integriteit. We kunnen een gebruiker verwijderen en zijn stemvectoren onmiddellijk in cascade mee verwijderen—een grote winst voor de AVG (recht op vergetelheid).

Sla de stem op. Bevraag de wiskunde. Bouw met de IdentityCall-API.

Tags:

PostgreSQLpgvectorEmbeddingsVectordatabase