مدیریت داده اصلی ساده شده: مطابقت و تقویت ادغام با هوش مصنوعی Generative!

۱. مرور کلی

مدیریت داده‌های اصلی چیست؟

مدیریت داده‌های اصلی (MDM) در مورد ایجاد یک منبع واحد و قابل اعتماد از اطلاعات برای حیاتی‌ترین داده‌های سازمان شماست. کتابخانه‌ای با سازماندهی دقیق را تصور کنید که در آن هر کتاب (نقطه داده) به درستی برچسب‌گذاری شده، به‌روز و به راحتی قابل یافتن است.

داده‌های اصلی، هسته و نهادهای تجاری بنیادی را نشان می‌دهند که برای عملیات یک شرکت ضروری هستند. در اینجا عناصر کلیدی داده‌های اصلی آمده است:

  • نهادهای تجاری: نهادهایی مانند مشتریان، محصولات، تأمین‌کنندگان، مکان‌ها و کارمندان که اسم‌هایی هستند که کسب‌وکار شما حول آنها می‌چرخد.
  • شناسه‌ها: شناسه‌های منحصر به فردی که تضمین می‌کنند هر موجودیت در سیستم‌ها متمایز و قابل ردیابی است.
  • ویژگی‌ها : ویژگی‌هایی که هر موجودیت را توصیف می‌کنند، برای مثال، آدرس مشتری، قیمت محصول و غیره.

برای کمک به درک بهتر داده‌های اصلی، بیایید آن را با داده‌های تراکنشی مقایسه کنیم. داده‌های تراکنشی رویدادهای منفرد (خرید، حمل و نقل و غیره) را ثبت می‌کنند. در حالی که داده‌های اصلی با تعریف موجودیت‌های درگیر، زمینه را برای آن رویدادها فراهم می‌کنند. به عنوان مثال، یک تراکنش فروش به داده‌های اصلی مشتری، محصول و فروشنده پیوند می‌خورد.

اگرچه پیاده‌سازی مدیریت داده‌های اصلی (MDM) قوی برای تصمیم‌گیری استراتژیک ضروری است، اما می‌تواند پیچیده و نیازمند منابع زیادی باشد. اینجاست که قدرت دگرگون‌کننده‌ی هوش مصنوعی مولد، به‌ویژه مدل‌هایی مانند Gemini 1.0 Pro، Gemini 1.0 Pro Vision، Gemini 1.5 Pro، وارد عمل می‌شود.

۲. هدف

در این آزمایشگاه کد، شما نشان خواهید داد که چگونه Gemini 1.0 Pro برنامه‌های مدیریت داده‌های اصلی مانند غنی‌سازی و حذف داده‌های تکراری را برای داده‌های citibike_stations موجود در مجموعه داده عمومی BigQuery ساده می‌کند.

آنچه استفاده خواهید کرد

  1. مجموعه داده عمومی BigQuery bigquery-public-data.new_york_citibike .
  2. فراخوانی تابع Gemini (یک تابع ابری جاوا که اطلاعات آدرس را با استفاده از API معکوس Geocoding برای مختصات موجود در داده‌های citibike_stations دریافت می‌کند).
  3. API تعبیه هوش مصنوعی Vertex و جستجوی برداری در BigQuery برای شناسایی موارد تکراری.

آنچه خواهید ساخت

  1. شما یک مجموعه داده BigQuery برای مورد استفاده ایجاد خواهید کرد. در این مجموعه داده، یک جدول فرود با داده‌های جدول مجموعه داده عمومی bigquery-public-data.new_york_citibike.citibike_stations ایجاد خواهید کرد.
  2. شما تابع ابری را که شامل تابع Gemini برای استانداردسازی آدرس است، مستقر خواهید کرد.
  3. شما داده‌های آدرس غنی‌شده را در جداول فرود (از دو منبعی که برای این نمایش ارائه شده‌اند) ذخیره خواهید کرد.
  4. شما API مربوط به Vertex AI Embeddings را از BigQuery روی داده‌های آدرس فراخوانی خواهید کرد.
  5. شما از BigQuery Vector Search برای شناسایی رکوردهای تکراری استفاده خواهید کرد.

