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

1. Omówienie

W przypadku różnych branż badania związane z patentami odgrywają kluczową rolę w poznawaniu konkurencji, identyfikowaniu potencjalnych możliwości uzyskania licencji lub przejęcia oraz unikaniu naruszania istniejących patentów.

Badania nad patentami to złożone i ogromne zagadnienia. Przeszukiwanie niezliczonych streszczeń technicznych w celu znalezienia odpowiednich innowacji to niełatwe zadanie. Tradycyjne wyszukiwania oparte na słowach kluczowych są często niedokładne i czasochłonne. Streszczenia są długie i zawierają informacje techniczne, co utrudnia szybkie zrozumienie koncepcji. Może to doprowadzić do przegapienia kluczowych patentów lub marnowania czasu na nietrafne wyniki.

Cel

W ramach tych ćwiczeń w Codelabs będziemy pracować nad przyspieszeniem, intuicyjnością i niezwykle precyzją wyszukiwania patentów, korzystając z usługi Spanner oraz Gemini 1.0 Pro, reprezentacji właściwościowych i wyszukiwania wektorowego.

Co utworzysz

W ramach tego modułu:

  1. Tworzenie instancji usługi Spanner
  2. Wczytaj publiczne zbiory danych z patentów Google
  3. Tworzenie zdalnego modelu wektorów dystrybucyjnych tekstu z użyciem modelu Gemini 1.0 Pro
  4. Utwórz obserwacje generatywne na podstawie wczytanego zbioru danych
  5. Generowanie wektorów dystrybucyjnych na podstawie statystyk
  6. Wyślij zapytania dotyczące podobieństwa problemów do zbioru danych

Na diagramie poniżej widać przepływ danych i kroki związane z implementacją.

14cfdde5e24258a.png

Wymagania

  • przeglądarki, na przykład 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 selektora projektów 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. Użyjesz Cloud Shell – środowiska wiersza poleceń działającego w Google Cloud, które zawiera wstępnie zainstalowane narzędzie bq. Kliknij Aktywuj Cloud Shell u góry konsoli Google Cloud.

Obraz przycisku aktywowania Cloud Shell

  1. Po nawiązaniu połączenia z Cloud Shell możesz użyć tego polecenia, aby sprawdzić, czy użytkownik jest już uwierzytelniony i czy identyfikator projektu jest ustawiony na identyfikator Twojego projektu:
gcloud auth list
  1. Uruchom to polecenie w Cloud Shell, aby sprawdzić, czy polecenie gcloud zna Twój projekt.
gcloud config list project
  1. Jeśli Twój projekt nie jest skonfigurowany, ustaw go za pomocą tego polecenia:
gcloud config set project <YOUR_PROJECT_ID>
  1. Sprawdź, czy interfejsy Vertex AI i Spanner API są włączone, wyszukując 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ż użyć tego linku.

Więcej informacji o poleceniach i sposobie korzystania z gcloud znajdziesz w dokumentacji.

3. Przygotowywanie bazy danych Spannera

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

Tworzenie instancji usługi Spanner

  1. Utwórz instancję Spannera 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. Na liście wybierz instancję spanner-vertex.
  3. W sekcji Bazy danych kliknij Utwórz bazę danych.
  4. Ustaw nazwę bazy danych na patenty.
  5. Kliknij Utwórz, aby utworzyć bazę danych.

Tworzenie tabeli

  1. W konsoli Google Cloud otwórz stronę Spanner.
  2. Na liście wybierz instancję spanner-vertex.
  3. Wybierz bazę danych patents.
  4. Na karcie Tables kliknij Utwórz tabelę. Otworzy się strona Spanner Studio.
  5. Otwórz nową kartę, klikając kartę Nowy edytor 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 patentów do bazy danych

