站內 LLM 深入分析:BigQuery &、Gemini 的結構化與非結構化資料分析

1. 簡介

大量資料集可提供寶貴的深入分析結果,但要擷取有意義的資訊並不容易。傳統數據分析工具能提供類似人類的細微說明,讓我們能真正掌握資料中的脈絡,因此往往無法發揮所長。資料倉儲系統儲存了越來越多的非結構化資料,但這些資料並非隨時都能存取,取得洞察資訊。非結構化的文字、圖片和影片蘊含寶貴資訊,有助於推動事業發展。大型語言模型提供說明、情緒分析、物件偵測等方面的全新資料理解方式。隨著多模態模型的興起 (可透過物件資料表在 BigQuery 中儲存圖片和影片等物件資料),整合了強大的 LLM,如 Gemini 1.0 Pro (用於文字分析) 和 Gemini 1.0 Pro Vision (用於文字與圖片/影片分析) 與 BigQuery 相結合,可以改變您分析資料的方式。

在本程式碼研究室中,我們將探討下列兩種從企業資料繪製 LLM 深入分析結果的方法,以及如何將這些深入分析結果擴大為 BigQuery 中的數千列資料:

方法 1:遠端模型叫用

  • 在 BigQuery 使用 ML.GENERATE_TEXT 查詢 SELECT 查詢,從 BigQuery 呼叫 Gemini 1.0 Pro。
  • 如果模型已可在 BigQuery 中做為遠端模型使用,且您想要立即使用,請使用這個方法。請參閱 BigQuery 說明文件,查看您要使用的模型狀態。

方法 2:遠端函式實作

建構項目

  • 針對遠端模型叫用方法,您將在 BigQuery 的 ML.GENERATE_TEXT 結構中叫用 Gemini 1.0 Pro 的遠端模型,為網際網路封存書籍資料集 (在 BigQuery 中公開提供) 建構位置摘要工具。

遠端模型叫用的流程圖

  • 如果是遠端函式實作方法,您將建構圖片驗證工具,以根據基準映像檔驗證測試映像檔。在這種情況下,您將在外部表格中建立包含測試圖片螢幕截圖的資料集,並要求 Gemini 1.0 Pro Vision 根據基準圖片驗證圖片。接著,您會建立 Java Cloud 函式來實作 Gemini Pro Vision 呼叫,並在 BigQuery 中將此函式叫用為遠端函式。

遠端函式實作的流程圖

注意:

BigQuery 中可能會有更多 Vertex AI 生成式 AI 模型可做為遠端模型使用。換句話說,您可以立即使用 BigQuery 的 ML.GENERATE_TEXT 建構項目存取這些模型。不過,即使在使用遠端模型的情況下,您隨時都能選擇使用 Cloud Functions 建構進階自訂項目,然後透過 BigQuery 以遠端函式的形式存取這些模型。

選用 BigQuery 的理由

BigQuery 是無伺服器的多雲端資料倉儲系統,能以最少的營運負擔,從位元組擴充到 PB 規模,因此非常適合儲存機器學習訓練資料。透過內建的 BigQuery 機器學習 (BQML) 和分析功能,您可以直接透過 SQL 查詢產生無程式碼的預測結果。此外,您還可以透過聯合查詢存取外部來源的資料,無須進行複雜的 ETL 管道。

BigQuery 是全代管雲端資料倉儲系統,可協助使用者分析結構化、半結構化和非結構化資料。

2. 需求條件

  • 瀏覽器,例如 ChromeFirefox
  • 已啟用計費功能的 Google Cloud 專案。

3. 事前準備

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案
  2. 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用帳單功能
  3. 您將使用 Cloud Shell,這是在 Google Cloud 中執行的指令列環境,已預先載入 bq。按一下 Google Cloud 控制台頂端的「啟用 Cloud Shell」。

「啟用 Cloud Shell」按鈕的圖片

  1. 連線至 Cloud Shell 後,請使用下列指令來檢查是否已通過驗證,以及專案是否已設為專案 ID:
gcloud auth list
  1. 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案。
gcloud config list project
  1. 如果尚未設定專案,請使用下列指令進行設定:
gcloud config set project <YOUR_PROJECT_ID>
  1. 前往 Google Cloud Marketplace 專用 Gemini 啟用 API。您也可以在 Cloud Shell 終端機中使用下列指令:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. 請確認您已啟用下列 API:
  • BigQuery
  • BigQuery 連線
  • Cloud 函式
  • Cloud Run
  • Vertex AI
  • Cloud Build
  • Cloud Storage API

