Patentsuchanwendung mit Spanner, Vektorsuche & Gemini 1.0 Pro!

1. Übersicht

In verschiedenen Branchen ist die Patentrecherche ein wichtiges Instrument, um die Wettbewerbslandschaft zu verstehen, potenzielle Lizenzierungs- oder Akquisitionsmöglichkeiten zu identifizieren und Patentverletzungen zu vermeiden.

Die Patentrecherche ist umfangreich und komplex. Es ist eine entmutigende Aufgabe, unzählige technische Zusammenfassungen zu durchforsten, um relevante Innovationen zu finden. Herkömmliche keywordbasierte Suchanfragen sind oft ungenau und zeitaufwendig. Zusammenfassungen sind lang und technisch, was es schwierig macht, die Kernidee schnell zu erfassen. Das kann dazu führen, dass Forscher wichtige Patente übersehen oder Zeit mit irrelevanten Ergebnissen verschwenden.

Ziel

In diesem Codelab arbeiten wir daran, die Suche nach Patenten mithilfe von Spanner, In-Place-Gemini 1.0 Pro, Einbettungen und der Vektorsuche schneller, intuitiver und unglaublich präziser zu machen.

Aufgaben

In diesem Lab lernen Sie Folgendes:

  1. Spanner-Instanz erstellen
  2. Öffentliche Datasets der Google Patentsuche laden
  3. Remote-Modell für Texteinbettungen mit dem Gemini 1.0 Pro-Modell erstellen
  4. Generative Statistiken aus geladenem Datensatz erstellen
  5. Einbettungen aus den Statistiken generieren
  6. Ähnlichkeitssuchanfragen an den Datensatz senden

Das folgende Diagramm stellt den Datenfluss und die Schritte bei der Implementierung dar.

14cfdde5e24258a.png

Voraussetzungen

  • Ein Browser, z. B. Chrome oder Firefox
  • Google Cloud-Projekt mit aktivierter Abrechnungsfunktion.

2. Hinweis

Projekt erstellen

  1. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
  3. Sie verwenden Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird und bq bereits vorinstalliert hat. Klicken Sie oben in der Google Cloud Console auf „Cloud Shell aktivieren“.

Bild der Schaltfläche „Cloud Shell aktivieren“

  1. Nachdem Sie eine Verbindung zu Cloud Shell hergestellt haben, prüfen Sie mit dem folgenden Befehl, ob Sie bereits authentifiziert sind und das Projekt auf Ihre Projekt-ID festgelegt ist:
gcloud auth list
  1. 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
  1. Wenn Ihr Projekt nicht festgelegt ist, verwenden Sie den folgenden Befehl, um es festzulegen:
gcloud config set project <YOUR_PROJECT_ID>
  1. Prüfen Sie, ob die Vertex AI API und die Spanner API aktiviert sind. Suchen Sie dazu in der Console nach den APIs. 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 diesen Link verwenden.

Weitere Informationen zu gcloud-Befehlen und deren Verwendung finden Sie in der Dokumentation.

3. Spanner-Datenbank vorbereiten

Erstellen Sie eine Spanner-Instanz, eine Datenbank und eine Tabelle, in die das Patent-Dataset geladen wird.

Spanner-Instanz erstellen

  1. 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

  1. Öffnen Sie in der Google Cloud Console die Seite Spanner.
  2. Wählen Sie die Instanz spanner-vertex aus der Liste aus.
  3. Klicken Sie unter „Datenbanken“ auf Datenbank erstellen.
  4. Legen Sie den Datenbanknamen auf „patents“ fest.
  5. Klicken Sie auf Erstellen, um die Datenbank zu erstellen.

Tabelle erstellen

  1. Öffnen Sie in der Google Cloud Console die Seite Spanner.
  2. Wählen Sie die Instanz spanner-vertex aus der Liste aus.
  3. Wählen Sie die Datenbank patents aus.
  4. Klicken Sie auf dem Tab Tabellen auf Tabelle erstellen. Die Spanner Studio-Seite wird geöffnet.
  5. Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab klicken.
  6. 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

Als Dataset verwenden wir die öffentlichen Datasets von Google Patents in BigQuery. Wir verwenden Spanner Studio, um unsere Abfragen auszuführen. Das Repository spanner-gemini-search enthält das Script insert_into_patents_data.sql, das wir zum Laden der Patentdaten ausführen.

  1. Öffnen Sie in der Google Cloud Console die Seite Spanner.
  2. Wählen Sie die Instanz spanner-vertex aus der Liste aus.
  3. Wählen Sie die Datenbank patents aus.
  4. Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
  5. Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab klicken.
  6. Kopieren Sie die insert-Abfrage aus dem insert_into_patents_data.sql-Script in den Editor. Sie können 50 bis 100 INSERT-Anweisungen kopieren, um eine kurze Demo dieses Anwendungsfalls zu erhalten.
  7. 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 Remote-Modell, das das Gemini 1.0 Pro Vertex AI-Modell verwendet, um einen zusammengefassten Titel und Keywords zu generieren.

Führen Sie im Spanner Studio-Editor den folgenden DDL-Befehl aus:

  1. Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
  2. Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab klicken.
  3. 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
);
  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 mit einem Titel und Keywords. Wir wandeln diese Antwort in Einbettungen um, die uns bei der Ausführung einer Abfrage helfen, passende Übereinstimmungen zu generieren. Wir verwenden die Text Embedding Gecko 003 model von Vertex AI aus der Ferne in Spanner.

  1. Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
  2. Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab klicken.
  3. 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');
  1. Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.