نمودار زیر جریان داده‌ها و مراحل پیاده‌سازی را نشان می‌دهد.

جریان سطح بالای مورد استفاده

۳. الزامات

  • یک مرورگر، مانند کروم یا فایرفاکس
  • یک پروژه گوگل کلود با قابلیت پرداخت.

۴. قبل از شروع

  1. در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید.
  2. مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .
  3. شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا می‌شود و bq از قبل روی آن بارگذاری شده است، استفاده خواهید کرد. روی Activate 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. برای فعال کردن API به Gemini for Google Cloud Marketplace بروید. همچنین می‌توانید از دستور زیر در ترمینال Cloud Shell استفاده کنید:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. مطمئن شوید که APIهای BigQuery، BigQuery Connection، Cloud Function، Cloud Run، Vertex AI و Cloud Build فعال هستند. جایگزین دستور gcloud از طریق کنسول و با استفاده از این لینک است.

برای دستورات و نحوه‌ی استفاده از gcloud به مستندات مراجعه کنید.

۵. ایجاد یک مجموعه داده BigQuery و اتصال خارجی

بیایید با ایجاد یک مجموعه داده و یک اتصال به منابع ابری شروع کنیم.

یک مجموعه داده در BigQuery، ظرفی برای تمام جداول و اشیاء برنامه شما است.

برای ایجاد یک مجموعه داده ، موارد زیر را انجام دهید:

  1. به صفحه BigQuery در کنسول Google Cloud بروید.
  2. در پنل Explorer ، پروژه‌ای را که می‌خواهید مجموعه داده را در آن ایجاد کنید، انتخاب کنید.
  3. گزینه Actions (آیکون عمودی سه نقطه) را باز کنید و روی Create dataset کلیک کنید.