使用 gcloud 指令的替代方法,是透過這個連結透過主控台。

如要查看 gcloud 指令和使用方式,請參閱說明文件

4. 建立 BigQuery 資料集和外部連線

我們先從建立資料集和 Cloud 資源連線開始。

BigQuery 中的資料集是應用程式所有資料表和物件的容器。

如要建立資料集,請執行下列步驟:

  1. 前往 Google Cloud 控制台的 BigQuery 頁面
  2. 在「Explorer」面板中,選取要建立資料集的專案。
  3. 展開「動作」選項 (垂直的刪節號圖示),然後按一下「建立資料集」

動作選單和「建立資料集」選項的圖片

  1. 按一下「Create dataset」(建立資料集)
  2. 在「Dataset ID」(資料集 ID) 欄位中輸入 gemini_bq_fn
  3. 將地點類型設為 Multi-region,並接受預設值,也就是 US(multiple regions in United States.
  4. 按一下「Create dataset」(建立資料集)
  5. 檢查是否已建立資料集,並列在「Explorer」窗格中的專案 ID 下方。

需要 BigQuery 連線,才能與 Cloud 函式互動。如要建立遠端函式,您必須建立 BigQuery 連線。在本程式碼研究室中,我們會使用 BigLake 連線,透過 Cloud 函式從 BigQuery 存取模型。BigLake 連線有助於連結外部資料來源,同時保留精細的 BigQuery 存取權控管和安全防護機制,本例中為 Vertex AI Gemini Pro API。

如要建立 BigLake 連線,請執行下列步驟:

  1. 在 BigQuery 頁面的「Explorer」窗格中,按一下「Add」

BigQuery 控制台,醒目顯示的項目是「ADD」按鈕以新增外部連線

  1. 按一下「與外部資料來源的連線」
  2. 在「連線類型」選單中,選取「Vertex AI 遠端模型、遠端函式和 BigLake (Cloud 資源)」
  3. 在「Connection ID」(連線 ID) 欄位中,輸入連線名稱做為 gemini-bq-conn
  4. 將地點類型設為 Multi-region,並接受預設值,也就是 US(multiple regions in United States.
  5. 按一下 [Create connection] (建立連線)
  6. 按一下「Go to connection」,然後複製「Connection info」窗格中的服務帳戶 ID。

連線資訊螢幕截圖

  1. 前往「IAM 與管理頁面,然後按一下「授予存取權」
  2. 將服務帳戶 ID 貼到「Newprincipal」(新增原則) 欄位中。
  3. 從角色清單中選取 Vertex AI user 角色,然後按一下「Save」(儲存)

授予服務帳戶存取權的螢幕截圖

現在,您已成功建立資料集和 BigQuery 連線。接下來,您將完成遠端模型叫用所需的步驟。

5. 用途 1 遠端模型叫用:設定遠端模型叫用

在建立資料集和連線後,接下來就使用 Vertex AI Gemini Pro 基礎模型,在 BigQuery 中建立模型。完成這項練習之後,您就能開始只使用 SQL 查詢執行 LLM 應用程式。

步驟 1:建立 內含遠端模型輸入資料的 BigQuery 資料表

在資料集中建立名為 books 的資料表,該資料表可存放 bigquery-public-data.gdelt_internetarchivebooks.1905 Internet Archive Books BigQuery 公開使用的資料集中的 50 筆記錄。

方法是在 BigQuery SQL 編輯器窗格執行以下 DDL (資料定義語言) 陳述式:

create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)

步驟 2:建立 BigQuery 模型

在資料集中建立模型。方法是在 BigQuery SQL 編輯器窗格中執行下列 DDL:

CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');

您會發現模型建立完成後,可選擇查看模型。

步驟 3:測試新的生成式 AI 應用程式

SELECT 查詢中使用 ML.GENERATE_TEXT 函式,將要求傳送至遠端模型。

SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
 (select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
 TRUE AS flatten_json_output));

畫面上應會顯示下列結果:

BigQuery 中的 ML.GENERATE_TEXT 查詢結果

恭喜!您已順利示範如何透過 ML.GENERATE_TEXT 函式,使用遠端模型 (以 gemini-pro 模型為基礎) 分析 BigQuery 資料表中的文字資料。

