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

1. ภาพรวม

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

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

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

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

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

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

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

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

สิ่งที่คุณจะใช้

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

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

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

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

ขั้นตอนการดำเนินการระดับสูงของกรณีการใช้งาน

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 ใน Codelab นี้ เราจะใช้การเชื่อมต่อ 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 Function ที่มีการเรียกใช้ฟังก์ชันของ Gemini ใช้งานได้

  1. โคลนที่เก็บ 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 Function นี้โดยเรียกใช้คำสั่งต่อไปนี้จากเทอร์มินัล
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 Embeddings 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 )
  )
);

คุณยังจัดเก็บฟิลด์ผลลัพธ์ของ Embedding ในตาราง 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 Functions แล้วเลือกฟังก์ชันที่ต้องการลบจากรายการฟังก์ชัน จากนั้นคลิกลบ

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

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