การค้นหาความคล้ายคลึงกันด้วย Spanner และ Vertex AI

1. บทนำ

ความก้าวหน้าล่าสุดของการเรียนรู้เชิงลึกทำให้คุณแสดงข้อความและข้อมูลอื่นๆ ได้ในลักษณะที่จับความหมายในเชิงความหมายได้ แนวทางนี้ทำให้การค้นหามีแนวทางใหม่ที่เรียกว่าการค้นหาเวกเตอร์ ซึ่งใช้การแสดงข้อความเวกเตอร์ (หรือที่เรียกว่าการฝัง) เพื่อค้นหาเอกสารที่เกี่ยวข้องกับการค้นหาของผู้ใช้มากที่สุด การค้นหาเวกเตอร์จะดีกว่าการค้นหาแบบดั้งเดิมสำหรับแอปพลิเคชัน เช่น การค้นหาเครื่องแต่งกาย ซึ่งผู้ใช้มักค้นหาสินค้าตามคำอธิบาย รูปแบบ หรือบริบท มากกว่าการค้นหาตามชื่อผลิตภัณฑ์หรือแบรนด์จริง เราสามารถผสานรวมฐานข้อมูล Cloud Spanner กับ Vector Search เพื่อทำการจับคู่เวกเตอร์ความคล้ายคลึงกัน การใช้ Spanner และ Vector Search ร่วมกันจะช่วยให้ลูกค้าสร้างการผสานรวมอันทรงพลังซึ่งรวมความพร้อมใช้งาน ความน่าเชื่อถือ และขนาดของ Spanner เข้ากับความสามารถในการค้นหาความคล้ายคลึงขั้นสูงของ Vertex AI Vector Search การค้นหานี้ดำเนินการโดยการเปรียบเทียบการฝังของรายการในดัชนีการค้นหาเวกเตอร์และแสดงผลลัพธ์ที่คล้ายกันมากที่สุด

กรณีการใช้งาน

ลองนึกภาพว่าคุณเป็นนักวิทยาศาสตร์ข้อมูลในร้านค้าปลีกแฟชั่นแห่งหนึ่งที่พยายามตามให้ทันเทรนด์ การค้นหาผลิตภัณฑ์และการแนะนำผลิตภัณฑ์ที่เปลี่ยนแปลงอย่างรวดเร็ว ความท้าทายคือคุณมีทรัพยากรและคลังข้อมูลที่จำกัด บล็อกโพสต์นี้สาธิตวิธีใช้ Use Case การแนะนำเครื่องแต่งกาย โดยใช้แนวทางการค้นหาความคล้ายคลึงกันในข้อมูลเครื่องแต่งกาย โดยอธิบายขั้นตอนต่อไปนี้

  1. ข้อมูลจาก Spanner
  2. เวกเตอร์ที่สร้างขึ้นสำหรับข้อมูลเครื่องแต่งกายโดยใช้ ML.PREDICT และจัดเก็บไว้ใน Spanner
  3. ข้อมูลเวกเตอร์ Spanner ที่ผสานรวมกับ Vector Search โดยใช้งานโฟลว์ข้อมูลและเวิร์กโฟลว์
  4. การค้นหาเวกเตอร์ดำเนินการเพื่อค้นหาการจับคู่ความคล้ายคลึงกันสำหรับอินพุตที่ผู้ใช้ป้อน

เราจะสร้างเว็บแอปพลิเคชันสาธิตเพื่อค้นหาเครื่องแต่งกายตามข้อความที่ผู้ใช้ป้อน แอปพลิเคชันนี้ช่วยให้ผู้ใช้ค้นหาเครื่องแต่งกายได้โดยการป้อนข้อความอธิบาย

Spanner ไปยังดัชนีการค้นหาเวกเตอร์:

ข้อมูลสำหรับการค้นหาเครื่องแต่งกายได้รับการจัดเก็บไว้ใน Spanner เราจะเรียกใช้ Vertex AI Embeddings API ในโครงสร้าง ML.PREDICT โดยตรงจากข้อมูล Spanner จากนั้นเราจะใช้ประโยชน์จากงาน Dataflow และเวิร์กโฟลว์ที่จะอัปโหลดข้อมูลนี้ (สินค้าคงคลังและการฝัง) หลายรายการพร้อมกันลงใน Vector AI ของ Vertex AI และรีเฟรชดัชนี

การเรียกใช้คำค้นหาผู้ใช้ในดัชนี:

