Uso do mecanismo de vetor do SAP HANA Cloud na modelagem de dados

Objective

After completing this lesson, you will be able to identificar dados de vetor

Vetores e vetorização

Vetores no SAP HANA Cloud

Vetores são objetos geométricos definidos por uma direção e uma magnitude. Numericamente, os vetores podem ser representados como uma sequência de números, como [0,2, 0,8, -0,4, 0,6, ...].

O número de elementos em um vetor determina sua dimensionalidade. Cada número na sequência corresponde a uma dimensão específica e contribui para a representação global do ponto de dados. Dito isto, os números reais dentro do vetor não são significativos por conta própria. Os valores relativos e as relações entre os números capturam as informações semânticas e permitem que algoritmos processem e analisem os dados de forma eficaz.

As incorporações vetoriais são vetores produzidos por modelos de incorporação, que são redes neurais especializadas projetadas para converter objetos em representações vetoriais. O tipo de objetos que podem ser vetorizados e o método de vetorização dependem do modelo de incorporação específico utilizado. O principal objetivo de um modelo de incorporação é mapear objetos semelhantes para vetores semelhantes.

O mecanismo de vetor do SAP HANA Cloud facilita o armazenamento e a análise de dados vetoriais complexos e não estruturados (incorporações) em um formato que pode ser processado, comparado e usado perfeitamente na criação de vários aplicativos de dados inteligentes e na adição de mais contexto no caso de cenários de GenAI.

O mecanismo de vetor do SAP HANA Cloud suporta:

  • Armazenamento de vetores juntamente com outros dados empresariais no mesmo banco de dados SAP HANA Cloud.

  • Utilização de SQL para interagir com todos os tipos de dados, incluindo vetores.

  • Utilização de operações CRUD (criar, ler, atualizar, eliminar) em vetores utilizando SQL.

  • Integração de SQLScript espacial, gráfico, JSON e personalizado com consultas baseadas em vetores.

  • Implementação de casos de uso de vetor em soluções por meio de clientes SAP HANA Cloud (como Python), o Python Machine Learning Client para SAP HANA (hana-ml) e o SAP Cloud Application Programming Model (CAP).

Para armazenar dados de vetor, o SAP HANA Cloud inclui o tipo de dados de vetor integrado REAL_VECTOR, que consiste em elementos REAL (IEEE 754 ponto flutuante de precisão única). A dimensionalidade de uma coluna REAL_VECTOR varia de 1 a 65.000.

O tipo de dados REAL_VECTOR pode ser utilizado como outros tipos de dados SQL SAP HANA, mas considere algumas limitações atuais:

  • Pedido: nenhuma ordem definida em REAL_VECTOR. As operações que dependem da ordenação (por exemplo, agrupamento, ordenação, comparação) não podem ser aplicadas a vetores.

  • Aritmética: REAL_VECTOR não pode ser usado em expressões aritméticas. Por exemplo, a adição de vetor não é suportada.

    Nota

    Verifique o roadmap para ver atualizações relativas a funções de vetor:

    SAP Road Map Explorer - Suporte para funções adicionais de vetor

  • Tipos de tabela: as colunas REAL_VECTOR não são suportadas em tabelas de linhas.

  • Particionamento: as colunas REAL_VECTOR não podem ser usadas como chaves de particionamento ao particionar tabelas.

Vectorização é o processo de tomar diferentes tipos de dados (por exemplo, dados não estruturados, como texto ou imagens) e convertê-los em vetores numéricos.

Nota

Embora a vetorização seja comumente associada a dados não estruturados, como texto ou imagens, ela também pode ser útil para dados estruturados. Por exemplo, muitos modelos de aprendizado de máquina (como redes neurais ou modelos de gradient boosting) funcionam melhor com entrada vetorizada.

Vamos explorar alguns exemplos de vetorização:

  • Vectorização de texto
  • Vectorização de imagem

Vectorização de texto