現在,讓我們使用 BigQuery 遠端函式嘗試其他 Vertex AI 模型。假設您想加入更多自訂彈性和彈性,以便在 BigQuery 中遠端使用該模型。支援的模型列於 BigQuery 說明文件

6. 使用案例 2 遠端函式實作:設定遠端函式實作

在這個練習中,您將根據實作 Gemini 1.0 Pro Vision 基礎模型的 Java Cloud 函式,在 BigQuery 中建立函式。首先,您將建立及部署 Java Cloud 函式,使用 Gemini 1.0 Pro Vision 模型比較圖片,然後在 BigQuery 中建立遠端函式,叫用已部署的 Cloud 函式。請記住,在 BigQuery 中執行任何遠端函式時,也可以採用相同的程序。

那就開始吧!

步驟 1:建立 Java Cloud 函式

您將使用 Java 建構 Gen 2 Cloud 函式,以便根據基準映像檔驗證測試映像檔。基準圖片會儲存在內含測試圖片螢幕截圖的資料集,且該資料集位於 BigQuery 的外部資料表中。您將使用 Gemini Pro Vision 模型 (Java SDK) 驗證圖片。然後將 Java Cloud 函式部署至 REST 端點。

請按照下列步驟操作:

  1. 啟動 Cloud Shell 編輯器
  2. 如果您使用舊版編輯器,請按一下「試用新版編輯器」
  3. 在狀態列中,按一下「Cloud Code - Sign In」
  4. 如果系統提示您授權 Cloud Shell 編輯器執行 Google Cloud API 呼叫,請點選「授權」。按照提示登入 Google 帳戶。您已連結到 Google Cloud。
  5. 如果 Cloud Code 狀態列中未顯示您的專案,請依序點選「Cloud Code -登入」>「選取 Google Cloud 專案」。選擇要在其中建立 Cloud Functions 的 Google Cloud 專案。系統會載入專案,並在 Cloud Shell 編輯器中成為使用中的專案。
  6. 在 Cloud Code 狀態列中,按一下使用中的專案名稱。在隨即顯示的快速挑選選單中,選取「New Application」(新增應用程式)
  7. 在「Create New Application」(建立新的應用程式) 對話方塊中,選取「Cloud Functions application」(Cloud Functions 應用程式)

「Create New Application」彈出式頁面 1

  1. 在系統提示選取範本時,選取「Java:Hello World」

「Create New Application」彈出式頁面 2

  1. 在專案路徑中輸入 Gemini-BQ-Function 做為專案名稱。專案結構會顯示在新的 Cloud Shell 編輯器檢視畫面中。

全新 Java Cloud 函式應用程式專案結構

  1. <dependencies>... </dependencies> 標記中加入必要的依附元件,或是複製 pom.xml 檔案範例中的依附元件。
  2. 將類別的名稱從 HelloWorld.java 變更為更有意義的名稱。例如 GeminiBigQueryFunction.java。視需要重新命名套件。
  3. 將檔案中的 GeminiBigQueryFunction.Java 檔案中的預留位置程式碼替換成 GitHub 存放區提供的程式碼範例。務必將程式碼範例中的 <YOUR_PROJECT_ID> 變數改成您的專案 ID。
  4. 前往 Cloud Shell 終端機。確認您位於專案目錄中。如果沒有,請執行下列指令前往專案目錄:
cd Gemini-BQ-Function
  1. 執行下列陳述式,建構及部署 Cloud 函式:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .

將指令的進入點替換為函式的進入點。輸出內容為下列格式的 REST 網址:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
  1. 在終端機執行下列指令,以測試這個 Cloud 函式:
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'

隨機提示範例的回應:

Cloud 函式中的 JSON 回應字串

太棒了!適用於 Gemini Pro Vision 模型的一般 Cloud 函式已可導入。讓我們直接在 BigQuery 遠端函式中,對 BigQuery 資料使用這個端點。

步驟 2:建立 BigQuery 物件資料表和遠端函式

事前準備

