Visão geral dos vetores no Mecanismo de Banco de Dados SQL
Aplica-se a: Banco de Dados SQL do Azure
Vetores são matrizes ordenadas de números (normalmente floats) que podem representar informações sobre alguns dados. Por exemplo, uma imagem pode ser representada como um vetor de valores de pixel, ou uma cadeia de caracteres de texto pode ser representada como um vetor de valores ASCII. O processo para transformar dados em um vetor é chamado vetorização.
Incorporações
As inserções são vetores que representam características importantes dos dados. As incorporações são frequentemente aprendidas pelo uso de um modelo de aprendizado profundo, e os modelos de aprendizado de máquina e IA as utilizam como recursos. As inserções também podem capturar a semelhança semântica entre conceitos semelhantes. Por exemplo, ao gerar uma inserção para as palavras person
e human
, esperaríamos que suas inserções (representação vetorial) fossem semelhantes em valor, pois as palavras também são semanticamente semelhantes.
O OpenAI do Azure apresenta modelos para criar incorporações de dados de texto. O serviço interrompe o texto em tokens e gera inserções utilizando modelos pré-treinados pela OpenAI. Para saber mais, confira Criar incorporações com o OpenAI do Azure.
Depois que as inserções são geradas, elas podem ser armazenadas em um banco de dados do SQL Server. Isso permite que você armazene as incorporações junto com os dados que elas representam e execute consultas de pesquisa vetorial para encontrar pontos de dados semelhantes.
Busca em vetores
A pesquisa vetorial refere-se ao processo de encontrar todos os vetores em um conjunto de dados que são semelhantes a um vetor de consulta específico. Portanto, um vetor de consulta para a palavra human
pesquisa todo o conjunto de dados em busca de vetores semelhantes e, portanto, palavras semelhantes: neste exemplo, ele deve encontrar a palavra person
como uma correspondência próxima. Essa proximidade, ou distância, é medida usando uma métrica de distância, como a distância do cosseno. Quanto mais próximos os vetores estiverem, mais semelhantes eles serão.
O SQL Server fornece suporte interno para vetores por meio do tipo de dados vetorial . Os vetores são armazenados em um formato binário otimizado, mas expostos como matrizes JSON por conveniência. Cada elemento do vetor é armazenado usando o valor de ponto flutuante de precisão simples (4 bytes). Junto com o tipo de dados, existem funções dedicadas para operar em vetores. Por exemplo, é possível encontrar a distância entre dois vetores usando a VECTOR_DISTANCE
função. A função retorna um valor escalar com a distância entre dois vetores com base na métrica de distância especificada.
Como os vetores são normalmente gerenciados como matrizes de floats, a criação de um vetor pode ser feita simplesmente convertendo uma matriz JSON em um tipo de dados vetorial . Por exemplo, o código a seguir cria um vetor a partir de uma matriz JSON:
SELECT CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS vector;
ou, usando conversão implícita
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT @v;
O mesmo vale para converter um vetor em uma matriz JSON:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(@v AS NVARCHAR(MAX)) AS vector;
Limitações
Na versão prévia atual, ainda não há suporte para a conversão de e para o tipo de dados JSON. A solução alternativa é primeiro converter de/para NVARCHAR(MAX) e, em seguida, de/para JSON. Por exemplo, para converter um vetor em um tipo JSON:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(CAST(@v AS NVARCHAR(MAX)) AS JSON) AS j;
e para converter de um tipo JSON em vetor:
DECLARE @j JSON = JSON_ARRAY(1.0, -0.2, 30)
SELECT CAST(CAST(@j AS NVARCHAR(MAX)) AS VECTOR(3)) AS v;
Mais detalhes sobre como usar vetores no SQL Server podem ser encontrados nos seguintes artigos: