ML.GENERATE_TEXT-Funktion

In diesem Dokument wird die Funktion ML.GENERATE_TEXT beschrieben, mit der Sie für Text, der in BigQuery-Tabellen gespeichert ist, generative Natural Language-Aufgaben ausführen können. Zu Beispielen für Sprachaufgaben gehören:

  • Klassifizierung
  • Sentimentanalyse
  • Entitätsextraktion
  • Extraktives Question Answering
  • Zusammenfassung
  • Text in einem anderen Stil umschreiben
  • Erstellung von Anzeigentexten
  • Entwicklung von Konzeptideen

Die Funktion sendet Anfragen an ein BigQuery ML-Remote-Modell, das eines der text-bison*-Fundament-Modelle von Vertex AI darstellt. (LLMs) und dann die Antwort des LLM zurück. Einige Argumente der Funktion stellen die Parameter bereit, die die Antwort des LLM bestimmen.

Der Parameter prompt stellt den Text bereit, den das Modell analysieren soll. Der Prompt-Entwurf kann sich stark auf die vom LLM zurückgegebenen Antworten auswirken. Weitere Informationen finden Sie unter Chat-Prompts erstellen.

Syntax

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

Argumente

ML.GENERATE_TEXT verwendet die folgenden Argumente:

  • project_id: Ihre Projekt-ID.

  • dataset: Das BigQuery-Dataset, das das Modell enthält.

  • model: Der Name eines Remote-Modells, das eines der text-bison* Vertex AI LLMs verwendet. Weitere Informationen zum Erstellen dieses Remote-Modelltyps finden Sie unter ENDPOINT.

  • table: Der Name der BigQuery-Tabelle, die die Eingabedaten enthält. Der Text in der Spalte mit dem Namen prompt wird an das Modell gesendet. Wenn Ihre Tabelle keine prompt-Spalte enthält, verwenden Sie eine SELECT-Anweisung für dieses Argument, um einen Alias für eine vorhandene Tabellenspalte anzugeben. Wenn keine Spalte prompt verfügbar ist, tritt ein Fehler auf.

  • query_statement: Die GoogleSQL-Abfrage, die zum Generieren der Eingabeaufforderungsdaten verwendet wird.

  • max_output_tokens: Ein Wert für INT64 im Bereich [1,1024], der die maximale Anzahl von Tokens festlegt, die das Modell ausgibt. Geben Sie kürzere Werte für kürzere Antworten und höhere Werte für längere Antworten an. Der Standardwert ist 50.

    Ein Token kann kleiner als ein Wort sein und umfasst etwa vier Zeichen. 100 Tokens entsprechen etwa 60–80 Wörtern.

  • temperature: ein FLOAT64-Wert im Bereich [0.0,1.0], der während der Antwortgenerierung für die Stichprobenerfassung verwendet wird. Dieser Wert tritt auf, wenn top_k und top_p angewendet werden. Er bestimmt den Grad der Zufälligkeit bei der Tokenauswahl. Niedrigere Werte von temperature eignen sich für Prompts, die deterministischere und weniger offene oder kreative Reaktionen erfordern, während höhere Werte von temperature zu vielfältigeren oder kreativen Ergebnissen führen können. Ein temperature-Wert von 0 ist deterministisch, d. h. die Antwort mit der höchsten Wahrscheinlichkeit wird immer ausgewählt. Der Standardwert ist 1.0.

  • top_k: ein INT64-Wert im Bereich [1,40], der ändert, wie das Modell Tokens für die Ausgabe auswählt. Geben Sie einen niedrigeren Wert für weniger zufällige Antworten und einen höheren Wert für zufälligere Antworten an. Der Standardwert ist 40.

    Ein Wert top_k von 1 bedeutet, dass das nächste ausgewählte Token das wahrscheinlichste unter allen Tokens im Modell-Vokabular ist, während ein Wert top_k von 3 bedeutet, dass das nächste Token mithilfe des Werts temperature aus den drei wahrscheinlichsten Tokens ausgewählt wird.

    Für jeden Tokenauswahlschritt werden die top_k-Tokens mit den höchsten Wahrscheinlichkeiten abgetastet. Anschließend werden Tokens anhand des Werts top_p weiter gefiltert, wobei das endgültige Token mithilfe von Temperaturproben ausgewählt wird.

  • top_p: ein FLOAT64-Wert im Bereich [0.0,1.0], der ändert, wie das Modell Tokens für die Ausgabe auswählt. Geben Sie einen niedrigeren Wert für weniger zufällige Antworten und einen höheren Wert für zufälligere Antworten an. Der Standardwert ist 1.0.

    Tokens werden von den wahrscheinlichsten (basierend auf dem Wert top_k) bis zu den unwahrscheinlichsten Werten ausgewählt, bis die Summe ihrer Wahrscheinlichkeiten dem Wert top_p entspricht. Beispiel: Wenn die Tokens A, B und C eine Wahrscheinlichkeit von 0.3, 0.2 und 0.1 haben und der Wert top_p 0.5 ist, wählt das Modell entweder A oder B als nächstes Token unter Verwendung des Werts temperature aus und berücksichtigt C nicht.

  • flatten_json_output ist ein Wert für BOOL, der bestimmt, ob der von der Funktion zurückgegebene Inhalt in separate Spalten geparst wird. Die Standardeinstellung ist FALSE.

