1. Ringkasan
Di berbagai industri, penelitian Paten adalah alat penting untuk memahami lanskap persaingan, mengidentifikasi peluang lisensi atau akuisisi potensial, dan menghindari pelanggaran paten yang ada.
Penelitian paten sangat luas dan kompleks. Memilah-milah abstrak teknis yang tak terhitung jumlahnya untuk menemukan inovasi yang relevan adalah tugas yang menantang. Penelusuran berbasis kata kunci tradisional sering kali tidak akurat dan menyita waktu. Abstraknya panjang dan teknis, sehingga sulit untuk memahami ide intinya dengan cepat. Hal ini dapat menyebabkan peneliti kehilangan paten kunci atau membuang waktu untuk hasil yang tidak relevan.
Tujuan
Dalam codelab ini, kami akan berupaya membuat proses pencarian paten lebih cepat, lebih intuitif, dan sangat presisi dengan memanfaatkan Spanner, dan Gemini 1.0 Pro, Embeddings, dan Vector Search yang sudah ada.
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 embedding teks dengan model Gemini 1.0 Pro
- Membuat insight generatif dari set data yang dimuat
- Menghasilkan embedding dari insight
- Terbitkan kueri penelusuran kesamaan terhadap {i>dataset<i}
Diagram berikut mewakili 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 diaktifkan pada sebuah project .
- Anda akan menggunakan Cloud Shell, yakni lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan bq. Klik Activate Cloud Shell di bagian atas Konsol Google Cloud.
- Setelah terhubung ke Cloud Shell, Anda harus memastikan 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 sudah 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 lain adalah dengan 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 Database, 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
. - Pada 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 {i>database<i}
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 berisi 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 dalam 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 muncul di tabel Hasil.
5. Buat 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 ringkasan kumpulan judul dan kata kunci.
Jalankan perintah DDL berikut di Editor Spanner Studio:
- Di menu navigasi, klik Spanner Studio. Panel Explorer menampilkan daftar objek dalam 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 muncul di tabel Hasil.
6. Membuat Model Jarak Jauh untuk Embedding Teks
Hasil dari langkah sebelumnya mencakup ringkasan gabungan yang terdiri dari judul dan kata kunci. Kita akan mengonversi respons ini menjadi embeddings yang akan membantu menghasilkan kecocokan yang sesuai saat menjalankan kueri. Kami 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 dalam 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 muncul di tabel Hasil.
7. Membuat Insight Generatif dari Abstrak Paten
Kita akan membuat tabel patents_data_gemini
untuk menyimpan insight generatif yang akan kita hasilkan menggunakan model Gemini 1.5 Pro yang sebelumnya kita buat.
Membuat tabel
- Di menu navigasi, klik Spanner Studio. Panel Explorer menampilkan daftar objek dalam 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 muncul di tabel Hasil.
Menghasilkan insight
Untuk mengisi tabel dengan insight generatif, sebaiknya Anda menggunakan 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 Terlampaui 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 menyertakan insight yang dibuat untuk perintah 'Identify the areas of work or keywords in this abstract',
dalam kueri.
Catatan: Jika Anda menjalankan kueri bagian solusi di atas, bukan INSERT DDL, 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 terlihat:
Catatan: Jika Anda menjalankan kueri bagian solusi, ganti nama tabel pada kueri pilih di atas dengan kueri di bagian solusi. Jadi, Anda akan menjalankan yang 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 harus sama dengan yang ada di screenshot hasil di atas.
8. Membuat Embedding untuk Insight yang Dihasilkan
Setelah mengisi insight di tabel, sekarang kita dapat menggunakan insight ini untuk menghasilkan embedding. Penyematan ini membantu kita untuk tidak mengandalkan pencocokan kata kunci persis, tetapi membantu memberikan hasil berdasarkan kesamaan konseptual.
Catatan: Jika Anda menjalankan kueri bagian solusi pada langkah sebelumnya, Anda dapat melewati langkah ini dan beralih ke kueri bagian solusi pada langkah ini juga.
Jalankan kueri berikut untuk menghasilkan embeddings:
- Di menu navigasi, klik Spanner Studio. Panel Explorer menampilkan daftar objek dalam 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 muncul di tabel Hasil.
- Jalankan kueri berikut untuk menghasilkan embeddings.
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 muncul di tabel Hasil.
Amati hasilnya
Tabel ini mencakup embedding yang dihasilkan untuk judul dan teks yang diabstraksi.
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 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;
Ini akan memberikan hasil yang sama seperti yang ditunjukkan pada screenshot di atas.
9. Mempersiapkan penelusuran vektor
Setelah menghasilkan embedding teks, kita dapat menyiapkan aplikasi web agar siap untuk melakukan penelusuran vektor kemiripan. Dalam codelab ini, kita akan membuat aplikasi web yang menyertakan logika untuk memberikan hasil penelusuran berdasarkan kemampuan Penelusuran Serupa K-Nearest Neighbors. Anda dapat menggunakan set data yang disiapkan ini dengan aplikasi penelusuran untuk memvisualisasikan tampilan hasil penelusuran.
Untuk codelab ini, kita akan menjalankan contoh kueri yang menelusuri perintah, memberikan hasil berdasarkan konteks, dan membatasi hasil hingga 10 entri.
Jalankan kueri berikut:
- Di menu navigasi, klik Spanner Studio. Panel Explorer menampilkan daftar objek dalam 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 muncul di tabel Hasil.
Catatan: Jika Anda menggunakan kueri di bagian solusi, karena adanya error kuota di salah satu pernyataan penyisipan yang paling awal, Anda dapat melewati semua langkah lainnya dan langsung menjalankan kueri di bawah untuk mengamati hasil melakukan penelusuran tetangga terdekat pada penyematan vektor dalam 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;
Amati hasilnya
Kueri sebelumnya menggunakan metode COSINE_DISTANCE
untuk menemukan 10 hasil terdekat untuk perintah kita.
Hasil berikut terlihat:
Hasil yang dibuat cukup mendekati secara kontekstual dengan perintah yang merupakan bagian dari kueri.
10. Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam posting ini, ikuti langkah-langkah berikut:
- Di konsol Google Cloud, buka halaman Manage resource.
- Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete. Jika 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 berhasil melakukan penelusuran kemiripan menggunakan penelusuran vektor bawaan dari Spanner. Selain itu, Anda melihat betapa mudahnya bekerja dengan model embedding dan LLM untuk menyediakan fungsionalitas AI generatif secara langsung menggunakan SQL.
Apa langkah selanjutnya?
Pelajari lebih lanjut fitur tetangga terdekat persis Spanner (penelusuran vektor KNN) 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