เมื่อผู้ใช้ป้อนคำอธิบายเครื่องแต่งกาย แอปจะสร้างการฝังแบบเรียลไทม์โดยใช้ API การฝังข้อความ จากนั้นระบบจะส่งข้อมูลเป็นอินพุตไปยัง Vector Search API เพื่อค้นหารายละเอียดผลิตภัณฑ์ที่เกี่ยวข้อง 10 รายการจากดัชนีและแสดงรูปภาพที่เกี่ยวข้อง

ภาพรวมสถาปัตยกรรม

สถาปัตยกรรมของแอปพลิเคชัน Spanner- Vector Search จะแสดงในแผนภาพ 2 ส่วนต่อไปนี้

Spaner ไปยังดัชนีการค้นหาเวกเตอร์: a79932a25bee23a4.png

แอปไคลเอ็นต์ที่จะเรียกใช้การค้นหาผู้ใช้ในดัชนี:

b2b4d5a5715bd4c4.pngสิ่งที่คุณจะสร้าง

Spanner ไปยังดัชนีเวกเตอร์:

  • ฐานข้อมูล Spanner เพื่อจัดเก็บและจัดการข้อมูลต้นฉบับและการฝังที่สอดคล้องกัน
  • งานเวิร์กโฟลว์ที่อัปโหลดข้อมูลจำนวนมาก (รหัสและการฝัง) ลงในฐานข้อมูล Vertex AI Vector Search
  • Vector Search API ที่ใช้เพื่อค้นหารายละเอียดผลิตภัณฑ์ที่เกี่ยวข้องจากดัชนี

การเรียกใช้คำค้นหาผู้ใช้ในดัชนี:

  • เว็บแอปพลิเคชันที่อนุญาตให้ผู้ใช้ป้อนข้อความอธิบายเครื่องแต่งกาย ดำเนินการค้นหาความคล้ายคลึงกันโดยใช้ปลายทางดัชนีที่ทำให้ใช้งานได้แล้ว และส่งคืนเครื่องแต่งกายที่อยู่ใกล้ที่สุดไปยังอินพุต

วิธีการทำงาน

เมื่อผู้ใช้ป้อนข้อความอธิบายเครื่องแต่งกาย เว็บแอปพลิเคชันจะส่งคำอธิบายไปยัง Vector Search API จากนั้น Vector Search API จะใช้การฝังรายละเอียดเครื่องแต่งกายเพื่อค้นหารายละเอียดผลิตภัณฑ์ที่เกี่ยวข้องมากที่สุดจากดัชนี จากนั้นรายละเอียดผลิตภัณฑ์และรูปภาพที่เกี่ยวข้องจะแสดงต่อผู้ใช้ ขั้นตอนการทำงานทั่วไปมีดังนี้

  1. สร้างการฝังสำหรับข้อมูลที่จัดเก็บไว้ใน Spanner
  2. ส่งออกและอัปโหลดการฝังลงในดัชนี Vector Search
  3. ค้นหาดัชนี Vector Search เพื่อค้นหารายการที่คล้ายกันโดยทำการค้นหาด้วยเพื่อนบ้านที่อยู่ใกล้ที่สุด

2. ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน

ก่อนเริ่มต้น

  1. ใน Google Cloud Console ในหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud
  2. ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้ว
  3. ตรวจสอบว่าเปิดใช้ API ที่จำเป็นทั้งหมด (Cloud Spanner, Vertex AI, Google Cloud Storage) แล้ว
  4. คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่เรียกใช้ใน Google Cloud ที่มี gcloud โหลดไว้ล่วงหน้า ดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ หากไม่ได้ตั้งค่าโปรเจ็กต์ไว้ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่าโปรเจ็กต์
gcloud config set project <YOUR_PROJECT_ID>
  1. ไปที่หน้า Cloud Spanner ด้วยโปรเจ็กต์ Google Cloud ที่ใช้งานอยู่เพื่อเริ่มต้นใช้งาน

3. แบ็กเอนด์: สร้างแหล่งข้อมูล Spanner และการฝัง

ในกรณีการใช้งานนี้ ฐานข้อมูล Spanner จะมีคลังเครื่องแต่งกายพร้อมรูปภาพและคำอธิบายที่สอดคล้องกัน ตรวจสอบให้แน่ใจว่าคุณสร้างการฝังสำหรับคำอธิบายข้อความและจัดเก็บไว้ในฐานข้อมูล Spanner เป็น ARRAY<Flood64>

  1. สร้างข้อมูล 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);
  1. แทรกข้อมูลลงในตารางโดยใช้ INSERT SQL