7. Generative Statistiken aus Patentabstrakten erstellen

Wir erstellen eine patents_data_gemini-Tabelle, um generative Statistiken zu speichern, die wir mit dem zuvor erstellten Gemini 1.5 Pro-Modell generieren.

Tabelle erstellen

  1. Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
  2. Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab klicken.
  3. Führen Sie die folgende Abfrage aus:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
  1. Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.

Insights generieren

Wenn Sie die Tabelle mit generativen Statistiken füllen möchten, sollten Sie eine Anwendung 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 „Quota Exceeded“ (Kontingent überschritten) auftritt (möglich bei kleinen Margen für kostenlose Gutschriften), überspringen Sie die Einfügung und führen Sie nur die Abfrage aus, die im Abschnitt mit der Problemumgehung unten beschrieben wird.

Abschnitt mit Behelfslösung:

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
))

Statistiken beobachten

Die Tabelle enthält Statistiken, die für den 'Identify the areas of work or keywords in this abstract',-Prompt in der Abfrage generiert wurden.

Hinweis:Wenn Sie die Abfrage im Abschnitt mit der Problemumgehung oben 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:

6041fab164aaab93.png

Hinweis:Wenn Sie die Abfrage im Abschnitt mit der Problemumgehung ausgeführt haben, ersetzen Sie den Tabellennamen in der obigen SELECT-Abfrage durch die Abfrage im Abschnitt mit der Problemumgehung. Sie führen stattdessen Folgendes aus:

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 Screenshot oben übereinstimmen.

8. Einbettungen für die generierten Statistiken generieren

Nachdem wir die Erkenntnisse in unsere Tabelle eingetragen haben, können wir diese jetzt verwenden, um Einbettungen zu generieren. Diese Embeddings helfen uns, nicht auf genaue Keyword-Übereinstimmungen angewiesen zu sein, sondern Ergebnisse auf der Grundlage von konzeptionellen Ähnlichkeiten zu generieren.

Hinweis:Wenn Sie die Abfrage im Abschnitt „Behelfslösung“ im vorherigen Schritt ausgeführt haben, können Sie diesen Schritt überspringen und mit der Abfrage im Abschnitt „Behelfslösung“ in diesem Schritt fortfahren.

Führen Sie die folgende Abfrage aus, um Einbettungen zu generieren:

  1. Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
  2. Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab klicken.
  3. 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);
  1. Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.
  2. 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));
  1. 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:

a1e968bac4ab1cb.png

Abschnitt mit der Problemumgehung:

Verwenden Sie diese Abfrage, wenn Sie den Abschnitt zur Problemumgehung 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;

Das sollte dieselben Ergebnisse wie im Screenshot oben liefern.

9. Für die Vektorsuche vorbereiten

Nachdem wir 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 zur Ausgabe von Suchergebnissen auf der Grundlage der Ähnlichkeitssuche mit K-Nearest Neighbors enthält. Sie können diesen vorbereiteten Datensatz mit einer Such-App verwenden, um zu visualisieren, wie die Suchergebnisse angezeigt werden.

In unserem Codelab führen wir eine Beispielabfrage aus, die nach einem Prompt sucht, Ergebnisse basierend auf dem Kontext generiert und die Ergebnisse auf 10 Einträge beschränkt.

Führen Sie die folgende Abfrage aus:

  1. Klicken Sie im Navigationsmenü auf Spanner Studio. Im Bereich Explorer wird eine Liste der Objekte in Ihrer Datenbank angezeigt.
  2. Öffnen Sie einen neuen Tab, indem Sie auf Neuer SQL-Editor-Tab klicken.
  3. 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;
  1. Klicken Sie auf Ausführen. Die Ergebnisse der Abfrage werden in der Tabelle Ergebnisse angezeigt.

Hinweis:Wenn Sie die Abfragen im Abschnitt zur Problemumgehung verwendet haben und aufgrund von Kontingentfehlern in einer der ersten Insert-Anweisungen alle anderen Schritte überspringen und direkt die folgende Abfrage ausführen möchten, um die Ergebnisse der Suche nach dem Nächstbesten auf Vektor-Ebenen in der Spanner-Datenbank zu sehen:

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 besten Übereinstimmungen für unseren Prompt zu finden.

Die folgenden Ergebnisse werden angezeigt:

d26ca8b8238bdf25.png

Die generierten Ergebnisse stimmen inhaltlich ziemlich mit dem Prompt überein, der Teil der Suchanfrage war.

10. Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud-Konto die in diesem Beitrag verwendeten Ressourcen in Rechnung gestellt werden:

  1. Rufen Sie in der Google Cloud Console die Seite Ressourcen verwalten auf.
  2. 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.
  3. 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 eine Ähnlichkeitssuche mit der integrierten Vektorsuche von Spanner durchgeführt. Außerdem haben Sie gesehen, wie einfach es ist, mit Einbettungs- und LLM-Modellen zu arbeiten, um generative KI-Funktionen direkt mit SQL bereitzustellen.

Nächste Schritte

Weitere Informationen zur exakten KNN-Vektorsuche (K-Nearest Neighbor) in Spanner finden Sie unter https://cloud.google.com/spanner/docs/find-k-nearest-neighbors.

Weitere Informationen zum Ausführen von Onlinevorhersagen mit SQL mithilfe der VertexAI-Integration von Spanner finden Sie hier: https://cloud.google.com/spanner/docs/ml