Partilhar via


Visão geral dos vetores no Mecanismo de Banco de Dados SQL

Aplica-se a: do Banco de Dados SQL do Azure

Vetores são matrizes ordenadas de números (normalmente flutuadores) 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 ou valores ASCII. O processo para transformar dados em um vetor é chamado de vetorização.

Incorporações

As incorporações são vetores que representam características importantes dos dados. As incorporações geralmente são aprendidas usando um modelo de aprendizado profundo, e os modelos de aprendizado de máquina e IA os utilizam como recursos. As incorporações também podem capturar semelhança semântica entre conceitos semelhantes. Por exemplo, ao gerar uma incorporação para as palavras person e human, esperaríamos que suas incorporações (representação vetorial) fossem semelhantes em valor, uma vez que as palavras também são semanticamente semelhantes.

O Azure OpenAI apresenta modelos para criar incorporações a partir de dados de texto. O serviço divide o texto em tokens e gera incorporações usando modelos pré-treinados pela OpenAI. Para saber mais, consulte Criando incorporações com o Azure OpenAI.

Depois que as incorporações são geradas, elas podem ser armazenadas em um banco de dados do SQL Server. Isso permite que você armazene as incorporações ao lado dos dados que elas representam e execute consultas de pesquisa vetorial para encontrar pontos de dados semelhantes.

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 são os vetores, mais semelhantes eles são.

O SQL Server oferece suporte incorporado para vetores através 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 única (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 função VECTOR_DISTANCE. 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 geridos como matrizes de floats, a criação de um vetor pode ser feita simplesmente registando uma matriz JSON para 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 fundiçã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 visualização atual, a conversão para e a partir do tipo de dados JSON ainda não é suportada. A solução é primeiro converter de/para NVARCHAR(MAX) e então 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 formato JSON para um 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: