1. Descripción general
En diferentes industrias, la investigación de patentes es una herramienta fundamental para comprender el panorama competitivo, identificar posibles oportunidades de adquisición o licencias, y evitar infringir patentes existentes.
La investigación de patentes es vasta y compleja. Revisar innumerables resúmenes técnicos para encontrar innovaciones pertinentes es una tarea desalentadora. Las búsquedas tradicionales basadas en palabras clave suelen ser imprecisas y llevar mucho tiempo. Los resúmenes son largos y técnicos, lo que dificulta la comprensión rápida de la idea principal. Esto puede hacer que los investigadores no encuentren patentes clave o pierdan tiempo con resultados irrelevantes.
Objetivo
En este codelab, trabajaremos para que el proceso de búsqueda de patentes sea más rápido, intuitivo y preciso aprovechando Spanner y Gemini 1.0 Pro, Embeddings y Vector Search integrados.
Qué compilarás
Como parte de este lab, harás lo siguiente:
- Crear una instancia de Spanner
- Carga un conjunto de datos públicos de patentes de Google
- Crea un modelo remoto para embeddings de texto con el modelo Gemini 1.0 Pro
- Crea estadísticas generativas a partir del conjunto de datos cargado
- Genera embeddings a partir de las estadísticas
- Emitir consultas de búsqueda de similitud en el conjunto de datos
En el siguiente diagrama, se representa el flujo de datos y los pasos involucrados en la implementación.

Requisitos
2. Antes de comenzar
Crea un proyecto
- En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
- Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información para verificar si la facturación está habilitada en un proyecto .
- Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud y que viene precargado con bq. Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.

- Una vez que te conectes a Cloud Shell, verifica que ya te autenticaste y que el proyecto se configuró con tu ID del proyecto con el siguiente comando:
gcloud auth list
- En Cloud Shell, ejecuta el siguiente comando para confirmar que el comando gcloud conoce tu proyecto.
gcloud config list project
- Si tu proyecto no está configurado, usa el siguiente comando para hacerlo:
gcloud config set project <YOUR_PROJECT_ID>
- Asegúrate de que las APIs de Vertex AI y Spanner estén habilitadas. Para ello, búscalas en la consola. Como alternativa, también puedes usar el siguiente comando en la terminal de Cloud Shell:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
Otra alternativa es usar este vínculo.
Consulta la documentación para ver los comandos y el uso de gcloud.
3. Prepara tu base de datos de Spanner
Creemos una instancia, una base de datos y una tabla de Spanner en las que se cargará el conjunto de datos de patentes.
Crear una instancia de Spanner
- Crea una instancia de Spanner llamada
spanner-vertex.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
Crea una base de datos
- En la consola de Google Cloud, abre la página Spanner.
- Selecciona la instancia
spanner-vertexde la lista. - En Databases, haz clic en Create Database.
- Establece el nombre de la base de datos como patents.
- Haz clic en Crear para crear la base de datos.
Crea una tabla
- En la consola de Google Cloud, abre la página Spanner.
- Selecciona la instancia
spanner-vertexde la lista. - Selecciona la base de datos
patents. - En la pestaña Tablas, haz clic en Crear tabla. Se abrirá la página de Spanner Studio.
- Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL.
- Ejecute la siguiente 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. Carga datos de patentes en la base de datos
Usaremos los conjuntos de datos públicos de patentes de Google en BigQuery como nuestro conjunto de datos. Usaremos Spanner Studio para ejecutar nuestras consultas. El repositorio spanner-gemini-search incluye el script insert_into_patents_data.sql que ejecutaremos para cargar los datos de patentes.
- En la consola de Google Cloud, abre la página Spanner.
- Selecciona la instancia
spanner-vertexde la lista. - Selecciona la base de datos
patents. - En el menú de navegación, haz clic en Spanner Studio. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.
- Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL.
- Copia la instrucción de consulta
insertdel scriptinsert_into_patents_data.sqlen el editor. Puedes copiar entre 50 y 100 instrucciones de inserción para una demostración rápida de este caso de uso. - Haz clic en Ejecutar. Los resultados de tu consulta aparecen en la tabla Resultados.
5. Crea un modelo remoto para Gemini 1.0 Pro
Después de que los datos de patentes se carguen en la base de datos, crearemos un modelo remoto que use el modelo Gemini 1.0 Pro de Vertex AI para generar un conjunto resumido de títulos y palabras clave.
Ejecuta el siguiente comando DDL en el editor de Spanner Studio:
- En el menú de navegación, haz clic en Spanner Studio. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.
- Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL.
- Ejecute la siguiente 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
);
- Haz clic en Ejecutar. Los resultados de tu consulta aparecen en la tabla Resultados.
6. Crea un modelo remoto para embeddings de texto
El resultado del paso anterior incluye un resumen consolidado que consta de un título y palabras clave. Convertiremos esta respuesta en incorporaciones que nos ayudarán a generar coincidencias adecuadas cuando ejecutemos una búsqueda. Usaremos Text Embedding Gecko 003 model de Vertex AI de forma remota desde Spanner.
- En el menú de navegación, haz clic en Spanner Studio. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.
- Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL.
- Ejecute la siguiente 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');
- Haz clic en Ejecutar. Los resultados de tu consulta aparecen en la tabla Resultados.
7. Crea estadísticas generativas a partir de resúmenes de patentes
Crearemos una tabla patents_data_gemini para almacenar las estadísticas generativas que crearemos con el modelo Gemini 1.5 Pro que creamos anteriormente.
Crea la tabla
- En el menú de navegación, haz clic en Spanner Studio. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.
- Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL.
- Ejecute la siguiente consulta:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- Haz clic en Ejecutar. Los resultados de tu consulta aparecen en la tabla Resultados.
Generar estadísticas
Para completar la tabla con estadísticas generativas, te recomendamos que uses una aplicación que utilice el método de escritura por lotes o mutaciones. En este codelab, ejecutaremos la siguiente consulta DDL hasta 4 veces para completar la tabla.
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
));
Nota: Si recibes el error Quota Exceeded en este paso (posible en el caso de los créditos gratuitos con margen pequeño), intenta omitir la inserción y ejecutar solo la consulta de selección en la sección de solución alternativa que se incluye a continuación.
Sección de solución 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
))
Observa las estadísticas
La tabla incluye las estadísticas que se generan para la instrucción 'Identify the areas of work or keywords in this abstract', en la búsqueda.
Nota: Si ejecutaste la consulta de la sección de solución alternativa anterior en lugar del DDL de INSERT, omite esta parte y ejecuta la última consulta SELECT de esta página.
Ejecutemos la siguiente consulta para verificar los resultados de las estadísticas:
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
Se observan los siguientes resultados:

