การจัดการข้อมูลหลักอย่างง่าย: จับคู่และ ผสานการทำงานกับ Generative AI

1. ภาพรวม

การจัดการข้อมูลหลักคืออะไร

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

ข้อมูลหลักแสดงถึงนิติบุคคลหลักซึ่งเป็นรากฐานของธุรกิจซึ่งจำเป็นต่อการดำเนินงานของบริษัท องค์ประกอบหลักของข้อมูลหลักมีดังนี้

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

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

แม้ว่าการใช้ MDM ที่มีประสิทธิภาพจะสําคัญต่อการตัดสินใจเชิงกลยุทธ์ แต่อาจมีความซับซ้อนและต้องใช้ทรัพยากรจำนวนมาก ด้วยเหตุนี้ พลังในการเปลี่ยนรูปแบบของ Generative AI จึงเข้ามามีบทบาท โดยเฉพาะโมเดลอย่าง Gemini 1.0 Pro, Gemini 1.0 Pro Vision, Gemini 1.5 Pro

2. วัตถุประสงค์

ในโค้ดแล็บนี้ คุณจะแสดงให้เห็นว่า Gemini 1.0 Pro ลดความซับซ้อนของแอปพลิเคชันการจัดการข้อมูลหลัก เช่น การเสริมข้อมูลและการกรองข้อมูลที่ซ้ำกันออก อย่างไรสำหรับข้อมูล citibike_stations ที่มีอยู่ในชุดข้อมูลสาธารณะของ BigQuery

สิ่งที่จะใช้

  1. ชุดข้อมูลสาธารณะ BigQuery bigquery-public-data.new_york_citibike
  2. การเรียกใช้ฟังก์ชัน Gemini (Cloud Function ของ Java ที่ได้รับข้อมูลที่อยู่โดยใช้ Reverse Geocoding API สําหรับพิกัดที่มีอยู่ในข้อมูล citibike_stations)
  3. Vertex AI Embeddings API และการค้นหาเวกเตอร์ใน BigQuery เพื่อระบุรายการที่ซ้ำกัน

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

  1. คุณจะต้องสร้างชุดข้อมูล BigQuery สําหรับ Use Case ในชุดข้อมูลนี้ คุณจะต้องสร้างตาราง Landing Page ที่มีข้อมูลจากตารางชุดข้อมูลสาธารณะ bigquery-public-data.new_york_citibike.citibike_stations
  2. คุณจะติดตั้งใช้งาน Cloud Function ที่มีการเรียกใช้ฟังก์ชัน Gemini เพื่อมาตรฐานที่อยู่
  3. คุณจะจัดเก็บข้อมูลที่อยู่ที่ได้รับการเพิ่มประสิทธิภาพในตาราง Landing Page (จาก 2 แหล่งที่มาที่ระบุไว้สําหรับการสาธิตนี้)
  4. คุณจะเรียกใช้ Vertex AI Embeddings API จาก BigQuery ในข้อมูลที่อยู่
  5. คุณจะใช้ BigQuery Vector Search เพื่อระบุระเบียนที่ซ้ำกัน

แผนภาพต่อไปนี้แสดงขั้นตอนและขั้นตอนต่างๆ ของข้อมูลที่เกี่ยวข้องกับการใช้งาน

ขั้นตอนการดําเนินการระดับสูงของ Use Case

3. ข้อกำหนด

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

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

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์หรือไม่
  3. คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud และโหลด bq ไว้ล่วงหน้า คลิก "เปิดใช้งาน Cloud Shell" ที่ด้านบนของคอนโซล Google Cloud

รูปภาพปุ่มเปิดใช้งาน Cloud Shell

  1. เมื่อเชื่อมต่อกับ Cloud Shell แล้ว ให้ตรวจสอบว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณโดยใช้คําสั่งต่อไปนี้
gcloud auth list
  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project
  1. หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คําสั่งต่อไปนี้เพื่อตั้งค่า
gcloud config set project <YOUR_PROJECT_ID>
  1. ไปที่ Gemini สำหรับ Google Cloud Marketplace เพื่อเปิดใช้ API คุณใช้คำสั่งต่อไปนี้ในเทอร์มินัล Cloud Shell ได้ด้วย
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. ตรวจสอบว่าได้เปิดใช้ BigQuery, BigQuery Connection, Cloud Function, Cloud Run, Vertex AI และ Cloud Build API แล้ว ทางเลือกสำหรับคำสั่ง gcloud คือผ่านคอนโซลโดยใช้ลิงก์นี้

โปรดดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ

5. สร้างชุดข้อมูล BigQuery และการเชื่อมต่อภายนอก

มาเริ่มกันด้วยการสร้างชุดข้อมูลและการเชื่อมต่อทรัพยากรในระบบคลาวด์

ชุดข้อมูลใน BigQuery คือคอนเทนเนอร์สำหรับตารางและออบเจ็กต์ทั้งหมดสำหรับแอปพลิเคชัน

หากต้องการสร้างชุดข้อมูล ให้ทําดังนี้

  1. ไปที่หน้า BigQuery ในคอนโซล Google Cloud
  2. ในแผง Explorer ให้เลือกโปรเจ็กต์ที่ต้องการสร้างชุดข้อมูล
  3. ขยายตัวเลือกการดําเนินการ (ไอคอนจุดไข่ปลาแนวตั้ง) แล้วคลิกสร้างชุดข้อมูล

รูปภาพเมนูการดําเนินการและตัวเลือกสร้างชุดข้อมูล

  1. ป้อน mdm_gemini ในช่องรหัสชุดข้อมูล
  2. ตั้งค่าประเภทสถานที่ตั้งเป็น Multi-region และยอมรับค่าเริ่มต้น ซึ่งก็คือ US(multiple regions in United States.
  3. คลิกสร้างชุดข้อมูล
  4. ตรวจสอบว่าระบบสร้างชุดข้อมูลและแสดงชุดข้อมูลดังกล่าวภายใต้รหัสโปรเจ็กต์ของคุณในแผง Explorer แล้ว

ต้องมีการเชื่อมต่อ BigQuery เพื่อโต้ตอบกับ Cloud Function หากต้องการสร้างฟังก์ชันระยะไกล คุณต้องสร้างการเชื่อมต่อ BigQuery ในโค้ดแล็บนี้ เราจะใช้การเชื่อมต่อ BigLake เพื่อเข้าถึงโมเดลจาก BigQuery ผ่าน Cloud Function การเชื่อมต่อ BigLake ช่วยเชื่อมต่อแหล่งข้อมูลภายนอกไปพร้อมกับรักษาการควบคุมการเข้าถึงและการรักษาความปลอดภัยของ BigQuery อย่างละเอียด ซึ่งในกรณีของเราคือ Vertex AI Gemini Pro API

วิธีสร้างการเชื่อมต่อ BigLake มีดังนี้

  1. คลิกเพิ่มในแผงเครื่องมือสำรวจของหน้า BigQuery

คอนโซล BigQuery ที่ไฮไลต์ปุ่มเพิ่มเพื่อเพิ่มการเชื่อมต่อภายนอก

  1. คลิกการเชื่อมต่อกับแหล่งข้อมูลภายนอก
  2. ในรายการประเภทการเชื่อมต่อ ให้เลือกโมเดลระยะไกล ฟังก์ชันระยะไกล และ BigLake (ทรัพยากรในระบบคลาวด์) ของ Vertex AI
  3. ในช่องรหัสการเชื่อมต่อ ให้ป้อนชื่อการเชื่อมต่อเป็น gemini-bq-conn
  4. ตั้งค่าประเภทสถานที่ตั้งเป็น Multi-region และยอมรับค่าเริ่มต้น ซึ่งก็คือ US(multiple regions in United States.
  5. คลิกสร้างการเชื่อมต่อ
  6. คลิกไปที่การเชื่อมต่อ แล้วคัดลอกรหัสบัญชีบริการในแผงข้อมูลการเชื่อมต่อ

ภาพหน้าจอข้อมูลการเชื่อมต่อ

  1. ไปที่หน้า IAM และผู้ดูแลระบบ แล้วคลิกให้สิทธิ์เข้าถึง
  2. วางรหัสบัญชีบริการในช่องหลักการใหม่
  3. เลือกบทบาท Vertex AI user จากรายการบทบาท แล้วคลิกบันทึก

ให้สิทธิ์เข้าถึงภาพหน้าจอของบัญชีบริการ

คุณได้สร้างชุดข้อมูลและการเชื่อมต่อ BigQuery เรียบร้อยแล้ว

6. ทำให้การเรียกใช้ฟังก์ชัน Gemini (Java Cloud Function) ใช้งานได้

ทําตามขั้นตอนเหล่านี้เพื่อทําให้ฟังก์ชัน Java Cloud ที่มีคําเรียกฟังก์ชัน Gemini ใช้งานได้

  1. โคลน repository ของ GitHub จากเทอร์มินัล Cloud Shell โดยใช้คำสั่งต่อไปนี้
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
  1. แทนที่ตัวยึดตําแหน่ง YOUR_API_KEY และ YOUR_PROJECT_ID ด้วยค่าของคุณ

หากคุณอ่านบล็อกที่นี่ ก็จะทราบว่าการใช้งานการเรียกใช้ฟังก์ชันใช้ Reverse Geocoding API คุณสร้าง API_KEY ของคุณเองได้จากวิธีการที่นี่

  1. ในเทอร์มินัล Cloud Shell ให้ไปที่ไดเรกทอรีโปรเจ็กต์ที่โคลนใหม่ GeminiFunctionCalling แล้วเรียกใช้คำสั่งต่อไปนี้เพื่อสร้างและทำให้ Cloud Function ใช้งานได้
gcloud functions deploy gemini-fn-calling --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http

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

เอาต์พุตคือ URL ของ REST ในรูปแบบต่อไปนี้

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling

  1. ทดสอบฟังก์ชัน Cloud นี้โดยเรียกใช้คําสั่งต่อไปนี้จากเทอร์มินัล
gcloud functions call gemini-fn-calling --region=us-central1 --gen2 --data '{"calls":[["40.714224,-73.961452"]]}'

การตอบกลับพรอมต์ตัวอย่างแบบสุ่ม

 '{"replies":["{ \"DOOR_NUMBER\": \"277\", \"STREET_ADDRESS\": \"Bedford Ave\", \"AREA\":
 null, \"CITY\": \"Brooklyn\", \"TOWN\": null, \"COUNTY\": \"Kings County\", \"STATE\":
 \"NY\", \"COUNTRY\": \"USA\", \"ZIPCODE\": \"11211\", \"LANDMARK\": null}}```"]}'

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

  1. เรียกใช้ DDL ต่อไปนี้จาก BigQuery เพื่อสร้างฟังก์ชันระยะไกลที่เรียกใช้ Cloud Function ที่ติดตั้งใช้งานนี้
