Membuat teks dengan menggunakan model Gemini dan fungsi ML.GENERATE_TEXT

Tutorial ini menunjukkan cara membuat model jarak jauh yang didasarkan pada model gemini-2.0-flash, lalu cara menggunakan model tersebut dengan fungsi ML.GENERATE_TEXT untuk mengekstrak kata kunci dari dan melakukan analisis sentimen pada ulasan film dari tabel publik bigquery-public-data.imdb.reviews.

Peran yang diperlukan

Untuk menjalankan tutorial ini, Anda memerlukan peran Identity and Access Management (IAM) berikut:

  • Membuat dan menggunakan set data, koneksi, dan model BigQuery: Admin BigQuery (roles/bigquery.admin).
  • Memberikan izin ke akun layanan koneksi: Project IAM Admin (roles/resourcemanager.projectIamAdmin).

Peran yang telah ditetapkan ini berisi izin yang diperlukan untuk melakukan tugas dalam dokumen ini. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

  • Buat set data: bigquery.datasets.create
  • Membuat, mendelegasikan, dan menggunakan koneksi: bigquery.connections.*
  • Menetapkan koneksi default: bigquery.config.*
  • Tetapkan izin akun layanan: resourcemanager.projects.getIamPolicy dan resourcemanager.projects.setIamPolicy
  • Buat model dan jalankan inferensi:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

  • BigQuery ML: You incur costs for the data that you process in BigQuery.
  • Vertex AI: You incur costs for calls to the Vertex AI service that's represented by the remote model.

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Untuk mengetahui informasi selengkapnya tentang harga BigQuery, lihat harga BigQuery dalam dokumentasi BigQuery.

Untuk mengetahui informasi selengkapnya tentang harga Vertex AI, lihat halaman harga Vertex AI.

Sebelum memulai

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Enable the APIs

Membuat set data

Buat set data BigQuery untuk menyimpan model ML Anda.

Konsol

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka halaman BigQuery

  2. Di panel Explorer, klik nama project Anda.

  3. Klik View actions > Create dataset.

    Opsi menu Create dataset.

  4. Di halaman Create dataset, lakukan hal berikut:

    • Untuk Dataset ID, masukkan bqml_tutorial.

    • Untuk Location type, pilih Multi-region, lalu pilih US (multiple regions in United States).

    • Jangan ubah setelan default yang tersisa, lalu klik Create dataset.

bq

Untuk membuat set data baru, gunakan perintah bq mk dengan flag --location. Untuk daftar lengkap kemungkinan parameter, lihat referensi perintah bq mk --dataset.

  1. Buat set data bernama bqml_tutorial dengan lokasi data yang ditetapkan ke US dan deskripsi BigQuery ML tutorial dataset:

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    Perintah ini menggunakan pintasan -d, bukan flag --dataset. Jika Anda menghapus -d dan --dataset, perintah defaultnya adalah membuat set data.

  2. Pastikan set data telah dibuat:

    bq ls

API

Panggil metode datasets.insert dengan resource set data yang ditentukan.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

DataFrame BigQuery

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan BigQuery DataFrames di Panduan memulai BigQuery menggunakan BigQuery DataFrames. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi BigQuery DataFrames.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

Membuat model jarak jauh

Buat model jarak jauh yang merepresentasikan model Vertex AI yang dihosting:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut:

CREATE OR REPLACE MODEL `bqml_tutorial.gemini_model`
  REMOTE WITH CONNECTION DEFAULT
  OPTIONS (ENDPOINT = 'gemini-2.0-flash');

Kueri memerlukan waktu beberapa detik untuk diselesaikan, setelah itu model gemini_model akan muncul di set data bqml_tutorial di panel Explorer. Karena kueri menggunakan pernyataan CREATE MODEL untuk membuat model, tidak akan ada hasil kueri.

Melakukan ekstraksi kata kunci

