Skip to main content
PGVector für Stimme: hochdimensionale Embeddings im Detail

PGVector für Stimme: hochdimensionale Embeddings im Detail

November 5, 2024

5

min read

Engineering

Vom IdentityCall AI Team | Engineering | 10 Min. Lesezeit

Vom Audio zur Mathematik

Wie sucht man in einer Datenbank nach einer „Stimme“? Man kann nicht WHERE voice = 'John' abfragen.
Sie brauchen Vektor-Embeddings.

Dieser Artikel erklärt, wie IdentityCall PostgreSQL + pgvector nutzt, um blitzschnelle biometrische Identifikation über Millionen von Stimmabdrücken durchzuführen.

Die Vektorisierungs-Pipeline

  1. Spektrogramm-Erzeugung: Das Rohaudio (WAV) wird in ein Mel-Frequenz-Cepstrum (Spektrogramm) umgewandelt.
  2. Encoder-Netz (ResNet/interaction): Ein tiefes neuronales Netz verarbeitet das bildähnliche Spektrogramm.
  3. Embedding-Extraktion: Die vorletzte Schicht des Netzes gibt ein Array von Zahlen fester Größe (float32) aus.
    • Dimension: 256 für Voice ID (kompakt, identitätsfokussiert).
    • Dimension: 768 für semantische Suche (reichhaltiger, bedeutungsfokussiert).

Beispiel-Embedding: [-0.024, 0.551, -0.112, ...]

Warum PGVector?

Traditionell wurden Vektoren in spezialisierten Datenbanken (Pinecone, Milvus) gespeichert.
pgvector erlaubt es uns, Embeddings zusammen mit relationalen Daten (User-ID, Anrufprotokolle) in unserer primären Postgres-Datenbank zu speichern.

Die Distanz der „Kosinus-Ähnlichkeit“

Um eine Übereinstimmung zu finden, suchen wir nicht nach einer exakten Übereinstimmung (Audio ist nie identisch). Wir suchen den „nächsten Nachbarn“ im 256-dimensionalen Raum.
Wir verwenden die Kosinus-Distanz (die den Winkel zwischen zwei Vektoren bestimmt).

  • Distanz 0.0: identisch.
  • Distanz < 0.2: Übereinstimmung mit hoher Konfidenz (derselbe Sprecher).
  • Distanz > 0.4: anderer Sprecher.

Indexierung für Geschwindigkeit (IVFFlat vs. HNSW)

Eine Million Vektoren linear zu scannen ist zu langsam (Latenz!). Wir verwenden Indexierung.

  • HNSW (Hierarchical Navigable Small World): der Goldstandard. Es baut einen Graphen auf, mit dem die Suche in Millisekunden auf die relevante Nachbarschaft der Vektoren „heranzoomen“ kann.
-- Example PGVector Query
SELECT id, speaker_name, 1 - (embedding <=> '[...]'::vector) AS confidence
FROM voice_profiles
ORDER BY embedding <=> '[...]'::vector
LIMIT 1;

Der Architekturvorteil

Indem wir die Vektoren in Postgres halten, wahren wir ACID-Konformität und referenzielle Integrität. Wir können einen Nutzer löschen und seine Stimmvektoren sofort per Kaskade mitlöschen – ein großer Gewinn für die DSGVO (Recht auf Vergessenwerden).

Speichern Sie die Stimme. Fragen Sie die Mathematik ab. Bauen Sie mit der IdentityCall API.

Tags:

PostgreSQLpgvectorEmbeddingsVektordatenbank