1. Übersicht
In verschiedenen Branchen ist die Patentforschung ein wichtiges Instrument, um die Wettbewerbslandschaft zu verstehen, potenzielle Lizenz- oder Erwerbsmöglichkeiten zu identifizieren und die Verletzung bestehender Patente zu vermeiden.
Die Patentforschung ist umfangreich und komplex. Das Durchforsten unzähliger technischer Zusammenfassungen, um relevante Innovationen zu finden, ist eine gewaltige Aufgabe. Herkömmliche keywordbasierte Suchanfragen sind oft ungenau und zeitaufwendig. Abstrakte sind umfangreich und technisch, was es schwierig macht, die Kernidee schnell zu verstehen. Dies kann dazu führen, dass Forschende wichtige Patente fehlen oder Zeit für irrelevante Ergebnisse verschwenden.
Ziel
In diesem Codelab möchten wir die Suche nach Patenten schneller, intuitiver und unglaublich präziser gestalten. Dazu nutzen wir Spanner, die direkte Version von Gemini 1.0 Pro, Einbettungen und Vektorsuche.
Aufgaben
Aufgaben in diesem Lab:
- Spanner-Instanz erstellen
- Öffentliche Datasets der Google Patentsuche laden
- Remote-Modell für Texteinbettungen mit Gemini 1.0 Pro-Modell erstellen
- Generative Statistiken aus geladenem Dataset erstellen
- Einbettungen aus den Statistiken generieren
- Ähnlichkeitssuchanfragen für das Dataset stellen
Das folgende Diagramm veranschaulicht den Datenfluss und die Schritte der Implementierung.
Voraussetzungen
2. Hinweis
Projekt erstellen
- Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
- Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Hier erfahren Sie, wie Sie prüfen, ob die Abrechnung für ein Projekt aktiviert ist.
- Sie verwenden Cloud Shell, eine in Google Cloud ausgeführte Befehlszeilenumgebung mit vorinstalliertem bq. Klicken Sie oben in der Google Cloud Console auf „Cloud Shell aktivieren“.
- Sobald Sie eine Verbindung zu Cloud Shell hergestellt haben, prüfen Sie mit dem folgenden Befehl, ob Sie bereits authentifiziert sind und ob das Projekt auf Ihre Projekt-ID eingestellt ist:
gcloud auth list
- Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob der gcloud-Befehl Ihr Projekt kennt.
gcloud config list project
- Wenn Ihr Projekt noch nicht eingerichtet ist, verwenden Sie den folgenden Befehl, um es festzulegen:
gcloud config set project <YOUR_PROJECT_ID>
- Prüfen Sie, ob die Vertex AI und Spanner APIs aktiviert sind. Suchen Sie dazu in der Console nach ihnen. Alternativ können Sie auch den folgenden Befehl im Cloud Shell-Terminal verwenden:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
Alternativ können Sie auch diesen Link verwenden.
Informationen zu gcloud-Befehlen und deren Verwendung finden Sie in der Dokumentation.
3. Spanner-Datenbank vorbereiten
Lassen Sie uns eine Spanner-Instanz, -Datenbank und -Tabelle erstellen, in die das Patent-Dataset geladen wird.
Spanner-Instanz erstellen
- Erstellen Sie eine Spanner-Instanz mit dem Namen
spanner-vertex
.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
Datenbank erstellen
- Öffnen Sie in der Google Cloud Console die Seite Spanner.
- Wählen Sie die Instanz
spanner-vertex
aus der Liste aus. - Klicken Sie unter „Datenbanken“ auf Datenbank erstellen.
- Legen Sie als Datenbankname „Patente“ fest.
- Klicken Sie auf Erstellen, um die Datenbank zu erstellen.
Tabelle erstellen
- Öffnen Sie in der Google Cloud Console die Seite Spanner.
- Wählen Sie die Instanz
spanner-vertex
aus der Liste aus. - Wählen Sie die Datenbank
patents
aus. - Klicken Sie auf dem Tab Tabellen auf Tabelle erstellen. Die Seite von Spanner Studio wird geöffnet.
- Öffnen Sie einen neuen Tab, indem Sie auf den Tab New SQL editor tab (Neuer SQL-Editor-Tab) klicken.
- Führen Sie die folgende Abfrage aus:
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. Patentdaten in die Datenbank laden
Die öffentlichen Datasets der Google Patentsuche in BigQuery werden als Dataset verwendet. Wir verwenden Spanner Studio, um unsere Abfragen auszuführen. Das Repository spanner-gemini-search enthält das Skript insert_into_patents_data.sql
, das wir zum Laden der Patentdaten ausführen.
- Öffnen Sie in der Google Cloud Console die Seite Spanner.
- Wählen Sie die Instanz
spanner-vertex
aus der Liste aus. - Wählen Sie die Datenbank
patents
aus. - Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
- Öffnen Sie einen neuen Tab, indem Sie auf den Tab New SQL editor tab (Neuer SQL-Editor-Tab) klicken.
- Kopieren Sie die Abfrageanweisung
insert
aus dem Skriptinsert_into_patents_data.sql
im Editor. Sie können 50–100 Einfügeanweisungen kopieren, um diesen Anwendungsfall schnell zu demonstrieren. - Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.
5. Remote-Modell für Gemini 1.0 Pro erstellen
Nachdem die Patentdaten in die Datenbank geladen wurden, erstellen wir ein Remotemodell, das mithilfe des Vertex AI-Modells von Gemini 1.0 Pro einen zusammengefassten Satz von Titel und Suchbegriffen generiert.
Führen Sie den folgenden DDL-Befehl im Spanner Studio-Editor aus:
- Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
- Öffnen Sie einen neuen Tab, indem Sie auf den Tab Neuer SQL-Editor klicken.
- Führen Sie die folgende Abfrage aus:
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
);
- Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.
6. Remote-Modell für Texteinbettungen erstellen
Das Ergebnis des vorherigen Schritts enthält eine konsolidierte Zusammenfassung, die aus einem Titel und Suchbegriffen besteht. Wir konvertieren diese Antwort in Einbettungen, die uns helfen, passende Übereinstimmungen zu generieren, wenn wir eine Abfrage ausführen. Wir verwenden die Text Embedding Gecko 003 model
aus Vertex AI remote über Spanner.
- Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
- Öffnen Sie einen neuen Tab, indem Sie auf den Tab Neuer SQL-Editor klicken.
- Führen Sie die folgende Abfrage aus:
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');
- Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.
7. Generative Erkenntnisse aus Patent Zusammenfassungen gewinnen
Wir erstellen eine patents_data_gemini
-Tabelle zum Speichern der generativen Erkenntnisse, die wir mit dem zuvor erstellten Gemini 1.5 Pro-Modell generieren.
Tabelle erstellen
- Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
- Öffnen Sie einen neuen Tab, indem Sie auf den Tab Neuer SQL-Editor klicken.
- Führen Sie die folgende Abfrage aus:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.
Insights generieren
Zum Füllen der Tabelle mit generativen Erkenntnissen empfiehlt es sich, eine Anwendung zu verwenden, die die Batch-Schreib- oder Mutationsmethode verwendet. In diesem Codelab führen wir die folgende DDL-Abfrage bis zu viermal aus, um die Tabelle zu füllen.
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
));
Hinweis: Wenn bei diesem Schritt der Fehler „Kontingent überschritten“ angezeigt wird (möglicherweise bei kleinen spannenfreien Gutschriften), versuchen Sie, das Einfügen zu überspringen und nur die ausgewählte Abfrage auszuführen, die unten im Abschnitt zur Problemumgehung angezeigt wird.
Abschnitt zur Problemumgehung:
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
))
Erkenntnisse beobachten
Die Tabelle enthält Statistiken, die für die 'Identify the areas of work or keywords in this abstract',
-Eingabeaufforderung in der Abfrage generiert werden.
Hinweis:Wenn Sie die oben angegebene Abfrage im Abschnitt zur Problemumgehung anstelle der INSERT-DDL ausgeführt haben, überspringen Sie diesen Teil und führen Sie stattdessen die letzte SELECT-Abfrage auf dieser Seite aus.
Führen Sie die folgende Abfrage aus, um die Ergebnisse der Statistiken zu überprüfen:
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
Die folgenden Ergebnisse werden angezeigt:
Hinweis: Wenn Sie die Abfrage im Abschnitt zur Problemumgehung ausgeführt haben, ersetzen Sie den Tabellennamen in der oben ausgewählten Abfrage durch die Abfrage aus dem Abschnitt zur Problemumgehung. In diesem Fall würden Sie stattdessen den folgenden Befehl ausführen:
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;
Das Ergebnis sollte mit dem im Ergebnis-Screenshot oben übereinstimmen.
8. Einbettungen für die generierten Insights generieren
Nachdem wir die Erkenntnisse in unsere Tabelle eingetragen haben, können wir diese verwenden, um Einbettungen zu generieren. Mithilfe dieser Einbettungen können wir uns nicht auf genaue Keyword-Übereinstimmungen verlassen, sondern liefern Ergebnisse, die auf konzeptionellen Ähnlichkeiten basieren.
Hinweis:Wenn Sie die Abfrage für den Behelfsabschnitt im vorherigen Schritt ausgeführt haben, können Sie diesen Schritt überspringen und auch in diesem Schritt zur Abfrage im Abschnitt für den Workaround wechseln.
Führen Sie die folgende Abfrage aus, um Einbettungen zu generieren:
- Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
- Öffnen Sie einen neuen Tab, indem Sie auf den Tab Neuer SQL-Editor klicken.
- Führen Sie die folgende Abfrage aus, um die Tabelle
patents_data_embeddings
zu erstellen.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.
- Führen Sie die folgende Abfrage aus, um Einbettungen zu generieren.
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));
- Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.
Ergebnisse beobachten
Die Tabelle enthält Einbettungen, die für den Titel und den abstrahierten Text generiert wurden.
Führen Sie die folgende Abfrage aus, um die Ergebnisse zu überprüfen:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
Die folgenden Ergebnisse werden angezeigt:
Abschnitt zur Problemumgehung:
Verwenden Sie diese Abfrage, wenn Sie den Workaround-Abschnitt in anderen Schritten ausgeführt haben:
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;
Dies sollte dieselben Ergebnisse wie im Screenshot oben ergeben.
9. Auf die Vektorsuche vorbereiten
Nachdem wir nun Texteinbettungen generiert haben, können wir unsere Webanwendung für die Durchführung von Ähnlichkeitsvektorsuchen vorbereiten. In diesem Codelab erstellen wir eine Webanwendung, die die Logik für die Ausgabe von Suchergebnissen basierend auf der Funktion K-Nearest Neighbors Similarity Search enthält. Sie können dieses vorbereitete Dataset mit einer Such-App verwenden, um die Darstellung der Suchergebnisse zu visualisieren.
Für unser Codelab führen wir eine Beispielabfrage aus, die nach einem Prompt sucht, kontextbasierte Ergebnisse generiert und die Ergebnisse auf 10 Einträge beschränkt.
Führen Sie die folgende Abfrage aus:
- Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
- Öffnen Sie einen neuen Tab, indem Sie auf den Tab Neuer SQL-Editor klicken.
- Führen Sie die folgende Abfrage aus, um die Tabelle
patents_data_embeddings
zu erstellen.
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;
- Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.
Hinweis:Wenn Sie die Abfragen im Abschnitt „Problemumgehung“ verwendet haben, können Sie aufgrund von Kontingentfehlern in einer der ersten Einfügeanweisungen alle anderen Schritte überspringen und die folgende Abfrage direkt ausführen, um die Ergebnisse der Suche nach dem nächsten Nachbarn für Vektoreinbettungen in der Spanner-Datenbank zu beobachten:
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;
Ergebnisse beobachten
In der vorherigen Abfrage wird die Methode COSINE_DISTANCE
verwendet, um die zehn nächsten Übereinstimmungen für den Prompt zu finden.
Die folgenden Ergebnisse werden angezeigt:
Die generierten Ergebnisse liegen kontextbezogen nah am Prompt, der Teil der Abfrage war.
10. Bereinigen
So vermeiden Sie, dass Ihrem Google Cloud-Konto die in diesem Beitrag verwendeten Ressourcen in Rechnung gestellt werden:
- Rufen Sie in der Google Cloud Console die Seite Ressourcen verwalten auf.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen. Wenn Sie das Projekt nicht löschen möchten, löschen Sie einfach die Instanz, die Sie in Spanner erstellt haben.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.
11. Glückwunsch
Herzlichen Glückwunsch! Sie haben mit der integrierten Vektorsuche von Spanner erfolgreich eine Ähnlichkeitssuche durchgeführt. Außerdem haben Sie gesehen, wie einfach es ist, mit Einbettungs- und LLM-Modellen zu arbeiten, um Generative AI-Funktionen direkt mit SQL bereitzustellen.
Nächste Schritte
Weitere Informationen zur genaueren Nachbarfunktion von Spanner (KNN-Vektorsuche) finden Sie hier: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
Weitere Informationen zum Ausführen von Onlinevorhersagen mit SQL mithilfe der VertexAI-Einbindung von Spanner finden Sie hier: https://cloud.google.com/spanner/docs/ml