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 licencias o adquisición y evitar infringir las patentes existentes.
La investigación de patentes es amplia y compleja. Analizar un sinfín de resúmenes técnicos para encontrar innovaciones relevantes es una tarea abrumadora. Las búsquedas tradicionales basadas en palabras clave suelen ser imprecisas y requieren mucho tiempo. Los resúmenes son extensos y técnicos, lo que dificulta la comprensión rápida de la idea principal. Esto puede provocar que a los investigadores les falten patentes clave o pierdan tiempo en resultados irrelevantes.
Objetivo
En este codelab, trabajaremos para que el proceso de búsqueda de patentes sea más rápido, más intuitivo y muy preciso aprovechando Spanner y Gemini 1.0 Pro, las incorporaciones y la búsqueda de vectores en el lugar.
Qué compilarás
Como parte de este lab, aprenderás a hacer lo siguiente:
- Crear una instancia de Spanner
- Cargar un conjunto de datos públicos de Google patentes
- Crea un modelo remoto para incorporaciones de texto con el modelo de Gemini 1.0 Pro
- Crea estadísticas generativas a partir de un conjunto de datos cargado
- Genera incorporaciones a partir de las estadísticas
- Emitir búsquedas de similitud con 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 en bq. Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.
- Cuando te conectes a Cloud Shell, usa el siguiente comando para comprobar que ya estés autenticado y que el proyecto esté configurado con tu ID del proyecto:
gcloud auth list
- Ejecuta el siguiente comando en Cloud Shell para confirmar que el comando de 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 utilizar este vínculo.
Consulta la documentación para ver los comandos y el uso de gcloud.
3. Prepara la base de datos de Spanner
Creemos una instancia, una base de datos y una tabla de Spanner en la 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 de Spanner.
- Selecciona la instancia
spanner-vertex
de la lista. - En Bases de datos, haz clic en Crear base de datos.
- Configura el nombre de la base de datos como patentes.
- Haz clic en Crear para crear la base de datos.
Crear una tabla
- En la consola de Google Cloud, abre la página de Spanner.
- Selecciona la instancia
spanner-vertex
de la lista. - Selecciona la base de datos
patents
. - En la pestaña Tablas, haz clic en Crear tabla. Se abrirá la página Spanner Studio.
- Haz clic en la pestaña del editor de SQL nueva para abrir una pestaña nueva.
- 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. Cargar los datos de patentes en la base de datos
Los conjuntos de datos públicos de patentes de Google en BigQuery se usarán como nuestro conjunto de datos. Usaremos Spanner Studio para ejecutar nuestras consultas. El repositorio spanner-gemini-search incluye la secuencia de comandos insert_into_patents_data.sql
que ejecutaremos para cargar los datos de patentes.
- En la consola de Google Cloud, abre la página de Spanner.
- Selecciona la instancia
spanner-vertex
de la lista. - Selecciona la base de datos
patents
. - En el menú de navegación, haz clic en Spanner Studio. En el panel Explorer se muestra una lista de los objetos de tu base de datos.
- Haz clic en la pestaña del editor de SQL nueva para abrir una pestaña nueva.
- Copia la instrucción de consulta
insert
de la secuencia de comandosinsert_into_patents_data.sql
en el editor. Puedes copiar entre 50 y 100 declaraciones de inserción para obtener 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. Crear modelo remoto para Gemini 1.0 Pro
Después de cargar los datos de la patente en la base de datos, crearemos un modelo remoto que use el modelo de Vertex AI de Gemini 1.0 Pro para generar un conjunto resumido de títulos y palabras clave.
Ejecuta el siguiente comando de DDL en el editor de Spanner Studio:
- En el menú de navegación, haz clic en Spanner Studio. En el panel Explorer se muestra una lista de los objetos de tu base de datos.
- Haz clic en la pestaña del editor de SQL nueva para abrir una pestaña nueva.
- 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. Crear modelo remoto para incorporaciones 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 consulta. 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 Explorer se muestra una lista de los objetos de tu base de datos.
- Haz clic en la pestaña del editor de SQL nueva para abrir una pestaña nueva.
- 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 generaremos con el modelo de Gemini 1.5 Pro que creamos anteriormente.
Crea la tabla
- En el menú de navegación, haz clic en Spanner Studio. En el panel Explorer se muestra una lista de los objetos de tu base de datos.
- Haz clic en la pestaña del editor de SQL nueva para abrir una pestaña nueva.
- 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 propagar la tabla con estadísticas generativas, se recomienda usar una aplicación que use el método de escritura por lotes o de mutaciones. En este codelab, ejecutaremos la siguiente consulta de DDL hasta 4 veces para propagar 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 un error de Cuota superada en este paso (posible en el caso de los créditos gratuitos), intenta omitir la inserción y ejecuta solo la consulta seleccionada en la sección de solución alternativa que aparece 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
))
Observe las estadísticas
La tabla incluye estadísticas que se generan para la instrucción 'Identify the areas of work or keywords in this abstract',
de la consulta.
Nota: Si ejecutaste la consulta de la sección de solución alternativa anterior en lugar del DDL INSERT, omite esta parte y ejecuta la última consulta SELECT en 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, deberías ejecutar lo siguiente:
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 debe ser el mismo que el de la captura de pantalla anterior.
8. Generar incorporaciones para las estadísticas generadas
Después de propagar las estadísticas en la tabla, podemos usarlas para generar incorporaciones. Estas incorporaciones nos ayudan a no depender de las concordancias 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 omitirla y pasar a la consulta de la sección de solución alternativa en este paso.
Ejecuta la siguiente consulta para generar incorporaciones:
- En el menú de navegación, haz clic en Spanner Studio. En el panel Explorer se muestra una lista de los objetos de tu base de datos.
- Haz clic en la pestaña del editor de SQL nueva para abrir una pestaña nueva.
- 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 incorporaciones.
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.
Observar los resultados
La tabla incluye incorporaciones generadas para el título y texto abstracto.
Vamos a ejecutar 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 solución alternativa:
Usa esta consulta si seguiste 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 dar como resultado los mismos resultados que se muestran en la captura de pantalla anterior.
9. Cómo prepararse para la búsqueda vectorial
Ahora que generamos incorporaciones de texto, podemos preparar nuestra aplicación web para que esté lista para realizar búsquedas de vectores de similitud. En este codelab, crearemos una aplicación web que incluye la lógica para brindar resultados de la búsqueda en función de la capacidad de búsqueda por similitud de K-Nearest Neighbors. 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 consulta de muestra que busca una instrucción, genera resultados basados en el contexto y limita los resultados a 10 entradas.
Ejecute la siguiente consulta:
- En el menú de navegación, haz clic en Spanner Studio. En el panel Explorer se muestra una lista de los objetos de tu base de datos.
- Haz clic en la pestaña del editor de SQL nueva para abrir una pestaña nueva.
- 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 sentencias insert, puedes omitir todos los demás pasos y ejecutar directamente la siguiente consulta para observar los resultados de realizar la búsqueda de vecinos más cercanos en las incorporaciones vectoriales en 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;
Observar los resultados
La consulta anterior usa el método COSINE_DISTANCE
para encontrar las 10 coincidencias más cercanas a nuestra instrucción.
Se observan los siguientes resultados:
Los resultados que se generan son bastante cercanos contextualmente a la instrucción que era parte de la consulta.
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 vectorial integrada de Spanner. Además, viste lo fácil que es trabajar con modelos de incorporación y LLM para proporcionar funcionalidad de IA generativa directamente a través de SQL.
Próximos pasos
Obtén más información sobre la función de vecino más cercano exacto (búsqueda por vector de KNN) de Spanner aquí: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
También puedes leer más sobre cómo realizar predicciones en línea con SQL usando la integración de Vertex AI de Spanner aquí: https://cloud.google.com/spanner/docs/ml