Um vetor é uma representação numérica de texto, imagens, áudio ou vídeo que codifica recursos/significado semântico dos dados, em vez do conteúdo real, como as palavras ou pixels subjacentes. Um vetor é uma lista de valores numéricos, conhecidos como dimensões, com um formato especificado.
O Oracle AI Vector Search oferece suporte a vetores com até 65.535 dimensões.
O AI Vector Search é compatível com os formatos INT8, FLOAT32 e FLOAT64.
O tamanho de um vetor é o produto do número de dimensões e do tamanho de cada dimensão.
Por exemplo, um vetor com 2.048 dimensões e o formato INT8 (1 byte) tem tamanho de 2 KB. Um vetor com 1.024 dimensões e o formato FLOAT32 (4 bytes) tem tamanho de 4 KB.
Os vetores são criados a partir de diferentes tipos de dados de entrada (texto, imagens, áudio, vídeo, etc.) por modelos de aprendizado profundo conhecidos como modelos de incorporação. Você pode criar vetores fora do banco de dados usando seus próprios modelos de incorporação ou serviço de incorporação ou pode criá-los dentro do banco de dados usando modelos de incorporação importados por meio da função SQL VECTOR_EMBEDDING().
O AI Vector Search deve funcionar com qualquer modelo de incorporação válido que gere vetores com um dos formatos compatíveis e 65.535 ou menos dimensões.
A escolha do modelo de incorporação depende de muitos fatores, como a natureza dos dados, as métricas de desempenho que você prioriza e o custo que está disposto a pagar. Modelos de incorporação gratuitos e de código aberto, como vários transformadores de frases, podem ser encontrados no Hugging Face e em sites semelhantes. Esses modelos podem ser convertidos em ONNX para serem executados no banco de dados com o AI Vector Search. Além disso, uma fonte popular para os melhores modelos de incorporação de texto é o MTEB Leaderboard hospedado pelo Hugging Face. Você também pode ir para provedores de modelos estabelecidos, como OpenAI e Cohere.
Existe suporte para várias operações matemáticas em vetores, mas a operação mais importante é a função SQL VECTOR_DISTANCE(), que encontra a distância matemática entre dois vetores com base na fórmula de distância selecionada. Há muitas fórmulas de distância compatíveis com o Oracle AI Vector Search, incluindo distância euclidiana, similaridade de cosseno e distância de Hamming. A escolha da função de distância é tipicamente impulsionada pelo modelo de incorporação usado para gerar os vetores.
Todos os tipos de vetores compartilham a mesma propriedade: quanto mais semelhantes forem as duas entidades, menor será a distância entre elas. Por exemplo, os vetores para “maçã” e “laranja” estão mais próximos do que os vetores para “maçã” e “cachorro”. Essa propriedade de vetores permite que eles sejam usados para pesquisar dados por similaridade semântica.
Existem extensões SQL simples e intuitivas que permitem que o AI Vector Search seja facilmente incorporado às suas aplicações. Como a distância vetorial é uma medida de semelhança, a AI Vector Search envolve simplesmente classificar o conjunto de vetores candidatos com base em sua distância de um vetor de pesquisa e retornar as correspondências top-K mais próximas. Por exemplo, a consulta abaixo encontra os 10 principais produtos cujas fotos correspondem mais de perto à foto de pesquisa do usuário:
SELECT product_name, product_photo
FROM Product
ORDER BY VECTOR_DISTANCE(product_photo_vector, :search_photo_vector)
FETCH FIRST 10 ROWS ONLY;
O AI Vector Search pode ser usado em consultas sofisticadas envolvendo filtros, junções, agregações, agrupamentos, etc. Por exemplo, a consulta a seguir pode ser usada para encontrar os 10 principais produtos correspondentes por foto para produtos fabricados no estado da Califórnia.
SELECT Product.name, Product.photo, Manufacturer.name
FROM Product p JOIN Manufacturer m ON (p.mfr_id = m.id)
WHERE Manufacturer.state = ‘CA’
ORDER BY VECTOR_DISTANCE(product_photo_vector, :search_photo_vector)
FETCH FIRST 10 ROWS ONLY;
Os índices de banco de dados tradicionais são usados para acelerar pesquisas com base em valores correspondentes. Por exemplo, um índice B-tree acelera as pesquisas baseadas em valores e as varreduras de intervalos baseadas em valor. Os índices vetoriais, por outro lado, são projetados para encontrar as correspondências mais semelhantes de top-K com base na similaridade semântica, em vez de valores exatamente iguais. Por exemplo, um índice vetorial pode ser usado para encontrar as K palavras com significado mais semelhante a “maçã” em um corpus de palavras existentes. O uso de um índice vetorial resulta em uma pesquisa aproximada que troca alguma precisão de pesquisa por um desempenho até 100 vezes maior, pois evita o exame de cada vetor em uma coluna.
Além de SQL e PL/SQL, as aplicações AI Vector Search podem ser criadas em uma variedade de linguagens de programação. O AI Vector Search inclui suporte a driver nativo para vetores em linguagens populares, como Java, Python, JavaScript e C#.
O AI Vector Search pode ser usado no conhecido fluxo de trabalho de geração aumentada de recuperação (RAG) para melhorar a precisão e a relevância contextual das conversas em linguagem natural com os grandes modelos de linguagem (LLMs) do GenAI. Com o RAG, a pergunta de um usuário é primeiro convertida em um vetor e, em seguida, mapeada para os documentos mais relevantes no banco de dados por meio do AI Vector Search. Em seguida, a pergunta do usuário e os documentos relevantes de apoio são transmitidos ao LLM para que ele possa gerar uma resposta informada com base em seu próprio conhecimento geral e no conhecimento especializado do armazenamento de vetores.
O AI Vector Search pode ser usado para RAG com LLMs de código aberto, como Llama2 ou Llama3, bem como LLMs de provedores como OpenAI e Cohere.
O AI Vector Search é integrado ao LangChain, que é uma estrutura de código aberto muito popular para criar soluções baseadas em RAG.
Todos os mecanismos abrangentes de escalabilidade da Oracle, como Parallel Execution, Partitioning, RAC, Sharding e Exadata, podem ser usados para escalar o AI Vector Search para praticamente qualquer tamanho de dados e número de usuários.