تصویر منوی اقدامات و گزینه ایجاد مجموعه داده

  1. در قسمت شناسه مجموعه داده، mdm_gemini را وارد کنید.
  2. نوع موقعیت مکانی خود را روی Multi-region تنظیم کنید و مقدار پیش‌فرض که US(multiple regions in United States.
  3. روی ایجاد مجموعه داده کلیک کنید.
  4. بررسی کنید که مجموعه داده ایجاد شده و در قسمت شناسه پروژه شما در پنجره اکسپلورر فهرست شده باشد.

برای تعامل با تابع ابری شما، به یک اتصال BigQuery نیاز است. برای ایجاد یک تابع از راه دور، باید یک اتصال BigQuery ایجاد کنید. در این آزمایشگاه کد، ما از اتصال BigLake برای دسترسی به مدل از BigQuery از طریق تابع ابری استفاده خواهیم کرد. اتصالات BigLake به اتصال منبع داده خارجی کمک می‌کنند و در عین حال کنترل دسترسی و امنیت دقیق BigQuery را حفظ می‌کنند، که در مورد ما Vertex AI Gemini Pro API است.

برای ایجاد اتصال BigLake ، موارد زیر را انجام دهید:

  1. در پنل اکسپلورر صفحه BigQuery، روی افزودن کلیک کنید.

کنسول BigQuery با دکمه ADD برجسته شده برای افزودن اتصال خارجی

  1. روی اتصال به منابع داده خارجی کلیک کنید.
  2. در لیست نوع اتصال، مدل‌های از راه دور Vertex AI، توابع از راه دور و BigLake (منبع ابری) را انتخاب کنید.
  3. در فیلد شناسه اتصال ، نام اتصال خود را به صورت gemini-bq-conn وارد کنید.
  4. نوع موقعیت مکانی خود را روی Multi-region تنظیم کنید و مقدار پیش‌فرض که US(multiple regions in United States.
  5. روی ایجاد اتصال کلیک کنید.
  6. روی «برو به اتصال» کلیک کنید و سپس شناسه حساب سرویس را در قسمت اطلاعات اتصال کپی کنید.

تصویر اطلاعات اتصال

  1. به صفحه IAM & Admin بروید و روی اعطای دسترسی کلیک کنید.
  2. شناسه حساب سرویس را در فیلد اصول جدید جایگذاری کنید.
  3. نقش Vertex AI user را از لیست نقش‌ها انتخاب کنید و سپس روی ذخیره کلیک کنید.

تصویر صفحه دسترسی به حساب سرویس

اکنون با موفقیت مجموعه داده و اتصال BigQuery را ایجاد کرده‌اید.

۶. فراخوانی تابع Gemini (تابع ابری جاوا) را مستقر کنید

برای استقرار تابع ابری جاوا که شامل فراخوانی تابع Gemini است، این مراحل را دنبال کنید.

  1. با استفاده از دستور زیر، مخزن گیت‌هاب را از ترمینال Cloud Shell خود کلون کنید:
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
  1. مقادیر YOUR_API_KEY و YOUR_PROJECT_ID را با مقادیر دلخواه خود جایگزین کنید.

اگر وبلاگ اینجا را بخوانید، می‌دانید که پیاده‌سازی‌های فراخوانی تابع از 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» بگویید. در حالت ایده‌آل، طبق توصیه، برای برنامه‌های سازمانی خود احراز هویت تنظیم خواهید کرد. اما از آنجایی که این یک برنامه آزمایشی است، ما احراز هویت نشده را ادامه خواهیم داد.

خروجی یک REST URL با فرمت زیر است:

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

  1. با اجرای دستور زیر از ترمینال، این عملکرد ابری را آزمایش کنید:
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}}```"]}'

پارامترهای درخواست و پاسخ این تابع ابری به گونه‌ای پیاده‌سازی شده‌اند که با فراخوانی تابع از راه دور BigQuery سازگار باشند. این تابع می‌تواند مستقیماً از داده‌های BigQuery درجا استفاده شود. این بدان معناست که اگر ورودی داده‌های شما (داده‌های طولی و عرضی) در BigQuery وجود داشته باشد، می‌توانید تابع از راه دور را روی داده‌ها فراخوانی کرده و پاسخ تابع را دریافت کنید که می‌تواند مستقیماً در BigQuery ذخیره یا پردازش شود.

  1. DDL زیر را از BigQuery اجرا کنید تا یک تابع از راه دور ایجاد کنید که این تابع ابری مستقر شده را فراخوانی کند:
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
 );

کوئری را برای استفاده از تابع ریموت جدید ایجاد شده تست کنید:

انتخاب mdm_gemini.MDM_GEMINI (با طول عمر بالا) از mdm_gemini.CITIBIKE_STATIONS با محدودیت ۱؛

اگر کوئری آزمایشی که از تابع راه دور جدید ایجاد شده در BigQuery استفاده می‌کند، به دلیل مشکل مجوزهای توابع ابری (Cloud Functions) با شکست مواجه شد، از کنسول ابری گوگل به توابع ابری (Cloud Functions) بروید و تابع ابری مستقر شده با نام " gemini-fn-calling" را پیدا کنید. به برگه مجوزها بروید، مدیر اصلی را به عنوان "allUsers" اضافه کنید و نقش "فراخوان توابع ابری" (Cloud Functions Invoker) را اعطا کنید تا مطمئن شوید توابع ابری برای همه کاربران قابل دسترسی است (فقط به این دلیل که این یک برنامه آزمایشی است).

۷. یک راه حل جایگزین را امتحان کنید

اگر به هر دلیلی API_KEY لازم برای رویکرد فراخوانی تابع Reverse Geocoding را ندارید، یا تابع ابری (Cloud Function) را مستقر نکرده‌اید، می‌توانید به عنوان جایگزین موارد زیر را انجام دهید:

  1. فایل CITIBIKE_STATIONS.csv را از مخزن دانلود کرده و در پوشه پروژه Cloud Shell خود قرار دهید و به داخل آن پوشه بروید.
  2. با استفاده از دستور زیر در ترمینال Cloud Shell، داده‌ها را از فایل csv به مجموعه داده جدید BigQuery خود mdm_gemini منتقل کنید:
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

۸. ایجاد جدول و غنی‌سازی داده‌های آدرس

مرحله ۱: ایجاد جدول

Imp: اگر از راه حل جایگزین استفاده کرده‌اید، از این مرحله صرف نظر کنید، زیرا باید قبلاً جدول را ایجاد کرده باشید.

اگر از راه حل جایگزین استفاده نکرده‌اید، DDL زیر را در ویرایشگر BigQuery SQL اجرا کنید:

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

حالا بیایید داده‌های آدرس را با فراخوانی تابع remote روی مختصات عرض و طول جغرافیایی موجود در جدول غنی‌سازی کنیم. شرایط زیر را برای داده‌ها تنظیم کنید:

  • گزارش شده در سال ۲۰۲۴
  • تعداد دوچرخه‌های موجود > 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;

مرحله ۲: ایجاد منبع دوم برای داده‌های مکان ایستگاه دوچرخه

حتی اگر از روش جایگزین برای ایجاد جدول استفاده کرده‌اید، این مرحله را نادیده نگیرید.

در این مرحله، شما یک منبع دوم برای داده‌های مکان ایستگاه دوچرخه برای اهداف این آزمایشگاه کد ایجاد خواهید کرد. این کار برای نشان دادن این است که MDM داده‌ها را از منابع مختلف گرد هم می‌آورد و حقیقت طلایی را شناسایی می‌کند.

DDL های زیر را در ویرایشگر SQL BigQuery برای ایجاد منبع دوم داده‌های مکانی با دو رکورد در آن اجرا کنید. بیایید این جدول را mdm_gemini.CITIBIKE_STATIONS_SOURCE2 نامگذاری کنیم و دو رکورد در آن وارد کنیم.

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

۹. ایجاد جاسازی برای داده‌های آدرس

جاسازی‌ها، بردارهای عددی با ابعاد بالا هستند که یک موجودیت مشخص، مانند یک متن یا یک فایل صوتی، را نشان می‌دهند. مدل‌های یادگیری ماشین (ML) از جاسازی‌ها برای رمزگذاری معانی مربوط به چنین موجودیت‌هایی استفاده می‌کنند تا استدلال و مقایسه آنها آسان‌تر شود. به عنوان مثال، یک عملیات رایج در مدل‌های خوشه‌بندی، طبقه‌بندی و توصیه، اندازه‌گیری فاصله بین بردارها در یک فضای جاسازی برای یافتن مواردی است که از نظر معنایی بیشترین شباهت را دارند. API جاسازی‌های متن Vertex AI به شما امکان می‌دهد با استفاده از Generative AI روی Vertex AI، یک جاسازی متن ایجاد کنید. جاسازی‌های متن، نمایش‌های عددی متن هستند که روابط بین کلمات و عبارات را ثبت می‌کنند. اطلاعات بیشتر در مورد جاسازی‌های متن Vertex AI را اینجا بخوانید.

  1. برای ایجاد یک مدل از راه دور برای API تعبیه متن Vertex AI، DDL زیر را اجرا کنید:
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;

این باید جاسازی‌هایی برای منبع دوم ایجاد کند. توجه داشته باشید که فیلد جاسازی‌ها را در همان جدول CITIBIKE_STATIONS_SOURCE2 ایجاد کرده‌ایم.

  1. برای تجسم جاسازی‌های ایجاد شده برای جداول داده‌های منبع ۱ و ۲، کوئری زیر را اجرا کنید:
select name,address,embeddings_src from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2`;
select name,content,ml_generate_embedding_result from `mdm_gemini.CITIBIKE_STATIONS_SOURCE1`;

