1. Panoramica
In diversi settori, la ricerca sui brevetti è uno strumento fondamentale per comprendere il panorama della concorrenza, identificare potenziali opportunità di licenza o acquisizione ed evitare la violazione di brevetti esistenti.
La ricerca di brevetti è ampia e complessa. Analizzare innumerevoli abstract tecnici per trovare innovazioni pertinenti è un compito arduo. Le ricerche tradizionali basate sulle parole chiave sono spesso imprecise e richiedono molto tempo. Gli estratti sono lunghi e tecnici, il che rende difficile comprendere rapidamente l'idea centrale. Ciò può portare i ricercatori a perdere i brevetti chiave o perdere tempo per risultati irrilevanti.
Obiettivo
In questo codelab, lavoreremo per rendere il processo di ricerca di brevetti più veloce, più intuitivo e incredibilmente preciso sfruttando Spanner e Gemini 1.0 Pro in loco, Embeddings e Vector Search.
Cosa creerai
Nell'ambito di questo lab imparerai a:
- Creazione di un'istanza di Spanner
- Carica un set di dati pubblici di Google Brevetti
- Creare un modello remoto per gli incorporamenti di testo con il modello Gemini 1.0 Pro
- Crea insight generativi dal set di dati caricato
- Genera incorporamenti dagli insight
- Genera query di ricerca di somiglianza con il set di dati
Il seguente diagramma rappresenta il flusso di dati e le fasi dell'implementazione.
Requisiti
2. Prima di iniziare
Creare un progetto
- Nella pagina del selettore dei progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come controllare se la fatturazione è abilitata su un progetto .
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione su Google Cloud in cui è precaricato bq. Fai clic su Attiva Cloud Shell nella parte superiore della console Google Cloud.
- Una volta stabilita la connessione a Cloud Shell, potrai verificare di avere già eseguito l'autenticazione e che il progetto sia impostato sul tuo ID progetto utilizzando questo comando:
gcloud auth list
- Esegui questo comando in Cloud Shell per confermare che il comando gcloud è a conoscenza del tuo progetto.
gcloud config list project
- Se il progetto non è configurato, utilizza il comando seguente per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>
- Assicurati che le API Vertex AI e Spanner siano abilitate cercandole nella console. In alternativa, puoi anche utilizzare il comando seguente nel terminale Cloud Shell:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
Un'altra alternativa è utilizzare questo link.
Consulta la documentazione per i comandi e l'utilizzo di gcloud.
3. prepara il database Spanner
Creiamo un'istanza, un database e una tabella Spanner in cui verrà caricato il set di dati brevetto.
Creazione di un'istanza di Spanner
- Crea un'istanza di Spanner denominata
spanner-vertex
.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
Crea un database
- Nella console Google Cloud, apri la pagina Spanner.
- Seleziona l'istanza
spanner-vertex
dall'elenco. - In Database, fai clic su Crea database.
- Imposta il nome del database su brevetti.
- Fai clic su Crea per creare il database.
Creare una tabella
- Nella console Google Cloud, apri la pagina Spanner.
- Seleziona l'istanza
spanner-vertex
dall'elenco. - Seleziona il database
patents
. - Nella scheda Tabelle, fai clic su Crea tabella. Si apre la pagina di Spanner Studio.
- Apri una nuova scheda facendo clic sulla scheda Nuovo editor SQL.
- Esegui questa query:
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. Carica i dati di brevetto nel database
Come set di dati verranno utilizzati i set di dati pubblici di Google Brevetti su BigQuery. Utilizzeremo Spanner Studio per eseguire le nostre query. Il repository spanner-gemini-search include lo script insert_into_patents_data.sql
che eseguiremo per caricare i dati di brevetto.
- Nella console Google Cloud, apri la pagina Spanner.
- Seleziona l'istanza
spanner-vertex
dall'elenco. - Seleziona il database
patents
. - Nel menu di navigazione, fai clic su Spanner Studio. Il riquadro Explorer mostra un elenco degli oggetti presenti nel database.
- Apri una nuova scheda facendo clic sulla scheda Nuovo editor SQL.
- Copia l'istruzione di query
insert
dallo scriptinsert_into_patents_data.sql
nell'editor. Puoi copiare da 50 a 100 istruzioni di inserimento per una rapida demo di questo caso d'uso. - Fai clic su Esegui. I risultati della query vengono visualizzati nella tabella Risultati.
5. Crea un modello remoto per Gemini 1.0 Pro
Dopo aver caricato i dati dei brevetti nel database, creeremo un modello remoto che utilizza il modello Vertex AI di Gemini 1.0 Pro per generare un insieme riepilogativo di titolo e parole chiave.
Esegui questo comando DDL nell'editor di Spanner Studio:
- Nel menu di navigazione, fai clic su Spanner Studio. Il riquadro Explorer mostra un elenco degli oggetti presenti nel database.
- Apri una nuova scheda facendo clic sulla scheda Nuovo editor SQL.
- Esegui questa query:
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
);
- Fai clic su Esegui. I risultati della query vengono visualizzati nella tabella Risultati.
6. Creazione di un modello remoto per gli incorporamenti di testo
Il risultato del passaggio precedente include un riepilogo consolidato costituito da un titolo e da parole chiave. Convertiremo questa risposta in incorporamenti che ci aiuteranno a generare corrispondenze appropriate quando eseguiamo una query. Utilizzeremo Text Embedding Gecko 003 model
di Vertex AI da remoto tramite Spanner.
- Nel menu di navigazione, fai clic su Spanner Studio. Il riquadro Explorer mostra un elenco degli oggetti presenti nel database.
- Apri una nuova scheda facendo clic sulla scheda Nuovo editor SQL.
- Esegui questa query:
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');
- Fai clic su Esegui. I risultati della query vengono visualizzati nella tabella Risultati.
7. Crea insight generativi da Patent Abstracts
Creeremo una tabella patents_data_gemini
per archiviare gli insight generativi che genereremo utilizzando il modello Gemini 1.5 Pro creato in precedenza.
Crea la tabella
- Nel menu di navigazione, fai clic su Spanner Studio. Il riquadro Explorer mostra un elenco degli oggetti presenti nel database.
- Apri una nuova scheda facendo clic sulla scheda Nuovo editor SQL.
- Esegui questa query:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- Fai clic su Esegui. I risultati della query vengono visualizzati nella tabella Risultati.
Genera insight
Per completare la tabella con insight generativi, ti consigliamo di usare un'applicazione che usi il metodo di scrittura batch o mutazioni. Per questo codelab, eseguiremo la seguente query DDL fino a 4 volte per compilare la tabella.
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:se in questo passaggio ricevi l'errore Quota superata (possibile nel caso dei crediti senza costi con margine ridotto), prova a saltare l'inserimento ed esegui solo la query selezionata nella sezione per la soluzione alternativa riportata di seguito.
Sezione Soluzione:
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
))
Osserva gli approfondimenti
La tabella include insight generati per il prompt 'Identify the areas of work or keywords in this abstract',
nella query.
Nota:se hai eseguito la query della sezione alternativa sopra riportata anziché INSERISCI DDL, ignora questa parte ed esegui l'ultima query SELECT in questa pagina.
Eseguiamo questa query per verificare i risultati degli insight:
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
Vengono visualizzati i seguenti risultati:
Nota:se hai eseguito la query nella sezione della soluzione alternativa, sostituisci il nome della tabella nella query di selezione precedente con la query della sezione della soluzione alternativa. Quindi, esegui il seguente 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;
Il risultato dovrebbe essere lo stesso dello screenshot dei risultati in alto.
8. Genera incorporamenti per gli insight generati
Dopo aver compilato gli insight nella tabella, possiamo utilizzarli per generare incorporamenti. Questi incorporamenti ci aiutano a non fare affidamento sulle corrispondenze esatte delle parole chiave, ma aiutano a generare risultati basati su somiglianze concettuali.
Nota:se hai eseguito la query sulla sezione della soluzione alternativa nel passaggio precedente, puoi ignorare questo passaggio e passare alla query sulla sezione della soluzione alternativa anche in questo passaggio.
Esegui questa query per generare incorporamenti:
- Nel menu di navigazione, fai clic su Spanner Studio. Il riquadro Explorer mostra un elenco degli oggetti presenti nel database.
- Apri una nuova scheda facendo clic sulla scheda Nuovo editor SQL.
- Esegui questa query per creare la tabella
patents_data_embeddings
.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- Fai clic su Esegui. I risultati della query vengono visualizzati nella tabella Risultati.
- Esegui questa query per generare incorporamenti.
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));
- Fai clic su Esegui. I risultati della query vengono visualizzati nella tabella Risultati.
Osserva i risultati
La tabella include gli incorporamenti generati per il titolo e il testo astratti.
Eseguiamo questa query per verificare i risultati:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
Vengono visualizzati i seguenti risultati:
Sezione Soluzione alternativa:
Usa questa query se hai eseguito la procedura alternativa negli altri passaggi:
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;
Dovresti ottenere gli stessi risultati mostrati nello screenshot in alto.
9. Preparati per la ricerca vettoriale
Ora che abbiamo generato gli incorporamenti di testo, possiamo preparare la nostra applicazione web in modo che sia pronta per eseguire ricerche di vettori di somiglianza. In questo codelab, creeremo un'applicazione web che include la logica per fornire risultati di ricerca basati sulla funzionalità di ricerca di similitudine K-Nearest Nearbys. Puoi utilizzare questo set di dati preparato con un'app di ricerca per visualizzare come vengono visualizzati i risultati di ricerca.
Per il nostro codelab, eseguiremo una query di esempio che cerca un prompt, genera risultati in base al contesto e limita i risultati a 10 voci.
Esegui questa query:
- Nel menu di navigazione, fai clic su Spanner Studio. Il riquadro Explorer mostra un elenco degli oggetti presenti nel database.
- Apri una nuova scheda facendo clic sulla scheda Nuovo editor SQL.
- Esegui questa query per creare la tabella
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;
- Fai clic su Esegui. I risultati della query vengono visualizzati nella tabella Risultati.
Nota:se hai usato le query nella sezione della soluzione alternativa, a causa di errori di quota in una delle prime istruzioni di inserimento, puoi saltare tutti gli altri passaggi ed eseguire direttamente la query riportata di seguito per osservare i risultati dell'esecuzione della ricerca del vicino più prossimo negli incorporamenti vettoriali nel database 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;
Osserva i risultati
La query precedente utilizza il metodo COSINE_DISTANCE
per trovare le 10 corrispondenze più vicine per il nostro prompt.
Vengono visualizzati i seguenti risultati:
I risultati generati sono molto simili dal punto di vista contestuale al prompt che faceva parte della query.
10. Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo post, segui questi passaggi:
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina. Se non vuoi eliminare il progetto, elimina l'istanza che hai creato in Spanner.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
11. Complimenti
Congratulazioni. Hai eseguito correttamente una ricerca di somiglianze utilizzando la ricerca vettoriale integrata di Spanner. Inoltre, hai visto quanto sia facile lavorare con i modelli LLM e di incorporamento per fornire funzionalità di IA generativa direttamente utilizzando SQL.
Passaggi successivi
Scopri di più sulla funzionalità del vicino esatto più vicino di Spanner (ricerca vettoriale KNN) qui: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
Puoi anche leggere di più su come eseguire previsioni online con SQL utilizzando l'integrazione Vertex AI di Spanner qui: https://cloud.google.com/spanner/docs/ml