Q.1. Extensão pgvector - ordenação por similaridade #

O pgvector é uma extensão de código aberto para o PostgreSQL, que introduz um novo tipo de dados chamado vector, cujo tamanho define quantas dimensões o vetor contém, e oferece recursos de similaridade vetorial.

Nesse exemplo foram usados os codificadores de sentenças PORTULAN/serafim-900m-portuguese-pt-sentence-encoder e ulysses-camara/legal-bert-pt-br para ordenar as linhas de uma tabela conforme sua similaridade com a primeira linha dessa mesma tabela.

A similaridade é calculada pela distância do cosseno, usando o operador <=>, que mede o ângulo entre dois vetores, ignorando a magnitude, sendo o padrão recomendado para embeddings normalizados.

As linhas da tabela são:

postgres=# SELECT linha
postgres-# FROM linhas;

                linha
-------------------------------------
 Gato caça rato.
 Fui ver Tom & Jerry.
 O rato roeu a roupa do Rei de Roma.
 Felinos perseguem roedores.
 Assisti o programa do Ratinho.
(5 linhas)

Saída do programa usando o transformador de sentença PORTULAN/serafim-900m-portuguese-pt-sentence-encoder (1536 dimensões):

$ python3 ordsim.py serafim

-> [Distância: 0.0000] Gato caça rato.
-> [Distância: 0.2913] Felinos perseguem roedores.
-> [Distância: 0.3735] O rato roeu a roupa do Rei de Roma.
-> [Distância: 0.3770] Assisti o programa do Ratinho.
-> [Distância: 0.5881] Fui ver Tom & Jerry.

Saída do programa usando o transformador de sentença ulysses-camara/legal-bert-pt-br (768 dimensões):

$ python3 ordsim.py ulysses

-> [Distância: 0.0000] Gato caça rato.
-> [Distância: 0.3019] Felinos perseguem roedores.
-> [Distância: 0.6701] O rato roeu a roupa do Rei de Roma.
-> [Distância: 0.6774] Fui ver Tom & Jerry.
-> [Distância: 0.7681] Assisti o programa do Ratinho.

Como pode ser visto, Felinos perseguem roedores é uma linha mais próxima de Gato caça rato que as demais para os dois transformadores de sentença, mas as duas últimas linhas estão invertidas na saída destes dois transformadores de sentença.

Nota

O código-fonte do programa, os comandos SQL e os comandos do interpretador de comandos podem ser vistos em Extensão pgvector - ordenação por similaridade no GitLab.

Q.1.1. Veja também #