Menelusuri embedding dengan penelusuran vektor
Tutorial ini menunjukkan cara melakukan penelusuran
kemiripan pada
embedding yang disimpan dalam tabel BigQuery menggunakan fungsi
VECTOR_SEARCH
dan secara opsional indeks vektor.
Saat Anda menggunakan VECTOR_SEARCH dengan indeks vektor, VECTOR_SEARCH menggunakan metode
Approximate Nearest Neighbor
untuk meningkatkan performa penelusuran vektor, dengan mengurangi
perolehan
dan menampilkan hasil yang lebih perkiraan. Tanpa indeks vektor,
VECTOR_SEARCH menggunakan
penelusuran brute force
untuk mengukur jarak setiap rekaman.
Izin yang diperlukan
Untuk menjalankan tutorial ini, Anda memerlukan izin Identity and Access Management (IAM) berikut:
- Untuk membuat set data, Anda memerlukan izin
bigquery.datasets.create. Untuk membuat tabel, Anda memerlukan izin berikut:
bigquery.tables.createbigquery.tables.updateDatabigquery.jobs.create
Untuk membuat indeks vektor, Anda memerlukan izin
bigquery.tables.createIndexpada tabel tempat Anda membuat indeks.Untuk menghapus indeks vektor, Anda memerlukan izin
bigquery.tables.deleteIndexpada tabel tempat Anda menghapus indeks.
Setiap peran IAM bawaan berikut mencakup izin yang Anda perlukan untuk menggunakan indeks vektor:
- BigQuery Data Owner (
roles/bigquery.dataOwner) - BigQuery Data Editor (
roles/bigquery.dataEditor)
Biaya
Fungsi VECTOR_SEARCH menggunakan
harga komputasi BigQuery.
Anda akan dikenai biaya untuk penelusuran kemiripan, menggunakan harga on-demand atau edisi.
- On-demand: Anda akan dikenai biaya untuk jumlah byte yang dipindai dalam tabel dasar, indeks, dan kueri penelusuran.
Harga edisi: Anda akan dikenai biaya untuk slot yang diperlukan untuk menyelesaikan tugas dalam edisi reservasi Anda. Perhitungan kemiripan yang lebih besar dan lebih kompleks akan dikenai biaya yang lebih besar.
Untuk informasi lebih lanjut, lihat Harga BigQuery.
Sebelum memulai
-
Di Google Cloud konsol, pada halaman pemilih project, pilih atau buat Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Pastikan penagihan diaktifkan untuk Google Cloud project Anda.
-
Aktifkan BigQuery API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.
Membuat set data
Buat set data BigQuery:
Di Google Cloud konsol, buka halaman BigQuery.
Di panel Explorer, klik nama project Anda.
Klik View actions > Create dataset.

