Buat Aplikasi Penelusuran Paten dengan AlloyDB, Vector Search, dan Vertex AI.

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.

Rahasia di balik revolusi ini terletak pada Penelusuran Vektor. Alih-alih mengandalkan pencocokan kata kunci sederhana, penelusuran vektor mengubah teks menjadi representasi numerik (sematan). Hal ini memungkinkan kita melakukan penelusuran berdasarkan makna kueri, bukan hanya kata-kata tertentu yang digunakan. Di dunia penelusuran literatur, ini adalah game-changer. Bayangkan Anda menemukan paten untuk "pemantau detak jantung yang dapat dipakai" meskipun frasa persisnya tidak digunakan dalam dokumen.

Tujuan

Dalam codelab ini, kita akan berupaya membuat proses penelusuran paten lebih cepat, lebih intuitif, dan sangat akurat dengan memanfaatkan AlloyDB, ekstensi pgvector, dan Gemini 1.5 Pro, Penyematan, dan Penelusuran Vektor di tempat.

Yang akan Anda build

Sebagai bagian dari lab ini, Anda akan:

  1. Membuat instance AlloyDB dan memuat data Set Data Publik Paten
  2. Mengaktifkan ekstensi model AI generatif dan pgvector di AlloyDB
  3. Membuat penyematan dari insight
  4. Melakukan penelusuran kemiripan Cosine real-time untuk teks penelusuran pengguna
  5. Men-deploy solusi di Cloud Functions serverless

Diagram berikut menunjukkan aliran data dan langkah-langkah yang terlibat dalam penerapan.

8b73c40a0d12e194.png

 High level diagram representing the flow of the Patent Search Application with AlloyDB

Persyaratan

  • Browser, seperti Chrome atau Firefox
  • Project Google Cloud yang mengaktifkan penagihan.

2. Sebelum memulai

Membuat project

  1. Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
  2. Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project .
  3. 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.

Gambar tombol Aktifkan Cloud Shell

  1. 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
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda.
gcloud config list project
  1. Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya:
gcloud config set project <YOUR_PROJECT_ID>
  1. Mengaktifkan API yang diperlukan. Anda dapat menggunakan perintah gcloud di terminal Cloud Shell:
gcloud services enable alloydb.googleapis.com \ 
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       cloudfunctions.googleapis.com \
                       aiplatform.googleapis.com

Alternatif untuk perintah gcloud adalah melalui konsol dengan menelusuri setiap produk atau menggunakan link ini.

Baca dokumentasi untuk mempelajari perintah gcloud dan penggunaannya.

3. Menyiapkan database AlloyDB

Mari kita buat cluster, instance, dan tabel AlloyDB tempat set data paten akan dimuat.

Membuat objek AlloyDB

Buat cluster dan instance dengan ID cluster "patent-cluster", sandi "alloydb", kompatibel dengan PostgreSQL 15, dan region sebagai "us-central1", jaringan ditetapkan ke "default". Tetapkan ID instance ke "patent-instance". Klik CREATE CLUSTER. Detail untuk membuat cluster ada di link ini: https://cloud.google.com/alloydb/docs/cluster-create.

Membuat tabel

Anda dapat membuat tabel menggunakan pernyataan DDL di bawah ini di AlloyDB Studio:

CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT) ;

Mengaktifkan Ekstensi

Untuk mem-build Aplikasi Penelusuran Paten, kita akan menggunakan ekstensi pgvector dan google_ml_integration. Ekstensi pgvector memungkinkan Anda menyimpan dan menelusuri embedding vektor. Ekstensi google_ml_integration menyediakan fungsi yang Anda gunakan untuk mengakses endpoint prediksi Vertex AI guna mendapatkan prediksi di SQL. Aktifkan ekstensi ini dengan menjalankan DDL berikut:

CREATE EXTENSION vector;
CREATE EXTENSION google_ml_integration;

Berikan Izin

Jalankan pernyataan di bawah untuk memberikan eksekusi pada fungsi "penyematan":

GRANT EXECUTE ON FUNCTION embedding TO postgres;

Memberikan PERAN Pengguna Vertex AI ke akun layanan AlloyDB

Dari konsol IAM Google Cloud, berikan akses ke peran "Vertex AI User" ke akun layanan AlloyDB (yang terlihat seperti ini: service-<<PROJECT_NUMBER >>@gcp-sa-alloydb.iam.gserviceaccount.com). PROJECT_NUMBER akan memiliki nomor project Anda.

Atau, Anda juga dapat memberikan akses menggunakan perintah gcloud:

PROJECT_ID=$(gcloud config get-value project)


gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"

Ubah tabel untuk menambahkan kolom Vektor guna menyimpan Embedding

