1. Visão geral
Em diferentes setores, a pesquisa de patentes é uma ferramenta essencial para entender o cenário competitivo, identificar possíveis oportunidades de licenciamento ou aquisição e evitar violações de patentes.
A pesquisa de patentes é vasta e complexa. Peneirar incontáveis resumos técnicos para encontrar inovações relevantes é uma tarefa assustadora. As pesquisas tradicionais baseadas em palavras-chave geralmente são imprecisas e demoradas. Os resumos são longos e técnicos, o que dificulta a compreensão da ideia principal rapidamente. Isso pode fazer com que os pesquisadores percam patentes importantes ou percam tempo em resultados irrelevantes.
Objetivo
Neste codelab, vamos trabalhar para tornar o processo de pesquisa de patentes mais rápido, intuitivo e preciso, aproveitando o Spanner e o Gemini 1.0 Pro, as incorporações e a pesquisa de vetor.
O que você vai criar
Como parte deste laboratório, você vai:
- Criar uma instância do Spanner
- Carregar um conjunto de dados públicos do Google Patents
- Criar um modelo remoto para embeddings de texto com o modelo Gemini 1.0 Pro
- Criar insights generativos com base no conjunto de dados carregado
- Gerar embeddings com base nos insights
- Emitir consultas de pesquisa de similaridade no conjunto de dados
O diagrama a seguir representa o fluxo de dados e as etapas envolvidas na implementação.
Requisitos
2. Antes de começar
Criar um projeto
- No console do Google Cloud, na página de seletor de projetos, selecione ou crie um projeto do Google Cloud.
- Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto .
- Você vai usar o Cloud Shell, um ambiente de linha de comando executado no Google Cloud que vem pré-carregado com bq. Clique em "Ativar o Cloud Shell" na parte de cima do console do Google Cloud.
- Depois de se conectar ao Cloud Shell, verifique se você já está autenticado e se o projeto está definido como seu ID usando o seguinte comando:
gcloud auth list
- Execute o comando a seguir no Cloud Shell para confirmar se o comando gcloud sabe sobre seu projeto.
gcloud config list project
- Se o projeto não estiver definido, use este comando:
gcloud config set project <YOUR_PROJECT_ID>
- Verifique se as APIs Vertex AI e Spanner estão ativadas pesquisando-as no console. Como alternativa, use o seguinte comando no terminal do Cloud Shell:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
Outra alternativa é usar este link.
Consulte a documentação para ver o uso e os comandos gcloud.
3. Preparar seu banco de dados do Spanner
Vamos criar uma instância, um banco de dados e uma tabela do Spanner, onde o conjunto de dados de patentes será carregado.
Criar uma instância do Spanner
- Crie uma instância do Spanner chamada
spanner-vertex
.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
Criar um banco de dados
- No console do Google Cloud, abra a página Spanner.
- Selecione a instância
spanner-vertex
na lista. - Em "Bancos de dados", clique em Criar banco de dados.
- Defina o nome do banco de dados como patentes.
- Clique em Criar para criar o banco de dados.
Criar uma tabela
- No console do Google Cloud, abra a página Spanner.
- Selecione a instância
spanner-vertex
na lista. - Selecione o banco de dados
patents
. - Na guia Tabelas, clique em Criar tabela. A página do Spanner Studio será aberta.
- Abra uma nova guia clicando em Nova guia do editor SQL.
- Execute a seguinte consulta:
CREATE TABLE patents_data (
id string(25), type string(25), number string(20), country string(2), date string(20), abstract string(300000), title string(100000),kind string(5), num_claims numeric, filename string(100), withdrawn numeric,
) PRIMARY KEY (id);
4. Carregar dados de patentes no banco de dados
Os conjuntos de dados públicos das patentes do Google no BigQuery serão usados como nosso conjunto de dados. Vamos usar o Spanner Studio para executar nossas consultas. O repositório spanner-gemini-search inclui o script insert_into_patents_data.sql
que será executado para carregar os dados de patente.
- No console do Google Cloud, abra a página Spanner.
- Selecione a instância
spanner-vertex
na lista. - Selecione o banco de dados
patents
. - No menu de navegação, clique em Spanner Studio. O painel Explorer mostra uma lista dos objetos no seu banco de dados.
- Abra uma nova guia clicando em Nova guia do editor SQL.
- Copie a instrução de consulta
insert
do scriptinsert_into_patents_data.sql
no editor. Você pode copiar de 50 a 100 instruções de inserção para uma demonstração rápida desse caso de uso. - Clique em Executar. Os resultados da consulta aparecem na tabela Resultados.
5. Criar modelo remoto para o Gemini 1.0 Pro
Depois que os dados da patente forem carregados no banco de dados, vamos criar um modelo remoto que usa o modelo Gemini 1.0 Pro da Vertex AI para gerar um conjunto resumido de título e palavras-chave.
Execute o seguinte comando DDL no editor do Spanner Studio:
- No menu de navegação, clique em Spanner Studio. O painel Explorer mostra uma lista dos objetos no seu banco de dados.
- Abra uma nova guia clicando em Nova guia do editor SQL.
- Execute a seguinte consulta:
CREATE MODEL gemini_pro_model INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);
- Clique em Executar. Os resultados da consulta aparecem na tabela Resultados.
6. Criar um modelo remoto para embeddings de texto
O resultado da etapa anterior inclui um resumo consolidado que consiste em um título e palavras-chave. Vamos converter essa resposta em embeddings que vão nos ajudar a gerar correspondências adequadas ao executar uma consulta. Vamos usar o Text Embedding Gecko 003 model
da Vertex AI remotamente no Spanner.
- No menu de navegação, clique em Spanner Studio. O painel Explorer mostra uma lista dos objetos no seu banco de dados.
- Abra uma nova guia clicando em Nova guia do editor SQL.
- Execute a seguinte consulta:
CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/textembedding-gecko@003');
- Clique em Executar. Os resultados da consulta aparecem na tabela Resultados.
7. Criar insights generativos com resumos de patentes
Vamos criar uma tabela patents_data_gemini
para armazenar insights generativos que vamos gerar usando o modelo Gemini 1.5 Pro criado anteriormente.
Criar a tabela
- No menu de navegação, clique em Spanner Studio. O painel Explorer mostra uma lista dos objetos no seu banco de dados.
- Abra uma nova guia clicando em Nova guia do editor SQL.
- Execute a seguinte consulta:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- Clique em Executar. Os resultados da consulta aparecem na tabela Resultados.
Gerar insights
Para preencher a tabela com insights generativos, é recomendável usar um aplicativo que use o método de gravação em lote ou de mutações. Neste codelab, vamos executar a consulta DDL a seguir até quatro vezes para preencher a tabela.
INSERT INTO patents_data_gemini (id, gemini_response)
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b where id not in (select id from patents_data_gemini) limit 50
));
Observação:se você receber o erro "Quota Exceeded" (excedeu a cota) nesta etapa (possível no caso de créditos sem custo financeiro de margem pequena), tente pular a inserção e executar apenas a consulta de seleção na seção de solução alternativa abaixo.
Seção de solução alternativa:
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))
Observar insights
A tabela inclui insights gerados para a instrução 'Identify the areas of work or keywords in this abstract',
na consulta.
Observação:se você executou a consulta da seção de solução alternativa acima em vez do DDL INSERT, pule esta parte e execute a última consulta SELECT nesta página.
Vamos executar a consulta a seguir para verificar os resultados dos insights:
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
Os seguintes resultados são mostrados:
Observação:se você executou a consulta da seção de solução alternativa, substitua o nome da tabela na consulta de seleção acima pela consulta na seção de solução alternativa. Então, você executaria o seguinte:
select title, abstract, gemini_response from patents_data a inner join (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))) b
on a.id = b.id;
O resultado deve ser o mesmo da captura de tela acima.
8. Gerar embeddings para os insights gerados
Depois de preencher os insights na tabela, podemos usá-los para gerar embeddings. Essas incorporações nos ajudam a não depender de correspondências exatas de palavras-chave, mas a gerar resultados com base em semelhanças conceituais.
Observação:se você executou a consulta da seção de solução alternativa na etapa anterior, pule esta etapa e vá para a consulta da seção de solução alternativa nesta etapa.
Execute a consulta a seguir para gerar embeddings:
- No menu de navegação, clique em Spanner Studio. O painel Explorer mostra uma lista dos objetos no seu banco de dados.
- Abra uma nova guia clicando em Nova guia do editor SQL.
- Execute a consulta a seguir para criar a tabela
patents_data_embeddings
.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- Clique em Executar. Os resultados da consulta aparecem na tabela Resultados.
- Execute a consulta a seguir para gerar embeddings.
INSERT INTO patents_data_embeddings (id, patents_embeddings)
SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM patents_data_gemini));
- Clique em Executar. Os resultados da consulta aparecem na tabela Resultados.
Observar os resultados
A tabela inclui embeddings gerados para o título e o texto abstrato.
Vamos executar a consulta a seguir para verificar os resultados:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
Os seguintes resultados são mostrados:
Seção de alternativas:
Use esta consulta se você tiver seguido a seção de solução alternativa em outras etapas:
select title, abstract, b.patents_embeddings from patents_data a inner join
(SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
)))))) b
on a.id = b.id;
Isso vai resultar nos mesmos resultados mostrados na captura de tela acima.
9. Preparar-se para a pesquisa vetorial
Agora que geramos embeddings de texto, podemos preparar nosso aplicativo da Web para realizar pesquisas de vetor de similaridade. Neste codelab, vamos criar um aplicativo da Web que inclui a lógica para fornecer resultados de pesquisa com base no recurso de pesquisa de similaridade K-Nearest Neighbors. Você pode usar esse conjunto de dados preparado com um app de pesquisa para visualizar como os resultados da pesquisa aparecem.
No nosso codelab, vamos executar uma consulta de exemplo que pesquisa uma instrução, gera resultados com base no contexto e limita os resultados a 10 entradas.
Execute a seguinte consulta:
- No menu de navegação, clique em Spanner Studio. O painel Explorer mostra uma lista dos objetos no seu banco de dados.
- Abra uma nova guia clicando em Nova guia do editor SQL.
- Execute a consulta a seguir para criar a tabela
patents_data_embeddings
.
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join patents_data_gemini b on a.id = b.id
inner join patents_data_embeddings c on a.id = c.id
ORDER BY distance
LIMIT 10;
- Clique em Executar. Os resultados da consulta aparecem na tabela Resultados.
Observação:se você usou as consultas na seção de solução alternativa, devido a erros de cota em uma das primeiras instruções de inserção, pule todas as outras etapas e execute diretamente a consulta abaixo para observar os resultados da pesquisa de vizinho mais próximo em embeddings de vetor no banco de dados do Spanner:
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join (SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b
)))))) c on a.id = c.id
ORDER BY distance
LIMIT 2;
Observar os resultados
A consulta anterior usa o método COSINE_DISTANCE
para encontrar as 10 correspondências mais próximas para nossa instrução.
Os seguintes resultados são mostrados:
Os resultados gerados são muito próximos do comando que fazia parte da consulta.
10. Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta postagem, siga estas etapas:
- No console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir. Se você não quiser excluir o projeto, basta excluir a instância criada no Spanner.
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
11. Parabéns
Parabéns! Você realizou uma pesquisa de similaridade usando a pesquisa vetorial integrada do Spanner. Além disso, você viu como é fácil trabalhar com modelos de embedding e LLM para fornecer a funcionalidade de IA generativa diretamente usando SQL.
A seguir
Saiba mais sobre o recurso de vizinho mais próximo exato (pesquisa de vetor KNN) do Spanner: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
Saiba mais sobre como fazer previsões on-line com SQL usando a integração da VertexAI do Spanner: https://cloud.google.com/spanner/docs/ml