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

1. บทนำ

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

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

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

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

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

Spanner ไปยังดัชนี Vector Search:

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

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

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

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

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

ดัชนี Spanner ไปยัง Vector Search: a79932a25bee23a4.png

แอปไคลเอ็นต์เพื่อเรียกใช้การค้นหาของผู้ใช้ในดัชนี:

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

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

  • ฐานข้อมูล Spanner เพื่อจัดเก็บและจัดการข้อมูลต้นฉบับและการฝังที่เกี่ยวข้อง
  • งานเวิร์กโฟลว์ที่อัปโหลดข้อมูล (รหัสและการฝัง) แบบเป็นกลุ่มลงในฐานข้อมูลการค้นหาแบบเวกเตอร์ของ Vertex AI
  • 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 ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าโปรเจ็กต์เปิดใช้การเรียกเก็บเงินแล้วหรือไม่
  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<float64>

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

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

  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 จะเป็นแบบธุรกรรม เพื่อรักษาแนวทางปฏิบัติแนะนำในการออกแบบไว้เหมือนเดิม ฉันจึงต้องการให้ตารางธุรกรรมเป็นแบบปกติ ดังนั้นจึงสร้างตารางแยกต่างหากสำหรับ Embedding

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)
) ;

ตอนนี้เนื้อหาและการฝังจำนวนมากพร้อมแล้ว เรามาสร้างดัชนีและอุปกรณ์ปลายทาง Vector Search เพื่อจัดเก็บการฝังที่จะช่วยดำเนินการ Vector Search กัน

4. งานเวิร์กโฟลว์: การส่งออกข้อมูล Spanner ไปยัง Vector Search

  1. สร้าง Bucket ของ Cloud Storage

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

  1. ตั้งค่า Cloud Workflow

วิธีตั้งค่าการส่งออกแบบกลุ่มจาก Spanner ไปยังดัชนี Vertex AI Vector Search

สร้างดัชนีที่ว่างเปล่า

ตรวจสอบว่าดัชนีการค้นหาเวกเตอร์อยู่ในภูมิภาคเดียวกับ Bucket ของ Cloud Storage และข้อมูล ทำตามวิธีการ 11 ขั้นตอนในแท็บคอนโซลในส่วนสร้างดัชนีสำหรับการอัปเดตแบบเป็นชุดในหน้าจัดการดัชนี ในโฟลเดอร์ที่ส่งไปยัง contentsDeltaUri ให้สร้างไฟล์ว่างชื่อ 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 input.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, ผู้ปฏิบัติงาน Dataflow

หากต้องการแอบอ้างบัญชีบริการของ Worker Dataflow ให้ใช้บทบาท ผู้ใช้บัญชีบริการ

หากต้องการเขียนบันทึก ให้ใช้บทบาท Logs Writer

หากต้องการทริกเกอร์การสร้างดัชนี Vertex AI Vector Search ใหม่ ให้ทำดังนี้ ผู้ใช้ Vertex AI

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

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

หากต้องการจัดการ Dataflow ให้ใช้บทบาทผู้ดูแลระบบ Dataflow และผู้ปฏิบัติงาน Dataflow หากต้องการอ่านข้อมูลจาก Spanner ให้ใช้บทบาทผู้อ่านฐานข้อมูล Cloud Spanner สิทธิ์เขียนใน Container Registry ของ GCS ที่เลือก: เจ้าของ Bucket ของ 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 Console แล้ว

หมายเหตุ: คุณยังสร้างและทำให้เวิร์กโฟลว์ใช้งานได้จากคอนโซล Google Cloud ได้ด้วย ทำตามข้อความแจ้งใน Cloud Console สำหรับคำจำกัดความของเวิร์กโฟลว์ ให้คัดลอกและวางเนื้อหาของ batch-export.yaml

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

  1. เรียกใช้เวิร์กโฟลว์ระบบคลาวด์

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

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

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

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

5. ติดตั้งใช้งานดัชนี Vector Search

ติดตั้งใช้งานดัชนีไปยังปลายทาง

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

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

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

6. ส่วนหน้า: ข้อมูลผู้ใช้ไปยัง Vector Search

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

  1. เราจะใช้ aiplatform python sdk เพื่อเรียกใช้ 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 ที่เรียกใช้เมธอด execute_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 Console ให้ไปที่หน้าจัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์
  4. หากไม่ต้องการลบโปรเจ็กต์ ให้ลบอินสแตนซ์ Spanner โดยไปที่อินสแตนซ์ที่คุณเพิ่งสร้างสำหรับโปรเจ็กต์นี้ แล้วคลิกปุ่มลบอินสแตนซ์ที่มุมขวาบนของหน้าภาพรวมอินสแตนซ์
  5. นอกจากนี้ คุณยังไปที่ดัชนี Vector Search, เลิกใช้งานปลายทางและดัชนี รวมถึงลบดัชนีได้ด้วย

8. บทสรุป

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

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

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