Tworzenie aplikacji do wyszukiwania patentów z użyciem usług Spanner, Wyszukiwanie wektorowe itp. Gemini 1.0 Pro

1. Przegląd

W różnych branżach badania patentowe są kluczowym narzędziem do poznawania konkurencji, identyfikowania potencjalnych możliwości licencjonowania lub przejęcia oraz unikania naruszania istniejących patentów.

Badania patentowe są rozległe i złożone. Przeszukiwanie niezliczonych abstraktów technicznych w celu znalezienia odpowiednich innowacji jest trudnym zadaniem. Tradycyjne wyszukiwanie oparte na słowach kluczowych jest często niedokładne i czasochłonne. Streszczenia są długie i techniczne, co utrudnia szybkie zrozumienie głównej idei. Może to spowodować, że badacze pominą kluczowe patenty lub będą tracić czas na nieistotne wyniki.

Cel

W tym laboratorium kodowania pokażemy, jak dzięki Spannerowi oraz wbudowanym funkcjom Gemini 1.0 Pro, Embeddings i wyszukiwania wektorowego można przyspieszyć, uprościć i zwiększyć precyzję wyszukiwania patentów.

Co utworzysz

W ramach tego modułu:

  1. Tworzenie instancji usługi Spanner
  2. Wczytywanie publicznych zbiorów danych Patenty Google
  3. Tworzenie modelu zdalnego do wektorów dystrybucyjnych tekstu za pomocą modelu Gemini 1.0 Pro
  4. Tworzenie obserwacji generatywnych na podstawie wczytanego zbioru danych
  5. Generowanie wektorów dystrybucyjnych na podstawie statystyk
  6. Wysyłanie do zbioru danych zapytań o podobne problemy

Poniższy diagram przedstawia przepływ danych i etapy wdrażania.

14cfdde5e24258a.png

Wymagania

  • przeglądarka, np. Chrome lub Firefox;
  • Projekt Google Cloud z włączonymi płatnościami.

2. Zanim zaczniesz

Utwórz projekt

  1. W konsoli Google Cloud na stronie wyboru projektu wybierz lub utwórz projekt Google Cloud.
  2. Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności .
  3. Będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud, które jest wstępnie załadowane narzędziem bq. U góry konsoli Google Cloud kliknij Aktywuj Cloud Shell.

Obraz przycisku aktywowania Cloud Shell

  1. Po połączeniu z Cloud Shell sprawdź, czy uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu, używając tego polecenia:
gcloud auth list
  1. Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
  1. Jeśli projekt nie jest ustawiony, użyj tego polecenia, aby go ustawić:
gcloud config set project <YOUR_PROJECT_ID>
  1. Sprawdź, czy interfejsy Vertex AI i Spanner API są włączone. W tym celu wyszukaj je w konsoli. Możesz też użyć tego polecenia w terminalu Cloud Shell:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>

Możesz też skorzystać z tego linku.

Informacje o poleceniach gcloud i ich użyciu znajdziesz w dokumentacji.

3. Przygotowywanie bazy danych Spanner

Utwórzmy instancję, bazę danych i tabelę Spanner, do których zostanie załadowany zbiór danych patentów.

Tworzenie instancji usługi Spanner

  1. Utwórz instancję usługi Spanner o nazwie spanner-vertex.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1

Utwórz bazę danych

  1. W konsoli Google Cloud otwórz stronę Spanner.
  2. Wybierz instancję spanner-vertex z listy.
  3. W sekcji Bazy danych kliknij Utwórz bazę danych.
  4. Ustaw nazwę bazy danych na patents.
  5. Kliknij Utwórz, aby utworzyć bazę danych.

Tworzenie tabeli

  1. W konsoli Google Cloud otwórz stronę Spanner.
  2. Wybierz instancję spanner-vertex z listy.
  3. Wybierz bazę danych patents.
  4. Na karcie Tabele kliknij Utwórz tabelę. Otworzy się strona Spanner Studio.
  5. Otwórz nową kartę, klikając Nowa karta edytora SQL.
  6. Uruchom poniższe zapytanie:
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. Wczytywanie danych patentowych do bazy danych

