La funzione ML.GENERATE_TEXT

Questo documento descrive la funzione ML.GENERATE_TEXT, che consente di eseguire attività generative di linguaggio naturale su testo archiviato nelle tabelle BigQuery. Ecco alcuni esempi di attività relative alle lingue:

  • Classificazione
  • Analisi del sentiment
  • Estrazione di entità
  • Risposta estrattiva alle domande
  • Riassunto
  • Riscrittura del testo in uno stile diverso
  • Generazione di testo pubblicitario
  • Ideazione del concetto

La funzione invia richieste a un modello remoto di BigQuery ML che rappresenta uno dei modelli di base (LLM) di Vertex AI text-bison* e restituisce la risposta dell'LLM. Molti degli argomenti della funzione forniscono i parametri che modellano la risposta dell'LLM.

Il parametro prompt fornisce il testo da analizzare. La progettazione dei prompt può influire notevolmente sulle risposte restituite dall'LLM. Per ulteriori informazioni, consulta l'articolo Progettare prompt di testo.

Sintassi

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])
)

Argomenti

ML.GENERATE_TEXT accetta i seguenti argomenti:

  • project_id: l'ID del tuo progetto.

  • dataset: il set di dati BigQuery contenente il modello.

  • model: il nome di un modello remoto che utilizza uno dei text-bison* LLM Vertex AI. Per saperne di più su come creare questo tipo di modello remoto, consulta ENDPOINT.

  • table: il nome della tabella BigQuery che contiene i dati del prompt. Il testo nella colonna prompt viene inviato al modello. Se la tabella non ha una colonna prompt, utilizza un'istruzione SELECT per questo argomento per fornire un alias per una colonna esistente della tabella. Si verifica un errore se non è disponibile nessuna colonna prompt.

  • query_statement : la query GoogleSQL utilizzata per generare i dati dei prompt.

  • max_output_tokens: un valore INT64 nell'intervallo [1,1024] che imposta il numero massimo di token restituiti dal modello. Specifica un valore più basso per risposte più brevi e un valore più alto per risposte più lunghe. Il valore predefinito è 50.

    Un token potrebbe essere più piccolo di una parola e avere circa quattro caratteri. 100 token corrispondono a circa 60-80 parole.

  • temperature: un valore FLOAT64 nell'intervallo [0.0,1.0] utilizzato per il campionamento durante la generazione della risposta, che si verifica quando vengono applicati top_k e top_p. Controlla il grado di casualità nella selezione dei token. Valori temperature più bassi sono ideali per prompt che richiedono una risposta più deterministica e meno aperta o creativa, mentre valori temperature più alti possono portare a risultati più diversificati o creativi. Un valore temperature di 0 è deterministico, il che significa che la risposta con la probabilità più alta viene sempre selezionata. Il valore predefinito è 1.0.

  • top_k: un valore INT64 nell'intervallo [1,40] che cambia il modo in cui il modello seleziona i token per l'output. Specifica un valore più basso per risposte meno casuali e un valore più alto per risposte più casuali. Il valore predefinito è 40.

    Un valore top_k pari a 1 indica che il token successivo selezionato è il più probabile tra tutti i token nel vocabolario del modello, mentre un valore top_k pari a 3 indica che il token successivo viene selezionato tra i tre token più probabili utilizzando il valore temperature.

    Per ogni passaggio di selezione dei token, vengono campionati i token top_k con le probabilità più elevate. Quindi i token vengono ulteriormente filtrati in base al valore top_p e il token finale viene selezionato utilizzando il campionamento con temperatura.

  • top_p: un valore FLOAT64 nell'intervallo [0.0,1.0] che cambia il modo in cui il modello seleziona i token per l'output. Specifica un valore più basso per risposte meno casuali e un valore più alto per risposte più casuali. Il valore predefinito è 1.0.

    I token vengono selezionati dal più probabile (in base al valore top_k) al meno probabile finché la somma delle loro probabilità non raggiunge il valore di top_p. Ad esempio, se i token A, B e C hanno una probabilità di 0.3, 0.2 e 0.1 e il valore di top_p è 0.5, il modello seleziona A o B come token successivo utilizzando il valore temperature e non considera C.

  • flatten_json_output: un valore BOOL che determina se i contenuti JSON restituiti dalla funzione vengono analizzati in colonne separate. Il valore predefinito è FALSE.

Output

ML.GENERATE_TEXT restituisce la tabella di input e le seguenti colonne:

  • ml_generate_text_result: la risposta JSON dalla chiamata projects.locations.endpoints.predict al modello. Il testo generato si trova nell'elemento content. Gli attributi di sicurezza sono nell'elemento safetyAttributes. Questa colonna viene restituita quando flatten_json_output è FALSE.
  • ml_generate_text_llm_result: un valore STRING che contiene il testo generato restituito dalla chiamata projects.locations.endpoints.predict al modello. Questa colonna viene restituita quando flatten_json_output è TRUE.
  • ml_generate_text_rai_result: un valore STRING contenente gli attributi di sicurezza restituiti dalla chiamata projects.locations.endpoints.predict al modello. Questa colonna viene restituita quando flatten_json_output è TRUE.
  • ml_generate_text_status: un valore STRING che contiene lo stato della risposta dell'API per la riga corrispondente. Questo valore è vuoto se l'operazione è riuscita.

Località

ML.GENERATE_TEXT deve essere eseguito nella stessa regione del modello remoto a cui fa riferimento la funzione. Puoi creare modelli remoti basati solo su text-bison* modelli nelle seguenti località:

  • asia-northeast3
  • asia-southeast1
  • eu
  • europe-west1
  • europe-west2
  • europe-west3
  • europe-west4
  • europe-west9
  • us
  • us-central1
  • us-west4

Quote

Consulta Quote e limiti delle funzioni con valore di tabella del servizio Cloud AI.

Esempi

Esempio 1

Questo esempio mostra una richiesta con le seguenti caratteristiche:

  • Fornisce un singolo prompt.
  • Restituisce una risposta di testo generata più lunga.
  • Restituisce una risposta di testo generata meno probabile.
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));

Esempio 2

Questo esempio mostra una richiesta con le seguenti caratteristiche:

  • Fornisce dati dei prompt da una colonna della tabella denominata prompt.
  • Restituisce una risposta di testo generata più breve.
  • Restituisce una risposta di testo generata più probabile.
  • Suddivide la risposta JSON in colonne separate.
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));

Esempio 3

Questo esempio mostra una richiesta con le seguenti caratteristiche:

  • Fornisce dati dei prompt da una colonna della tabella denominata question con alias prompt.
  • Restituisce una risposta di testo generata di durata moderata.
  • Restituisce una risposta di testo generata moderatamente probabile.
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));

Esempio 4

Questo esempio mostra una richiesta con le seguenti caratteristiche:

  • Concatena stringhe e una colonna di tabella per fornire i dati del prompt.
  • Restituisce una risposta di testo generata più lunga.
  • Restituisce una risposta di testo generata più probabile.
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));

Passaggi successivi