แทรกสคริปต์สำหรับข้อมูลตัวอย่างได้ที่นี่

  1. สร้างโมเดลการฝังข้อความ

ซึ่งจำเป็นเพื่อให้เราสร้างการฝังสำหรับเนื้อหาในอินพุตได้ ด้านล่างนี้คือ 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');
  1. สร้างการฝังข้อความสำหรับข้อมูลต้นฉบับ

สร้างตารางเพื่อจัดเก็บการฝังและแทรกการฝังที่สร้างขึ้น ในแอปพลิเคชันฐานข้อมูลในโลกแห่งความเป็นจริง โหลดข้อมูลที่ 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 ไปยังการค้นหาเวกเตอร์

  1. สร้างที่เก็บข้อมูล Cloud Storage

ซึ่งจำเป็นสำหรับการจัดเก็บการฝังจาก Spanner ในที่เก็บข้อมูล GCS ในรูปแบบ JSON ที่ Vector Search คาดว่าจะเป็นอินพุต สร้างที่เก็บข้อมูลในภูมิภาคเดียวกับข้อมูลใน Spanner สร้างโฟลเดอร์ไว้ภายในหากจำเป็น แต่ให้สร้างไฟล์เปล่าชื่อ empty.json ไว้ในโฟลเดอร์หลัก

  1. ตั้งค่าเวิร์กโฟลว์ระบบคลาวด์

วิธีตั้งค่าการส่งออกแบบกลุ่มจาก 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

บัญชีบริการ Cloud Workflow:

โดยค่าเริ่มต้น ระบบจะใช้บัญชีบริการเริ่มต้นของ Compute Engine

หากใช้บัญชีบริการที่กำหนดค่าด้วยตนเอง คุณต้องใส่บทบาทต่อไปนี้

หากต้องการทริกเกอร์งานโฟลว์ข้อมูล: ผู้ดูแลระบบ Dataflow, Dataflow Worker

หากต้องการแอบอ้างเป็นบัญชีบริการของผู้ปฏิบัติงานโฟลว์ข้อมูล ให้ผู้ใช้บัญชีบริการ

หากต้องการเขียนบันทึก: ผู้เขียนบันทึก

วิธีทริกเกอร์การสร้าง Vertex AI Vector Search ใหม่: ผู้ใช้ Vertex AI

บัญชีบริการสำหรับผู้ปฏิบัติงานของ Dataflow:

หากใช้บัญชีบริการที่กำหนดค่าด้วยตนเอง คุณต้องใส่บทบาทต่อไปนี้

หากต้องการจัดการ Dataflow: Dataflow Admin, Dataflow Worker หากต้องการอ่านข้อมูลจาก Spanner: ผู้อ่านฐานข้อมูล Cloud Spanner สิทธิ์การเขียนผ่านรีจิสทรีคอนเทนเนอร์ GCS ที่เลือก: เจ้าของที่เก็บข้อมูล GCS Storage

  1. ทำให้ 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

เมื่อดำเนินการเสร็จแล้ว ให้ดำเนินการเวิร์กโฟลว์เพื่อเริ่มการส่งออกข้อมูล

  1. ดำเนินการเวิร์กโฟลว์ระบบคลาวด์

เรียกใช้คำสั่งต่อไปนี้เพื่อเรียกใช้เวิร์กโฟลว์

gcloud workflows execute vector-export-workflow --data="$(cat input.json)"

การดำเนินการควรแสดงอยู่ในแท็บ "การดำเนินการ" ในเวิร์กโฟลว์ ซึ่งจะโหลดข้อมูลของคุณลงในฐานข้อมูล Vector Search และจัดทำดัชนี

หมายเหตุ: คุณเรียกใช้จากคอนโซลโดยใช้ปุ่ม "ดำเนินการ" ได้เช่นกัน ทำตามข้อความแจ้ง แล้วคัดลอกและวางเนื้อหาของ Input.json ที่กำหนดเองสำหรับอินพุต

5. ทำให้ดัชนีการค้นหาเวกเตอร์ใช้งานได้

ทำให้ดัชนีใช้งานได้ที่ปลายทาง

คุณสามารถทำตามขั้นตอนด้านล่างเพื่อทำให้ดัชนีใช้งานได้:

  1. ในหน้าดัชนี Vector Search คุณจะเห็นปุ่ม DEPLOY อยู่ข้างดัชนีที่คุณเพิ่งสร้างในขั้นตอนที่ 2 ของส่วนก่อนหน้า หรือจะไปที่หน้าข้อมูลดัชนี แล้วคลิกปุ่ม "เลือกที่จะสิ้นสุด" ก็ได้
  2. ระบุข้อมูลที่จำเป็นและทำให้ดัชนีใช้งานได้ที่ปลายทาง

