チューニングと評価を使用してモデルのパフォーマンスを改善する
このドキュメントでは、Vertex AI の gemini-2.0-flash-001
モデルを参照する BigQuery ML リモートモデルを作成する方法について説明します。次に、教師ありチューニングを使用して新しいトレーニング データでモデルを調整してから、ML.EVALUATE
関数でモデルを評価します。
チューニングにより、ホストされた Vertex AI モデルをカスタマイズする必要があるシナリオ(モデルの想定される動作をプロンプトで簡潔に定義できない場合や、プロンプトで想定される結果が一貫して得られない場合など)に対処できます。教師ありチューニングは、モデルにも次のような影響を与えます。
- モデルが特定のレスポンスの種類(簡潔なレスポンスや詳細なレスポンスなど)を返すようにガイドします。
- モデルに新しい動作を教えます(特定のペルソナとしてプロンプトに応答するなど)。
- モデルが新しい情報で更新されるようにします。
このチュートリアルでは、モデルが、提供されたグラウンド トゥルース コンテンツにできるだけ近いスタイルとコンテンツのテキストを生成することを目標としています。
必要なロール
このチュートリアルを実行するには、次の Identity and Access Management(IAM)ロールが必要です。
- BigQuery データセット、接続、モデルを作成して使用する: BigQuery 管理者(
roles/bigquery.admin
)。 - 接続のサービス アカウントに権限を付与する: Project IAM 管理者(
roles/resourcemanager.projectIamAdmin
)。
これらの事前定義ロールには、このドキュメントのタスクを実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
- データセットを作成する:
bigquery.datasets.create
- テーブルを作成する:
bigquery.tables.create
- 接続を作成、委任、使用する:
bigquery.connections.*
- デフォルトの接続を設定する:
bigquery.config.*
- サービス アカウントの権限を設定する:
resourcemanager.projects.getIamPolicy
とresourcemanager.projects.setIamPolicy
- モデルを作成して推論を実行する:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
始める前に
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, Vertex AI, and Compute Engine APIs.
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
- BigQuery: You incur costs for the queries that you run in BigQuery.
- BigQuery ML: You incur costs for the model that you create and the processing that you perform in BigQuery ML.
- Vertex AI: You incur costs for calls to and
supervised tuning of the
gemini-1.0-flash-002
model.
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
詳しくは、次のリソースをご覧ください。
データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
コンソール
Google Cloud コンソールで、[BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
[アクションを表示] > [データセットを作成] をクリックします。
[データセットを作成] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US(米国の複数のリージョン)] を選択します。
残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
bq
新しいデータセットを作成するには、--location
フラグを指定した bq mk
コマンドを使用します。使用可能なパラメータの一覧については、bq mk --dataset
コマンドのリファレンスをご覧ください。
データの場所が
US
に設定され、BigQuery ML tutorial dataset
という説明の付いた、bqml_tutorial
という名前のデータセットを作成します。bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
このコマンドでは、
--dataset
フラグの代わりに-d
ショートカットを使用しています。-d
と--dataset
を省略した場合、このコマンドはデフォルトでデータセットを作成します。データセットが作成されたことを確認します。
bq ls
API
定義済みのデータセット リソースを使用して datasets.insert
メソッドを呼び出します。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
テストテーブルを作成する
Hugging Face の一般公開 task955_wiki_auto_style_transfer データセットに基づいて、トレーニング データと評価データのテーブルを作成します。
Cloud Shell を開きます。
Cloud Shell で次のコマンドを実行して、テストデータと評価データのテーブルを作成します。
python3 -m pip install pandas pyarrow fsspec huggingface_hub python3 -c "import pandas as pd; df_train = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/train-00000-of-00001.parquet').drop('id', axis=1); df_train['output'] = [x[0] for x in df_train['output']]; df_train.to_json('wiki_auto_style_transfer_train.jsonl', orient='records', lines=True);" python3 -c "import pandas as pd; df_valid = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/valid-00000-of-00001.parquet').drop('id', axis=1); df_valid['output'] = [x[0] for x in df_valid['output']]; df_valid.to_json('wiki_auto_style_transfer_valid.jsonl', orient='records', lines=True);" bq rm -t bqml_tutorial.wiki_auto_style_transfer_train bq rm -t bqml_tutorial.wiki_auto_style_transfer_valid bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_train wiki_auto_style_transfer_train.jsonl input:STRING,output:STRING bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_valid wiki_auto_style_transfer_valid.jsonl input:STRING,output:STRING
ベースライン モデルを作成する
Vertex AI gemini-1.0-flash-002
モデルでリモートモデルを作成します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを実行して、リモートモデルを作成します。
CREATE OR REPLACE MODEL `bqml_tutorial.gemini_baseline` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT ='gemini-2.0-flash-001');
クエリが完了するまでに数秒かかります。完了後、
gemini_baseline
モデルが [エクスプローラ] ペインのbqml_tutorial
データセットに表示されます。このクエリではCREATE MODEL
ステートメントを使用してモデルを作成するため、クエリの結果はありません。
ベースライン モデルのパフォーマンスを確認する
リモートモデルで ML.GENERATE_TEXT
関数を実行し、チューニングなしでの評価データに対するパフォーマンスを確認します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで、次のステートメントを実行します。
SELECT ml_generate_text_llm_result, ground_truth FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_baseline`, ( SELECT input AS prompt, output AS ground_truth FROM `bqml_tutorial.wiki_auto_style_transfer_valid` LIMIT 10 ), STRUCT(TRUE AS flatten_json_output));
出力データを調べて
ml_generate_text_llm_result
とground_truth
の値を比較すると、ベースライン モデルはグラウンド トゥルース コンテンツに提供された事実を正確に反映したテキストを生成していますが、テキストのスタイルは大幅に異なります。
ベースライン モデルを評価する
モデルのパフォーマンスをより詳細に評価するには、ML.EVALUATE
関数を使用します。この関数は、生成されたテキストの精度と品質を測定するモデル指標を計算し、モデルのレスポンスと理想的なレスポンスを比較します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで、次のステートメントを実行します。
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini_baseline`, ( SELECT input AS input_text, output AS output_text FROM `bqml_tutorial.wiki_auto_style_transfer_valid` ), STRUCT('text_generation' AS task_type));
出力は次のようになります。
+---------------------+---------------------+-------------------------------------------+--------------------------------------------+ | bleu4_score | rouge-l_precision | rouge-l_recall | rouge-l_f1_score | evaluation_status | +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+ | 0.23317359667074181 | 0.37809145226740043 | 0.45902937167791508 | 0.40956844061733139 | { | | | | | | "num_successful_rows": 176, | | | | | | "num_total_rows": 176 | | | | | | } | +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
評価指標に基づくと、ベースライン モデルのパフォーマンスは悪くありませんが、生成されたテキストとグラウンド トゥルースの類似性は低いことがわかります。これは、教師ありチューニングを行って、このユースケースのモデル パフォーマンスを改善できるかどうかを確認する価値があることを示しています。
チューニング済みモデルの作成
モデルを作成するで作成したものと非常によく似たリモートモデルを作成します。ただし、今回は AS SELECT
句を指定して、モデルをチューニングするためのトレーニング データを提供します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを実行して、リモートモデルを作成します。
CREATE OR REPLACE MODEL `bqml_tutorial.gemini_tuned` REMOTE WITH CONNECTION DEFAULT OPTIONS ( endpoint = 'gemini-2.0-flash-001', max_iterations = 500, data_split_method = 'no_split') AS SELECT input AS prompt, output AS label FROM `bqml_tutorial.wiki_auto_style_transfer_train`;
クエリが完了するまでに数分かかることがあります。完了すると、
gemini_tuned
モデルが [エクスプローラ] ペインのbqml_tutorial
データセットに表示されます。このクエリではCREATE MODEL
ステートメントを使用してモデルを作成するため、クエリの結果はありません。
チューニング済みモデルのパフォーマンスを確認する
ML.GENERATE_TEXT
関数を実行して、評価データに対するチューニング済みモデルのパフォーマンスを確認します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで、次のステートメントを実行します。
SELECT ml_generate_text_llm_result, ground_truth FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_tuned`, ( SELECT input AS prompt, output AS ground_truth FROM `bqml_tutorial.wiki_auto_style_transfer_valid` LIMIT 10 ), STRUCT(TRUE AS flatten_json_output));
出力データを調べると、チューニング済みモデルは、グラウンド トゥルース コンテンツのスタイルに非常に近いテキストを生成していることがわかります。
チューニング済みモデルを評価する
ML.EVALUATE
関数を使用して、チューニング済みモデルのレスポンスと理想的なレスポンスを比較します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで、次のステートメントを実行します。
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini_tuned`, ( SELECT input AS prompt, output AS label FROM `bqml_tutorial.wiki_auto_style_transfer_valid` ), STRUCT('text_generation' AS task_type));
出力は次のようになります。
+---------------------+---------------------+-------------------------------------------+--------------------------------------------+ | bleu4_score | rouge-l_precision | rouge-l_recall | rouge-l_f1_score | evaluation_status | +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+ | 0.416868792119966 | 0.642001000843349 | 0.55910008048151372 | 0.5907226262084847 | { | | | | | | "num_successful_rows": 176, | | | | | | "num_total_rows": 176 | | | | | | } | +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
トレーニング データセットで使用された例は 1,408 個のみですが、評価指標が高いことから、パフォーマンスが大幅に向上していることがわかります。
クリーンアップ
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.