Jako zbiór danych użyjemy publicznych zbiorów danych Google Patents w BigQuery. Do uruchamiania zapytań użyjemy Spanner Studio. Repozytorium spanner-gemini-search zawiera skrypt insert_into_patents_data.sql, który uruchomimy, aby wczytać dane patentu.

  1. W konsoli Google Cloud otwórz stronę Spanner.
  2. Na liście wybierz instancję spanner-vertex.
  3. Wybierz bazę danych patents.
  4. W menu nawigacyjnym kliknij Spanner Studio. W panelu Explorer zostanie wyświetlona lista obiektów w bazie danych.
  5. Otwórz nową kartę, klikając kartę Nowy edytor SQL.
  6. Skopiuj instrukcję zapytania insert ze skryptu insert_into_patents_data.sql w edytorze. Możesz skopiować od 50 do 100 instrukcji wstawiania, aby zobaczyć, jak dobrze zademonstrowano ten przypadek użycia.
  7. Kliknij Wykonaj. Wyniki zapytania zostaną wyświetlone w tabeli Wyniki.

5. Utwórz model zdalny dla Gemini 1.0 Pro

Po załadowaniu danych patentu do bazy danych utworzymy model zdalny, który korzysta z modelu Vertex AI Gemini 1.0 Pro do wygenerowania podsumowania 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 Explorer zostanie wyświetlona lista obiektów w bazie danych.
  2. Otwórz nową kartę, klikając kartę Nowy edytor 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 zostaną wyświetlone w tabeli Wyniki.

6. Utwórz model zdalny dla wektorów dystrybucyjnych tekstu

W wyniku wcześniejszego kroku wyświetli się skonsolidowane podsumowanie składające się z tytułu i słów kluczowych. Przekonwertujemy tę odpowiedź na wektory dystrybucyjne, które pomogą nam generować odpowiednie dopasowania podczas uruchamiania zapytania. Będziemy używać Text Embedding Gecko 003 model usługi Vertex AI zdalnie ze Spannera.

  1. W menu nawigacyjnym kliknij Spanner Studio. W panelu Explorer zostanie wyświetlona lista obiektów w bazie danych.
  2. Otwórz nową kartę, klikając kartę Nowy edytor 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 zostaną wyświetlone w tabeli Wyniki.

7. Tworzenie statystyk generatywnych na podstawie streszczenia patentów

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

Tworzenie tabeli

  1. W menu nawigacyjnym kliknij Spanner Studio. W panelu Explorer zostanie wyświetlona lista obiektów w bazie danych.
  2. Otwórz nową kartę, klikając kartę Nowy edytor 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 zostaną wyświetlone w tabeli Wyniki.

Generuj obserwacje

Aby wypełnić tabelę statystykami generatywnymi, zalecamy użycie aplikacji, która korzysta z metody zapisu wsadowego lub mutacji. W ramach tego ćwiczenia z programowania uruchomimy poniższe 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 w tym kroku pojawia się błąd „Przekroczono limit” (to możliwe w przypadku niewielkiej marży), pomiń wstawienie i uruchom tylko wybrane zapytanie (opisane 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
))

Obserwuj statystyki

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

Uwaga: jeśli zamiast INSERT DDL uruchomiono zapytanie z sekcją obejścia problemu, pomiń tę część i uruchom w zamian 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;

Widzisz te wyniki:

6041fab164aaab93.png

Uwaga: jeśli zostało przez Ciebie uruchomione zapytanie z sekcją obejścia problemu, zastąp nazwę tabeli w powyższym zapytaniu wyboru nazwą zapytania z sekcji obejścia problemu. Użyjesz więc takiego kodu:

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 z wynikami powyżej.

8. Wygeneruj elementy osadzone na potrzeby wygenerowanych statystyk

Po załadowaniu statystyk do naszej tabeli możemy ich teraz używać do generowania wektorów dystrybucyjnych. Takie wektory dystrybucyjne pomagają nam nie polegać na dokładnych dopasowaniach słów kluczowych, ale pomagają generować wyniki na podstawie podobieństwa koncepcyjnych.

