O MongoDB Vector Search oferece suporte à quantização automática de suas incorporações de vetores flutuantes (32-bit e 64-bit). Ele também suporta a ingestão e indexação de seus vetores escalares e binários pré-quantizados de determinados modelos de incorporação.
Sobre Quantização
Quantização é o processo de reduzir vetores de fidelidade total em menos bits. Ele reduz a quantidade de memória principal necessária para armazenar cada vetor em um índice do MongoDB Vector Search indexando os vetores de representação reduzidos. Isso permite o armazenamento de mais vetores ou vetores com dimensões superiores. Portanto, a quantização reduz o consumo de recursos e melhora a velocidade. Recomendamos a quantização para aplicativos com um grande número de vetores, como acima de 100,000.
Quantização escalar
Quantização escalar envolve primeiro identificar os valores mínimo e máximo para cada dimensão dos vetores indexados para estabelecer uma faixa de valores para uma dimensão. Em seguida, o intervalo é dividido em intervalos ou compartimentos de tamanhos iguais. Finalmente, cada valor de flutuação é mapeado para um compartimento para converter os valores de flutuação contínuos em inteiros discretos. No MongoDB Vector Search, esta quantização reduz o custo de RAM do vetor incorporado para cerca de um quarto (1/3.75) do custo pré-quantização.
Quantização binária
A quantização binária envolve assumir um ponto médio de 0 para cada dimensão, o que normalmente é apropriado para incorporações normalizadas para comprimento 1, como o text-embedding-3-large da OpenAI. Em seguida, cada valor no vetor é comparado ao ponto médio e recebe um valor binário de 1 se for maior que o ponto médio e um valor binário de 0 se for menor ou igual ao ponto médio. No MongoDB Vector Search, essa quantização reduz o custo de RAM da incorporação do vetor para um vigésimo quarto (1/24) do custo da pré-quantização. O motivo pelo qual não é 1/32 é porque a estrutura de dados que contém o gráfico Hierarchical Navigable Small Worlds em si, separada dos valores vetoriais, não é compactada.
Quando você executa uma query, o MongoDB Vector Search converte o valor float no vetor de query em um vetor binário usando o mesmo ponto médio para comparação eficiente entre o vetor de query e vetores binários indexados. Em seguida, ele reclassifica reavaliando os candidatos identificados na comparação binária usando os valores flutuantes originais associados a esses resultados do índice binário para refinar ainda mais os resultados. Os vetores de fidelidade total são armazenados em sua própria estrutura de dados no disco e só são referenciados durante a reclassificação quando você configura a quantização binária ou quando executa a pesquisa exata em vetores quantizados binários ou escalares.
Requisitos
A tabela a seguir apresenta os requisitos para a quantização automática e ingestão de vetores quantizados.
Observação
O Atlas armazena todos os valores de ponto flutuante internamente como o tipo de dados double; portanto, as incorporações de 32bits e 64bits são compatíveis com a quantização automática sem conversão.
Requerimento | Para int1 ingestão | Para int8 ingestão | Para Quantização escalar automática | Para Quantização Binária Automática |
|---|---|---|---|---|
Exige configurações de definição de índice | No | No | Sim | Sim |
Requer formatoBSON | Sim | Sim | No | No |
Armazenamento no mongod |
|
| binData(float32)array(double) | binData(float32)array(double) |
Método de similaridade suportado |
| cosineeuclideandotProduct | cosineeuclideandotProduct | cosineeuclideandotProduct |
Número de dimensões suportadas | Múltiplo de 8 | 1 a 8192 | 1 a 8192 | 1 a 8192 |
Oferece suporte às pesquisas ANN e ENN | Sim | Sim | Sim | Sim |
Como habilitar a quantização automática de vetores
Você pode configurar a Vector Search do MongoDB para quantizar automaticamente as incorporações de vetores flutuantes em sua coleção para tipos de representação reduzidos, como int8 (scalar) e binary em seus índices vetoriais.
Para definir ou alterar o tipo de quantização, especifique um valor de campo quantization de scalar ou binary na sua definição de índice. Isso aciona uma reconstrução de índice, semelhante a qualquer outra alteração na definição de índice. O tipo de quantização especificado aplica-se a todos os vetores indexados e vetores da query no momento da query. Você não precisa alterar sua query, pois os vetores dela são quantizados automaticamente.
Para a maioria dos modelos de incorporação, recomendamos a quantização binária com repontuação. Se você quiser usar modelos de dimensão inferior que não sejam QAT, use a quantização escalar porque ela tem menos perda de representação e, portanto, incorre em menos perda de capacidade de representação.
Benefícios
O MongoDB Vector Search oferece recursos nativos para quantização escalar, bem como quantização binária com repontuação. A quantização automática aumenta a escalabilidade e a economia de custos de seus aplicativos, reduzindo os recursos computacionais para o processamento eficiente de seus vetores. A quantização automática reduz a RAM para mongot em 3.75x para escalar e em 24x para binário; os valores vetoriais diminuem em 4x e 32x, respectivamente, mas o gráfico Hierarchical Navigable Small Worlds em si não diminui. Isso melhora o desempenho, mesmo no maior volume e escala.
Casos de uso
Recomendamos a quantização automática se você tiver um grande número de vetores de fidelidade total, normalmente mais de 100,000 vetores. Após a quantização, você indexa vetores de representação reduzida sem comprometer a precisão ao recuperar vetores.
Procedimento
Para habilitar a quantização automática:
Especifique o tipo de quantização que você deseja em seu índice MongoDB Vector Search .
Em um índice novo ou existente do MongoDB Vector Search, especifique um dos seguintes tipos de quantização no campo fields.quantization para suadefinição de índice :
scalar: para produzir vetores de bytes a partir de vetores de entrada de ponto flutuante.binary: para gerar vetores de bits a partir de vetores de entrada em ponto flutuante.
Se você especificar a quantização automática em dados que não sejam uma array de valores flutuantes, o MongoDB Vector Search ignorará silenciosamente esse vetor em vez de indexá-lo, e esses vetores serão ignorados. Como o Atlas armazena valores flutuantes (32-bit e 64-bit) como o tipo double internamente, as incorporações de modelos que geram qualquer precisão funcionarão com a quantização automática.
Crie ou atualize o índice.
O índice deve levar cerca de um minuto para ser criado. Enquanto ele é compilado, o índice está em um estado de sincronização inicial. Quando a construção estiver concluída, você poderá começar a fazer query nos dados em sua coleção.
O tipo de quantização especificado aplica-se a todos os vetores indexados e vetores de consulta no momento da consulta.
Considerações
Quando você visualiza seu índice quantizado na UI do Atlas, o tamanho do índice pode parecer maior do que um índice sem quantização. Isso ocorre porque a métrica Size representa o total de dados armazenados, que inclui o gráfico Hierarchical Navigable Small Worlds (na memória), os vetores quantizados (na memória) e os vetores de fidelidade total (no disco). Para estimar a quantidade de memória usada pelo índice no momento da query, consulte a métrica Required Memory.
Como ingestão de vetores pré-quantizados
O MongoDB Vector Search também suporta a ingestão e indexação de vetores quantizados escalares e binários de determinados modelos de incorporação. Se você ainda não tiver vetores quantizados, poderá converter suas incorporações em vetores BSON BinData com subtipo float32, int1 ou int8.
Casos de uso
Recomendamos ingerir vetores BSON binData quantizados para os seguintes casos de uso:
Você precisa indexar a saída do vetor quantizado dos modelos de incorporação.
Você tem um grande número de vetores flutuantes e deseja reduzir o armazenamento e o volume do WiredTiger (como uso de disco e memória) no
mongod.
Benefícios
BinData é um tipo de dado BSON que armazena dados binários. Ele comprime suas incorporações vetoriais e requer cerca de três vezes menos espaço em disco no seu cluster em comparação a incorporações que usam um array float32 padrão. Para aprender mais, consulte Compactação Vetorial.
Esse subtipo também permite indexar seus vetores com tipos alternativos, como vetores int1 ou int8, reduzindo a memória necessária para criar o índice MongoDB Vector Search para sua coleção. Reduz a RAM de em mongot 3.75x para escalar e em 24x para binário; os valores vetoriais diminuem em 4x e 32x, respectivamente, mas o gráfico Hierarchical Navigable Small Worlds em si não diminui.
Se você ainda não tiver vetores binData, poderá converter suas inserções para esse formato usando qualquer driver compatível antes de gravar seus dados em uma coleção. O procedimento a seguir orienta você nas etapas para converter suas incorporações nos vetores BinData com subtipos float32, int8 e int1.
Drivers suportados
BSON Vetores BinData com subtipos float32, int1 e int8 são suportados pelos seguintes drivers:
Driver C++ v4.1.0 ou posterior
Driver C#/.NET v3.2.0 ou posterior
Go Driver v2.1.0 ou posterior
Driver PyMongo v4.10 ou posterior
Driver nó.js v6.11 ou posterior
Driver Java v5.3.1 ou posterior
Pré-requisitos
Os exemplos neste procedimento usam dados novos ou existentes e incorporações geradas pelo modelo Voyage AI voyage-3-large. O exemplo de novos dados utiliza strings de texto de amostra, que você pode substituir por seus próprios dados. O exemplo de dados existentes utiliza um subconjunto de documentos sem incorporações da coleção listingsAndReviews no banco de dados sample_airbnb, que você pode substituir pelo seu próprio banco de dados e coleção (com ou sem incorporações).
Selecione se deseja quantizar vetores binData para novos dados ou para dados que você já tem em seu cluster usando o menu suspenso Data Source abaixo. Selecione também sua linguagem de programação preferida.
Avalie os resultados da sua query
Você pode medir a precisão de sua consulta do MongoDB Vector Search avaliando a proximidade dos resultados de uma pesquisa ANN dos resultados de uma pesquisa ENN em relação aos seus vetores quantizados. Ou seja, você pode comparar os resultados da pesquisa ANN com os resultados da pesquisa ENN para os mesmos critérios de consulta e medir com que frequência os resultados da pesquisa ANN incluem os vizinhos mais próximos nos resultados da pesquisa ENN.
Para uma demonstração da avaliação dos resultados da query, consulte Como medir a precisão dos resultados da query.