ML.GENERATE_TEXT 함수

이 문서에서는 BigQuery 테이블에 저장된 텍스트에 대해 생성형 자연어 작업을 수행할 수 있는 ML.GENERATE_TEXT 함수를 설명합니다. 언어 태스크 예시에는 다음이 포함됩니다.

  • 분류
  • 감정 분석
  • 항목 추출
  • 추출적 질의 응답
  • 요약
  • 다른 스타일로 텍스트 재작성
  • 광고 문구 생성
  • 개념 구상

이 함수는 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_ktop_p가 적용될 때 발생합니다. 이는 토큰 선택의 무작위성 수준을 제어합니다. temperature 값이 낮을수록 보다 결정적이고 덜 개방적인 또는 창의적인 응답이 필요한 프롬프트에 적합하고, temperature 값이 높을수록 다양하거나 창의적인 결과로 이어질 수 있습니다. temperature0은 결정적입니다. 즉, 가능성이 가장 높은 응답이 항상 선택됩니다. 기본값은 1.0입니다.

  • top_k: 모델이 출력을 위해 토큰을 선택하는 방법을 변경하는 [1,40] 범위의 INT64 값. 임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다. 기본값은 40입니다.

    top_k1이면 다음에 선택된 토큰이 모델 어휘의 모든 토큰 중에서 가장 확률이 높은 반면, top_k3이면 temperature 값을 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

    각 토큰 선택 단계에서 확률이 가장 높은 top_k 토큰이 샘플링됩니다. 그런 다음 top_p 값을 기준으로 토큰을 추가로 필터링하고 강도 샘플링을 사용하여 최종 토큰을 선택합니다.

  • top_p: 모델이 출력에 사용할 토큰을 선택하는 방법을 변경하는 [0.0,1.0] 범위의 FLOAT64 값입니다. 임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다. 기본값은 1.0입니다.

    토큰은 확률의 합이 top_p 값과 같아질 때까지 (top_k 값 기준에서) 확률이 가장 높은 것부터 가장 낮은 것까지 선택됩니다. 예를 들어 토큰 A, B, C의 확률이 0.3, 0.2, 0.1이고 top_p 값이 0.5인 경우, 모델은 temperature 값을 사용하여 A 또는 B를 다음 토큰으로 선택하고 C는 고려하지 않습니다.

  • flatten_json_output: 함수로 반환된 JSON 콘텐츠가 개별 열로 파싱되는지 여부를 결정하는 BOOL 값입니다. 기본값은 FALSE입니다.

출력

ML.GENERATE_TEXT는 입력 테이블과 다음 열을 반환합니다.

  • ml_generate_text_result: 모델에 대한 projects.locations.endpoints.predict 호출의 JSON 응답입니다. 생성된 텍스트는 content 요소에 있습니다. 안전 속성safetyAttributes 요소에 있습니다. flatten_json_outputFALSE면 이 열이 반환됩니다.
  • ml_generate_text_llm_result: 모델에 대한 projects.locations.endpoints.predict 호출에서 반환된 생성된 텍스트를 포함하는 STRING 값입니다. flatten_json_outputTRUE면 이 열이 반환됩니다.
  • ml_generate_text_rai_result: 모델에 대한 projects.locations.endpoints.predict 호출에서 반환된 안전 속성을 포함하는 STRING 값입니다. flatten_json_outputTRUE면 이 열이 반환됩니다.
  • ml_generate_text_status: 해당 행의 API 응답 상태가 포함된 STRING 값입니다. 작업이 성공하면 이 값이 비어 있습니다.

위치

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

이 예시에서는 다음과 같은 특성을 가진 요청을 보여줍니다.

  • 별칭 promptquestion이라는 이름의 테이블 열에서 프롬프트 데이터를 제공합니다.
  • 적당히 긴 텍스트 응답을 반환합니다.
  • 다소 가능성이 있는 생성된 텍스트 응답을 반환합니다.
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));

다음 단계