Jako zbioru danych użyjemy publicznych zbiorów danych Patenty Google w BigQuery. Do uruchamiania zapytań będziemy używać Spanner Studio. Repozytorium spanner-gemini-search zawiera skrypt insert_into_patents_data.sql, który uruchomimy, aby wczytać dane patentowe.

  1. W konsoli Google Cloud otwórz stronę Spanner.
  2. Wybierz instancję spanner-vertex z listy.
  3. Wybierz bazę danych patents.
  4. W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator wyświetla się lista obiektów w bazie danych.
  5. Otwórz nową kartę, klikając Nowa karta edytora SQL.
  6. Skopiuj instrukcję zapytania insert ze skryptu insert_into_patents_data.sql w edytorze. Możesz skopiować 50–100 instrukcji wstawiania, aby szybko zaprezentować ten przypadek użycia.
  7. Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.

5. Tworzenie modelu zdalnego dla Gemini 1.0 Pro

Po załadowaniu danych patentowych do bazy danych utworzymy model zdalny, który używa modelu Vertex AI Gemini 1.0 Pro do generowania podsumowanego zestawu tytułów i słów kluczowych.

Uruchom to polecenie DDL w edytorze Spanner Studio:

  1. W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator wyświetla się lista obiektów w bazie danych.
  2. Otwórz nową kartę, klikając Nowa karta edytora SQL.
  3. Uruchom poniższe zapytanie:
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. Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.

6. Tworzenie modelu zdalnego na potrzeby wektorów dystrybucyjnych tekstu

Wynik poprzedniego kroku zawiera skonsolidowane podsumowanie składające się z tytułu i słów kluczowych. Przekształcimy tę odpowiedź w wektory, które pomogą nam generować odpowiednie dopasowania podczas wykonywania zapytania. Będziemy używać Text Embedding Gecko 003 model z Vertex AI zdalnie ze Spannera.

  1. W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator wyświetla się lista obiektów w bazie danych.
  2. Otwórz nową kartę, klikając Nowa karta edytora SQL.
  3. Uruchom poniższe zapytanie:
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. Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.

7. Tworzenie statystyk generatywnych na podstawie abstraktów patentów

Utworzymy patents_data_gemini tabelę do przechowywania wygenerowanych statystyk, które uzyskamy za pomocą utworzonego wcześniej modelu Gemini 1.5 Pro.

Tworzenie tabeli

  1. W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator wyświetla się lista obiektów w bazie danych.
  2. Otwórz nową kartę, klikając Nowa karta edytora SQL.
  3. Uruchom poniższe zapytanie:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
  1. Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.

Generuj obserwacje

Aby wypełnić tabelę wygenerowanymi statystykami, zalecamy użycie aplikacji, która korzysta z metody zapisu zbiorczego lub mutacji. W tym samouczku uruchomimy to zapytanie DDL maksymalnie 4 razy, aby wypełnić tabelę.

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

Uwaga: jeśli na tym etapie pojawi się błąd „Quota Exceeded” (możliwy w przypadku niewielkich bezpłatnych środków), spróbuj pominąć wstawianie i uruchomić tylko zapytanie select w sekcji obejścia poniżej.

Sekcja obejścia:

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

Obserwowanie statystyk

Tabela zawiera statystyki wygenerowane na podstawie promptu 'Identify the areas of work or keywords in this abstract', w zapytaniu.

Uwaga: jeśli zamiast instrukcji INSERT DDL uruchomiono zapytanie z sekcji obejścia problemu, pomiń tę część i uruchom ostatnie zapytanie SELECT na tej stronie.

Aby sprawdzić wyniki statystyk, uruchom to zapytanie:

select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;

Wyświetlą się te wyniki:

6041fab164aaab93.png

Uwaga: jeśli zostało uruchomione zapytanie z sekcji dotyczącej obejścia, zastąp nazwę tabeli w powyższym zapytaniu SELECT zapytaniem z tej sekcji. Zamiast tego uruchomisz to polecenie:

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;

Wynik powinien być taki sam jak na zrzucie ekranu powyżej.

8. Generowanie wektorów wygenerowanych statystyk

