BigQuery の Object テーブルと Gemini-pro-vision リモートモデルを使って pdf を要約してみる
概要
pdf などの非構造化データを GCS に配置した際に BQ で分析するってどうすんねんというところをやってみる
流れとしては以下を実施する
- pdf などを gcs に配置する
- BigQuery Connection の作成する
- 必要な権限付与を行う
- BQ で Object テーブルを作成する
- BQ でリモートモデルを作成する
- Object テーブルを使って pdf の要約をする
必要なこと
手順
pdf などを GCS に配置する
ここは何も考えないで GCS に pdf を配置する
例えば、今回は前職の決算説明資料をおいてみる。他意はないのであしからず。
BigQuery Connection の作成する
以下の感じで実行でok
$ bq mk --connection --location=asia-northeast1 --project_id=project_id --connection_type=CLOUD_RESOURCE sample_object_table_connection
Setting project_id project_id as the default.
BigQuery configuration complete! Type "bq" to get started.
Connection project_id.asia-northeast1.sample_object_table_connection successfully created
- connection_type の値は固定
- Google Cloud の console では作成できず bq command でしか作成できないっぽい(2024/03/30現在)
必要な権限付与を行う
さっき作成した connection の Service Account を特定する
$ bq show --connection project_id.asia-northeast1.sample_object_table_connection
name friendlyName description Last modified type hasCredential properties
------------------------------------------------------------- -------------- ------------- ----------------- ---------------- --------------- -----------------------------------------------------------------------------------------------
project_id.asia-northeast1.sample_object_table_connection 30 Mar 22:36:33 CLOUD_RESOURCE False {"serviceAccountId": "bqcxproject_id-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
ということで serviceAccountId
がわかったので、こいつに権限を与える
まず vertex ai を使えるようにする
gcloud projects add-iam-policy-binding project_id \
--member="serviceAccount:bqcxproject_id-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
次に gcs を参照できるようにする
gcloud projects add-iam-policy-binding project_id \
--member="serviceAccount:bqcxproject_id-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
BQ で Object テーブルを作成する
とりあえず vertexai という dataset を作成しているものとする
CREATE OR REPLACE EXTERNAL TABLE project_id.vertexai.sample_object_table
WITH CONNECTION `asia-northeast1.sample_object_table_connection`
OPTIONS(
object_metadata = 'SIMPLE',
uris = ['gs://hogehoge/vertexai/*'],
max_staleness = INTERVAL 7 DAY,
metadata_cache_mode = 'MANUAL');
-
object_metadata は SIMPLE で固定
-
metadata_cache は自動更新したいかどうかで決める
-
connection の region と datastore の region と gcs の region は合わせておく必要がある
- 以下のエラーが出たら gcs のリージョンがずれてそう
Cannot read and write in different locations: source: US, destination: asia-northeast1
以下のようなテーブルが出来上がる
リモートモデルの作成
CREATE MODEL project_id.vertexai.gemini_provision_model
REMOTE WITH CONNECTION `asia-northeast1.sample_object_table_connection`
OPTIONS(ENDPOINT = 'gemini-pro-vision');
- connection の名前は object テーブルを作ったときのと同じものを使う
- endpoint を
gemini-pro-vision
にする
以下のような感じでモデルが見えるようになる
Object テーブルとリモートモデルを使って pdf の要約をする
さっき作った gemini_provision_model を使って要約をする
SELECT *
FROM ML.GENERATE_TEXT(
MODEL project_id.vertexai.gemini_provision_model,
Table project_id.vertexai.sample_object_table,
STRUCT(
'内容を要約してください. \n 出力は日本語で、そして、 list にして出力してください' as prompt,
0.9 AS temperature,
1024 AS max_output_tokens,
0.9 AS top_p,
15 AS top_k
)
);
普通にやったらerrorが出た
Unsupported endpoint: Read Object's size exceeds max allowed value..
- gemini は16の画像しか受け付けないようである
- pdf の 1ページを画像として認識しているようである
仕方ないので pdf を16ページになるように調整したところ問題なく出力できた
ml_generate_text_result | ml_generate_text_status | uri | generation | content_type | size | md5_hash | updated | metadata |
---|---|---|---|---|---|---|---|---|
{"candidates":[{"content":{"parts":[{"text":" フリュー株式会社の2024年3月期第1四半期の決算概要は以下の通りです。\n\n- 売上高は前年同期比122.5%の99億7,400万円\n- 営業利益は前年同期比193.4%の13億1,500万円\n- 経常利益は前年同期比197.6%の12億6,200万円\n- 親会社株主に帰属する当期純利益は前年同期比201.8%の8億4,000万円\n\nセグメント別に見ると、\n\n- 世界観ビジネスの売上高は前年同期比150.4%の55億7,200万円\n- 営業利益は前年同期比316.7%の7億2,600万円\n- ガールズトレンドビジネスの売上高は前年同期比107.5%の36億1,700万円\n- 営業利益は前年同期比114.5%の10億7,200万円\n- フリューニュービジネスの売上高は前年同期比73.3%の7億8,500万円\n- 営業利益は前年同期比▲100.0%の▲2億3,900万円\n\n通期業績予想に対する進捗率は、売上高、営業利益、経常利益、親会社株主に帰属する当期純利益ともに順調に進捗しています。\n\nKPI(プレイ数、値上げ機種プレイ数構成比、有料会員数)も想定路線で推移しています。\n\n当期のプレイ回数とピクトリンク有料会員数の見通しは、直近の実績を元に、プレイ回数、会員数を算定したところ、順調に回復しています。"}],"role":"model"},"finish_reason":1,"safety_ratings":[{"category":1,"probability":1,"probability_score":0.14903529,"severity":1,"severity_score":0.17681369},{"category":2,"probability":1,"probability_score":0.082253955,"severity":1,"severity_score":0.14718707},{"category":3,"probability":1,"probability_score":0.1991522,"severity":1,"severity_score":0.16653982},{"category":4,"probability":1,"probability_score":0.15115306,"severity":1,"severity_score":0.16844618}]}],"usage_metadata":{"candidates_token_count":409,"prompt_token_count":4148,"total_token_count":4557}} | gs://hogehoge/vertexai/01.pdf | 1711810637303487 | application/pdf | 658275 | a49d838b928cef74969886ff75cc6879 | 2024-03-30 14:57:17.305000 UTC | { "metadata": []} | |
{"candidates":[{"content":{"parts":[{"text":" フリュー株式会社の2024年3月期第2四半期決算短信です。\n\n-連結売上高は前年同期比112.8%増の111億円で、過去最高を更新しました。\n-連結営業利益は前年同期比123.0%増の11億円で、こちらも過去最高を更新しました。\n-セグメント別に見ると、世界観ビジネスが好調で、売上高は前年同期比143.1%増の42億8600万円、営業利益は前年同期比398.1%増の8億3700万円となりました。\n-ガールズトレンドビジネスは、売上高が前年同期比99.8%の39億6000万円、営業利益が前年同期比108.7%の12億4200万円でした。\n-フリューニュービジネスは、売上高が前年同期比63.9%の15億8800万円、営業利益が前年同期比▲1億円の▲7100万円でした。\n-通期業績予想は、売上高を390億円から420億円に、営業利益を25億円から33億円に上方修正しました。"}],"role":"model"},"finish_reason":1,"safety_ratings":[{"category":1,"probability":1,"probability_score":0.14414884,"severity":1,"severity_score":0.16762704},{"category":2,"probability":1,"probability_score":0.075448431,"severity":1,"severity_score":0.14033625},{"category":3,"probability":1,"probability_score":0.1884733,"severity":1,"severity_score":0.15469497},{"category":4,"probability":1,"probability_score":0.14829372,"severity":1,"severity_score":0.18053968}]}],"usage_metadata":{"candidates_token_count":288,"prompt_token_count":3374,"total_token_count":3662}} | gs://hogehoge/vertexai/02.pdf | 1711810637293911 | application/pdf | 731706 | e0de1fb38c99bc1957e838403e53cbc1 | 2024-03-30 14:57:17.295000 UTC | { "metadata": []} | |
{"candidates":[{"content":{"parts":[{"text":" - 2024年3月期は増収増益を予想\n- 世界観ビジネスの好調と、固定費改善により、利益を上方修正\n- ガールズトレンドビジネスは、シール紙値上げ比率向上も、その他コンテンツサービスの縮小により売上利益共に横ばい\n- フリューニュービジネスは、家庭用ゲームソフト、アニメが好調により増収し赤字圧縮\n- ピクトリンクの有料会員数は横ばい、プレイ回数は減少傾向"}],"role":"model"},"finish_reason":1,"safety_ratings":[{"category":1,"probability":1,"probability_score":0.15443976,"severity":1,"severity_score":0.17823958},{"category":2,"probability":1,"probability_score":0.069921836,"severity":1,"severity_score":0.14854057},{"category":3,"probability":1,"probability_score":0.19728975,"severity":1,"severity_score":0.16776334},{"category":4,"probability":1,"probability_score":0.15027806,"severity":1,"severity_score":0.19345193}]}],"usage_metadata":{"candidates_token_count":106,"prompt_token_count":3890,"total_token_count":3996}} | gs://hogehoge/vertexai/03.pdf | 1711810637289339 | application/pdf | 725825 | 69ccd677c1c2edb9fd37c9fa550b5d73 | 2024-03-30 14:57:17.291000 UTC | { "metadata": []} |
まとめ
BigQuery の Object テーブルを使えば ML 処理に投げることができるのが見えたと思う。
その中でも Gemini のマルチモーダルを利用した処理というのは prompt を考えたりすると、かなり面白い分析や処理ができるのではないかと考える。
Gemini-pro-vision が16枚しか見れないのも Gemini 1.5 Pro(限定公開プレビュー) が最大画像数: 300となっているので、そこが使えれば行けるはず、乞うご期待。
最後に、以前自分で pipeline を作ってやっていた部分を BigQuery のインタフェースから実施できるのは面白いと思った。
例えば、 ML.UNDERSTAND_TEXT の分類処理を使ってメタデータを自動的に作っていくというのも面白いと思われる。そして、長期バッチ処理には向かないのでユースケースは限られるかもしれないが、データを Cloud Run などに連結することができるため、ロジックが複雑な変換処理であれば BigQuery のリモート関数を考慮にいれてもよいかもしれない
料金
- object table の料金
- テーブルに対するクエリの実行。
-
メタデータ キャッシュの更新
- メタデータの書き込み量
- テーブル作成時にoptionで更新間隔を指定できる
- Vertex AI の料金
- 利用料分
参考
- GCS への Query のための object table の作成
- BigQueryの object table における料金
- bqのリモートモデルについて
- 作成
- 非構造化データへの推論
- table に入っているデータから embeding の作成(とそれを使ったk meansの分類
- Vertex AI エンドポイントをリモートモデルとして利用する
- text分類
- BigQuery Connectionについて
- gemini api model
Discussion