Nota: Si ejecutaste la consulta de la sección de solución alternativa, reemplaza el nombre de la tabla en la consulta de selección anterior por la consulta de la sección de solución alternativa. Por lo tanto, ejecutarías el siguiente comando:
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;
El resultado debería ser el mismo que el de la captura de pantalla del resultado anterior.
8. Genera embeddings para las estadísticas generadas
Después de completar las estadísticas en nuestra tabla, ahora podemos usarlas para generar incorporaciones. Estos embeddings nos ayudan a no depender de las coincidencias exactas de palabras clave, sino a generar resultados basados en similitudes conceptuales.
Nota: Si ejecutaste la consulta de la sección de solución alternativa en el paso anterior, puedes omitir este paso y pasar a la consulta de la sección de solución alternativa en este paso también.
Ejecuta la siguiente consulta para generar embeddings:
- En el menú de navegación, haz clic en Spanner Studio. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.
- Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL.
- Ejecuta la siguiente consulta para crear la tabla
patents_data_embeddings.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- Haz clic en Ejecutar. Los resultados de tu consulta aparecen en la tabla Resultados.
- Ejecuta la siguiente consulta para generar 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));
- Haz clic en Ejecutar. Los resultados de tu consulta aparecen en la tabla Resultados.
Observa los resultados
La tabla incluye los embeddings generados para el título y el texto resumido.
Ejecutemos la siguiente consulta para verificar los resultados:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
Se observan los siguientes resultados:

Sección de soluciones alternativas:
Usa esta consulta si realizaste la sección de solución alternativa en otros pasos:
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;
Esto debería generar los mismos resultados que se muestran en la captura de pantalla anterior.
9. Prepárate para la búsqueda de vectores
Ahora que generamos embeddings de texto, podemos preparar nuestra aplicación web para realizar búsquedas de vectores de similitud. En este codelab, crearemos una aplicación web que incluye la lógica para proporcionar resultados de la búsqueda basados en la capacidad de búsqueda de similitud de K vecinos más cercanos. Puedes usar este conjunto de datos preparado con una app de búsqueda para visualizar cómo aparecen los resultados de la búsqueda.
En nuestro codelab, ejecutaremos una búsqueda de muestra que buscará una instrucción, generará resultados según el contexto y limitará los resultados a 10 entradas.
Ejecute la siguiente consulta:
- En el menú de navegación, haz clic en Spanner Studio. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.
- Para abrir una pestaña nueva, haz clic en Nueva pestaña del editor de SQL.
- Ejecuta la siguiente consulta para crear la tabla
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;
- Haz clic en Ejecutar. Los resultados de tu consulta aparecen en la tabla Resultados.
Nota: Si usaste las consultas de la sección de solución alternativa, debido a errores de cuota en una de las primeras instrucciones de inserción, puedes omitir todos los demás pasos y ejecutar directamente la siguiente consulta para observar los resultados de la búsqueda de vecinos más cercanos en los embeddings de vectores de la base de datos de 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;
Observa los resultados
La consulta anterior usa el método COSINE_DISTANCE para encontrar las 10 coincidencias más cercanas para nuestra instrucción.
Se observan los siguientes resultados:

Los resultados que se generan son bastante cercanos contextualmente a la instrucción que formaba parte de la búsqueda.
10. Limpia
Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta publicación:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar. Si no quieres borrar el proyecto, solo borra la instancia que creaste en Spanner.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.
11. Felicitaciones
¡Felicitaciones! Realizaste correctamente una búsqueda de similitud con la búsqueda de vectores integrada de Spanner. Además, viste lo fácil que es trabajar con modelos de LLM y de embeddings para proporcionar funciones de IA generativa directamente con SQL.
Próximos pasos
Obtén más información sobre la función de búsqueda vectorial del vecino más cercano exacto (KNN) de Spanner aquí: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
También puedes obtener más información para realizar predicciones en línea con SQL usando la integración de Vertex AI de Spanner aquí: https://cloud.google.com/spanner/docs/ml