1. Ringkasan
Di berbagai industri, Riset paten adalah alat penting untuk memahami lanskap kompetitif, mengidentifikasi potensi peluang akuisisi atau pemberian lisensi, dan menghindari pelanggaran terhadap paten yang ada.
Riset paten sangat luas dan kompleks. Memilah-milah abstrak teknis yang tak terhitung jumlahnya untuk menemukan inovasi yang relevan adalah tugas yang berat. Penelusuran berbasis kata kunci tradisional sering kali tidak akurat dan memakan waktu. Abstrak panjang dan teknis, sehingga sulit untuk memahami ide intinya dengan cepat. Hal ini dapat menyebabkan peneliti melewatkan paten utama atau membuang waktu untuk hasil yang tidak relevan.
Tujuan
Dalam codelab ini, kita akan berupaya membuat proses penelusuran paten lebih cepat, lebih intuitif, dan sangat akurat dengan memanfaatkan Spanner, serta Gemini 1.0 Pro, Penyematan, dan Penelusuran Vektor di tempat.
Yang akan Anda build
Sebagai bagian dari lab ini, Anda akan:
- Membuat instance Spanner
- Memuat Set Data Publik Google Paten
- Membuat model jarak jauh untuk penyematan teks dengan model Gemini 1.0 Pro
- Membuat insight generatif dari set data yang dimuat
- Membuat penyematan dari insight
- Mengeluarkan kueri penelusuran kemiripan terhadap set data
Diagram berikut menunjukkan aliran data dan langkah-langkah yang terlibat dalam penerapan.
Persyaratan
2. Sebelum memulai
Membuat project
- Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
- Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project .
- Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan bq. Klik Aktifkan Cloud Shell di bagian atas konsol Google Cloud.
- Setelah terhubung ke Cloud Shell, Anda akan memeriksa bahwa Anda sudah diautentikasi dan project ditetapkan ke project ID Anda menggunakan perintah berikut:
gcloud auth list
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda.
gcloud config list project
- Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya:
gcloud config set project <YOUR_PROJECT_ID>
- Pastikan Vertex AI dan Spanner API diaktifkan dengan menelusurinya di konsol. Atau, Anda juga dapat menggunakan perintah berikut di terminal Cloud Shell:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
Alternatif lainnya adalah menggunakan link ini.
Baca dokumentasi untuk mempelajari perintah gcloud dan penggunaannya.
3. Menyiapkan database Spanner
Mari kita buat instance, database, dan tabel Spanner tempat set data paten akan dimuat.
Membuat instance Spanner
- Buat instance Spanner bernama
spanner-vertex
.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
Buat database
- Di konsol Google Cloud, buka halaman Spanner.
- Pilih instance
spanner-vertex
dari daftar. - Di bagian Databases, klik Create Database.
- Tetapkan nama database ke paten.
- Klik Create untuk membuat database.
Membuat tabel
- Di konsol Google Cloud, buka halaman Spanner.
- Pilih instance
spanner-vertex
dari daftar. - Pilih database
patents
. - Di tab Tables, klik Create Table. Halaman Spanner Studio akan terbuka.
- Buka tab baru dengan mengklik Tab editor SQL baru.
- Jalankan kueri berikut:
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. Memuat data paten ke dalam database
Set Data Publik Paten Google di BigQuery akan digunakan sebagai set data kami. Kita akan menggunakan Spanner Studio untuk menjalankan kueri. Repositori spanner-gemini-search menyertakan skrip insert_into_patents_data.sql
yang akan kita jalankan untuk memuat data paten.
- Di konsol Google Cloud, buka halaman Spanner.
- Pilih instance
spanner-vertex
dari daftar. - Pilih database
patents
. - Di menu navigasi, klik Spanner Studio. Panel Explorer menampilkan daftar objek di database Anda.
- Buka tab baru dengan mengklik Tab editor SQL baru.
- Salin pernyataan kueri
insert
dari skripinsert_into_patents_data.sql
di editor. Anda dapat menyalin 50-100 pernyataan penyisipan untuk demo singkat kasus penggunaan ini. - Klik Run. Hasil kueri Anda akan muncul di tabel Results.
5. Membuat Model Jarak Jauh untuk Gemini 1.0 Pro
Setelah data paten dimuat ke database, kita akan membuat model jarak jauh yang menggunakan model Vertex AI Gemini 1.0 Pro untuk menghasilkan kumpulan judul dan kata kunci yang diringkas.
Jalankan perintah DDL berikut di Editor Spanner Studio:
- Di menu navigasi, klik Spanner Studio. Panel Explorer menampilkan daftar objek di database Anda.
- Buka tab baru dengan mengklik Tab editor SQL baru.
- Jalankan kueri berikut:
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
);
- Klik Run. Hasil kueri Anda akan muncul di tabel Results.
6. Membuat Model Jarak Jauh untuk Penyematan Teks
Hasil dari langkah sebelumnya mencakup ringkasan gabungan yang terdiri dari judul dan kata kunci. Kita akan mengonversi respons ini menjadi penyematan yang akan membantu kita menghasilkan kecocokan yang sesuai saat menjalankan kueri. Kita akan menggunakan Text Embedding Gecko 003 model
dari Vertex AI dari jarak jauh dari Spanner.
- Di menu navigasi, klik Spanner Studio. Panel Explorer menampilkan daftar objek di database Anda.
- Buka tab baru dengan mengklik Tab editor SQL baru.
- Jalankan kueri berikut:
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');
- Klik Run. Hasil kueri Anda akan muncul di tabel Results.
7. Membuat Insight Generatif dari Abstrak Paten
Kita akan membuat tabel patents_data_gemini
untuk menyimpan insight generatif yang akan kita buat menggunakan model Gemini 1.5 Pro yang telah kita buat sebelumnya.
Membuat tabel
- Di menu navigasi, klik Spanner Studio. Panel Explorer menampilkan daftar objek di database Anda.
- Buka tab baru dengan mengklik Tab editor SQL baru.
- Jalankan kueri berikut:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- Klik Run. Hasil kueri Anda akan muncul di tabel Results.
Menghasilkan insight
Untuk mengisi tabel dengan insight generatif, sebaiknya gunakan aplikasi yang menggunakan metode mutasi atau penulisan batch. Untuk codelab ini, kita akan menjalankan kueri DDL berikut hingga 4 kali untuk mengisi 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
));
Catatan: Jika Anda mendapatkan error Quota Exceeded pada langkah ini (mungkin dalam kasus kredit gratis dengan margin kecil), coba lewati penyisipan dan hanya jalankan kueri pilih di bagian solusi di bawah.
Bagian solusi:
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
))
Mengamati insight
Tabel ini mencakup insight yang dihasilkan untuk perintah 'Identify the areas of work or keywords in this abstract',
dalam kueri.
Catatan: Jika Anda menjalankan kueri bagian solusi di atas, bukan DDL INSERT, lewati bagian ini dan jalankan kueri SELECT terakhir di halaman ini.
Mari kita jalankan kueri berikut untuk memverifikasi hasil insight:
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
Hasil berikut akan terlihat:
Catatan: Jika Anda menjalankan kueri bagian solusi, ganti nama tabel dalam kueri pilih di atas dengan kueri di bagian solusi. Jadi, Anda akan menjalankan kode di bawah ini:
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;
Hasilnya akan sama dengan yang ada di screenshot hasil di atas.
8. Membuat Embedding untuk Insight yang Dihasilkan
Setelah mengisi insight dalam tabel, kita sekarang dapat menggunakan insight ini untuk membuat embedding. Penyematan ini membantu kami tidak mengandalkan pencocokan kata kunci yang tepat, tetapi membantu menghasilkan hasil berdasarkan kesamaan konseptual.
Catatan: Jika Anda menjalankan kueri bagian solusi di langkah sebelumnya, Anda dapat melewatinya dan juga beralih ke kueri bagian solusi di langkah ini.
Jalankan kueri berikut untuk membuat penyematan:
- Di menu navigasi, klik Spanner Studio. Panel Explorer menampilkan daftar objek di database Anda.
- Buka tab baru dengan mengklik Tab editor SQL baru.
- Jalankan kueri berikut untuk membuat tabel
patents_data_embeddings
.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- Klik Run. Hasil kueri Anda akan muncul di tabel Results.
- Jalankan kueri berikut untuk membuat penyematan.
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));
- Klik Run. Hasil kueri Anda akan muncul di tabel Results.
Mengamati hasil
Tabel menyertakan penyematan yang dihasilkan untuk judul dan teks abstrak.
Mari kita jalankan kueri berikut untuk memverifikasi hasilnya:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
Hasil berikut akan terlihat:
Bagian Solusi:
Gunakan kueri ini, jika Anda melakukan bagian solusi di langkah lain:
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;
Tindakan ini akan menghasilkan hasil yang sama seperti yang ditunjukkan pada screenshot di atas.
9. Bersiap untuk penelusuran vektor
Setelah membuat penyematan teks, kita dapat menyiapkan aplikasi web agar siap melakukan penelusuran vektor kemiripan. Dalam codelab ini, kita membuat aplikasi web yang menyertakan logika untuk memberikan hasil penelusuran berdasarkan kemampuan Penelusuran Kesamaan K-Nearest Neighbors. Anda dapat menggunakan set data yang disiapkan ini dengan aplikasi penelusuran untuk memvisualisasikan tampilan hasil penelusuran.
Untuk codelab, kita akan menjalankan contoh kueri yang menelusuri perintah, menghasilkan hasil berdasarkan konteks, dan membatasi hasil hingga 10 entri.
Jalankan kueri berikut:
- Di menu navigasi, klik Spanner Studio. Panel Explorer menampilkan daftar objek di database Anda.
- Buka tab baru dengan mengklik Tab editor SQL baru.
- Jalankan kueri berikut untuk membuat 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;
- Klik Run. Hasil kueri Anda akan muncul di tabel Results.
Catatan: Jika Anda menggunakan kueri di bagian solusi, karena error kuota di salah satu pernyataan penyisipan paling awal, Anda dapat melewati semua langkah lainnya dan langsung menjalankan kueri di bawah untuk mengamati hasil penelusuran tetangga terdekat pada penyematan vektor di database 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;
Mengamati hasil
Kueri sebelumnya menggunakan metode COSINE_DISTANCE
untuk menemukan 10 kecocokan terdekat untuk perintah kita.
Hasil berikut akan terlihat:
Hasil yang dihasilkan secara kontekstual cukup dekat dengan perintah yang merupakan bagian dari kueri.
10. Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam postingan ini, ikuti langkah-langkah berikut:
- Di konsol Google Cloud, buka halaman Manage resources.
- Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete. Jika Anda tidak ingin menghapus project, cukup hapus instance yang Anda buat di Spanner.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
11. Selamat
Selamat! Anda telah berhasil melakukan penelusuran kemiripan menggunakan penelusuran vektor bawaan Spanner. Selain itu, Anda telah melihat betapa mudahnya menggunakan model penyematan dan LLM untuk menyediakan fungsi AI generatif secara langsung menggunakan SQL.
Apa langkah selanjutnya?
Pelajari lebih lanjut fitur tetangga terdekat yang tepat (penelusuran vektor KNN) Spanner di sini: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
Anda juga dapat membaca lebih lanjut cara melakukan prediksi online dengan SQL menggunakan integrasi VertexAI Spanner di sini: https://cloud.google.com/spanner/docs/ml