حالا بیایید یک جستجوی برداری برای شناسایی موارد تکراری انجام دهیم.

۱۰. اجرای جستجوی برداری برای علامت‌گذاری آدرس‌های تکراری

در این مرحله، ستون ml_generate_embedding_result مربوط به address embeddings از جدول mdm_gemini.CITIBIKE_STATIONS_SOURCE1 را برای یافتن دو embedding برتر که با هر سطر از داده‌ها در ستون 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: تعداد نزدیکترین همسایه‌ها برای برگرداندن را مشخص می‌کند. مقدار پیش‌فرض ۱۰ است. مقدار منفی به عنوان بی‌نهایت در نظر گرفته می‌شود، به این معنی که همه مقادیر به عنوان همسایه شمرده شده و برگردانده می‌شوند.

distance_type: نوع معیار مورد استفاده برای محاسبه فاصله بین دو بردار را مشخص می‌کند. انواع فاصله پشتیبانی شده عبارتند از اقلیدسی و کسینوسی . مقدار پیش‌فرض اقلیدسی است.

نتیجه پرس و جو به شرح زیر است:

مجموعه نتایج

همانطور که می‌بینید، این تابع دو همسایه نزدیک (به عبارت دیگر، نزدیکترین تکرارها) را برای دو ردیف در CITIBIKE_STATIONS_SOURCE2 از CITIBIKE_STATIONS_SOURCE1 فهرست کرده است. از آنجایی که distance_type مشخص نشده است، فرض می‌شود که اقلیدسی است و فاصله به عنوان فاصله در مقادیر address TEXT بین دو منبع خوانده می‌شود، که کمترین آن شبیه‌ترین متون آدرس است.