Ausgabe

ML.GENERATE_TEXT gibt die Eingabetabelle sowie die folgenden Spalten zurück:

  • ml_generate_text_result: die JSON-Antwort aus dem projects.locations.endpoints.predict-Aufruf an das Modell. Der generierte Text befindet sich im Element content. Die Sicherheitsattribute befinden sich im Element safetyAttributes. Diese Spalte wird zurückgegeben, wenn flatten_json_output den Wert FALSE hat.
  • ml_generate_text_llm_result: ein Wert STRING, der den generierten Text enthält, der vom Aufruf projects.locations.endpoints.predict an das Modell zurückgegeben wurde. Diese Spalte wird zurückgegeben, wenn flatten_json_output den Wert TRUE hat.
  • ml_generate_text_rai_result: ein STRING-Wert, der die Sicherheitsattribute enthält, die vom Aufruf projects.locations.endpoints.predict an das Modell zurückgegeben werden. Diese Spalte wird zurückgegeben, wenn flatten_json_output den Wert TRUE hat.
  • ml_generate_text_status: ein STRING-Wert, der den API-Antwortstatus für die entsprechende Zeile enthält. Dieser Wert ist leer, wenn der Vorgang erfolgreich war.

Standorte

ML.GENERATE_TEXT muss in derselben Region ausgeführt werden wie das Remote-Modell, auf das die Funktion verweist. Remote-Modelle können nur anhand von text-bison*-Modellen an folgenden Standorten erstellt werden:

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

Kontingente

Weitere Informationen finden Sie unter Kontingente und Limits für Cloud AI-Diensttabellenwertfunktionen.

Beispiele

Beispiel 1

Dieses Beispiel zeigt eine Anfrage mit den folgenden Merkmalen:

  • Stellt einen einzelnen Prompt bereit.
  • Gibt eine längere generierte Textantwort zurück.
  • Gibt eine weniger wahrscheinliche generierte Textantwort zurück.
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));

Beispiel 2

Dieses Beispiel zeigt eine Anfrage mit den folgenden Merkmalen:

  • Stellt Prompt-Daten aus einer Tabellenspalte mit dem Namen prompt bereit.
  • Gibt eine kürzere generierte Textantwort zurück.
  • Gibt eine wahrscheinlichere generierte Textantwort zurück.
  • Vereinfacht die JSON-Antwort in separate Spalten.
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));

Beispiel 3:

Dieses Beispiel zeigt eine Anfrage mit den folgenden Merkmalen:

  • Stellt Prompt-Daten aus einer Tabellenspalte mit dem Namen question und dem Alias prompt bereit.
  • Gibt eine moderat lange generierte Textantwort zurück.
  • Gibt eine moderat wahrscheinlich generierte Textantwort zurück.
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));

Beispiel 4

Dieses Beispiel zeigt eine Anfrage mit den folgenden Merkmalen:

  • Verkettet Strings und eine Tabellenspalte, um die Prompt-Daten bereitzustellen.
  • Gibt eine längere generierte Textantwort zurück.
  • Gibt eine wahrscheinlichere generierte Textantwort zurück.
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));

Nächste Schritte