在這部分的練習中,您會需要一個 Cloud Storage 值區。請按照下列步驟建立 Cloud Storage 值區:

  1. 如要建立值區,請前往 Cloud Storage 控制台,然後按一下「建立」
  2. 輸入 demo-bq-gemini-public-image 做為值區名稱,然後按一下「Create」(建立)
  3. 取消勾選 Enforce public access prevention on this bucket 選項。雖然您在本練習中是建立這個值區的公開存取權,但我們還是建議您禁止公開存取權,並按照企業用途的需求,為特定服務帳戶提供權限。
  4. 建立值區後,請前往「權限」分頁查看及變更權限。
  5. 如要新增主體,請按一下「授予存取權」。指定服務帳戶 ID 即可將權限授予特定帳戶,或是指定 allUsers 來授予值區的公開存取權。
  6. 選取 Storage Object Viewer 角色,然後按一下「Save」(儲存)。如果出現提示,請選擇允許公開存取。
  7. 請前往「物件」分頁,上傳要比較的基準圖片,並測試圖片。在本程式碼研究室中,您可以上傳下列可公開取得的物件:baseline.JPGTEST1.JPGTEST2.JPG

建立 BigQuery 物件資料表

透過 BigQuery 建立外部物件資料表,使用連線和您先前建立的資料集存取值區中的非結構化資料。方法是在 BigQuery 查詢編輯器窗格,執行以下 DDL (資料定義語言) 陳述式:

CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);

請檢查資料集中是否已建立新的物件資料表 image_validation

建立 BigQuery 遠端函式

在 BigQuery 中建立遠端函式,叫用實作 Gemini Pro Vision 模型的 Java Cloud 函式。在同一個資料集中建立這個目錄。方法是在 BigQuery 控制台的 SQL 編輯器窗格中執行下列 DDL:

CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
 REMOTE WITH CONNECTION `us.gemini-bq-conn`
 OPTIONS (
   endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
   max_batching_rows = 1
 );

端點網址是本練習稍早傳回的 REST 網址。這項操作會在 BigQuery 中建立遠端函式。上述 DDL 中有三個參數。前兩個參數是儲存在上一個步驟物件表格中的圖片網址。最後一個參數是傳送給模型的提示 (Gemini Pro Vision)。您可以參考 Java Cloud Functions 程式碼,用來剖析這個簽章:

Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();

從 BigQuery 叫用 Gemini

SELECT 查詢中使用遠端函式,以測試根據提示驗證圖片的函式。

select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image.  Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';  

請嘗試使用 TEST1TEST2 物件檔案執行上述查詢。您會看到類似下方的結果:

BigQuery 遠端函式結果螢幕截圖

以下是供您參考的圖片:

基準映像檔

測試案例的基準參考圖片

測試圖片

測試案例的測試圖片 1

請注意,兩張圖片相似,兩者皆可在 Duet AI Cloud 控制台中檢視,但兩者的文字與模型以 JSON 格式呈現的不同。

如此一來,您已成功測試遠端函式的實作。

7. 優點和用途

我們來看看整合 BigQuery 和 Gemini 的優勢,瞭解他們如何運用 BigQuery 進行結構化和非結構化資料。

  • 將生成式 AI 導入資料:不必再費心移動資料、複製資料,並降低複雜性。您可以在相同的 BigQuery 環境中分析資料並產生深入分析。
  • 強化數據分析功能:Gemini 的自然語言說明能進一步解讀資料,您可以使用 SQL 查詢達成這個目標。
  • 擴充性:這項解決方案能輕鬆處理大型資料集和複雜的分析作業,而且只需少量程式碼就能完成。

需要達成這項目標的應用程式有很多種。請將金融 (市場趨勢分析)、零售 (客戶感受)、醫療照護 (醫療報告摘要) 等多種情境納入考量,讓數據分析與業務團隊不必耗費太多心力、資源,以及慣用的語言和選擇工具,即可導入這些資訊。

8. 清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本文中所用資源的費用,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「管理資源」頁面。
  2. 在專案清單中選取要刪除的專案,然後按一下「Delete」(刪除)
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。
  4. 如要保留專案,請略過上述步驟並刪除 Cloud 函式,方法是前往 Cloud Functions,從函式清單中勾選要刪除的函式,然後按一下「Delete」(刪除)

9. 恭喜

恭喜!將 Gemini 模型與 BigQuery 整合後,您不再需要單純分析資料,就能運用資料述說故事。您可以在資料集內生成隱藏的論述,進而改變理解洞察的方式。開始實驗!請將這項技術套用至您自己的資料集,並探索資料中的故事。如果 BigQuery 支援物件資料表 ( 外部資料表) 中的非結構化資料,請嘗試使用 Gemini Pro Vision 生成有關圖片資料的深入分析資訊。如需更詳盡的指引,請參閱 Vertex AIBigQuery 遠端函式Cloud Functions 的說明文件。以下是這項專案的 GitHub 存放區。另外,也歡迎與我們分享您根據這些學習成果建構的內容!