Po wypełnieniu tabeli informacjami możemy ich użyć do wygenerowania osadzeń. Wektory dystrybucyjne pomagają nam nie polegać na dokładnych dopasowaniach słów kluczowych, ale generować wyniki na podstawie podobieństw koncepcyjnych.

Uwaga: jeśli w poprzednim kroku wykonano zapytanie w sekcji obejścia, możesz pominąć ten krok i przejść do zapytania w sekcji obejścia w tym kroku.

Aby wygenerować wektory, uruchom to zapytanie:

  1. W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator wyświetla się lista obiektów w bazie danych.
  2. Otwórz nową kartę, klikając Nowa karta edytora SQL.
  3. Aby utworzyć tabelę patents_data_embeddings, uruchom to zapytanie:
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
  1. Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.
  2. Aby wygenerować wektory, uruchom to zapytanie.
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. Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.

Obserwowanie wyników

Tabela zawiera reprezentacje właściwościowe wygenerowane dla tytułu i streszczenia tekstu.

Aby sprawdzić wyniki, uruchom to zapytanie:

select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;

Wyświetlą się te wyniki:

a1e968bac4ab1cb.png

Sekcja obejścia:

Jeśli w innych krokach wykonano obejście problemu, użyj tego zapytania:

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;

Powinny się pojawić te same wyniki co na zrzucie ekranu powyżej.

9. Przygotowywanie się do wyszukiwania wektorowego

Po wygenerowaniu wektorów dystrybucyjnych tekstu możemy przygotować aplikację internetową do wykonywania wyszukiwań wektorowych pod kątem podobieństwa. W tym laboratorium kodowania utworzymy aplikację internetową, która zawiera logikę zwracającą wyniki wyszukiwania na podstawie funkcji wyszukiwania podobieństw K-Nearest Neighbors. Możesz użyć tego przygotowanego zbioru danych w aplikacji do wyszukiwania, aby zobaczyć, jak będą wyglądać wyniki wyszukiwania.

W tym samouczku uruchomimy przykładowe zapytanie, które wyszukuje prompt, generuje wyniki na podstawie kontekstu i ogranicza je do 10 pozycji.

Uruchom poniższe zapytanie:

  1. W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator wyświetla się lista obiektów w bazie danych.
  2. Otwórz nową kartę, klikając Nowa karta edytora SQL.
  3. Aby utworzyć tabelę patents_data_embeddings, uruchom to zapytanie:
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. Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.

Uwaga: jeśli w sekcji obejścia zostały użyte zapytania, z powodu błędów związanych z limitami w jednym z najwcześniejszych poleceń wstawiania możesz pominąć wszystkie pozostałe kroki i bezpośrednio uruchomić poniższe zapytanie, aby zobaczyć wyniki wyszukiwania najbliższego sąsiada w przypadku osadzania wektorowego w bazie danych 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;

Obserwowanie wyników

Wcześniejsze zapytanie używa metody COSINE_DISTANCE, aby znaleźć 10 najbliższych wyników pasujących do naszego promptu.

Wyświetlą się te wyniki:

d26ca8b8238bdf25.png

Wygenerowane wyniki są dość zbliżone kontekstowo do promptu, który był częścią zapytania.

10. Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby użyte w tym poście, wykonaj te czynności:

  1. W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
  2. Z listy projektów wybierz projekt do usunięcia, a potem kliknij Usuń. Jeśli nie chcesz usuwać projektu, po prostu usuń instancję utworzoną w Spannerze.
  3. W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.

11. Gratulacje

Gratulacje! Udało Ci się przeprowadzić wyszukiwanie podobieństwa za pomocą wbudowanej funkcji wyszukiwania wektorowego w usłudze Spanner. Pokazaliśmy też, jak łatwo można pracować z modelami osadzania i LLM, aby udostępniać funkcje generatywnej AI bezpośrednio za pomocą SQL.

Co dalej?

Więcej informacji o funkcji dokładnego wyszukiwania najbliższych sąsiadów (wyszukiwanie wektorowe KNN) w Spanner znajdziesz tutaj: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors

Więcej informacji o tym, jak wykonywać prognozy online za pomocą SQL przy użyciu integracji Spannera z Vertex AI, znajdziesz tutaj: https://cloud.google.com/spanner/docs/ml