Jalankan DDL di bawah untuk menambahkan kolom abstract_embeddings ke tabel yang baru saja kita buat. Kolom ini akan memungkinkan penyimpanan untuk nilai vektor teks:

ALTER TABLE patents_data ADD column abstract_embeddings vector(768);

4. Memuat data paten ke dalam database

Set Data Publik Paten Google di BigQuery akan digunakan sebagai set data kami. Kita akan menggunakan AlloyDB Studio untuk menjalankan kueri. Repositori alloydb-pgvector menyertakan skrip insert_into_patents_data.sql yang akan kita jalankan untuk memuat data paten.

  1. Di konsol Google Cloud, buka halaman AlloyDB.
  2. Pilih cluster yang baru dibuat, lalu klik instance.
  3. Di menu Navigation AlloyDB, klik AlloyDB Studio. Login dengan kredensial Anda.
  4. Buka tab baru dengan mengklik ikon Tab baru di sebelah kanan.
  5. Salin pernyataan kueri insert dari skrip insert_into_patents_data.sql yang disebutkan di atas ke editor. Anda dapat menyalin 50-100 pernyataan penyisipan untuk demo singkat kasus penggunaan ini.
  6. Klik Run. Hasil kueri Anda akan muncul di tabel Results.

5. Membuat Embedding untuk data paten

Pertama, mari kita uji fungsi penyematan, dengan menjalankan contoh kueri berikut:

