Skip to main content
PGVector para voz: análise aprofundada de embeddings de alta dimensão

PGVector para voz: análise aprofundada de embeddings de alta dimensão

November 5, 2024

5

min read

Engenharia

Pela equipa de IdentityCall AI | Engenharia | 10 min de leitura

Do áudio à matemática

Como se procura uma “voz” numa base de dados? Não se pode consultar WHERE voice = 'John'.
É preciso embeddings vetoriais.

Este artigo explica como a IdentityCall utiliza PostgreSQL + pgvector para realizar identificação biométrica ultrarrápida sobre milhões de impressões vocais.

O pipeline de vetorização

  1. Geração de espetrograma: O áudio bruto (WAV) é convertido num cepstro de frequência Mel (espetrograma).
  2. Rede codificadora (ResNet/interação): Uma rede neuronal profunda processa o espetrograma semelhante a uma imagem.
  3. Extração de embedding: A penúltima camada da rede produz um vetor de números de tamanho fixo (float32).
    • Dimensão: 256 para Voice ID (compacto, focado na identidade).
    • Dimensão: 768 para pesquisa semântica (mais rica, focada no significado).

Exemplo de embedding: [-0.024, 0.551, -0.112, ...]

Porquê o PGVector?

Tradicionalmente, os vetores eram armazenados em bases de dados especializadas (Pinecone, Milvus).
O pgvector permite-nos armazenar embeddings ao lado dos dados relacionais (ID de utilizador, registos de chamadas) na nossa base de dados Postgres principal.

A distância de “semelhança de cosseno”

Para encontrar uma correspondência, não procuramos uma correspondência exata (o áudio nunca é idêntico). Procuramos o “vizinho mais próximo” no espaço de 256 dimensões.
Usamos a distância de cosseno (que identifica o ângulo entre dois vetores).

  • Distância 0.0: Idêntico.
  • Distância < 0.2: Correspondência de alta confiança (mesmo locutor).
  • Distância > 0.4: locutor diferente.

Indexação para velocidade (IVFFlat vs HNSW)

Percorrer 1 milhão de vetores linearmente é demasiado lento (latência!). Usamos indexação.

  • HNSW (Hierarchical Navigable Small World): O padrão de referência. Constrói um grafo que permite à pesquisa “aproximar-se” da vizinhança relevante de vetores em milissegundos.
-- Exemplo de consulta PGVector
SELECT id, speaker_name, 1 - (embedding <=> '[...]'::vector) AS confidence
FROM voice_profiles
ORDER BY embedding <=> '[...]'::vector
LIMIT 1;

A vantagem da arquitetura

Ao manter os vetores no Postgres, mantemos a conformidade ACID e a integridade referencial. Podemos eliminar um utilizador e eliminar em cascata os seus vetores de voz instantaneamente — uma grande vantagem para o RGPD (direito ao esquecimento).

Armazene a voz. Consulte a matemática. Construa com a API da IdentityCall.

Tags:

PostgreSQLpgvectorEmbeddingsBase de dados vetorial