Uwaga: jeśli w poprzednim kroku zostało przez Ciebie uruchomione zapytanie w sekcji obejścia problemu, możesz to pominąć i przejść do zapytania dotyczącego sekcji obejścia w tym kroku.

Aby wygenerować wektory dystrybucyjne, uruchom to zapytanie:

  1. W menu nawigacyjnym kliknij Spanner Studio. W panelu Explorer zostanie wyświetlona lista obiektów w bazie danych.
  2. Otwórz nową kartę, klikając kartę Nowy edytor SQL.
  3. Uruchom to zapytanie, aby utworzyć tabelę patents_data_embeddings.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
  1. Kliknij Wykonaj. Wyniki zapytania zostaną wyświetlone w tabeli Wyniki.
  2. Aby wygenerować wektory dystrybucyjne, uruchom poniższe 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 zostaną wyświetlone w tabeli Wyniki.

Obserwuj wyniki

Tabela zawiera wektory dystrybucyjne wygenerowane dla tytułu i wyodrębnionego 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;

Widzisz te wyniki:

a1e968bac4ab1cb.png

Sekcja obejścia:

Użyj tego zapytania, jeśli sekcja obejścia została wykonana w innych krokach:

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;

Powinno to spowodować taki sam efekt jak na zrzucie ekranu powyżej.

9. Przygotowanie do wyszukiwania wektorowego

Po wygenerowaniu wektorów dystrybucyjnych tekstu możemy przygotować naszą aplikację internetową do obsługi wyszukiwania wektorów podobieństw. W ramach tego ćwiczenia w Codelabs utworzyliśmy aplikację internetową, która zawiera mechanizm wyświetlania wyników wyszukiwania na podstawie funkcji wyszukiwania podobieństw K-najbliższych sąsiadów. Możesz użyć tego przygotowanego zbioru danych za pomocą aplikacji do wyszukiwania, aby zwizualizować sposób wyświetlania wyników wyszukiwania.

W ramach naszych ćwiczeń z programowania uruchomimy przykładowe zapytanie, które wyszukuje prompt, generuje wyniki na podstawie kontekstu i ogranicza wyniki do 10 wpisów.

Uruchom poniższe zapytanie:

  1. W menu nawigacyjnym kliknij Spanner Studio. W panelu Explorer zostanie wyświetlona lista obiektów w bazie danych.
  2. Otwórz nową kartę, klikając kartę Nowy edytor SQL.
  3. Uruchom to zapytanie, aby utworzyć tabelę 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;
  1. Kliknij Wykonaj. Wyniki zapytania zostaną wyświetlone w tabeli Wyniki.

Uwaga: jeśli używasz zapytań z sekcji obejścia problemu ze względu na błędy limitu w jednej z najwcześniejszych instrukcji wstawiania, możesz pominąć wszystkie pozostałe kroki i bezpośrednio uruchomić poniższe zapytanie, aby sprawdzić wyniki wyszukiwania najbliższych sąsiadów we wektorach wektorowych w bazie danych Spannera:

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;

Obserwuj wyniki

Wcześniejsze zapytanie korzysta z metody COSINE_DISTANCE, aby znaleźć 10 najbliższych dopasowań dla naszego promptu.

Widzisz te wyniki:

d26ca8b8238bdf25.png

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

10. Czyszczenie danych

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

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

11. Gratulacje

Gratulacje! Udało Ci się przeprowadzić wyszukiwanie podobieństw za pomocą wbudowanego wyszukiwania wektorowego w usłudze Spanner. Wiesz też, jak łatwo można korzystać z modeli wektora dystrybucyjnego i LLM do udostępniania funkcji generatywnej AI bezpośrednio za pomocą języka SQL.

Co dalej?

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

Więcej informacji o wykonywaniu prognoz online za pomocą SQL przy użyciu integracji VertexAI w usłudze Spanner znajdziesz też tutaj: https://cloud.google.com/spanner/docs/ml.