A vetorização de textos é o processo de transformar palavras e documentos em representações matemáticas. Os dados textuais, que incluem palavras, frases ou documentos, são inerentemente qualitativos e não estruturados. Algoritmos de vetorização transformam este texto em vetores numéricos, codificando várias características linguísticas, como frequência de palavras, contexto de palavras ou relações de palavras. Alguns exemplos de técnicas de vetorização de texto incluem:

  • BoW (saco de palavras): representa documentos como vetores, onde trata um documento como um "saco" de palavras, onde a ordem ou estrutura das palavras não importa. Em vez disso, o foco está na presença ou frequência de palavras individuais.

  • TF-IDF (Termo Frequência-Frequência Inversa de Documento): em contraste com a frequência de palavras simples, TF-IDF equilibra palavras comuns e raras para que os termos mais significativos sejam enfatizados.

  • BM25: é uma melhora em relação ao TF-IDF, na medida em que considera o comprimento do documento e também amortece o efeito de ter muitas ocorrências de uma palavra em um documento.

  • BERT (Representações de Codificador Bidirecional de Transformadores): é um exemplo de um transformador. Transformadores são um tipo de arquitetura de redes neurais que se tornaram uma pedra angular no processamento de linguagem natural (NLP). Ele trabalha para entender o contexto em ambas as direções – o que vem antes e depois de uma palavra (chamada de compreensão de contexto bidirecional). Essencialmente, olha para todo o texto simultaneamente para apreender significados e contextos mais profundos a partir do texto.

Vectorização de imagem

As imagens podem ser representadas como vetores, seja por valores de pixel brutos (para tarefas mais simples) ou por características mais complexas extraídas por modelos como redes neurais convolucionais (CNNs). Esses vetores codificam as principais características da imagem, para tarefas como classificação de imagem ou pesquisa de similaridade.

Nota

Uma rede neural convolucional (CNN) é uma arquitetura de rede para aprendizagem profunda que aprende diretamente com os dados. CNNs são particularmente úteis para encontrar padrões em imagens para reconhecer objetos, classes e categorias.

A vetorização da imagem pode ser útil para a pesquisa reversa do produto. Neste caso, você pode identificar um produto pela sua imagem, se não souber o nome ou o código de barras. Outro caso de uso pode ser encontrar produtos semelhantes.

Vectorização no SAP HANA Cloud

Vamos explorar a vetorização no SAP HANA Cloud.

A função VECTOR_EMBEDDING

O SAP HANA Cloud oferece a função VECTOR_EMBEDDING para criar uma incorporação de vetor a partir de um texto. Esta função requer que o processamento de linguagem natural (NLP) esteja ativado no SAP HANA Cloud.

A função VECTOR_EMBEDDING usa os seguintes argumentos:

  • O primeiro argumento é que o texto deve ser incorporado.

  • O segundo argumento indica o tipo do texto.

    • 'DOCUMENT': para textos que estão arquivados no banco de dados e que devem ser pesquisáveis.

    • 'QUERY': para textos que são usados em consultas.

  • O terceiro argumento especifica qual modelo e qual versão do modelo são usados. Por exemplo, um modelo baseado na estrutura do transformador SAP_NEB.20240715.

    Nota

    Uma lista de modelos e versões disponíveis está disponível na função VECTOR_EMBEDDING (Vector).

Por exemplo, a consulta a seguir retorna uma incorporação de vetor para o texto "Olá Mundo", usando SAP_NEB.20240715:

Code Snippet
1
SELECT VECTOR_EMBEDDING('Hello world!', 'DOCUMENT', 'SAP_NEB.20240715') FROM DUMMY;
Captura de tela de uma interface de consulta de banco de dados mostrando o resultado de uma consulta de incorporação de vetor para Hello world!. A visão JSON exibe uma lista de valores numéricos como resultado de incorporação para o texto de entrada.

Quando você clica duas vezes na linha de resultado, todos os detalhes do vetor são exibidos, que são muitas dimensões neste exemplo.

A função TO_REAL_VECTOR

