การจัดการข้อมูลหลักอย่างง่าย: จับคู่และ ผสานการทำงานกับ 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 และ Vector Search ใน 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 เพื่อระบุระเบียนที่ซ้ำกัน

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

โฟลว์ระดับสูงของ Use Case

3. ข้อกำหนด

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

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

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าการเรียกเก็บเงินในโปรเจ็กต์เปิดอยู่หรือไม่
  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, 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 ที่ไฮไลต์ปุ่ม &quot;เพิ่ม&quot; เพื่อเพิ่มการเชื่อมต่อภายนอก

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

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

  1. ไปที่ IAM และ ผู้ดูแลระบบ แล้วคลิกให้สิทธิ์เข้าถึง
  2. วางรหัสบัญชีบริการในช่อง New principles
  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) จาก mdm_gemini.CITIBIKE_STATIONS ขีดจำกัด 1;

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

7. ลองใช้วิธีแก้ปัญหาเบื้องต้น

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

  1. ดาวน์โหลดไฟล์ CITIBIKE_STATIONS.csv จากที่เก็บลงในโฟลเดอร์โปรเจ็กต์ Cloud Shell แล้วไปยังโฟลเดอร์ดังกล่าว
  2. ส่งออกข้อมูลจาก CSV ไปยังชุดข้อมูล BigQuery ใหม่ mdm_gemini โดยใช้คำสั่งต่อไปนี้ใน Cloud Shell Terminal
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 ต่อไปนี้ใน BigQuery SQL Editor

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 ต่อไปนี้ใน BigQuery SQL Editor เพื่อสร้างแหล่งข้อมูลตำแหน่งแหล่งที่ 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-embeddings API ช่วยให้คุณสร้างข้อความที่ฝังโดยใช้ Generative AI ใน Vertex AI การฝังข้อความคือการแสดงตัวเลขของข้อความที่สอดคล้องกับความสัมพันธ์ระหว่างคำและวลี อ่านเพิ่มเติมเกี่ยวกับการฝังข้อความ Vertex AI ได้ที่นี่

  1. เรียกใช้ DDL ด้านล่างเพื่อสร้างโมเดลระยะไกลสำหรับ Vertex AI TextEmbeds 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 เวกเตอร์ ประเภทระยะทางที่รองรับคือยุคลิดและโคไซน์ ค่าเริ่มต้นคือยุคลิด

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

ชุดผลลัพธ์

อย่างที่เห็น รายการนี้แสดงรายชื่อเพื่อนบ้าน 2 แห่งที่ใกล้ที่สุด (หรือที่ซ้ำที่ใกล้เคียงที่สุด) สำหรับ 2 แถวใน CITIBIKE_STATIONS_SOURCE2 จาก CITIBIKE_STATIONS_SOURCE1 เนื่องจากไม่ได้ระบุ distance_type จึงถือว่านี่คือยุคลิด และระบบจะอ่านระยะทางเป็นระยะทางในที่อยู่ค่า 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

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

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

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

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

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

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

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

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