dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

BigQuery で生成AIによるテキスト生成

2024-06-30 19:18:28 | BigQuery
BigQuery で ML.GENERATE_TEXT() を使用してテキストを生成する方法のメモ。

大まかな手順は以下の通り。
  • 言語モデル用の外部接続を追加
  • 外部接続用のサービスアカウントにロールを設定
  • 言語モデルの作成
  • 生成AIでテキストを生成


1. 言語モデル用の外部接続を追加
  • GCP コンソールで「BigQuery」をクリック
  • BigQuery の「エクスプローラ」のメニューで「+追加」をクリック
  • 「外部データソースへの接続」をクリック
  • 以下を設定
    • 接続タイプ: Vertex AI リモートモデル ...
    • 接続ID: 任意のID(ここでは ai_remote_model)
    • ロケーションタイプ: リージョン
    • リージョン: 任意のリージョン(ここではus-central1)
  • 「接続を作成」ボタンをクリック


2. 外部接続用のサービスアカウントにロールを設定
  • BigQuery の当該のプロジェクトに表示される「外部接続」欄に上記で作成した接続ID(us-central1.ai_remote_model)をクリックして接続情報を表示し、サービスアカウントIDをコピー。
  • GCP コンソールで「IAMと管理」をクリック
  • IAM メニューの「アクセス権を付与」をクリック
  • 新しいプリンシパルに上記でコピーしたサービスアカウントIDをペースト
  • 「ロールを選択」で「Vertex AI ユーザー」を選択
  • 「保存」ボタンをクリック

3. 言語モデルの作成
  • BigQuery の当該のプロジェクトのメニューをクリックし、「データセットを作成」をクリック
  • 以下を設定
    • データセットID: 任意(ここでは test_dataset)
    • ロケーションタイプ: リージョン
    • リージョン: 任意(ここでは us-central1)
  • 「データセットを作成」をクリック
  • 以下のクエリを実行して言語モデルを作成
    create or replace model
      {データセット}.{モデル名} # ここでは test_dataset.generative_model
    remote with connection
      {外部接続ID} # ここでは `us-central1.ai_remote_model`
    options (
      endpoint = 'gemini-pro'
    );


4. 生成AIでテキストを生成
以下の SQL でテキストからベクトルを生成することができる。
gemini-1.5-pro は "prompt" カラムを処理対象とするため、select ... as prompt としている。
select
  *
from
  ml.generate_text(
    model test_dataset.generative_model,
    (select 'あなたは誰ですか' as prompt),
    struct(true as flatten_json_output)
  )
;
実行結果
[{
  "ml_generate_text_llm_result": "私はGoogleによって作られた、大規模言語モデルのジェミニです。私は、日本語、英語、フランス語、スペイン語、ドイツ語、中国語、韓国語、ポルトガル語、ロシア語、イタリア語、アラビア語、ヒンディー語、トルコ語、ベトナム語、インドネシア語、マレー語、タイ語、フィリピン語、オランダ語、ポーランド語、ウクライナ語、ルーマニア語、チェコ語、ハンガリー語、スウェーデン語、デンマーク語、ノルウェー語、フィンランド語、ギリシャ語、ブル",
  "ml_generate_text_rai_result": "[{\"category\":1,\"probability\":1,\"probability_score\":0.051558189,\"severity\":1,\"severity_score\":0.1046602},{\"category\":2,\"probability\":1,\"probability_score\":0.014559518,\"severity\":1,\"severity_score\":0.026355354},{\"category\":3,\"probability\":1,\"probability_score\":0.14829372,\"severity\":1,\"severity_score\":0.15215819},{\"category\":4,\"probability\":1,\"probability_score\":0.080646612,\"severity\":1,\"severity_score\":0.040769264}]",
  "ml_generate_text_status": "",
  "prompt": "あなたは誰ですか"
}]
以下のようにテーブルに格納されたテキストからテキストを生成することもできる。
テーブル定義
create table test_dataset.text_tbl (
  id     string,
  body   string
);

insert into test_dataset.text_tbl (id, body) values ('01', '晴れています。');
insert into test_dataset.text_tbl (id, body) values ('02', '曇りです。');
insert into test_dataset.text_tbl (id, body) values ('03', '雨が降っています。');
SQL
select
  t.id as id
  , t.body as title
  , (
    select
      ml_generate_text_llm_result
    from
      ml.generate_text(
        model test_dataset.generative_model,
        (select t.body as prompt),
        struct(true as flatten_json_output)
      )
    ) as s
from
  test_dataset.text_tbl as t
order by
  t.id asc
;
実行結果
[{
  "id": "01",
  "title": "晴れています。",
  "s": "今日はとても良い天気ですね! 気持ちの良い青空が広がっています。 \n\nお出かけ日和なので、ぜひ外に出て楽しんでください。 \n\n何か予定はありますか?"
}, {
  "id": "02",
  "title": "曇りです。",
  "s": "はい、曇りですね。空はどんよりとしていて、雨が降りそうな雰囲気です。傘を持ってお出かけすることをおすすめします。"
}, {
  "id": "03",
  "title": "雨が降っています。",
  "s": "はい、雨が降っていますね。傘をお持ちですか?"
}]
この記事についてブログを書く
« BigQuery でテキストのベクト... | トップ | BigQuery の ml.generate_tex... »

BigQuery」カテゴリの最新記事