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 memakan waktu. Abstrak 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.
Rahasia di balik revolusi ini terletak pada Penelusuran Vektor. Alih-alih mengandalkan pencocokan kata kunci sederhana, penelusuran vektor mengubah teks menjadi representasi numerik (embedding). Hal ini memungkinkan kita melakukan penelusuran berdasarkan makna kueri, bukan hanya kata-kata tertentu yang digunakan. Dalam dunia penelusuran literatur, hal ini membawa perubahan besar. Bayangkan menemukan paten untuk "monitor detak jantung yang dapat dipakai" meskipun frasa yang sama persis tidak digunakan dalam dokumen tersebut.
Tujuan
Dalam codelab ini, kami akan berupaya membuat proses pencarian paten lebih cepat, lebih intuitif, dan sangat presisi dengan memanfaatkan AlloyDB, ekstensi pgvector, dan Gemini 1.5 Pro, Embeddings, dan Vector Search yang sudah ada.
Yang akan Anda build
Sebagai bagian dari lab ini, Anda akan:
- Membuat instance AlloyDB dan memuat data Set Data Publik Paten
- Mengaktifkan ekstensi model pgvector dan AI generatif di AlloyDB
- Membuat penyematan dari insight
- Melakukan penelusuran kemiripan Kosinus real time untuk teks penelusuran pengguna
- Men-deploy solusi di Cloud Functions serverless
Diagram berikut menunjukkan aliran data dan langkah-langkah yang terlibat dalam penerapan.
High level diagram representing the flow of the Patent Search Application with AlloyDB
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 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>
- 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
", yang kompatibel dengan PostgreSQL 15 dan region sebagai "us-central1
", jaringan yang ditetapkan ke "default
". Tetapkan ID instance ke "patent-instance
". Klik BUAT 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 membangun Aplikasi Penelusuran Paten, kita akan menggunakan ekstensi pgvector dan google_ml_integration. Ekstensi pgvector memungkinkan Anda untuk 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 proyek 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 untuk menyimpan Embeddings
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 {i>database<i}
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.
- Di konsol Google Cloud, buka halaman AlloyDB.
- Pilih cluster yang baru dibuat, lalu klik instance tersebut.
- Di menu Navigasi AlloyDB, klik AlloyDB Studio. Login dengan kredensial Anda.
- Buka tab baru dengan mengklik ikon Tab baru di sebelah kanan.
- Salin pernyataan kueri
insert
dari skripinsert_into_patents_data.sql
yang disebutkan di atas ke 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 Embedding untuk data paten
Pertama-tama, mari kita uji fungsi embedding, 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:
Mengupdate kolom Vektor abstract_embeddings
Jalankan DML di bawah ini untuk memperbarui abstrak paten dalam tabel dengan embeddings yang sesuai:
UPDATE patents_data set abstract_embeddings = embedding( 'textembedding-gecko@003', abstract);
6. Melakukan penelusuran Vektor
Sekarang setelah tabel, data, embedding sudah siap, mari kita lakukan Penelusuran Vektor waktu nyata untuk teks penelusuran pengguna. Anda dapat mengujinya dengan menjalankan kueri di bawah ini:
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,
- Teks penelusuran pengguna adalah: "Model baru Machine Learning terkait Natural Language Processing".
- Kita mengonversinya menjadi embedding dalam metode embedding() menggunakan model: textembedding-gecko@003.
- "<=>" (<=>") mewakili penggunaan metode jarak COSINE similarITY.
- Kita mengonversi hasil metode penyematan ke jenis vektor agar kompatibel dengan vektor yang disimpan dalam database.
- {i>LIMIT<i} 10 menunjukkan bahwa kita memilih 10 kecocokan terdekat dari teks pencarian.
Di bawah ini adalah hasilnya:
Seperti yang dapat Anda amati dalam hasil, kecocokan cukup dekat dengan teks penelusuran.
7. Bawa aplikasi ke web
Siap membawa aplikasi ini ke web? Ikuti langkah-langkah di bawah ini:
- Buka Cloud Shell Editor, lalu klik "Cloud Code — Login" ikon 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).
- Klik ikon Cloud Code dan tunggu hingga dialog Cloud Code muncul. Pilih New Application, lalu di pop-up Create New Application, pilih aplikasi Cloud Functions:
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:
- 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:
- Ganti file HelloWorld.java dengan konten dari file repo.
Perhatikan bahwa Anda harus mengganti nilai di bawah ini 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 yang paling cocok 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);
}
- 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, lalu buka, edit konfigurasi, dan ubah hal berikut:
- Buka setelan Runtime, build, koneksi, dan keamanan
- Tingkatkan waktu tunggu menjadi 180 detik
- Buka tab KONEKSI:
- Pada setelan Ingress, pastikan "Allow all traffic" dipilih.
- 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:
- Beri nama untuk Konektor VPC dan pastikan region tersebut sama dengan instance Anda. Biarkan nilai Jaringan sebagai {i>default<i} dan atur Subnet sebagai Rentang IP Kustom dengan rentang IP 10.8.0.0 atau sesuatu yang serupa yang tersedia.
- Luaskan TAMPILAN SETELAN PENSCALAAN dan pastikan Anda telah menetapkan konfigurasi ke hal berikut:
- Klik CREATE dan konektor ini akan tercantum di setelan egress sekarang.
- Pilih konektor yang baru dibuat
- 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:
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:
Selesai. Begitulah cara 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:
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.