No SAP HANA Cloud, você pode usar a função TO_REAL_VECTOR para construir vetores a partir de:

  • Uma representação textual. Por exemplo:

    Code Snippet
    1
    SELECT TO_REAL_VECTOR('[1,2,3]') FROM DUMMY;
  • Uma representação binária. Por exemplo:

    Code Snippet
    1
    SELECT TO_REAL_VECTOR(x'030000000000803F0000004000004040') FROM DUMMY;
  • Uma matriz que consiste em elementos numéricos. Por exemplo:

    Code Snippet
    1
    SELECT TO_REAL_VECTOR(ARRAY(1,2,3)) FROM DUMMY;
Três resultados de consulta SQL usando TO_REAL_VECTOR de DUMMY. As saídas são [1, 2, 3] em cada caso, com diferentes formatos de entrada de dados: '(1,2,3)', hexadecimal e ARRAY(1,2,3).

Também é possível serializar vetores. Um vetor pode ser serializado do seguinte modo:

  • Uma representação textual com TO_NVARCHAR ou TO_NCLOB

  • Uma representação binária com TO_VARBINARY ou TO_BLOB

  • Uma matriz composta por elementos REAL com TO_ARRAY

Resultados de consulta SQL mostrando a conversão entre tipos de dados usando as funções TO_NVARCHAR, TO_ARRAY e TO_REAL_VECTOR na matriz de entrada [1,2,3]. A saída mostra diferentes transformações.

Armazenamento de dados vetoriais no SAP HANA Cloud

Vejamos como os dados vetoriais podem ser armazenados e mantidos no SAP HANA Cloud.

Criar tabelas com colunas REAL_VECTOR

As tabelas que contêm colunas com o tipo de dados REAL_VECTOR são criadas de forma semelhante a tabelas regulares.

O exemplo seguinte cria uma tabela T1 com uma coluna VECTOR_COLUMN (tipo de dados REAL_VECTOR), que pode aceitar vetores de qualquer dimensão:

Code Snippet
1
CREATE TABLE T1 ( id INT PRIMARY KEY, VECTOR_COLUMN REAL_VECTOR );

Para colunas com o tipo de dados REAL_VECTOR, você pode indicar uma restrição de dimensão opcional. Essa restrição garante que somente vetores com a dimensão especificada possam ser armazenados nessas colunas.

O exemplo seguinte cria uma tabela T2 com uma coluna VECTOR_COLUMN (tipo de dados REAL_VECTOR), que está restringida a aceitar somente vetores com uma dimensão de 3:

Code Snippet
1
CREATE TABLE T2 ( id INT PRIMARY KEY, VECTOR_COLUMN REAL_VECTOR(3) );

Vetores de inserção

Os vetores podem ser inseridos de forma semelhante a qualquer outro tipo de dados. No entanto, é importante considerar que não existem conversões implícitas no tipo de dados REAL_VECTOR. Portanto, um vetor deve ser explicitamente construído antes de ser inserido no banco de dados.

Você pode usar ferramentas de importação para carregar incorporações de vetor no SAP HANA Cloud. O tipo de dados REAL_VECTOR suporta a importação e exportação utilizando arquivos de dados. São suportados os seguintes formatos de dados:

  • CSV
  • Parquet

Você também pode usar comandos SQL no SAP HANA Cloud para criar e inserir dados vetoriais.

Aqui está um exemplo que demonstra como construir e inserir três vetores na tabela T1. Observe que a função TO_REAL_VECTOR é usada para construir o vetor com base em uma representação de matriz:

Code Snippet
123
INSERT INTO T1 (ID, VECTOR_COLUMN) VALUES (1, TO_REAL_VECTOR('[0, 40, 80]')); INSERT INTO T1 (ID, VECTOR_COLUMN) VALUES (2, TO_REAL_VECTOR('[20, 60, 80]')); INSERT INTO T1 (ID, VECTOR_COLUMN) VALUES (3, TO_REAL_VECTOR('[42, 73, 99]'));

Nota

Se muitos vetores precisarem ser inseridos em uma coluna, recomenda-se usar instruções parametrizadas combinadas com inserções em lote. Por exemplo, você pode usar Python. Para obter informações sobre o uso do módulo Python hdbcli, consulte Programação de aplicativos Python:

