1. บทนำ
ความก้าวหน้าล่าสุดของการเรียนรู้เชิงลึกทำให้คุณแสดงข้อความและข้อมูลอื่นๆ ได้ในลักษณะที่จับความหมายในเชิงความหมายได้ แนวทางนี้ทำให้การค้นหามีแนวทางใหม่ที่เรียกว่าการค้นหาเวกเตอร์ ซึ่งใช้การแสดงข้อความเวกเตอร์ (หรือที่เรียกว่าการฝัง) เพื่อค้นหาเอกสารที่เกี่ยวข้องกับการค้นหาของผู้ใช้มากที่สุด การค้นหาเวกเตอร์จะดีกว่าการค้นหาแบบดั้งเดิมสำหรับแอปพลิเคชัน เช่น การค้นหาเครื่องแต่งกาย ซึ่งผู้ใช้มักค้นหาสินค้าตามคำอธิบาย รูปแบบ หรือบริบท มากกว่าการค้นหาตามชื่อผลิตภัณฑ์หรือแบรนด์จริง เราสามารถผสานรวมฐานข้อมูล Cloud Spanner กับ Vector Search เพื่อทำการจับคู่เวกเตอร์ความคล้ายคลึงกัน การใช้ Spanner และ Vector Search ร่วมกันจะช่วยให้ลูกค้าสร้างการผสานรวมอันทรงพลังซึ่งรวมความพร้อมใช้งาน ความน่าเชื่อถือ และขนาดของ Spanner เข้ากับความสามารถในการค้นหาความคล้ายคลึงขั้นสูงของ Vertex AI Vector Search การค้นหานี้ดำเนินการโดยการเปรียบเทียบการฝังของรายการในดัชนีการค้นหาเวกเตอร์และแสดงผลลัพธ์ที่คล้ายกันมากที่สุด
กรณีการใช้งาน
ลองนึกภาพว่าคุณเป็นนักวิทยาศาสตร์ข้อมูลในร้านค้าปลีกแฟชั่นแห่งหนึ่งที่พยายามตามให้ทันเทรนด์ การค้นหาผลิตภัณฑ์และการแนะนำผลิตภัณฑ์ที่เปลี่ยนแปลงอย่างรวดเร็ว ความท้าทายคือคุณมีทรัพยากรและคลังข้อมูลที่จำกัด บล็อกโพสต์นี้สาธิตวิธีใช้ Use Case การแนะนำเครื่องแต่งกาย โดยใช้แนวทางการค้นหาความคล้ายคลึงกันในข้อมูลเครื่องแต่งกาย โดยอธิบายขั้นตอนต่อไปนี้
- ข้อมูลจาก Spanner
- เวกเตอร์ที่สร้างขึ้นสำหรับข้อมูลเครื่องแต่งกายโดยใช้ ML.PREDICT และจัดเก็บไว้ใน Spanner
- ข้อมูลเวกเตอร์ Spanner ที่ผสานรวมกับ Vector Search โดยใช้งานโฟลว์ข้อมูลและเวิร์กโฟลว์
- การค้นหาเวกเตอร์ดำเนินการเพื่อค้นหาการจับคู่ความคล้ายคลึงกันสำหรับอินพุตที่ผู้ใช้ป้อน
เราจะสร้างเว็บแอปพลิเคชันสาธิตเพื่อค้นหาเครื่องแต่งกายตามข้อความที่ผู้ใช้ป้อน แอปพลิเคชันนี้ช่วยให้ผู้ใช้ค้นหาเครื่องแต่งกายได้โดยการป้อนข้อความอธิบาย
Spanner ไปยังดัชนีการค้นหาเวกเตอร์:
ข้อมูลสำหรับการค้นหาเครื่องแต่งกายได้รับการจัดเก็บไว้ใน Spanner เราจะเรียกใช้ Vertex AI Embeddings API ในโครงสร้าง ML.PREDICT โดยตรงจากข้อมูล Spanner จากนั้นเราจะใช้ประโยชน์จากงาน Dataflow และเวิร์กโฟลว์ที่จะอัปโหลดข้อมูลนี้ (สินค้าคงคลังและการฝัง) หลายรายการพร้อมกันลงใน Vector AI ของ Vertex AI และรีเฟรชดัชนี
การเรียกใช้คำค้นหาผู้ใช้ในดัชนี:
เมื่อผู้ใช้ป้อนคำอธิบายเครื่องแต่งกาย แอปจะสร้างการฝังแบบเรียลไทม์โดยใช้ API การฝังข้อความ จากนั้นระบบจะส่งข้อมูลเป็นอินพุตไปยัง Vector Search API เพื่อค้นหารายละเอียดผลิตภัณฑ์ที่เกี่ยวข้อง 10 รายการจากดัชนีและแสดงรูปภาพที่เกี่ยวข้อง
ภาพรวมสถาปัตยกรรม
สถาปัตยกรรมของแอปพลิเคชัน Spanner- Vector Search จะแสดงในแผนภาพ 2 ส่วนต่อไปนี้
Spaner ไปยังดัชนีการค้นหาเวกเตอร์:
แอปไคลเอ็นต์ที่จะเรียกใช้การค้นหาผู้ใช้ในดัชนี:
สิ่งที่คุณจะสร้าง
Spanner ไปยังดัชนีเวกเตอร์:
- ฐานข้อมูล Spanner เพื่อจัดเก็บและจัดการข้อมูลต้นฉบับและการฝังที่สอดคล้องกัน
- งานเวิร์กโฟลว์ที่อัปโหลดข้อมูลจำนวนมาก (รหัสและการฝัง) ลงในฐานข้อมูล Vertex AI Vector Search
- Vector Search API ที่ใช้เพื่อค้นหารายละเอียดผลิตภัณฑ์ที่เกี่ยวข้องจากดัชนี
การเรียกใช้คำค้นหาผู้ใช้ในดัชนี:
- เว็บแอปพลิเคชันที่อนุญาตให้ผู้ใช้ป้อนข้อความอธิบายเครื่องแต่งกาย ดำเนินการค้นหาความคล้ายคลึงกันโดยใช้ปลายทางดัชนีที่ทำให้ใช้งานได้แล้ว และส่งคืนเครื่องแต่งกายที่อยู่ใกล้ที่สุดไปยังอินพุต
วิธีการทำงาน
เมื่อผู้ใช้ป้อนข้อความอธิบายเครื่องแต่งกาย เว็บแอปพลิเคชันจะส่งคำอธิบายไปยัง Vector Search API จากนั้น Vector Search API จะใช้การฝังรายละเอียดเครื่องแต่งกายเพื่อค้นหารายละเอียดผลิตภัณฑ์ที่เกี่ยวข้องมากที่สุดจากดัชนี จากนั้นรายละเอียดผลิตภัณฑ์และรูปภาพที่เกี่ยวข้องจะแสดงต่อผู้ใช้ ขั้นตอนการทำงานทั่วไปมีดังนี้
- สร้างการฝังสำหรับข้อมูลที่จัดเก็บไว้ใน Spanner
- ส่งออกและอัปโหลดการฝังลงในดัชนี Vector Search
- ค้นหาดัชนี Vector Search เพื่อค้นหารายการที่คล้ายกันโดยทำการค้นหาด้วยเพื่อนบ้านที่อยู่ใกล้ที่สุด
2. ข้อกำหนด
ก่อนเริ่มต้น
- ใน Google Cloud Console ในหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud
- ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้ว
- ตรวจสอบว่าเปิดใช้ API ที่จำเป็นทั้งหมด (Cloud Spanner, Vertex AI, Google Cloud Storage) แล้ว
- คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่เรียกใช้ใน Google Cloud ที่มี gcloud โหลดไว้ล่วงหน้า ดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ หากไม่ได้ตั้งค่าโปรเจ็กต์ไว้ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่าโปรเจ็กต์
gcloud config set project <YOUR_PROJECT_ID>
- ไปที่หน้า Cloud Spanner ด้วยโปรเจ็กต์ Google Cloud ที่ใช้งานอยู่เพื่อเริ่มต้นใช้งาน
3. แบ็กเอนด์: สร้างแหล่งข้อมูล Spanner และการฝัง
ในกรณีการใช้งานนี้ ฐานข้อมูล Spanner จะมีคลังเครื่องแต่งกายพร้อมรูปภาพและคำอธิบายที่สอดคล้องกัน ตรวจสอบให้แน่ใจว่าคุณสร้างการฝังสำหรับคำอธิบายข้อความและจัดเก็บไว้ในฐานข้อมูล Spanner เป็น ARRAY<Flood64>
- สร้างข้อมูล Spanner
สร้างอินสแตนซ์ชื่อ "spanner-vertex" และฐานข้อมูลชื่อ "spanner-vertex-embeddings" สร้างตารางโดยใช้ DDL ดังนี้
CREATE TABLE
apparels ( id NUMERIC,
category STRING(100),
sub_category STRING(50),
uri STRING(200),
content STRING(2000),
embedding ARRAY<FLOAT64>
)
PRIMARY KEY
(id);
- แทรกข้อมูลลงในตารางโดยใช้ INSERT SQL
แทรกสคริปต์สำหรับข้อมูลตัวอย่างได้ที่นี่
- สร้างโมเดลการฝังข้อความ
ซึ่งจำเป็นเพื่อให้เราสร้างการฝังสำหรับเนื้อหาในอินพุตได้ ด้านล่างนี้คือ DDL ของแพ็กเกจเดียวกัน
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/abis-345004/locations/us-central1/publishers/google/models/textembedding-gecko');
- สร้างการฝังข้อความสำหรับข้อมูลต้นฉบับ
สร้างตารางเพื่อจัดเก็บการฝังและแทรกการฝังที่สร้างขึ้น ในแอปพลิเคชันฐานข้อมูลในโลกแห่งความเป็นจริง โหลดข้อมูลที่ Spanner ถึงขั้นตอนที่ 2 จะเป็นการดำเนินการ เนื่องจากต้องทำให้ตารางธุรกรรมมีการปรับให้สอดคล้องตามมาตรฐานของการออกแบบ จึงควรสร้างตารางแยกต่างหากสำหรับการฝัง
CREATE TABLE apparels_embeddings (id string(100), embedding ARRAY<FLOAT64>)
PRIMARY KEY (id);
INSERT INTO apparels_embeddings(id, embeddings)
SELECT CAST(id as string), embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT id, content from apparels)
) ;
เมื่อเนื้อหาจำนวนมากและการฝังพร้อมใช้งานแล้ว ต่อไป เราจะสร้างดัชนีการค้นหาเวกเตอร์และปลายทางเพื่อจัดเก็บการฝังข้อมูลที่จะช่วยในการค้นหาเวกเตอร์
4. งานเวิร์กโฟลว์: ส่งออกข้อมูล Spanner ไปยังการค้นหาเวกเตอร์
- สร้างที่เก็บข้อมูล Cloud Storage
ซึ่งจำเป็นสำหรับการจัดเก็บการฝังจาก Spanner ในที่เก็บข้อมูล GCS ในรูปแบบ JSON ที่ Vector Search คาดว่าจะเป็นอินพุต สร้างที่เก็บข้อมูลในภูมิภาคเดียวกับข้อมูลใน Spanner สร้างโฟลเดอร์ไว้ภายในหากจำเป็น แต่ให้สร้างไฟล์เปล่าชื่อ empty.json ไว้ในโฟลเดอร์หลัก
- ตั้งค่าเวิร์กโฟลว์ระบบคลาวด์
วิธีตั้งค่าการส่งออกแบบกลุ่มจาก Spanner ไปยังดัชนี Vertex AI Vector Search
สร้างดัชนีว่าง โดยทำดังนี้
ตรวจสอบว่าดัชนีการค้นหาเวกเตอร์อยู่ในภูมิภาคเดียวกับที่เก็บข้อมูล Cloud Storage และข้อมูลของคุณ ทำตามวิธีการ 11 ขั้นตอนใต้แท็บคอนโซลในส่วนสร้างดัชนีสำหรับการอัปเดตเป็นกลุ่มในหน้าจัดการดัชนี ในโฟลเดอร์ที่ผ่านไปยัง assetDeltaUri ให้สร้างไฟล์เปล่าชื่อ empty.json เนื่องจากคุณจะสร้างดัชนีโดยไม่มีไฟล์นี้ไม่ได้ ซึ่งจะสร้างดัชนีที่ว่างเปล่า
หากมีดัชนีอยู่แล้ว ให้ข้ามขั้นตอนนี้ เวิร์กโฟลว์จะเขียนทับดัชนีของคุณ
หมายเหตุ: คุณทำให้ดัชนีว่างใช้งานได้กับปลายทางไม่ได้ เราจึงเลื่อนขั้นตอนการติดตั้งใช้งานไปยังปลายทางไปยังขั้นตอนถัดไปหลังจากส่งออกข้อมูลเวกเตอร์ไปยัง Cloud Storage แล้ว
โคลนที่เก็บ Git นี้: การโคลนที่เก็บ Git ทำได้หลายวิธี วิธีหนึ่งคือการเรียกใช้คำสั่งต่อไปนี้โดยใช้ GitHub CLI เรียกใช้คำสั่ง 2 อย่างต่อไปนี้จากเทอร์มินัล Cloud Shell
gh repo clone cloudspannerecosystem/spanner-ai
cd spanner-ai/vertex-vector-search/workflows
โฟลเดอร์นี้มี 2 ไฟล์
batch-export.yaml
: นี่คือคำจำกัดความของเวิร์กโฟลว์sample-batch-input.json
: นี่คือตัวอย่างพารามิเตอร์อินพุตของเวิร์กโฟลว์
ตั้งค่า Input.json จากไฟล์ตัวอย่าง: ก่อนอื่น ให้คัดลอก JSON ตัวอย่าง
cp sample-batch-input.jsonอินพุต.json
จากนั้นแก้ไข input.json
พร้อมรายละเอียดของโปรเจ็กต์ ในกรณีนี้ JSON ควรมีลักษณะดังนี้
{
"project_id": "<<YOUR_PROJECT>>",
"location": "<<us-central1>>",
"dataflow": {
"temp_location": "gs://<<YOUR_BUCKET>>/<<FOLDER_IF_ANY>>/workflow_temp"
},
"gcs": {
"output_folder": "gs://<<YOUR_BUCKET>>/<<FOLDER_IF_ANY>>/workflow_output"
},
"spanner": {
"instance_id": "spanner-vertex",
"database_id": "spanner-vertex-embeddings",
"table_name": "apparels_embeddings",
"columns_to_export": "embedding,id"
},
"vertex": {
"vector_search_index_id": "<<YOUR_INDEX_ID>>"
}
}
ตั้งค่าสิทธิ์
สำหรับสภาพแวดล้อมที่ใช้งานจริง เราขอแนะนำให้สร้างบัญชีบริการใหม่และมอบบทบาท IAM อย่างน้อย 1 บทบาทที่มีสิทธิ์ขั้นต่ำที่จำเป็นสำหรับการจัดการบริการ ต้องมีบทบาทต่อไปนี้ในการตั้งค่าเวิร์กโฟลว์เพื่อส่งออกข้อมูลจาก Spanner (การฝัง) ไปยังดัชนี Vector Search
โดยค่าเริ่มต้น ระบบจะใช้บัญชีบริการเริ่มต้นของ Compute Engine
หากใช้บัญชีบริการที่กำหนดค่าด้วยตนเอง คุณต้องใส่บทบาทต่อไปนี้
หากต้องการทริกเกอร์งานโฟลว์ข้อมูล: ผู้ดูแลระบบ Dataflow, Dataflow Worker
หากต้องการแอบอ้างเป็นบัญชีบริการของผู้ปฏิบัติงานโฟลว์ข้อมูล ให้ผู้ใช้บัญชีบริการ
หากต้องการเขียนบันทึก: ผู้เขียนบันทึก
วิธีทริกเกอร์การสร้าง Vertex AI Vector Search ใหม่: ผู้ใช้ Vertex AI
บัญชีบริการสำหรับผู้ปฏิบัติงานของ Dataflow:
หากใช้บัญชีบริการที่กำหนดค่าด้วยตนเอง คุณต้องใส่บทบาทต่อไปนี้
หากต้องการจัดการ Dataflow: Dataflow Admin, Dataflow Worker หากต้องการอ่านข้อมูลจาก Spanner: ผู้อ่านฐานข้อมูล Cloud Spanner สิทธิ์การเขียนผ่านรีจิสทรีคอนเทนเนอร์ GCS ที่เลือก: เจ้าของที่เก็บข้อมูล GCS Storage
- ทำให้ Cloud Workflow
ทำให้ไฟล์เวิร์กโฟลว์ yaml ใช้งานได้กับโปรเจ็กต์ Google Cloud คุณกำหนดค่าภูมิภาคหรือตำแหน่งที่เวิร์กโฟลว์จะทำงานเมื่อเรียกใช้ได้
gcloud workflows deploy vector-export-workflow --source=batch-export.yaml --location="us-central1" [--service account=<service_account>]
or
gcloud workflows deploy vector-export-workflow --source=batch-export.yaml --location="us-central1"
ตอนนี้เวิร์กโฟลว์ควรปรากฏในหน้าเวิร์กโฟลว์ในคอนโซล Google Cloud
หมายเหตุ: คุณยังสร้างและทำให้เวิร์กโฟลว์ใช้งานได้จากคอนโซล Google Cloud ด้วย ทำตามข้อความแจ้งใน Cloud Console สำหรับคำจำกัดความของเวิร์กโฟลว์ ให้คัดลอกและวางเนื้อหาของ asset-export.yaml
เมื่อดำเนินการเสร็จแล้ว ให้ดำเนินการเวิร์กโฟลว์เพื่อเริ่มการส่งออกข้อมูล
- ดำเนินการเวิร์กโฟลว์ระบบคลาวด์
เรียกใช้คำสั่งต่อไปนี้เพื่อเรียกใช้เวิร์กโฟลว์
gcloud workflows execute vector-export-workflow --data="$(cat input.json)"
การดำเนินการควรแสดงอยู่ในแท็บ "การดำเนินการ" ในเวิร์กโฟลว์ ซึ่งจะโหลดข้อมูลของคุณลงในฐานข้อมูล Vector Search และจัดทำดัชนี
หมายเหตุ: คุณเรียกใช้จากคอนโซลโดยใช้ปุ่ม "ดำเนินการ" ได้เช่นกัน ทำตามข้อความแจ้ง แล้วคัดลอกและวางเนื้อหาของ Input.json ที่กำหนดเองสำหรับอินพุต
5. ทำให้ดัชนีการค้นหาเวกเตอร์ใช้งานได้
ทำให้ดัชนีใช้งานได้ที่ปลายทาง
คุณสามารถทำตามขั้นตอนด้านล่างเพื่อทำให้ดัชนีใช้งานได้:
- ในหน้าดัชนี Vector Search คุณจะเห็นปุ่ม DEPLOY อยู่ข้างดัชนีที่คุณเพิ่งสร้างในขั้นตอนที่ 2 ของส่วนก่อนหน้า หรือจะไปที่หน้าข้อมูลดัชนี แล้วคลิกปุ่ม "เลือกที่จะสิ้นสุด" ก็ได้
- ระบุข้อมูลที่จำเป็นและทำให้ดัชนีใช้งานได้ที่ปลายทาง
หรือคุณอาจดูที่สมุดบันทึกนี้เพื่อทำให้สมุดบันทึกใช้งานได้ที่ปลายทาง (ข้ามไปยังส่วนการติดตั้งใช้งานของสมุดบันทึก) เมื่อทำให้ใช้งานได้แล้ว ให้จดบันทึกรหัสดัชนีและ URL ปลายทางที่ทำให้ใช้งานได้แล้ว
6. ฟรอนท์เอนด์: ข้อมูลผู้ใช้ไปยังการค้นหาเวกเตอร์
มาสร้างแอปพลิเคชัน Python ง่ายๆ ด้วย UX ที่ขับเคลื่อนโดย gradio เพื่อทดสอบการใช้งานของเรากัน ดูการใช้งานได้ที่นี่เพื่อติดตั้งใช้งานแอปเดโมนี้ในสมุดบันทึก Colab ของคุณเอง
- เราจะใช้ SDK ของ Python แบบ AIplatform เพื่อเรียก Embeddings API และเพื่อเรียกปลายทางดัชนี Vector Search ด้วย
# [START aiplatform_sdk_embedding]
!pip install google-cloud-aiplatform==1.35.0 --upgrade --quiet --user
import vertexai
vertexai.init(project=PROJECT_ID, location="us-central1")
from vertexai.language_models import TextEmbeddingModel
import sys
if "google.colab" in sys.modules:
# Define project information
PROJECT_ID = " " # Your project id
LOCATION = " " # Your location
# Authenticate user to Google Cloud
from google.colab import auth
auth.authenticate_user()
- เราจะใช้ gRadio เพื่อสาธิตแอปพลิเคชัน AI ที่เรากำลังสร้างให้รวดเร็วและง่ายดายด้วยอินเทอร์เฟซผู้ใช้ รีสตาร์ทรันไทม์ก่อนใช้ขั้นตอนนี้
!pip install gradio
import gradio as gr
- เรียกใช้ Embeddings API จากเว็บแอปเมื่อได้รับอินพุตจากผู้ใช้ เราจะใช้โมเดลการฝังข้อความ: textembedding-gecko@latest
วิธีการด้านล่างเรียกใช้โมเดลการฝังข้อความและแสดงผลการฝังเวกเตอร์สำหรับข้อความที่ป้อนโดยผู้ใช้
def text_embedding(content) -> list:
"""Text embedding with a Large Language Model."""
model = TextEmbeddingModel.from_pretrained("textembedding-gecko@latest")
embeddings = model.get_embeddings(content)
for embedding in embeddings:
vector = embedding.values
#print(f"Length of Embedding Vector: {len(vector)}")
return vector
ทดสอบ
text_embedding("red shorts for girls")
คุณควรเห็นเอาต์พุตคล้ายกับด้านล่าง (โปรดทราบว่ารูปภาพถูกครอบตัดมีความสูง คุณจึงไม่เห็นการตอบกลับเวกเตอร์ทั้งหมด)
- ประกาศรหัสดัชนีที่ทำให้ใช้งานได้แล้วและรหัสปลายทาง
from google.cloud import aiplatform
DEPLOYED_INDEX_ID = "spanner_vector1_1702366982123"
#Vector Search Endpoint
index_endpoint = aiplatform.MatchingEngineIndexEndpoint('projects/273845608377/locations/us-central1/indexEndpoints/2021628049526620160')
- กำหนดเมธอด Vector Search เพื่อเรียกปลายทางดัชนี และแสดงผลลัพธ์โดยมี 10 ผลลัพธ์ที่ใกล้เคียงที่สุดสำหรับการตอบกลับการฝังที่สัมพันธ์กับข้อความอินพุตของผู้ใช้
ในคำจำกัดความของเมธอดด้านล่างสำหรับการค้นหาเวกเตอร์ โปรดทราบว่ามีการเรียกใช้เมธอด find_neighbors เพื่อระบุเวกเตอร์ที่ใกล้เคียงที่สุด 10 เวกเตอร์
def vector_search(content) -> list:
result = text_embedding(content)
#call_vector_search_api(content)
index_endpoint = aiplatform.MatchingEngineIndexEndpoint('projects/273845608377/locations/us-central1/indexEndpoints/2021628049526620160')
# run query
response = index_endpoint.find_neighbors(
deployed_index_id = DEPLOYED_INDEX_ID,
queries = [result],
num_neighbors = 10
)
out = []
# show the results
for idx, neighbor in enumerate(response[0]):
print(f"{neighbor.distance:.2f} {spanner_read_data(neighbor.id)}")
out.append(f"{spanner_read_data(neighbor.id)}")
return out
นอกจากนี้ คุณจะเห็นการเรียกเมธอด spanner_read_data ด้วย เราจะมาดูเรื่องนี้ในขั้นตอนถัดไปกัน
- ระบุการใช้งานวิธีการอ่านข้อมูล Spanner ที่จะเรียกใช้เมธอด actions_sql เพื่อดึงรูปภาพที่สอดคล้องกับรหัสของเวกเตอร์เพื่อนบ้านที่ใกล้ที่สุดที่ส่งคืนจากขั้นตอนสุดท้าย
!pip install google-cloud-spanner==3.36.0
from google.cloud import spanner
instance_id = "spanner-vertex"
database_id = "spanner-vertex-embeddings"
projectId = PROJECT_ID
client = spanner.Client()
client.project = projectId
instance = client.instance(instance_id)
database = instance.database(database_id)
def spanner_read_data(id):
query = "SELECT uri FROM apparels where id = " + id
outputs = []
with database.snapshot() as snapshot:
results = snapshot.execute_sql(query)
for row in results:
#print(row)
#output = "ID: {}, CONTENT: {}, URI: {}".format(*row)
output = "{}".format(*row)
outputs.append(output)
return "\n".join(outputs)
โดยควรแสดง URL ของรูปภาพที่สอดคล้องกับเวกเตอร์ที่เลือก
- สุดท้าย เราจะนำส่วนต่างๆ มารวมกันในอินเทอร์เฟซผู้ใช้และทริกเกอร์กระบวนการค้นหาเวกเตอร์
from PIL import Image
def call_search(query):
response = vector_search(query)
return response
input_text = gr.Textbox(label="Enter your query. Examples: Girls Tops White Casual, Green t-shirt girls, jeans shorts, denim skirt etc.")
output_texts = [gr.Image(label="") for i in range(10)]
demo = gr.Interface(fn=call_search, inputs=input_text, outputs=output_texts, live=True)
resp = demo.launch(share = True)
คุณควรเห็นผลลัพธ์ดังที่แสดงด้านล่าง
รูปภาพ: ลิงก์
ดูวิดีโอผลการค้นหาได้ที่นี่
7. ล้างข้อมูล
โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์
- หากคุณไม่ต้องการลบโปรเจ็กต์ ให้ลบอินสแตนซ์ Spanner โดยไปที่อินสแตนซ์ที่คุณเพิ่งสร้างสำหรับโปรเจ็กต์นี้ แล้วคลิกปุ่มลบอินสแตนซ์ที่มุมบนขวาของหน้าภาพรวมอินสแตนซ์
- นอกจากนี้ คุณยังไปที่ดัชนี Vector Search, ยกเลิกการทำให้ปลายทางและดัชนีใช้งานได้ และลบดัชนีได้ด้วย
8. บทสรุป
ยินดีด้วย คุณใช้งาน Spanner - Vertex Vector Search เรียบร้อยแล้วโดย
- การสร้างแหล่งข้อมูล Spanner และการฝังสำหรับแอปพลิเคชันที่มีแหล่งที่มาจากฐานข้อมูล Spanner
- กำลังสร้างดัชนีฐานข้อมูล Vector Search
- การผสานรวมข้อมูลเวกเตอร์จาก Spanner ไปยังการค้นหาเวกเตอร์โดยใช้งาน Dataflow และเวิร์กโฟลว์
- การทำให้ดัชนีใช้งานได้กับปลายทาง
- ขั้นตอนสุดท้ายของการเรียกใช้ Vector Search ในข้อมูลจากผู้ใช้ในการใช้งาน SDK ของ Vertex AI ที่ทำงานด้วยระบบ Python
คุณสามารถขยายขอบเขตการติดตั้งใช้งานไปยังกรณีการใช้งานของคุณเองหรือปรับเปลี่ยนกรณีการใช้งานปัจจุบันให้เหมาะสมด้วยฟีเจอร์ใหม่ๆ ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถของแมชชีนเลิร์นนิงของ Spanner ได้ที่นี่