Patentsuchanwendung mit Spanner, Vektorsuche & Gemini 1.0 Pro!

1. Übersicht

In verschiedenen Branchen ist die Patentrecherche ein wichtiges Instrument, um die Wettbewerbssituation zu verstehen, potenzielle Lizenzierungs- oder Akquisitionsmöglichkeiten zu erkennen und die Verletzung bestehender Patente zu vermeiden.

Die Patentrecherche ist umfangreich und komplex. Das Durchsuchen unzähliger technischer Zusammenfassungen, um relevante Innovationen zu finden, ist eine entmutigende Aufgabe. Herkömmliche stichwortbasierte Suchanfragen sind oft ungenau und zeitaufwendig. Die Zusammenfassungen sind lang und technisch, sodass es schwierig ist, die Kernidee schnell zu erfassen. Das kann dazu führen, dass Forschende wichtige Patente übersehen oder Zeit mit irrelevanten Ergebnissen verschwenden.

Ziel

In diesem Codelab werden wir den Prozess der Patentsuche mit Spanner, Gemini 1.0 Pro, Embeddings und Vektorsuche schneller, intuitiver und präziser gestalten.

Aufgaben

In diesem Lab haben Sie folgende Aufgaben:

  1. Spanner-Instanz erstellen
  2. Öffentliche Datasets von Google Patents laden
  3. Remote-Modell für Texteinbettungen mit dem Gemini 1.0 Pro-Modell erstellen
  4. Generative Statistiken aus geladenem Dataset erstellen
  5. Einbettungen aus den Statistiken generieren
  6. Ähnlichkeitssuchanfragen für das Dataset ausführen

Das folgende Diagramm zeigt den Datenfluss und die Schritte, die für die Implementierung erforderlich sind.

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 zur 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 in der bq vorinstalliert ist. Klicken Sie oben in der Google Cloud Console auf „Cloud Shell aktivieren“.

Bild der Schaltfläche „Cloud Shell aktivieren“

  1. Sobald die Verbindung mit der Cloud Shell hergestellt ist, können Sie mit dem folgenden Befehl prüfen, ob Sie bereits authentifiziert sind und für das Projekt schon Ihre Projekt-ID eingestellt ist:
gcloud auth list
  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um zu bestätigen, dass 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. Suchen Sie in der Konsole nach den Vertex AI- und Spanner-APIs, um zu prüfen, ob sie aktiviert sind. 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.

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

3. Spanner-Datenbank vorbereiten

Erstellen wir eine Spanner-Instanz, ‑Datenbank und ‑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 spanner-vertex-Instanz 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 spanner-vertex-Instanz aus der Liste aus.
  3. Wählen Sie die Datenbank patents aus.
  4. Klicken Sie auf dem Tab Tabellen auf Tabelle erstellen. Die Seite „Spanner Studio“ 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 Google Patents-Datasets in BigQuery. 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.

  1. Öffnen Sie in der Google Cloud Console die Seite Spanner.
  2. Wählen Sie die spanner-vertex-Instanz 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-Abfrageanweisung aus dem insert_into_patents_data.sql-Skript im Editor. Sie können 50 bis 100 INSERT-Anweisungen kopieren, um diesen Anwendungsfall schnell zu demonstrieren.
  7. Klicken Sie auf Ausführen. Die Ergebnisse Ihrer 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-Modell von Vertex AI verwendet, um eine zusammengefasste Gruppe von Titeln und Keywords zu generieren.

Führen Sie den folgenden DDL-Befehl im Spanner Studio-Editor 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 Ihrer 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 Keywords besteht. Wir wandeln diese Antwort in Einbettungen um, die uns helfen, bei einer Anfrage passende Ergebnisse zu generieren. Wir verwenden die Text Embedding Gecko 003 model von Vertex AI aus der Ferne von Spanner 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 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 Ihrer Abfrage werden in der Tabelle Ergebnisse angezeigt.

7. Generative Statistiken aus Patentzusammenfassungen erstellen