بیایید با استفاده از کوئری زیر، 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;

نتیجه پرس و جو به شرح زیر است:

مجموعه نتایج ۲

هر دو پرس‌وجو (از هر دو نوع فاصله) بر اساس فاصله نزولی مرتب شده‌اند، به این معنی که می‌خواهیم نتایج را به ترتیب کاهش فاصله فهرست کنیم. اما متوجه خواهید شد که ترتیب فاصله پرس‌وجوی دوم معکوس است. می‌توانید حدس بزنید چرا؟

بله!! درست متوجه شدید! در تشابه کسینوسی، عدد بزرگتر به معنای شباهت بیشتر و فاصله کمتر است. در فاصله اقلیدسی، عدد بزرگتر به معنای فاصله بیشتر بین مقادیر است.

برای اطلاعات بیشتر در مورد درک MDM و نکاتی برای درک تفاوت و کاربردهای اقلیدسی و کسینوسی، وبلاگ را بخوانید.

۱۱. تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این پست، این مراحل را دنبال کنید:

  1. در کنسول گوگل کلود، به صفحه مدیریت منابع بروید.
  2. در لیست پروژه‌ها، پروژه‌ای را که می‌خواهید حذف کنید انتخاب کنید و سپس روی «حذف» کلیک کنید.
  3. در کادر محاوره‌ای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن کلیک کنید.
  4. اگر می‌خواهید پروژه خود را حفظ کنید، مراحل بالا را رد کنید و با رفتن به Cloud Functions و از لیست توابع، تابع Cloud را که می‌خواهید حذف کنید، حذف کنید و روی Delete کلیک کنید.

۱۲. تبریک

تبریک! شما قدرت استفاده از Gemini 1.0 Pro و Function Calling را در تبدیل چند فعالیت MDM به قابلیت‌های هوش مصنوعی مولد ساده اما قدرتمند، قطعی و قابل اعتماد نشان داده‌اید. اکنون که می‌دانید، می‌توانید روش‌های دیگری برای پیاده‌سازی همان مورد استفاده یا سایر قابلیت‌های MDM را شناسایی کنید. آیا مجموعه داده‌هایی وجود دارد که بتوانید اعتبارسنجی کنید، شکاف‌های اطلاعاتی وجود دارد که بتوانید پر کنید، یا وظایفی که می‌توانند با فراخوانی‌های ساختاریافته تعبیه شده در پاسخ‌های هوش مصنوعی مولد شما خودکار شوند؟ برای راهنمایی‌های عمیق‌تر به مستندات Vertex AI ، BigQuery Remote Functions ، Cloud Functions ، Embeddings و Vector Search مراجعه کنید. در اینجا مخزن گیت‌هاب برای این پروژه آمده است. به ما اطلاع دهید که با این یادگیری چه چیزی می‌سازید!