Di halaman Create dataset, lakukan hal berikut:
Untuk Dataset ID, masukkan
vector_search.Untuk Location type, pilih Multi-region, lalu pilih US (multiple regions in United States).
Set data publik disimpan di
USmulti-region. Untuk mempermudah, simpan set data Anda di lokasi yang sama.Jangan ubah setelan default yang tersisa, lalu klik Create dataset.
Membuat tabel pengujian
Buat tabel
patentsyang berisi embedding paten, berdasarkan subset set data publik Google Patents:CREATE TABLE vector_search.patents AS SELECT * FROM `patents-public-data.google_patents_research.publications` WHERE ARRAY_LENGTH(embedding_v1) > 0 AND publication_number NOT IN ('KR-20180122872-A') LIMIT 1000000;
Buat tabel
patents2yang berisi embedding paten untuk menemukan tetangga terdekat:CREATE TABLE vector_search.patents2 AS SELECT * FROM `patents-public-data.google_patents_research.publications` WHERE publication_number = 'KR-20180122872-A';
Membuat indeks vektor
Buat indeks vektor
my_indexdi kolomembedding_v1tabelpatents:CREATE OR REPLACE VECTOR INDEX my_index ON vector_search.patents(embedding_v1) STORING(publication_number, title) OPTIONS(distance_type='COSINE', index_type='IVF');
Tunggu beberapa menit hingga indeks vektor dibuat, lalu jalankan kueri berikut dan pastikan nilai
coverage_percentageadalah100:SELECT * FROM vector_search.INFORMATION_SCHEMA.VECTOR_INDEXES;
Menggunakan fungsi VECTOR_SEARCH dengan indeks
Setelah indeks vektor dibuat dan diisi, gunakan fungsi VECTOR_SEARCH untuk menemukan tetangga terdekat untuk embedding di kolom embedding_v1 dalam tabel patents2. Kueri ini menggunakan indeks vektor dalam penelusuran,
sehingga VECTOR_SEARCH menggunakan metode
Approximate Nearest Neighbor
untuk menemukan tetangga terdekat embedding.
Gunakan fungsi VECTOR_SEARCH dengan indeks:
SELECT query.publication_number AS query_publication_number, query.title AS query_title, base.publication_number AS base_publication_number, base.title AS base_title, distance FROM VECTOR_SEARCH( TABLE vector_search.patents, 'embedding_v1', TABLE vector_search.patents2, top_k => 5, distance_type => 'COSINE', options => '{"fraction_lists_to_search": 0.005}');
Hasilnya akan terlihat seperti berikut:
+--------------------------+-------------------------------------------------------------+-------------------------+--------------------------------------------------------------------------------------------------------------------------+---------------------+ | query_publication_number | query_title | base_publication_number | base_title | distance | +--------------------------+-------------------------------------------------------------+-------------------------+--------------------------------------------------------------------------------------------------------------------------+---------------------+ | KR-20180122872-A | Rainwater management system based on rainwater keeping unit | CN-106599080-B | A kind of rapid generation for keeping away big vast transfer figure based on GIS | 0.14471956347590609 | | KR-20180122872-A | Rainwater management system based on rainwater keeping unit | CN-114118544-A | Urban waterlogging detection method and device | 0.17472108931171348 | | KR-20180122872-A | Rainwater management system based on rainwater keeping unit | KR-20200048143-A | Method and system for mornitoring dry stream using unmanned aerial vehicle | 0.17561990745619782 | | KR-20180122872-A | Rainwater management system based on rainwater keeping unit | KR-101721695-B1 | Urban Climate Impact Assessment method of Reflecting Urban Planning Scenarios and Analysis System using the same | 0.17696129365559843 | | KR-20180122872-A | Rainwater management system based on rainwater keeping unit | CN-109000731-B | The experimental rig and method that research inlet for stom water chocking-up degree influences water discharged amount | 0.17902723269642917 | +--------------------------+-------------------------------------------------------------+-------------------------+--------------------------------------------------------------------------------------------------------------------------+---------------------+
Menggunakan fungsi VECTOR_SEARCH dengan brute force
Gunakan fungsi VECTOR_SEARCH untuk menemukan tetangga terdekat untuk embedding di kolom embedding_v1 dalam tabel patents2. Kueri ini tidak menggunakan indeks vektor dalam penelusuran, sehingga VECTOR_SEARCH menemukan tetangga terdekat embedding yang tepat.
SELECT query.publication_number AS query_publication_number, query.title AS query_title, base.publication_number AS base_publication_number, base.title AS base_title, distance FROM VECTOR_SEARCH( TABLE vector_search.patents, 'embedding_v1', TABLE vector_search.patents2, top_k => 5, distance_type => 'COSINE', options => '{"use_brute_force":true}');
Hasilnya akan terlihat seperti berikut:
+--------------------------+-------------------------------------------------------------+-------------------------+--------------------------------------------------------------------------------------------------------------------------+---------------------+ | query_publication_number | query_title | base_publication_number | base_title | distance | +--------------------------+-------------------------------------------------------------+-------------------------+--------------------------------------------------------------------------------------------------------------------------+---------------------+ | KR-20180122872-A | Rainwater management system based on rainwater keeping unit | CN-106599080-B | A kind of rapid generation for keeping away big vast transfer figure based on GIS | 0.1447195634759062 | | KR-20180122872-A | Rainwater management system based on rainwater keeping unit | CN-114118544-A | Urban waterlogging detection method and device | 0.1747210893117136 | | KR-20180122872-A | Rainwater management system based on rainwater keeping unit | KR-20200048143-A | Method and system for mornitoring dry stream using unmanned aerial vehicle | 0.17561990745619782 | | KR-20180122872-A | Rainwater management system based on rainwater keeping unit | KR-101721695-B1 | Urban Climate Impact Assessment method of Reflecting Urban Planning Scenarios and Analysis System using the same | 0.17696129365559843 | | KR-20180122872-A | Rainwater management system based on rainwater keeping unit | CN-109000731-B | The experimental rig and method that research inlet for stom water chocking-up degree influences water discharged amount | 0.17902723269642928 | +--------------------------+-------------------------------------------------------------+-------------------------+--------------------------------------------------------------------------------------------------------------------------+---------------------+
Mengevaluasi perolehan
Saat Anda melakukan penelusuran vektor dengan indeks, penelusuran akan menampilkan hasil perkiraan,
dengan mengurangi
perolehan. Anda dapat menghitung perolehan dengan membandingkan hasil yang ditampilkan oleh penelusuran vektor dengan indeks dan dengan penelusuran vektor dengan brute force. Dalam set data ini, nilai publication_number secara unik mengidentifikasi paten, sehingga digunakan untuk perbandingan.
WITH approx_results AS ( SELECT query.publication_number AS query_publication_number, base.publication_number AS base_publication_number FROM VECTOR_SEARCH( TABLE vector_search.patents, 'embedding_v1', TABLE vector_search.patents2, top_k => 5, distance_type => 'COSINE', options => '{"fraction_lists_to_search": 0.005}') ), exact_results AS ( SELECT query.publication_number AS query_publication_number, base.publication_number AS base_publication_number FROM VECTOR_SEARCH( TABLE vector_search.patents, 'embedding_v1', TABLE vector_search.patents2, top_k => 5, distance_type => 'COSINE', options => '{"use_brute_force":true}') ) SELECT a.query_publication_number, SUM(CASE WHEN a.base_publication_number = e.base_publication_number THEN 1 ELSE 0 END) / 5 AS recall FROM exact_results e LEFT JOIN approx_results a ON e.query_publication_number = a.query_publication_number GROUP BY a.query_publication_number
Jika perolehan lebih rendah dari yang Anda inginkan, Anda dapat meningkatkan nilai fraction_lists_to_search, dengan potensi latensi dan penggunaan resource yang lebih tinggi. Untuk menyesuaikan penelusuran vektor, Anda dapat mencoba beberapa kali menjalankan VECTOR_SEARCH dengan nilai argumen yang berbeda, menyimpan hasilnya ke tabel, lalu membandingkan hasilnya.
Pembersihan
- Di Google Cloud konsol, buka halaman Manage resources.
- Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.