Wir erstellen eine patents_data_gemini-Tabelle, in der wir generative Statistiken speichern, die wir mit dem Gemini 1.5 Pro-Modell generieren, das wir zuvor erstellt haben.

Erstellen Sie die Tabelle:

  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 Ihrer Abfrage werden in der Tabelle Ergebnisse angezeigt.

Insights generieren

Um die Tabelle mit generativen Statistiken zu füllen, empfehlen wir, eine Anwendung zu verwenden, die die Methode „Batch Write“ oder „Mutations“ nutzt. 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 Sie in diesem Schritt den Fehler „Quota Exceeded“ (Kontingent überschritten) erhalten (was bei kostenlosen Guthaben mit geringer Marge möglich ist), versuchen Sie, das Einfügen zu überspringen und nur die SELECT-Abfrage im Workaround-Abschnitt unten auszuführen.

Abschnitt „Workaround“:

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 ansehen

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

Hinweis:Wenn Sie die Abfrage aus dem Workaround-Abschnitt 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 wir 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 zum Umgehen des Problems ausgeführt haben, ersetzen Sie den Tabellennamen in der obigen SELECT-Abfrage durch die Abfrage im Abschnitt zum Umgehen des Problems. Führen Sie stattdessen den folgenden Befehl 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 Ergebnis auf dem Screenshot oben übereinstimmen.

8. Einbettungen für die generierten Statistiken erstellen

Nachdem wir die Tabelle mit den Erkenntnissen gefüllt haben, können wir diese Erkenntnisse verwenden, um Einbettungen zu generieren. Mithilfe dieser Einbettungen können wir Ergebnisse auf Grundlage konzeptioneller Ähnlichkeiten generieren, ohne auf genaue Keyword-Übereinstimmungen angewiesen zu sein.

Hinweis:Wenn Sie die Abfrage für den Workaround im vorherigen Schritt ausgeführt haben, können Sie diesen Schritt überspringen und direkt zur Abfrage für den Workaround in diesem Schritt übergehen.

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 Ihrer 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 Ihrer Abfrage werden in der Tabelle Ergebnisse angezeigt.

Ergebnisse beobachten

Die Tabelle enthält Einbettungen, die für den Titel und den zusammengefassten 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 „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;

Das Ergebnis sollte dem Screenshot oben entsprechen.

9. 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 für die Bereitstellung von Suchergebnissen auf Grundlage der K-Nearest Neighbors-Ähnlichkeitssuche enthält. Sie können diesen vorbereiteten Datensatz mit einer Suchanwendung verwenden, um zu visualisieren, wie die Suchergebnisse aussehen.

In unserem Codelab führen wir eine Beispielanfrage aus, bei der nach einem Prompt gesucht wird, Ergebnisse basierend auf dem Kontext generiert werden und die Ergebnisse auf 10 Einträge begrenzt werden.

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 Ihrer Abfrage werden in der Tabelle Ergebnisse angezeigt.

Hinweis:Wenn Sie die Abfragen im Abschnitt zur Problemumgehung aufgrund von Kontingentfehlern in einer der ersten Einfügeanweisungen verwendet haben, können Sie alle anderen Schritte überspringen und direkt die folgende Abfrage ausführen, um die Ergebnisse der Suche nach dem nächsten Nachbarn für Vektoreinbettungen 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 10 ähnlichsten Übereinstimmungen für unseren Prompt zu finden.

Die folgenden Ergebnisse werden angezeigt:

d26ca8b8238bdf25.png

Die generierten Ergebnisse sind inhaltlich sehr nah an dem Prompt, der Teil der Anfrage war.

10. Bereinigen

So vermeiden Sie, dass Ihrem Google Cloud-Konto die in diesem Beitrag verwendeten Ressourcen in Rechnung gestellt werden:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
  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 erfolgreich eine Suche nach Ähnlichkeiten 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 Funktion „Exakte Suche nach den nächsten Nachbarn (KNN-Vektorsuche)“ von 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 Vertex AI-Integration von Spanner finden Sie unter https://cloud.google.com/spanner/docs/ml.