PGVector dla głosu: dogłębna analiza wysokowymiarowych embeddingów
November 5, 2024
•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
- Generowanie spektrogramu: surowy dźwięk (WAV) jest zamieniany na cepstrum w skali melowej (spektrogram).
- Sieć kodera (ResNet/interaction): głęboka sieć neuronowa przetwarza przypominający obraz spektrogram.
- 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:
