ML.GENERATE_TEXT 関数
このドキュメントでは、BigQuery テーブルに保存されているテキストに対して自然言語生成タスクを実行できる ML.GENERATE_TEXT
関数について説明します。言語タスクの例としては、次のものがあります。
- 分類
- 感情分析
- エンティティの抽出
- 抽出型の質問応答
- 要約
- 異なるスタイルでのテキストの書き換え
- 広告コピーの生成
- コンセプトのアイディエーション
この関数は、Vertex AI text-bison*
自然言語基盤モデルの 1 つを表す BigQuery ML リモートモデルにリクエストを送信します。LLM から出力された後、LLM のレスポンスを返します。関数の複数の引数は、LLM のレスポンスを形成するパラメータを提供します。
prompt
パラメータには、モデルが分析するテキストを指定します。プロンプトの設計は、モデルが返すレスポンスに強く影響する可能性があります。詳細については、テキスト プロンプトを設計するをご覧ください。
構文
ML.GENERATE_TEXT( MODEL `project_id.dataset.model`, { TABLE `project_id.dataset.table` | (query_statement) }, STRUCT( [number_of_output_tokens AS max_output_tokens] [, top_k_value AS top_k] [, top_p_value AS top_p] [, temperature AS temperature] [, flatten_json_output AS flatten_json_output]) )
引数
ML.GENERATE_TEXT
は次の引数を取ります。
project_id
: プロジェクト ID。dataset
: モデルを含む BigQuery データセット。model
:text-bison*
Vertex AI LLM のいずれかを使用するリモートモデルの名前。このタイプのリモートモデルの作成方法については、ENDPOINT
をご覧ください。table
: プロンプト データを含む BigQuery テーブルの名前。prompt
という名前の列のテキストがモデルに送信されます。テーブルにprompt
列がない場合は、この引数にSELECT
ステートメントを使用して、既存のテーブル列のエイリアスを指定します。使用可能なprompt
列がない場合は、エラーが発生します。query_statement
: プロンプト データの生成に使用される GoogleSQL クエリ。max_output_tokens
: モデルが出力するトークンの最大数を設定する[1,1024]
の範囲内のINT64
値。レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。デフォルトは50
です。トークンは 1 単語より小さく、4 文字程度です。100 トークンは約 60~80 語に対応します。
temperature
:[0.0,1.0]
の範囲内のFLOAT64
値で、レスポンス生成中のサンプリングに使用されます。これは、top_k
とtop_p
が適用された場合に発生します。トークン選択のランダム性の度合いを制御します。temperature
の値が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、temperature
の値が高いほど、より多様で創造的な結果を導くことができます。temperature
値の0
は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。デフォルトは1.0
です。top_k
:[1,40]
の範囲内のINT64
値です。これにより、モデルが出力用にトークンを選択する方法を変更します。ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。デフォルトは40
です。top_k
値が1
の場合は、モデルの語彙内のすべてのトークンの中で、次に選択されるトークンが最も可能性が高いことを意味します。top_k
値が3
の場合は、temperature
値を使用して最も可能性が高い 3 つのトークンの中から次のトークンが選択されます。トークン選択ステップごとに、確率が最も高い
top_k
トークンがサンプリングされます。次に、top_p
値に基づいてトークンがさらにフィルタされ、温度サンプリングを使用して最終的なトークンが選択されます。top_p
:[0.0,1.0]
の範囲内のFLOAT64
値です。これにより、モデルが出力用にトークンを選択する方法を変更します。ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。デフォルトは1.0
です。トークンは、確率の合計が
top_p
値と等しくなるまで、(top_k
値に基づいて)最も確率の高いものから選択されます。たとえば、トークン A、B、C の確率が0.3
、0.2
、0.1
で、top_p
値が0.5
の場合、モデルはtemperature
値を使用して A または B を次のトークンとして選択し、C を候補から外します。flatten_json_output
: 関数から返された JSON コンテンツを別の列に解析するかどうかを決定するBOOL
値です。デフォルトはFALSE
です。
出力
ML.GENERATE_TEXT
は、入力テーブルと次の列を返します。
ml_generate_text_result
: モデルへのprojects.locations.endpoints.predict
呼び出しからの JSON レスポンス。生成されたテキストはcontent
要素に格納されます。安全性属性はsafetyAttributes
要素に格納されます。この列は、flatten_json_output
がFALSE
の場合に返されます。ml_generate_text_llm_result
: モデルへのprojects.locations.endpoints.predict
呼び出しによって返される生成テキストを含むSTRING
値。この列は、flatten_json_output
がTRUE
の場合に返されます。ml_generate_text_rai_result
: モデルへのprojects.locations.endpoints.predict
呼び出しによって返される安全性属性を含むSTRING
値。この列は、flatten_json_output
がTRUE
の場合に返されます。ml_generate_text_status
: 対応する行の API レスポンス ステータスを含むSTRING
値。オペレーションが成功した場合、この値は空になります。
ロケーション
ML.GENERATE_TEXT
は、関数が参照するリモートモデルと同じリージョンで実行する必要があります。リモートモデルは、次のロケーションの text-bison*
モデルに基づいてのみ作成できます。
asia-northeast3
asia-southeast1
eu
europe-west1
europe-west2
europe-west3
europe-west4
europe-west9
us
us-central1
us-west4
割り当て
Cloud AI サービスのテーブル値関数の割り当てと上限をご覧ください。
例
例 1
この例は、次の特性を持つリクエストを示しています。
- 単一のプロンプトを提供します。
- 候補の中でより長い生成テキストをレスポンスとして返します。
- 候補の中でより確率の低い生成テキストをレスポンスとして返します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, (SELECT 'What is the purpose of dreams?' AS prompt), STRUCT( 0.8 AS temperature, 1024 AS max_output_tokens, 0.95 AS top_p, 40 AS top_k));
例 2
この例は、次の特性を持つリクエストを示しています。
prompt
という名前のテーブル列からプロンプト データを提供します。- 候補の中でより短い生成テキストをレスポンスとして返します。
- 候補の中でより確率の高い生成テキストをレスポンスとして返します。
- JSON レスポンスを個別の列にフラット化します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model` TABLE `mydataset.prompt_table`, STRUCT( 0.2 AS temperature, 75 AS max_output_tokens, 0.3 AS top_p, 15 AS top_k, TRUE AS flatten_json_output));
例 3
この例は、次の特性を持つリクエストを示しています。
prompt
というエイリアスを持つquestion
という名前のテーブル列からプロンプト データを提供します。- 候補の中でやや長い生成テキストをレスポンスとして返します。
- 候補の中で中程度の確率の生成テキストをレスポンスとして返します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, (SELECT question AS prompt FROM `mydataset.prompt_table`), STRUCT( 0.4 AS temperature, 750 AS max_output_tokens, 0.5 AS top_p, 30 AS top_k));
例 4
この例は、次の特性を持つリクエストを示しています。
- 文字列とテーブルの列を連結して、プロンプト データを提供します。
- 候補の中でより長い生成テキストをレスポンスとして返します。
- 候補の中でより確率の高い生成テキストをレスポンスとして返します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, ( SELECT CONCAT( 'Classify the sentiment of the following text as positive or negative.Text:', input_column, 'Sentiment:') AS prompt FROM `mydataset.input_table` ), STRUCT( 0.1 AS temperature, 1000 AS max_output_tokens, 0.1 AS top_p, 10 AS top_k));
次のステップ
- 一般公開データセットを使用したテキストの生成に関するチュートリアルを試す。
- 独自のデータを使用してテキストを生成する手順を確認する。
- BigQuery データの分析に使用できる他の関数について学習する。