CREATE OR REPLACE FUNCTION
 `mdm_gemini.MDM_GEMINI` (latlng STRING) RETURNS STRING
 REMOTE WITH CONNECTION `us.gemini-bq-conn`
 OPTIONS (
   endpoint = 'https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling', max_batching_rows = 1
 );

ทดสอบการค้นหาเพื่อใช้ฟังก์ชันระยะไกลใหม่ที่สร้างขึ้น

SELECT mdm_gemini.MDM_GEMINI(latlong) from mdm_gemini.CITIBIKE_STATIONS limit 1;

หากการค้นหาทดสอบที่ใช้ฟังก์ชันระยะไกลใหม่ที่สร้างขึ้นใน BigQuery ไม่สำเร็จเนื่องจากปัญหาสิทธิ์ของ Cloud Functions ให้ไปที่ Cloud Functions จากคอนโซล Google Cloud แล้วค้นหา Cloud Function ที่ชื่อ "gemini-fn-calling" ไปที่แท็บสิทธิ์ แล้วเพิ่มผู้ใช้หลักเป็น "allUsers" และมอบหมายบทบาท "ผู้เรียกใช้ Cloud Functions" เพื่อให้ผู้ใช้ทุกคนเข้าถึง Cloud Functions ได้ (เนื่องจากนี่เป็นแอปสาธิตเท่านั้น)

7. ลองใช้วิธีแก้ปัญหาชั่วคราว