Programação de aplicativos Python

Quando os textos são inseridos em uma tabela, a função VECTOR_EMBEDDING pode ser utilizada para gerar automaticamente incorporações. Vejamos as opções disponíveis:

  • Criar incorporações com colunas geradas.

  • Criar incorporações usando acionadores.

Criar incorporações com colunas geradas

Vejamos o seguinte exemplo, em que uma tabela T1 é criada, incluindo a coluna VECTOR_COLUMN (tipo de dados REAL_VECTOR):

Code Snippet
123456
CREATE TABLE T1 ( TITLE NVARCHAR(100), PARAGRAPH_ID INTEGER, PARAGRAPH NVARCHAR(5000), VECTOR_COLUMN REAL_VECTOR GENERATED ALWAYS AS VECTOR_EMBEDDING(PARAGRAPH, 'DOCUMENT', 'SAP_NEB.20240715') );

Quando os dados são inseridos nesta tabela, os valores para a coluna VECTOR_COLUMN são atualizados pelas incorporações de vetor geradas automaticamente (GENERATED ALWAYS AS) com base nos valores da coluna PARAGRAPH (NVARCHAR (5000)).

Se o modelo que você está usando tiver um limite de token bem pequeno, as colunas NVARCHAR(5000) devem ser suficientes.

Se seus textos estiverem armazenados em colunas NCLOB, as incorporações devem ser criadas usando acionadores.

Criar incorporações usando acionadores

Vejamos o seguinte exemplo, em que uma tabela T2 é criada, incluindo a coluna VECTOR_COLUMN (tipo de dados REAL_VECTOR):

Code Snippet
123456
CREATE TABLE T2 ( TITLE NVARCHAR(100), PARAGRAPH_ID INTEGER, PARAGRAPH NCLOB, VECTOR_COLUMN REAL_VECTOR );

Vejamos agora como os acionadores são definidos:

Code Snippet
12345678
CREATE TRIGGER CREATE_MY_VECTOR_COLUMN BEFORE INSERT OR UPDATE OF PARAGRAPH ON T2 REFERENCING NEW ROW AS newrow ONLINE BEGIN newrow.VECTOR_COLUMN = VECTOR_EMBEDDING( :newrow.PARAGRAPH, 'DOCUMENT', 'SAP_NEB.20240715'); END;

A inserção de uma nova linha aciona a função de incorporação de vetor e os valores para a coluna VECTOR_COLUMN são atualizados pelas incorporações de vetor geradas automaticamente com base nos valores da coluna PARAGRAPH (NCLOB).

Atualizar e eliminar vetores

O exemplo a seguir mostra como atualizar o vetor com o ID 1 na tabela T3:

Code Snippet
1
UPDATE T3 SET VECTOR_COLUMN = TO_REAL_VECTOR('[17,19,23]') WHERE ID = 1;

O exemplo a seguir mostra como excluir o vetor com o ID 3 na tabela T3:

Code Snippet
1
DELETE FROM T3 WHERE ID = 3;

Considerações sobre ocupação da memória e dimensionamento

O consumo e o dimensionamento da memória são influenciados pela dimensão do vetor. A quantidade de memória em bytes, ( m ), consumida por um único vetor ( v ) com dimensão ( dim(v) ) pode ser calculada usando a seguinte fórmula:

A imagem mostra a fórmula para calcular a ocupação da memória.

Por exemplo, um vetor com 1536 dimensões requer 8 + (4 * 1536) = 6152 bytes.

Para calcular a memória necessária por uma coluna, multiplique a ocupação de memória de um único vetor pelo número de linhas na coluna. Por exemplo, armazenar 1000000 vetores com 1536 dimensões requer (1000000 * 6152) = 6152000000 bytes, que é aproximadamente 5,73 gigabytes de memória.

Como regra geral, a memória total de um sistema SAP HANA deve ser pelo menos duas vezes a memória ocupada pelos dados.