ML.GENERATE_TEXT 函数
本文档介绍了 ML.GENERATE_TEXT
函数,该函数允许您对 BigQuery 表中存储的文本执行生成自然语言任务。语言任务示例包括:
- 分类
- 情感分析
- 实体提取
- 抽样问答
- 摘要
- 以其他风格重写文本
- 生成广告文案
- 概念构思
该函数的工作原理是向表示 Vertex AI text-bison*
自然语言基础模型 (LLM) 之一的 BigQuery ML 远程模型发送请求,然后返回 LLM 的响应。函数的几个参数都提供了影响 LLM 响应的参数。
prompt
参数提供模型要分析的文本。提示设计会对 LLM 返回的响应产生很大影响。如需了解详情,请参阅设计文本提示。
语法
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]) )
参数
ML.GENERATE_TEXT
接受以下参数:
project_id
:您的项目 ID。dataset
:包含模型的 BigQuery 数据集。model
:使用其中一个text-bison*
Vertex AI LLM 的远程模型的名称。如需详细了解如何创建此类远程模型,请参阅ENDPOINT
。table
:包含提示数据的 BigQuery 表的名称。会将名为prompt
的列中的文本发送到模型。如果您的表没有prompt
列,请对此参数使用SELECT
语句,以提供现有表列的别名。如果没有prompt
列可用,则会发生错误。query_statement
:用于生成提示数据的 GoogleSQL 查询。max_output_tokens
是[1,1024]
范围内的一个INT64
值,用于设置模型输出的词法单元数量上限。指定较低的值可获得较短的响应,指定较高的值可获得较长的响应。默认值为50
。词元可能小于一个单词,大约为 4 个字符。100 个词元对应大约 60-80 个单词。
temperature
:[0.0,1.0]
范围内的一个FLOAT64
值,用于在生成响应期间进行采样(在应用top_k
和top_p
时发生)。温度控制词元选择的随机程度。较低的temperature
值有利于需要更具确定性、更少开放性或创造性响应的提示,而较高的temperature
值可能会导致更具多样性或创造性的结果。temperature
为0
表示确定,即始终选择概率最高的响应。默认值为1.0
。top_k
:[1,40]
范围内的一个INT64
值,用于更改模型为输出选择词元的方式。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为40
。top_k
值为1
表示下一个选定词元是模型词汇表的所有词元中概率最高的词元,而top_k
值3
表示将使用temperature
值从 3 个概率最高的词元中选择下一个词元。在每个词元选择步骤中,系统都会对概率最高的
top_k
个词元进行采样。然后,系统会根据top_p
进一步过滤词元,并使用温度采样选择最终的词元。top_p
:[0.0,1.0]
范围内的一个FLOAT64
值,用于更改模型为输出选择词元的方式。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为1.0
。系统会按照概率从最高(基于
top_k
值)到最低的顺序选择词元,直到所选词元的概率总和等于top_p
值。例如,如果词元 A、B 和 C 的概率分别是0.3
、0.2
、0.1
,并且top_p
值为0.5
,则模型使用temperature
值选择 A 或 B 作为下一个词元,而不考虑 C。flatten_json_output
:BOOL
值,用于确定函数返回的 JSON 内容是否被解析为单独的列。默认值为FALSE
。
输出
ML.GENERATE_TEXT
返回输入表以及以下列:
ml_generate_text_result
:对模型的projects.locations.endpoints.predict
调用返回的 JSON 响应。生成的文本位于content
元素中。安全属性位于safetyAttributes
元素中。当flatten_json_output
为FALSE
时,将返回此列。ml_generate_text_llm_result
:STRING
值,包含对模型的projects.locations.endpoints.predict
调用返回的生成文本。当flatten_json_output
为TRUE
时,将返回此列。ml_generate_text_rai_result
:STRING
值,包含对模型的projects.locations.endpoints.predict
调用返回的安全属性。当flatten_json_output
为TRUE
时,将返回此列。ml_generate_text_status
:STRING
值,包含相应行的 API 响应状态。如果操作成功,则此值为空。
位置
ML.GENERATE_TEXT
必须在函数引用的远程模型所在的区域中运行。您只能在以下位置创建基于 text-bison*
模型的远程模型:
asia-northeast3
asia-southeast1
eu
europe-west1
europe-west2
europe-west3
europe-west4
europe-west9
us
us-central1
us-west4
配额
请参阅 Cloud AI 服务表值函数配额和限制。
示例
示例 1
此示例显示了一个具有以下特征的请求:
- 提供单个提示。
- 返回较长的生成文本响应。
- 返回概率较低的生成文本响应。
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));
示例 2
此示例显示了一个具有以下特征的请求:
- 提供名为
prompt
的表列中的提示数据。 - 返回较短的生成文本响应。
- 返回概率较高的生成文本响应。
- 将 JSON 响应展平为单独的列。
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));
示例 3
此示例显示了一个具有以下特征的请求:
- 提供名为
question
、别名为prompt
的表列的提示数据。 - 返回中等长度的生成文本响应。
- 返回概率中等的生成文本响应。
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));
示例 4
此示例显示了一个具有以下特征的请求:
- 连接字符串和表列以提供提示数据。
- 返回较长的生成文本响应。
- 返回概率较高的生成文本响应。
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));
后续步骤
- 尝试有关使用公共数据集生成文本的教程。
- 查看有关如何使用您自己的数据生成文本的分步说明。
- 详细了解可用于分析 BigQuery 数据的 AI 函数。