หรือคุณอาจดูที่สมุดบันทึกนี้เพื่อทำให้สมุดบันทึกใช้งานได้ที่ปลายทาง (ข้ามไปยังส่วนการติดตั้งใช้งานของสมุดบันทึก) เมื่อทำให้ใช้งานได้แล้ว ให้จดบันทึกรหัสดัชนีและ URL ปลายทางที่ทำให้ใช้งานได้แล้ว

6. ฟรอนท์เอนด์: ข้อมูลผู้ใช้ไปยังการค้นหาเวกเตอร์

มาสร้างแอปพลิเคชัน Python ง่ายๆ ด้วย UX ที่ขับเคลื่อนโดย gradio เพื่อทดสอบการใช้งานของเรากัน ดูการใช้งานได้ที่นี่เพื่อติดตั้งใช้งานแอปเดโมนี้ในสมุดบันทึก Colab ของคุณเอง

  1. เราจะใช้ 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()
  1. เราจะใช้ gRadio เพื่อสาธิตแอปพลิเคชัน AI ที่เรากำลังสร้างให้รวดเร็วและง่ายดายด้วยอินเทอร์เฟซผู้ใช้ รีสตาร์ทรันไทม์ก่อนใช้ขั้นตอนนี้
!pip install gradio
import gradio as gr
  1. เรียกใช้ 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")

คุณควรเห็นเอาต์พุตคล้ายกับด้านล่าง (โปรดทราบว่ารูปภาพถูกครอบตัดมีความสูง คุณจึงไม่เห็นการตอบกลับเวกเตอร์ทั้งหมด)

5d8355ec04dac1f9.png

  1. ประกาศรหัสดัชนีที่ทำให้ใช้งานได้แล้วและรหัสปลายทาง
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')
  1. กำหนดเมธอด 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 ด้วย เราจะมาดูเรื่องนี้ในขั้นตอนถัดไปกัน

  1. ระบุการใช้งานวิธีการอ่านข้อมูล 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 ของรูปภาพที่สอดคล้องกับเวกเตอร์ที่เลือก

  1. สุดท้าย เราจะนำส่วนต่างๆ มารวมกันในอินเทอร์เฟซผู้ใช้และทริกเกอร์กระบวนการค้นหาเวกเตอร์
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)

คุณควรเห็นผลลัพธ์ดังที่แสดงด้านล่าง

8093b39fbab1a9cc.png

รูปภาพ: ลิงก์

ดูวิดีโอผลการค้นหาได้ที่นี่

7. ล้างข้อมูล

โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์
  4. หากคุณไม่ต้องการลบโปรเจ็กต์ ให้ลบอินสแตนซ์ Spanner โดยไปที่อินสแตนซ์ที่คุณเพิ่งสร้างสำหรับโปรเจ็กต์นี้ แล้วคลิกปุ่มลบอินสแตนซ์ที่มุมบนขวาของหน้าภาพรวมอินสแตนซ์
  5. นอกจากนี้ คุณยังไปที่ดัชนี Vector Search, ยกเลิกการทำให้ปลายทางและดัชนีใช้งานได้ และลบดัชนีได้ด้วย

8. บทสรุป

ยินดีด้วย คุณใช้งาน Spanner - Vertex Vector Search เรียบร้อยแล้วโดย

  1. การสร้างแหล่งข้อมูล Spanner และการฝังสำหรับแอปพลิเคชันที่มีแหล่งที่มาจากฐานข้อมูล Spanner
  2. กำลังสร้างดัชนีฐานข้อมูล Vector Search
  3. การผสานรวมข้อมูลเวกเตอร์จาก Spanner ไปยังการค้นหาเวกเตอร์โดยใช้งาน Dataflow และเวิร์กโฟลว์
  4. การทำให้ดัชนีใช้งานได้กับปลายทาง
  5. ขั้นตอนสุดท้ายของการเรียกใช้ Vector Search ในข้อมูลจากผู้ใช้ในการใช้งาน SDK ของ Vertex AI ที่ทำงานด้วยระบบ Python

คุณสามารถขยายขอบเขตการติดตั้งใช้งานไปยังกรณีการใช้งานของคุณเองหรือปรับเปลี่ยนกรณีการใช้งานปัจจุบันให้เหมาะสมด้วยฟีเจอร์ใหม่ๆ ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถของแมชชีนเลิร์นนิงของ Spanner ได้ที่นี่