Skip to main content
PGVector dla głosu: dogłębna analiza wysokowymiarowych embeddingów

PGVector dla głosu: dogłębna analiza wysokowymiarowych embeddingów

November 5, 2024

5

min read

Inżynieria

Zespół IdentityCall AI | Inżynieria | 10 min czytania

Od dźwięku do matematyki

Jak wyszukać „głos” w bazie danych? Nie da się zapytać WHERE voice = 'John'.
Potrzebujesz wektorowych embeddingów.

Ten artykuł wyjaśnia, jak IdentityCall wykorzystuje PostgreSQL + pgvector do błyskawicznej biometrycznej identyfikacji na milionach odcisków głosu.

Potok wektoryzacji

  1. Generowanie spektrogramu: surowy dźwięk (WAV) jest zamieniany na cepstrum w skali melowej (spektrogram).
  2. Sieć kodera (ResNet/interaction): głęboka sieć neuronowa przetwarza przypominający obraz spektrogram.
  3. Ekstrakcja embeddingu: przedostatnia warstwa sieci zwraca tablicę liczb o stałym rozmiarze (float32).
    • Wymiar: 256 dla Voice ID (kompaktowy, skupiony na tożsamości).
    • Wymiar: 768 dla wyszukiwania semantycznego (bogatszy, skupiony na znaczeniu).

Przykładowy embedding: [-0.024, 0.551, -0.112, ...]

Dlaczego PGVector?

Tradycyjnie wektory przechowywano w wyspecjalizowanych bazach danych (Pinecone, Milvus).
pgvector pozwala nam przechowywać embeddingi obok danych relacyjnych (User ID, logi połączeń) w naszej głównej bazie Postgres.

Odległość „podobieństwa kosinusowego”

Aby znaleźć dopasowanie, nie szukamy dokładnego dopasowania (dźwięk nigdy nie jest identyczny). Szukamy „najbliższego sąsiada” w przestrzeni 256-wymiarowej.
Używamy odległości kosinusowej (określa kąt między dwoma wektorami).

  • Odległość 0.0: identyczne.
  • Odległość < 0.2: dopasowanie o wysokiej pewności (ten sam mówca).
  • Odległość > 0.4: inny mówca.

Indeksowanie dla szybkości (IVFFlat vs HNSW)

Liniowe skanowanie miliona wektorów jest zbyt wolne (opóźnienie!). Używamy indeksowania.

  • HNSW (Hierarchical Navigable Small World): złoty standard. Buduje graf, który pozwala wyszukiwaniu „przybliżyć się” do właściwego sąsiedztwa wektorów w milisekundach.
-- Example PGVector Query
SELECT id, speaker_name, 1 - (embedding <=> '[...]'::vector) AS confidence
FROM voice_profiles
ORDER BY embedding <=> '[...]'::vector
LIMIT 1;

Przewaga architektury

Przechowując wektory w Postgres, zachowujemy zgodność z ACID oraz integralność referencyjną. Możemy usunąć użytkownika i natychmiast kaskadowo usunąć jego wektory głosu — ogromna korzyść dla RODO (prawo do bycia zapomnianym).

Zapisz głos. Odpytaj matematykę. Buduj z API IdentityCall.

Tags:

PostgreSQLpgvectorEmbeddingiBaza wektorowa