หากไม่มี API_KEY ที่จําเป็นสําหรับวิธีการเรียกใช้ฟังก์ชันการแปลงพิกัดภูมิศาสตร์ย้อนกลับ หรือไม่ได้ติดตั้งใช้งาน Cloud Function ไม่ว่าด้วยเหตุผลใดก็ตาม คุณทําสิ่งต่อไปนี้แทนได้

  1. ดาวน์โหลดไฟล์ CITIBIKE_STATIONS.csv จากที่เก็บข้อมูลไปยังโฟลเดอร์โปรเจ็กต์ Cloud Shell แล้วไปที่โฟลเดอร์นั้น
  2. ส่งออกข้อมูลจาก CSV ไปยังชุดข้อมูล BigQuery ใหม่ mdm_gemini โดยใช้คําสั่งต่อไปนี้ในเทอร์มินัล Cloud Shell
bq load --source_format=CSV --skip_leading_rows=1 mdm_gemini.CITIBIKE_STATIONS ./CITIBIKE_STATIONS.csv \ name:string,latlng:string,capacity:numeric,num_bikes_available:numeric,num_docks_available:numeric,last_reported:timestamp,full_address_string:string

8. สร้างตารางและเพิ่มประสิทธิภาพข้อมูลที่อยู่

ขั้นตอนที่ 1: สร้างตาราง

สำคัญ: ข้ามขั้นตอนนี้หากคุณใช้วิธีแก้ปัญหาชั่วคราวแล้ว เนื่องจากคุณจะต้องสร้างตารางไว้แล้ว

หากคุณยังไม่ได้ใช้วิธีแก้ปัญหานี้ ให้เรียกใช้ DDL ต่อไปนี้ในเครื่องมือแก้ไข SQL ของ BigQuery

CREATE TABLE mdm_gemini.CITIBIKE_STATIONS as (
select  name, latitude || ',' || longitude as latlong, capacity, num_bikes_available, num_docks_available,last_reported,
'' as full_address_string
from bigquery-public-data.new_york_citibike.citibike_stations) ;

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

  • รายงานในปี 2024
  • จำนวนจักรยานที่พร้อมให้บริการมากกว่า 0
  • ความจุมากกว่า 100

เรียกใช้คําค้นหาต่อไปนี้

update `mdm_gemini.CITIBIKE_STATIONS`
set full_address_string = `mdm_gemini.MDM_GEMINI`(latlong)
where EXTRACT(YEAR FROM last_reported) = 2024 and num_bikes_available > 0 and capacity > 100;

ขั้นตอนที่ 2: สร้างแหล่งข้อมูลแหล่งที่ 2 สำหรับข้อมูลตำแหน่งสถานีจักรยาน

อย่าข้ามขั้นตอนนี้แม้ว่าคุณจะใช้วิธีแก้ปัญหาชั่วคราวเพื่อสร้างตารางก็ตาม

ในขั้นตอนนี้ คุณจะต้องสร้างแหล่งข้อมูลแหล่งที่ 2 สำหรับข้อมูลตำแหน่งสถานีจักรยานเพื่อวัตถุประสงค์ของ Codelab นี้ การดำเนินการนี้แสดงให้เห็นว่า MDM รวบรวมข้อมูลจากแหล่งที่มาหลายแห่งเข้าด้วยกันและระบุข้อมูลที่เป็นความจริง

เรียกใช้ DDL ต่อไปนี้ในเครื่องมือแก้ไข SQL ของ BigQuery เพื่อสร้างแหล่งข้อมูลตำแหน่งที่ 2 ซึ่งมีระเบียน 2 รายการ เรามาตั้งชื่อตารางนี้ว่า mdm_gemini.CITIBIKE_STATIONS_SOURCE2 และแทรกระเบียน 2 รายการลงในตารางกัน

CREATE TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE2 (name STRING(55), address STRING(1000), embeddings_src ARRAY<FLOAT64>);

insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Location broadway and 29','{ "DOOR_NUMBER": "1593", "STREET_ADDRESS": "Broadway", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10019", "LANDMARK": null}', null);

insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Allen St & Hester','{ "DOOR_NUMBER": "36", "STREET_ADDRESS": "Allen St", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10002", "LANDMARK": null}', null);

9. สร้างการฝังสําหรับข้อมูลที่อยู่

การฝังคือเวกเตอร์ตัวเลขมิติสูงที่แสดงถึงเอนทิตีหนึ่งๆ เช่น ข้อความหรือไฟล์เสียง โมเดลแมชชีนเลิร์นนิง (ML) ใช้การฝังเพื่อเข้ารหัสความหมายเกี่ยวกับเอนทิตีดังกล่าวเพื่อให้เหตุผลและเปรียบเทียบได้ง่ายขึ้น เช่น การดำเนินการทั่วไปในคลัสเตอร์ การจัดประเภท และโมเดลการแนะนำคือการวัดระยะทางระหว่างเวกเตอร์ในพื้นที่การฝังเพื่อค้นหารายการที่คล้ายกันมากที่สุดในแง่ความหมาย Vertex AI Text-Embedding API ช่วยให้คุณสร้างการฝังข้อความโดยใช้ Generative AI ใน Vertex AI ได้ การฝังข้อความคือการแสดงข้อความเป็นตัวเลขที่บันทึกความสัมพันธ์ระหว่างคําและวลี อ่านเพิ่มเติมเกี่ยวกับการฝังข้อความของ Vertex AI ที่นี่

  1. เรียกใช้ DDL ด้านล่างเพื่อสร้างโมเดลระยะไกลสําหรับ Vertex AI Text Embedding API
CREATE OR REPLACE MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (ENDPOINT = 'textembedding-gecko@latest');
  1. เมื่อโมเดลการฝังระยะไกลพร้อมแล้ว ให้สร้างการฝังสําหรับแหล่งที่มาแรกและจัดเก็บไว้ในตารางโดยใช้การค้นหาต่อไปนี้
CREATE TABLE `mdm_gemini.CITIBIKE_STATIONS_SOURCE1` AS (
SELECT *
FROM ML.GENERATE_EMBEDDING(
 MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
 ( select name, full_address_string as content from `mdm_gemini.CITIBIKE_STATIONS`
 where full_address_string is not null )
  )
);

คุณยังจัดเก็บช่องผลลัพธ์ของข้อมูลเชิงลึกในตาราง mdm_gemini.CITIBIKE_STATIONS เดียวกันกับที่สร้างไว้ก่อนหน้านี้แทนการสร้างตารางใหม่ได้ด้วย

  1. หากต้องการสร้างการฝังสําหรับข้อมูลที่อยู่ในตาราง CITIBIKE_STATIONS_SOURCE2 ให้เรียกใช้การค้นหาต่อไปนี้
update `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` a set embeddings_src =
(
SELECT  ml_generate_embedding_result
FROM ML.GENERATE_EMBEDDING(
 MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
 ( select name, address as content from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` ))
where name = a.name) where name is not null;

ซึ่งจะสร้างการฝังสําหรับแหล่งที่มาที่ 2 โปรดทราบว่าเราได้สร้างช่องการฝังในตาราง CITIBIKE_STATIONS_SOURCE2 เดียวกัน

  1. หากต้องการแสดงภาพการฝังที่สร้างขึ้นสําหรับตารางข้อมูลต้นทาง 1 และ 2 ให้เรียกใช้การค้นหาต่อไปนี้
select name,address,embeddings_src from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2`;
select name,content,ml_generate_embedding_result from `mdm_gemini.CITIBIKE_STATIONS_SOURCE1`;

ทีนี้มาเริ่มการค้นหาเวกเตอร์เพื่อระบุรายการที่ซ้ำกันกัน

10. เรียกใช้การค้นหาเวกเตอร์เพื่อแจ้งที่อยู่ซ้ำ

ในขั้นตอนนี้ คุณจะค้นหาคอลัมน์ ml_generate_embedding_result ของตาราง mdm_gemini.CITIBIKE_STATIONS_SOURCE1 เพื่อหาการฝังที่อยู่ 2 อันดับแรกที่ตรงกับข้อมูลแต่ละแถวในคอลัมน์ embeddings_src ของตาราง mdm_gemini.CITIBIKE_STATIONS_SOURCE2

โดยเรียกใช้การค้นหาต่อไปนี้

select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
 TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
 'ml_generate_embedding_result',
 (SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
 'embeddings_src',
 top_k => 2
) where query.name <> base.name
order by distance desc;

ตารางที่เราค้นหา: mdm_gemini.CITIBIKE_STATIONS_SOURCE1 ในฟิลด์ ml_generate_embedding_result

ตารางที่เราใช้เป็นฐาน: mdm_gemini.CITIBIKE_STATIONS_SOURCE2 ในฟิลด์ embeddings_src

top_k: ระบุจํานวนเพื่อนบ้านที่ใกล้ที่สุดที่จะแสดง ค่าเริ่มต้นคือ 10 ค่าติดลบจะถือว่าเป็นค่าอนันต์ ซึ่งหมายความว่าระบบจะนับค่าทั้งหมดเป็นค่าใกล้เคียงและแสดงผล

distance_type: ระบุประเภทเมตริกที่จะใช้คํานวณระยะทางระหว่างเวกเตอร์ 2 รายการ ประเภทระยะทางที่รองรับ ได้แก่ Euclidean และ Cosine ค่าเริ่มต้นคือ Euclidean

ผลลัพธ์ของการค้นหามีดังนี้

ชุดผลลัพธ์

ดังที่คุณเห็น รายการนี้แสดงเพื่อนบ้านที่ใกล้ที่สุด 2 ราย (หรือก็คือรายการที่ซ้ำกันมากที่สุด) สำหรับ 2 แถวใน CITIBIKE_STATIONS_SOURCE2 จาก CITIBIKE_STATIONS_SOURCE1 เนื่องจากไม่ได้ระบุ distance_type ระบบจะถือว่าค่านี้เป็น Euclidean และอ่านระยะทางเป็นระยะทางในค่า TEXT ของที่อยู่ระหว่างแหล่งที่มา 2 แห่ง โดยค่าต่ำสุดคือข้อความที่อยู่ซึ่งคล้ายกันที่สุด

มาตั้งค่า distance_type เป็น Cosine โดยใช้การค้นหาต่อไปนี้

select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
 TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
 'ml_generate_embedding_result',
 (SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
 'embeddings_src',
 top_k => 2,distance_type => 'COSINE'
) where query.name <> base.name
order by distance desc;

ผลลัพธ์ของการค้นหามีดังนี้

ชุดผลลัพธ์ 2

การค้นหาทั้ง 2 รายการ (ของทั้ง 2 ประเภทระยะทาง) จัดเรียงตามระยะทางจากมากไปน้อย ซึ่งหมายความว่าเราต้องการแสดงผลการค้นหาตามลำดับระยะทางที่ลดลง แต่คุณจะเห็นว่าลำดับระยะทางของคำค้นหาที่ 2 กลับกัน ทายสิว่าทำไม

ใช่ คุณตอบถูกค่ะ! ในตัวเลขที่คล้ายกับโคไซน์ ตัวเลขที่มากขึ้นหมายถึงความคล้ายคลึงที่มากขึ้นและระยะทางที่น้อยลง ในเมตริกระยะทางแบบยูคลิด ตัวเลขที่มากขึ้นหมายถึงระยะทางระหว่างค่าที่มากขึ้น

ดูข้อมูลเพิ่มเติมเกี่ยวกับความเข้าใจ MDM และเคล็ดลับในการทำความเข้าใจความแตกต่างและการใช้งานของ Euclidean และ Cosine ได้ที่บล็อก

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

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

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

12. ขอแสดงความยินดี

ยินดีด้วย คุณได้แสดงให้เห็นถึงประสิทธิภาพของการใช้ Gemini 1.0 Pro และการเรียกใช้ฟังก์ชันในการเปลี่ยนกิจกรรม MDM 2-3 อย่างให้กลายเป็นความสามารถของ Generative AI ที่เรียบง่ายแต่มีประสิทธิภาพ แน่นอน และเชื่อถือได้ เมื่อทราบข้อมูลข้างต้นแล้ว คุณก็ลองหาวิธีอื่นๆ ในการใช้ Use Case เดียวกันหรือฟังก์ชันอื่นๆ ของ MDM ได้เลย มีชุดข้อมูลที่คุณตรวจสอบได้ ช่องโหว่ของข้อมูลที่คุณเติมได้ หรืองานที่สามารถทำงานอัตโนมัติด้วยการเรียกใช้ Structured Data ที่ฝังอยู่ในคำตอบของ Generative AI ไหม ดูคําแนะนําเชิงลึกเพิ่มเติมในเอกสารประกอบของ Vertex AI, ฟังก์ชันระยะไกลของ BigQuery, Cloud Functions, การฝัง และการค้นหาเวกเตอร์ repo ของ GitHub สำหรับโปรเจ็กต์นี้มีดังนี้ โปรดแจ้งให้เราทราบว่าคุณสร้างอะไรได้บ้างจากการเรียนรู้นี้