SELECT embedding( 'textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Tindakan ini akan menampilkan vektor penyematan, yang terlihat seperti array float, untuk teks contoh dalam kueri. Tampilannya seperti ini:

25a1d7ef0e49e91e.png

Memperbarui kolom Vektor abstract_embeddings

Jalankan DML di bawah untuk memperbarui abstrak paten dalam tabel dengan penyematan yang sesuai:

UPDATE patents_data set abstract_embeddings = embedding( 'textembedding-gecko@003', abstract);

6. Melakukan penelusuran Vektor

Setelah tabel, data, dan penyematan siap, mari kita lakukan Penelusuran Vektor real-time untuk teks penelusuran pengguna. Anda dapat mengujinya dengan menjalankan kueri di bawah:

SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('textembedding-gecko@003', 'A new Natural Language Processing related Machine Learning Model')::vector LIMIT 10;

Dalam kueri ini,

  1. Teks penelusuran pengguna adalah: "Model Machine Learning terkait Natural Language Processing baru".
  2. Kita mengonversinya menjadi embedding dalam metode embedding() menggunakan model: textembedding-gecko@003.
  3. "<=>" mewakili penggunaan metode jarak COSINE SIMILARITY.
  4. Kita mengonversi hasil metode penyematan ke jenis vektor agar kompatibel dengan vektor yang disimpan dalam database.
  5. LIMIT 10 menunjukkan bahwa kita memilih 10 kecocokan terdekat dari teks penelusuran.

Di bawah ini adalah hasilnya:

8e77af965fc787ae.png

Seperti yang dapat Anda amati dalam hasil, kecocokannya cukup dekat dengan teks penelusuran.

7. Mentransfer aplikasi ke web

Siap membawa aplikasi ini ke web? Ikuti langkah-langkah di bawah ini:

  1. Buka Cloud Shell Editor, lalu klik ikon "Cloud Code — Sign in" di sudut kiri bawah (Status bar) editor. Pilih Project Google Cloud saat ini yang mengaktifkan penagihan dan pastikan Anda juga login ke project yang sama dari Gemini (di pojok kanan status bar).
  2. Klik ikon Cloud Code dan tunggu hingga dialog Cloud Code muncul. Pilih New Application dan di pop-up Create New Application, pilih aplikasi Cloud Functions:

a800ee1eb6cb8a5b.png

Di halaman 2/2 pop-up Create New Application, pilih Java: Hello World dan masukkan nama project Anda sebagai "alloydb-pgvector" di lokasi pilihan Anda, lalu klik OK:

5b09446ecf7d4f8d.png

  1. Dalam struktur project yang dihasilkan, telusuri pom.xml dan ganti dengan konten dari file repo. Selain beberapa dependensi lainnya, aplikasi ini harus memiliki dependensi berikut:

2b3a3cdd75a57711.png

  1. Ganti file HelloWorld.java dengan konten dari file repo.

Perhatikan bahwa Anda harus mengganti nilai di bawah dengan nilai sebenarnya:

String ALLOYDB_DB = "postgres";
String ALLOYDB_USER = "postgres";
String ALLOYDB_PASS = "*****";
String ALLOYDB_INSTANCE_NAME = "projects/<<YOUR_PROJECT_ID>>/locations/us-central1/clusters/<<YOUR_CLUSTER>>/instances/<<YOUR_INSTANCE>>";
//Replace YOUR_PROJECT_ID, YOUR_CLUSTER, YOUR_INSTANCE with your actual values

Perhatikan bahwa fungsi ini mengharapkan teks penelusuran sebagai parameter input dengan kunci "search" dan dalam implementasi ini, kita hanya menampilkan satu kecocokan terdekat dari database:

// Get the request body as a JSON object.
JsonObject requestJson = new Gson().fromJson(request.getReader(), JsonObject.class);
String searchText = requestJson.get("search").getAsString();

//Sample searchText: "A new Natural Language Processing related Machine Learning Model";
BufferedWriter writer = response.getWriter();
String result = "";
HikariDataSource dataSource = AlloyDbJdbcConnector();

try (Connection connection = dataSource.getConnection()) {
   //Retrieve Vector Search by text (converted to embeddings) using "Cosine Similarity" method
   try (PreparedStatement statement = connection.prepareStatement("SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('textembedding-gecko@003', '" + searchText + "' )::vector LIMIT 1")) {
     ResultSet resultSet = statement.executeQuery();
     resultSet.next();
     String lit = resultSet.getString("literature");
     result = result + lit + "\n";
     System.out.println("Matching Literature: " + lit);
 }
writer.write("Here is the closest match: " + result);
}
  1. Untuk men-deploy Cloud Function yang baru saja Anda buat, jalankan perintah berikut dari terminal Cloud Shell. Jangan lupa untuk membuka folder project yang sesuai terlebih dahulu menggunakan perintah:
cd alloydb-pgvector

Kemudian, jalankan perintah:

gcloud functions deploy patent-search --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http

LANGKAH PENTING:

Setelah menyiapkan deployment, Anda akan dapat melihat fungsi di konsol Cloud Run Functions Google. Telusuri fungsi yang baru dibuat dan buka, edit konfigurasi, lalu ubah hal berikut:

  1. Buka Runtime, build, connections, and security settings
  2. Meningkatkan waktu tunggu menjadi 180 detik
  3. Buka tab KONEKSI:

4e83ec8a339cda08.png

  1. Di bagian setelan Traffic masuk, pastikan "Izinkan semua traffic" dipilih.
  2. Di bagian setelan Egress, klik dropdown Jaringan, lalu pilih opsi "Tambahkan Konektor VPC Baru" dan ikuti petunjuk yang Anda lihat di kotak dialog yang muncul:

8126ec78c343f199.png

  1. Berikan nama untuk Konektor VPC dan pastikan region-nya sama dengan instance Anda. Biarkan nilai Jaringan sebagai default dan tetapkan Subnet sebagai Rentang IP Kustom dengan rentang IP 10.8.0.0 atau yang serupa yang tersedia.
  2. Luaskan TAMPILAN SETELAN PENSCALAAN dan pastikan Anda telah menetapkan konfigurasi ke hal berikut:

7baf980463a86a5c.png

  1. Klik CREATE dan konektor ini akan tercantum di setelan egress sekarang.
  2. Pilih konektor yang baru dibuat
  3. Pilih agar semua traffic dirutekan melalui konektor VPC ini.

8. Uji aplikasi.

Setelah di-deploy, Anda akan melihat endpoint dalam format berikut:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/patent-search

Anda dapat mengujinya dari Terminal Cloud Shell dengan menjalankan perintah berikut:

gcloud functions call patent-search --region=us-central1 --gen2 --data '{"search": "A new Natural Language Processing related Machine Learning Model"}'

Hasil:

da3dcfac7d024031.png

Anda juga dapat mengujinya dari daftar Cloud Functions. Pilih fungsi yang di-deploy dan buka tab "PENGUJIAN". Di kotak teks bagian Konfigurasi peristiwa pemicu untuk json permintaan, masukkan hal berikut:

{"search": "A new Natural Language Processing related Machine Learning Model"}

Klik tombol UJI FUNGSI dan Anda dapat melihat hasilnya di sisi kanan halaman:

e21f806d661996ff.png

Selesai. Begitulah mudahnya melakukan Penelusuran Vektor Kesamaan menggunakan model Embedding pada data AlloyDB.

9. Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam postingan ini, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka Manage
  2. halaman referensi.
  3. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  4. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

10. Selamat

Selamat! Anda telah berhasil melakukan penelusuran kemiripan menggunakan AlloyDB, pgvector, dan penelusuran Vektor. Dengan menggabungkan kemampuan AlloyDB, Vertex AI, dan Vector Search, kami telah melakukan lompatan besar dalam membuat penelusuran literatur menjadi mudah diakses, efisien, dan benar-benar berorientasi pada makna.