Lakukan ekstraksi kata kunci pada ulasan film IMDB dengan menggunakan model jarak jauh dan fungsi ML.GENERATE_TEXT:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut untuk melakukan ekstraksi kata kunci pada lima ulasan film:

    SELECT
      ml_generate_text_result['candidates'][0]['content'] AS generated_text,
      * EXCEPT (ml_generate_text_result)
    FROM
      ML.GENERATE_TEXT(
        MODEL `bqml_tutorial.gemini_model`,
        (
          SELECT
            CONCAT('Extract the key words from the text below: ', review) AS prompt,
            *
          FROM
            `bigquery-public-data.imdb.reviews`
          LIMIT 5
        ),
        STRUCT(
          0.2 AS temperature,
          100 AS max_output_tokens));

    Outputnya mirip dengan berikut ini, dengan kolom yang tidak dibuat dihilangkan agar lebih jelas:

    +----------------------------------------+-------------------------+----------------------------+-----+
    | generated_text                         | ml_generate_text_status | prompt                     | ... |
    +----------------------------------------+-------------------------+----------------------------+-----+
    | {"parts":[{"text":"## Key words:\n\n*  |                         | Extract the key words from |     |
    | **Negative sentiment:** \"terribly     |                         | the text below: I had to   |     |
    | bad acting\", \"dumb story\", \"not    |                         | see this on the British    |     |
    | even a kid would enjoy this\",         |                         | Airways plane. It was      |     |
    | \"something to switch off\"\n*         |                         | terribly bad acting and    |     |
    | **Context:** \"British Airways plane\" |                         | a dumb story. Not even     |     |
    | \n* **Genre:** \"movie\" (implied)...  |                         | a kid would enjoy this...  |     |
    +----------------------------------------+-------------------------+----------------------------+-----+
    | {"parts":[{"text":"## Key words:\n\n*  |                         | Extract the key words from |     |
    | **Movie:** The Real Howard Spitz\n*    |                         | the text below: This is    |     |
    | **Genre:** Family movie\n*             |                         | a family movie that was    |     |
    | **Broadcast:** ITV station, 1.00 am\n* |                         | broadcast on my local      |     |
    | **Director:** Vadim Jean\n*            |                         | ITV station at 1.00 am a   |     |
    | **Main character:** Howard Spitz,      |                         | couple of nights ago.      |     |
    | a children's author who hates...       |                         | This might be a strange... |     |
    +----------------------------------------+-------------------------+----------------------------+-----+
    

    Hasilnya mencakup kolom berikut:

    • generated_text: teks yang dihasilkan.
    • ml_generate_text_status: status respons API untuk baris yang sesuai. Jika operasi berhasil, nilai ini akan kosong.
    • prompt: prompt yang digunakan untuk analisis sentimen.
    • Semua kolom dari tabel bigquery-public-data.imdb.reviews.
  3. Opsional: Daripada mengurai JSON yang ditampilkan oleh fungsi secara manual, seperti yang Anda lakukan di langkah sebelumnya, gunakan argumen flatten_json_output untuk menampilkan teks yang dihasilkan dan atribut keamanan dalam kolom terpisah.

    Di editor kueri, jalankan pernyataan berikut:

    SELECT
      *
    FROM
      ML.GENERATE_TEXT(
        MODEL `bqml_tutorial.gemini_model`,
        (
          SELECT
            CONCAT('Extract the key words from the text below: ', review) AS prompt,
            *
          FROM
            `bigquery-public-data.imdb.reviews`
          LIMIT 5
        ),
        STRUCT(
          0.2 AS temperature,
          100 AS max_output_tokens,
          TRUE AS flatten_json_output));

    Outputnya mirip dengan berikut ini, dengan kolom yang tidak dibuat dihilangkan agar lebih jelas:

    +----------------------------------------+----------------------------------------------+-------------------------+----------------------------+-----+
    | ml_generate_text_llm_result            | ml_generate_text_rai_result                  | ml_generate_text_status | prompt                     | ... |
    +----------------------------------------+----------------------------------------------+-------------------------+----------------------------+-----+
    | ## Keywords:                           |                                              |                         | Extract the key words from |     |
    |                                        |                                              |                         | the text below: I had to   |     |
    | * **Negative sentiment:**              |                                              |                         | see this on the British    |     |
    | "terribly bad acting", "dumb           |                                              |                         | Airways plane. It was      |     |
    | story", "not even a kid would          |                                              |                         | terribly bad acting and    |     |
    | enjoy this", "switch off"              |                                              |                         | a dumb story. Not even     |     |
    | * **Context:** "British                |                                              |                         | a kid would enjoy this...  |     |
    +----------------------------------------+----------------------------------------------+-------------------------+----------------------------+-----+
    | ## Key words:                          |                                              |                         | Extract the key words from |     |
    |                                        |                                              |                         | the text below: This is    |     |
    | * **Movie:** The Real Howard Spitz     |                                              |                         | a family movie that was    |     |
    | * **Genre:** Family movie              |                                              |                         | broadcast on my local      |     |
    | * **Broadcast:** ITV, 1.00             |                                              |                         | ITV station at 1.00 am a   |     |
    | am                                     |                                              |                         | couple of nights ago.      |     |
    | - ...                                  |                                              |                         | This might be a strange... |     |
    +----------------------------------------+----------------------------------------------+-------------------------+----------------------------+-----+
    

    Hasilnya mencakup kolom berikut:

    • ml_generate_text_llm_result: teks yang dihasilkan.
    • ml_generate_text_rai_result: atribut keamanan, beserta informasi tentang apakah konten diblokir karena salah satu kategori pemblokiran. Untuk mengetahui informasi selengkapnya tentang atribut keamanan, lihat Mengonfigurasi filter keamanan.
    • ml_generate_text_status: status respons API untuk baris yang sesuai. Jika operasi berhasil, nilai ini akan kosong.
    • prompt: perintah yang digunakan untuk ekstraksi kata kunci.
    • Semua kolom dari tabel bigquery-public-data.imdb.reviews.

Melakukan analisis sentimen

Lakukan analisis sentimen pada ulasan film IMDB menggunakan model jarak jauh dan fungsi ML.GENERATE_TEXT:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut untuk melakukan analisis sentimen pada lima ulasan film:

    SELECT
      ml_generate_text_result['candidates'][0]['content'] AS generated_text,
      * EXCEPT (ml_generate_text_result)
    FROM
      ML.GENERATE_TEXT(
        MODEL `bqml_tutorial.gemini_model`,
        (
          SELECT
            CONCAT(
              'perform sentiment analysis on the following text, return one the following categories: positive, negative: ',
              review) AS prompt,
            *
          FROM
            `bigquery-public-data.imdb.reviews`
          LIMIT 5
        ),
        STRUCT(
          0.2 AS temperature,
          100 AS max_output_tokens));

    Outputnya mirip dengan berikut ini, dengan kolom yang tidak dibuat dihilangkan agar lebih jelas:

    +--------------------------------------------+-------------------------+----------------------------+-----+
    | generated_text                             | ml_generate_text_status | prompt                     | ... |
    +--------------------------------------------+-------------------------+----------------------------+-----+
    | {"parts":[{"text":"## Sentiment Analysis:  |                         | perform sentiment analysis |     |
    | Negative \n\nThis text expresses a         |                         | on the following text,     |     |
    | strongly negative sentiment towards the    |                         | return one the following   |     |
    | movie. Here's why:\n\n* **Negative         |                         | negative: I  had to see    |     |
    | like \"terribly,\" \"dumb,\" and           |                         | this on the British        |     |
    | \"not even\" to describe the acting...     |                         | Airways plane. It was...   |     |
    +--------------------------------------------+-------------------------+----------------------------+-----+
    | {"parts":[{"text":"## Sentiment Analysis:  |                         | perform sentiment analysis |     |
    | Negative \n\nThis review expresses a       |                         | on the following text,     |     |
    | predominantly negative sentiment towards   |                         | return one the following   |     |
    | the movie \"The Real Howard Spitz.\"       |                         | categories: positive,      |     |
    | Here's why:\n\n* **Criticism of the film's |                         | negative: This is a family |     |
    | premise:** The reviewer finds it strange   |                         | movie that was broadcast   |     |
    | that a film about a children's author...   |                         | on my local ITV station... |     |
    +--------------------------------------------+-------------------------+----------------------------+-----+
    

    Hasilnya mencakup kolom yang sama dengan yang didokumentasikan untuk Melakukan ekstraksi kata kunci.

Pembersihan

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.