Fonction ML.GENERATE_TEXT

Ce document décrit la fonction ML.GENERATE_TEXT, qui vous permet d'effectuer des tâches de langage naturel génératives sur du texte stocké dans des tables BigQuery. Voici quelques exemples de tâches de langage :

  • Classification
  • Analyse des sentiments
  • Extraction d'entités
  • Systèmes de questions-réponses extractifs
  • Synthèse
  • Réécriture du texte dans un style différent
  • Génération de contenu publicitaire
  • Conceptualisation

La fonction envoie des requêtes à un modèle distant BigQuery ML qui représente l'un des modèles de base du langage naturel text-bison* de Vertex AI (LLM), puis renvoie la réponse du LLM. Plusieurs arguments de la fonction fournissent les paramètres qui façonnent la réponse de LLM.

Le paramètre prompt fournit le texte du modèle à analyser. La conception des invites peut affecter fortement les réponses renvoyées par le LLM. Pour en savoir plus, consultez la section Concevoir des invites textuelles.

Syntaxe

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

Arguments

ML.GENERATE_TEXT utilise les arguments suivants :

  • project_id : ID de votre projet

  • dataset : ensemble de données BigQuery contenant le modèle.

  • model : nom d'un modèle distant qui utilise l'un des LLM text-bison* Vertex AI. Pour en savoir plus sur la création de ce type de modèle distant, consultez la section ENDPOINT.

  • table : nom de la table BigQuery contenant les données d'invite. Le texte de la colonne nommée prompt est envoyé au modèle. Si votre table ne comporte pas de colonne prompt, utilisez une instruction SELECT pour cet argument afin de fournir un alias pour une colonne de table existante. Une erreur se produit si aucune colonne prompt n'est disponible.

  • query_statement : requête GoogleSQL utilisée pour générer les données d'invite.

  • max_output_tokens : valeur INT64 comprise dans la plage [1,1024] qui définit le nombre maximal de jetons générés par le modèle. Spécifiez une valeur inférieure pour les réponses plus courtes et une valeur plus élevée pour les réponses plus longues. La valeur par défaut est 50.

    Un jeton peut être plus petit qu'un mot et contient environ quatre caractères. 100 jetons correspondent à environ 60-80 mots.

  • temperature : valeur FLOAT64 comprise dans la plage [0.0,1.0] utilisée pour l'échantillonnage lors de la génération de la réponse, qui se produit lorsque top_k et top_p sont appliqués. Elle permet de contrôler le degré de hasard dans la sélection des jetons. Les valeurs temperature inférieures sont idéales pour les invites qui nécessitent une réponse plus déterministe et moins ouverte ou créative, tandis que des valeurs temperature plus élevées peuvent conduire à des résultats plus diversifiés ou créatifs. La valeur temperature de 0 est déterministe, ce qui signifie que la réponse de probabilité la plus élevée est toujours sélectionnée. La valeur par défaut est 1.0.

  • top_k : valeur INT64 comprise dans la plage [1,40] qui modifie la façon dont le modèle sélectionne les jetons pour la sortie. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 40.

    Une valeur top_k de 1 signifie que le prochain jeton sélectionné est le plus probable parmi tous les jetons du vocabulaire du modèle, tandis qu'une valeur top_k de 3 signifie que la valeur suivante est sélectionnée parmi les trois jetons les plus probables à l'aide de la valeur temperature.

    Pour chaque étape de sélection de jeton, les principaux jetons top_k ayant les probabilités les plus élevées sont échantillonnés. Les jetons sont ensuite filtrés en fonction de la valeur top_p avec le jeton final sélectionné à l'aide de l'échantillonnage de température.

  • top_p : valeur FLOAT64 comprise dans la plage [0.0,1.0] qui modifie la façon dont le modèle sélectionne les jetons pour la sortie. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 1.0.

    Les jetons sont sélectionnés de la probabilité la plus élevée (en fonction de la valeur top_k) à la probabilité la plus faible jusqu'à ce que la somme de leurs probabilités soit égale à la valeur top_p. Par exemple, si les jetons A, B et C ont une probabilité de 0.3, 0.2 et 0.1, et que la valeur top_p est 0.5, le modèle sélectionne A ou B comme jeton suivant en utilisant la valeur temperature et ne prend pas en compte C.

  • flatten_json_output : valeur BOOL qui détermine si le contenu JSON renvoyé par la fonction est analysé dans des colonnes distinctes. La valeur par défaut est FALSE.

Sortie

ML.GENERATE_TEXT renvoie la table d'entrée et les colonnes suivantes :

  • ml_generate_text_result : réponse JSON de l'appel projects.locations.endpoints.predict au modèle. Le texte généré se trouve dans l'élément content. Les attributs de sécurité se trouvent dans l'élément safetyAttributes. Cette colonne est renvoyée lorsque flatten_json_output est défini sur FALSE.
  • ml_generate_text_llm_result : valeur STRING contenant le texte généré renvoyé par l'appel projects.locations.endpoints.predict au modèle. Cette colonne est renvoyée lorsque flatten_json_output est défini sur TRUE.
  • ml_generate_text_rai_result : valeur STRING contenant les attributs de sécurité renvoyés par l'appel projects.locations.endpoints.predict au modèle. Cette colonne est renvoyée lorsque flatten_json_output est défini sur TRUE.
  • ml_generate_text_status : valeur STRING contenant l'état de réponse de l'API pour la ligne correspondante. Cette valeur est vide si l'opération a réussi.

Emplacement

ML.GENERATE_TEXT doit s'exécuter dans la même région que le modèle distant auquel la fonction fait référence. Vous ne pouvez créer des modèles distants basés sur des modèles text-bison* que dans les emplacements suivants:

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

Quotas

Consultez les quotas et limites des fonctions à valeur de table de service d'IA Cloud.

Examples

Exemple 1

Cet exemple montre une requête avec les caractéristiques suivantes :

  • Fournit une seule invite.
  • Renvoie une réponse textuelle générée plus longue.
  • Renvoie une réponse textuelle moins probable.
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));

Exemple 2

Cet exemple montre une requête avec les caractéristiques suivantes :

  • Fournit des données d'invite à partir d'une colonne de table nommée prompt.
  • Renvoie une réponse textuelle générée plus courte.
  • Renvoie une réponse textuelle plus probable.
  • Aplatit la réponse JSON dans des colonnes distinctes.
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));

Exemple 3

Cet exemple montre une requête avec les caractéristiques suivantes :

  • Fournit des données d'invite à partir d'une colonne de table nommée question et utilisant l'alias prompt.
  • Renvoie une réponse textuelle de longueur moyenne.
  • Renvoie une réponse textuelle relativement probable.
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));

Exemple 4

Cet exemple montre une requête avec les caractéristiques suivantes :

  • Concatène les chaînes et une colonne de table pour fournir les données d'invite.
  • Renvoie une réponse textuelle générée plus longue.
  • Renvoie une réponse textuelle plus probable.
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));

Étapes suivantes