1. Omówienie
W różnych branżach badania patentowe są kluczowym narzędziem do analizowania konkurencji, identyfikowania potencjalnych możliwości licencjonowania lub przejęcia oraz unikania naruszania istniejących patentów.
Badania patentowe są rozległe i skomplikowane. Przeszukiwanie niezliczonych abstraktów technicznych w celu znalezienia odpowiednich innowacji jest trudnym zadaniem. Tradycyjne wyszukiwanie na podstawie słów kluczowych jest często niedokładne i czasochłonne. Abstrakty są długie i techniczne, co utrudnia szybkie zrozumienie głównej idei. Może to spowodować, że badacze nie znajdą kluczowych patentów lub stracą czas na przeglądanie nieistotnych wyników.
Cel
W tym laboratorium kodu postaramy się, aby proces wyszukiwania patentów był szybszy, bardziej intuicyjny i niezwykle dokładny dzięki wykorzystaniu Spanner, Gemini 1.0 Pro, Embeddings i wyszukiwania wektorów.
Co utworzysz
W ramach tego laboratorium wykonasz te czynności:
- Tworzenie instancji usługi Spanner
- Wczytywanie publicznych zbiorów danych Google Patents
- Tworzenie zdalnego modelu wektorów dystrybucyjnych tekstu za pomocą modelu Gemini 1.0 Pro
- Tworzenie generatywnych statystyk na podstawie załadowanego zbioru danych
- Generowanie wektorów dystrybucyjnych na podstawie obserwacji
- Przesyłanie zapytań o wyszukiwanie podobnych elementów do zbioru danych
Poniższy diagram przedstawia przepływ danych i etapów wdrażania.
Wymagania
2. Zanim zaczniesz
Utwórz projekt
- W konsoli Google Cloud na stronie selektora projektu wybierz lub utwórz projekt Google Cloud.
- Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności .
- Użyjesz Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud, które jest wstępnie załadowane w bq. Kliknij Aktywuj Cloud Shell u góry konsoli Google Cloud.
- Po połączeniu z Cloud Shell sprawdź, czy jesteś już uwierzytelniony i czy projekt jest ustawiony na identyfikator Twojego projektu, używając tego polecenia:
gcloud auth list
- Aby sprawdzić, czy polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
- Jeśli projekt nie jest ustawiony, użyj tego polecenia:
gcloud config set project <YOUR_PROJECT_ID>
- Sprawdź, czy interfejsy Vertex AI i Spanner 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.
Informacje o poleceniach i użytkowaniu gcloud znajdziesz w dokumentacji.
3. Przygotuj bazę danych Spanner
Utwórz instancję Spanner, bazę danych i tabelę, do której zostanie załadowany zbiór danych patentów.
Tworzenie instancji usługi Spanner
- 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
- W konsoli Google Cloud otwórz stronę Spanner.
- Wybierz instancję
spanner-vertex
z listy. - W sekcji Bazy danych kliknij Utwórz bazę danych.
- Ustaw nazwę bazy danych na patents.
- Kliknij Utwórz, aby utworzyć bazę danych.
Tworzenie tabeli
- W konsoli Google Cloud otwórz stronę Spanner.
- Wybierz instancję
spanner-vertex
z listy. - Wybierz bazę danych
patents
. - Na karcie Tabele kliknij Utwórz tabelę. Otworzy się strona Spanner Studio.
- Otwórz nową kartę, klikając kartę Nowy edytor SQL.
- 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 Patents Google w BigQuery. Do wykonywania zapytań użyjemy usługi Spanner Studio. Repozytorium spanner-gemini-search zawiera skrypt insert_into_patents_data.sql
, który uruchomimy, aby załadować dane patentowe.
- W konsoli Google Cloud otwórz stronę Spanner.
- Wybierz instancję
spanner-vertex
z listy. - Wybierz bazę danych
patents
. - W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator znajduje się lista obiektów w bazie danych.
- Otwórz nową kartę, klikając kartę Nowy edytor SQL.
- Skopiuj instrukcję zapytania
insert
ze skryptuinsert_into_patents_data.sql
w edytorze. Aby szybko wypróbować ten przypadek użycia, możesz skopiować 50–100 instrukcji INSERT. - Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.
5. Tworzenie zdalnego modelu dla Gemini 1.0 Pro
Po załadowaniu danych patentowych do bazy danych utworzymy model zdalny, który używa modelu Gemini 1.0 Pro Vertex AI do generowania podsumowanego zbioru tytułów i słów kluczowych.
Uruchom w edytorze Spanner Studio to polecenie DDL:
- W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator znajduje się lista obiektów w bazie danych.
- Otwórz nową kartę, klikając kartę Nowy edytor SQL.
- 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
);
- Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.
6. Tworzenie modelu zdalnego na potrzeby wektorów tekstowych
Wynik poprzedniego kroku obejmuje skonsolidowane podsumowanie zawierające tytuł i słowa kluczowe. Przekształcimy tę odpowiedź w wartości zastępcze, które pomogą nam wygenerować odpowiednie dopasowania podczas wykonywania zapytania. Użyjemy usługi Text Embedding Gecko 003 model
z Vertex AI zdalnie z usług Spanner.
- W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator znajduje się lista obiektów w bazie danych.
- Otwórz nową kartę, klikając kartę Nowy edytor SQL.
- 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');
- Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.
7. Tworzenie statystyk generatywnych na podstawie streszczeń patentów
Utworzymy tabelę patents_data_gemini
, w której będziemy przechowywać dane generatywne wygenerowane za pomocą utworzonego wcześniej modelu Gemini 1.5 Pro.
Tworzenie tabeli
- W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator znajduje się lista obiektów w bazie danych.
- Otwórz nową kartę, klikając kartę Nowy edytor SQL.
- Uruchom poniższe zapytanie:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.
Generuj obserwacje
Aby wypełnić tabelę statystykami generacyjnymi, zalecamy użycie aplikacji, która korzysta z metody zbiorczego zapisu lub mutacji. W tym ćwiczeniu kodu wykonamy podane niżej 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 wystąpi błąd „Przekroczona kwota”, (co jest możliwe w przypadku bezpłatnych kredytów o małej marży), spróbuj pominąć wstawianie i wykonaj tylko zapytanie SELECT w sekcji obejścia problemu poniżej.
Sekcja z obejściem:
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 informacje wygenerowane dla prompta 'Identify the areas of work or keywords in this abstract',
w zapytaniu.
Uwaga: jeśli zamiast zapytania DDL INSERT uruchomiono zapytanie z sekcji obejścia problemu, pomiń tę część i zamiast tego uruchom ostatnie zapytanie SELECT na tej stronie.
Aby zweryfikować 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świetlają się następujące wyniki:
Uwaga: jeśli uruchomiono zapytanie z sekcji obejścia problemu, w powyższym zapytaniu SELECT zastąp nazwę tabeli zapytaniem z sekcji obejścia problemu. Zamiast tego należy użyć tego 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 wynikiem powyżej.
8. Tworzenie elementów do wklejania dla wygenerowanych statystyk
Po wypełnieniu tabeli danymi możemy wykorzystać te informacje do wygenerowania wektorów. Dzięki nim nie musimy polegać na dopasowaniu ścisłym słów kluczowych, ale możemy generować wyniki na podstawie podobieństw koncepcyjnych.
Uwaga: jeśli w poprzednim kroku wykonasz zapytanie dotyczące sekcji obejścia problemu, możesz pominąć ten krok i przejść od razu do zapytania dotyczącego sekcji obejścia problemu.
Aby wygenerować embeddingi, uruchom to zapytanie:
- W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator znajduje się lista obiektów w bazie danych.
- Otwórz nową kartę, klikając kartę Nowy edytor SQL.
- Aby utworzyć tabelę
patents_data_embeddings
, uruchom to zapytanie.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.
- Aby wygenerować ustawienia, 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));
- Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.
Obserwowanie wyników
Tabela zawiera reprezentacje wygenerowane dla tytułu i abstrahowanego 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świetlają się następujące wyniki:
Sekcja obejścia:
Jeśli w innych krokach wykonałeś/wykonałaś sekcję z obejściem, 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 one być takie same jak na powyższym zrzucie ekranu.
9. Przygotowanie do wyszukiwania wektorowego
Teraz, gdy wygenerowaliśmy uczenie się zastępcze tekstu, możemy przygotować naszą aplikację internetową do wykonywania wyszukiwań wektorów podobieństwa. W tym laboratorium programistycznym tworzymy aplikację internetową, która zawiera logikę służącą do wyświetlania wyników wyszukiwania na podstawie funkcji wyszukiwania podobieństw K-najbliższych sąsiadów. Z tego przygotowanego zbioru danych możesz korzystać w aplikacji do wyszukiwania, aby zobaczyć, jak wyglądają wyniki wyszukiwania.
W tym ćwiczeniu wykonamy przykładowe zapytanie, które wyszuka prompt, wygeneruje wyniki na podstawie kontekstu i ograniczy wyniki do 10 pozycji.
Uruchom poniższe zapytanie:
- W menu nawigacyjnym kliknij Spanner Studio. W panelu Eksplorator znajduje się lista obiektów w bazie danych.
- Otwórz nową kartę, klikając kartę Nowy edytor SQL.
- 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;
- Kliknij Wykonaj. Wyniki zapytania pojawią się w tabeli Wyniki.
Uwaga: jeśli z powodu błędów dotyczących limitu w jednym z pierwszych poleceń insert musisz użyć zapytań z sekcji obejścia problemu, możesz pominąć wszystkie pozostałe kroki i bezpośrednio wykonać poniższe zapytanie, aby sprawdzić wyniki wyszukiwania najbliższego sąsiada w przypadku wektorów zaimplementowanych 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
do znalezienia 10 najbardziej pasujących do promptu haseł.
Wyświetlają się następujące wyniki:
Wygenerowane wyniki są dość podobne do promptu, który był częścią zapytania.
10. Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby wykorzystane w tym poście, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
- Na liście projektów wybierz projekt do usunięcia, a potem kliknij Usuń. Jeśli nie chcesz usuwać projektu, po prostu usuń instancję utworzoną w Spanner.
- 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 w Spanner wyszukiwarki wektorowej. Zobaczysz też, jak łatwo można pracować z modelami wektorów dystrybucyjnych i modelami LLM, aby bezpośrednio za pomocą języka SQL udostępniać funkcje generatywnej AI.
Co dalej?
Więcej informacji o funkcji dokładnego najbliższego sąsiada (wyszukiwanie wektorowe KNN) w usłudze Spanner znajdziesz tutaj: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
Więcej informacji o szacowaniu online za pomocą SQL przy użyciu integracji VertexAI w Spanner znajdziesz tutaj: https://cloud.google.com/spanner/docs/ml