텍스트 임베딩

텍스트 임베딩(textembedding-gecko)은 텍스트 임베딩을 지원하는 모델의 이름입니다. 텍스트 임베딩은 텍스트 데이터를 머신러닝 알고리즘, 특히 대규모 모델에서 처리할 수 있는 숫자 벡터로 변환하는 NLP 기술입니다. 이러한 벡터 표현은 표현이 나타내는 단어의 시맨틱 의미와 컨텍스트를 캡처하도록 설계되었습니다.

임베딩에는 사용 가능한 몇 가지 버전이 있습니다. textembedding-gecko@003는 향상된 AI 품질을 갖춘 최신 임베딩 모델이며, textembedding-gecko-multilingual@001은 다양한 영어 외 언어에 최적화된 모델입니다.

콘솔에서 이 모델을 살펴보려면 Model Garden의 텍스트 임베딩 모델 카드를 참조하세요.
Model Garden으로 이동

사용 사례

시맨틱 검색: 텍스트 임베딩을 사용하면 고차원 벡터 공간에서 사용자 쿼리와 문서 환경을 모두 나타낼 수 있습니다. 사용자 쿼리와 의미상으로 보다 유사한 문서는 벡터 공간에서 거리가 더 짧으며 검색 결과에서 상위에 표시됩니다.

텍스트 분류: 텍스트 임베딩을 올바른 카테고리 라벨에 매핑하는 모델을 학습시킵니다(예: 고양이와 개, 스팸과 비스팸). 모델 학습이 완료된 다음에는 이를 사용해서 해당 임베딩을 기준으로 새로운 텍스트 입력을 하나 이상의 카테고리로 분류할 수 있습니다.

HTTP 요청

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/textembedding-gecko:predict

모델 버전

최신 모델 버전을 사용하려면 @latest 서픽스로 지정합니다(예: textembedding-gecko@latest).

정식 모델 버전을 사용하려면 모델 버전 번호를 지정합니다(예: textembedding-gecko@003). 각 안정화 버전은 후속 안정화 버전의 출시 날짜로부터 6개월 동안 사용 가능합니다.

다음 표에는 사용 가능한 정식 모델 버전이 포함되어 있습니다.

textembedding-gecko 모델 출시일 지원 중단 날짜
textembedding-gecko@003 2023년 12월 12일 해당 없음
textembedding-gecko@002 2023년 11월 2일 2024년 10월 9일
textembedding-gecko-multilingual@001 2023년 11월 2일 해당 없음
textembedding-gecko@001 2023년 6월 7일 2024년 10월 9일
text-embedding-preview-0409 2024년 4월 9일 안정화 버전으로 업데이트
text-multilingual-embedding-preview-0409 2024년 4월 9일 안정화 버전으로 업데이트

자세한 내용은 모델 버전 및 수명 주기를 참조하세요.

요청 본문

{
  "instances": [
    {
      "task_type": "RETRIEVAL_DOCUMENT",
      "title": "document title",
      "content": "I would like embeddings for this text!"
    },
  ]
}

Vertex AI PaLM 임베딩 API는 온라인 (실시간) 예측을 수행하여 입력 텍스트에서 임베딩을 가져옵니다.

API는 최대 3,072개의 입력 토큰을 수락하고 768 차원의 벡터 임베딩을 출력합니다. 텍스트 임베딩 모델 textembedding-gecko에 대해 다음 매개변수를 사용합니다. 자세한 내용은 텍스트 임베딩 개요를 참조하세요.

매개변수 설명 사용 가능한 값

content

임베딩을 생성하려는 텍스트입니다. 텍스트

task_type

`task_type` 매개변수는 모델이 더 나은 품질의 임베딩을 생성하도록 도와주는 의도된 다운스트림 애플리케이션으로 정의됩니다. 다음 값 중 하나를 사용할 수 있는 문자열입니다. RETRIEVAL_QUERY, RETRIEVAL_DOCUMENT, SEMANTIC_SIMILARITY, CLASSIFICATION, CLUSTERING, QUESTION_ANSWERING, FACT_VERIFICATION.

title

임베딩의 제목입니다. 텍스트

샘플 요청

REST

Vertex AI API를 사용하여 텍스트 프롬프트를 테스트하려면 POST 요청을 게시자 모델 엔드포인트로 전송합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID
  • TEXT: 임베딩을 생성하려는 텍스트입니다.

HTTP 메서드 및 URL:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/textembedding-gecko@003:predict

JSON 요청 본문:

{
  "instances": [
    { "content": "TEXT"}
  ],
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/textembedding-gecko@003:predict"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/textembedding-gecko@003:predict" | Select-Object -Expand Content

샘플 응답과 비슷한 JSON 응답이 표시됩니다.

Python

Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python API 참고 문서를 확인하세요.

from typing import List

from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel

def embed_text(
    texts: List[str] = ["banana muffins? ", "banana bread? banana muffins?"],
    task: str = "RETRIEVAL_DOCUMENT",
    model_name: str = "textembedding-gecko@003",
) -> List[List[float]]:
    """Embeds texts with a pre-trained, foundational model."""
    model = TextEmbeddingModel.from_pretrained(model_name)
    inputs = [TextEmbeddingInput(text, task) for text in texts]
    embeddings = model.get_embeddings(inputs)
    return [embedding.values for embedding in embeddings]

Node.js

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Node.js 설정 안내를 따르세요. 자세한 내용은 Vertex AI Node.js API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

async function main(
  project,
  model = 'textembedding-gecko@003',
  texts = 'banana bread?;banana muffins?',
  task = 'RETRIEVAL_DOCUMENT',
  apiEndpoint = 'us-central1-aiplatform.googleapis.com'
) {
  const aiplatform = require('@google-cloud/aiplatform');
  const {PredictionServiceClient} = aiplatform.v1;
  const {helpers} = aiplatform; // helps construct protobuf.Value objects.
  const clientOptions = {apiEndpoint: apiEndpoint};
  const match = apiEndpoint.match(/(?<Location>\w+-\w+)/);
  const location = match ? match.groups.Location : 'us-centra11';
  const endpoint = `projects/${project}/locations/${location}/publishers/google/models/${model}`;

  async function callPredict() {
    const instances = texts
      .split(';')
      .map(e => helpers.toValue({content: e, taskType: task}));
    const request = {endpoint, instances};
    const client = new PredictionServiceClient(clientOptions);
    const [response] = await client.predict(request);
    console.log('Got predict response');
    const predictions = response.predictions;
    for (const prediction of predictions) {
      const embeddings = prediction.structValue.fields.embeddings;
      const values = embeddings.structValue.fields.values.listValue.values;
      console.log('Got prediction: ' + JSON.stringify(values));
    }
  }

  callPredict();
}

Java

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Java 설정 안내를 따르세요. 자세한 내용은 Vertex AI Java API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import static java.util.stream.Collectors.toList;

import com.google.cloud.aiplatform.v1.EndpointName;
import com.google.cloud.aiplatform.v1.PredictRequest;
import com.google.cloud.aiplatform.v1.PredictResponse;
import com.google.cloud.aiplatform.v1.PredictionServiceClient;
import com.google.cloud.aiplatform.v1.PredictionServiceSettings;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PredictTextEmbeddingsSample {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // Details about text embedding request structure and supported models are available in:
    // https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-text-embeddings
    String endpoint = "us-central1-aiplatform.googleapis.com:443";
    String project = "YOUR_PROJECT_ID";
    String model = "textembedding-gecko@003";
    predictTextEmbeddings(
        endpoint,
        project,
        model,
        List.of("banana bread?", "banana muffins?"),
        "RETRIEVAL_DOCUMENT");
  }

  // Gets text embeddings from a pretrained, foundational model.
  public static List<List<Float>> predictTextEmbeddings(
      String endpoint, String project, String model, List<String> texts, String task)
      throws IOException {
    PredictionServiceSettings settings =
        PredictionServiceSettings.newBuilder().setEndpoint(endpoint).build();
    Matcher matcher = Pattern.compile("^(?<Location>\\w+-\\w+)").matcher(endpoint);
    String location = matcher.matches() ? matcher.group("Location") : "us-central1";
    EndpointName endpointName =
        EndpointName.ofProjectLocationPublisherModelName(project, location, "google", model);

    // You can use this prediction service client for multiple requests.
    try (PredictionServiceClient client = PredictionServiceClient.create(settings)) {
      PredictRequest.Builder request =
          PredictRequest.newBuilder().setEndpoint(endpointName.toString());
      for (int i = 0; i < texts.size(); i++) {
        request.addInstances(
            Value.newBuilder()
                .setStructValue(
                    Struct.newBuilder()
                        .putFields("content", valueOf(texts.get(i)))
                        .putFields("taskType", valueOf(task))
                        .build()));
      }
      PredictResponse response = client.predict(request.build());
      List<List<Float>> floats = new ArrayList<>();
      for (Value prediction : response.getPredictionsList()) {
        Value embeddings = prediction.getStructValue().getFieldsOrThrow("embeddings");
        Value values = embeddings.getStructValue().getFieldsOrThrow("values");
        floats.add(
            values.getListValue().getValuesList().stream()
                .map(Value::getNumberValue)
                .map(Double::floatValue)
                .collect(toList()));
      }
      return floats;
    }
  }

  private static Value valueOf(String s) {
    return Value.newBuilder().setStringValue(s).build();
  }
}

응답 본문

{
  "predictions": [
    {
      "embeddings": {
        "statistics": {
          "truncated": boolean,
          "token_count": integer
        },
        "values": [ number ]
      }
    }
  ]
}
응답 요소 설명
embeddings 입력 텍스트에서 생성된 결과입니다.
statistics 입력 텍스트에서 계산된 통계입니다.
truncated 입력 텍스트가 최대 허용 토큰보다 길고 잘렸는지 여부를 나타냅니다.
tokenCount 입력 텍스트의 토큰 수입니다.
values values 필드에는 입력 텍스트의 단어에 해당하는 임베딩 벡터가 포함됩니다.

샘플 응답

{
  "predictions": [
    {
      "embeddings": {
        "values": [
          0.0058424929156899452,
          0.011848051100969315,
          0.032247550785541534,
          -0.031829461455345154,
          -0.055369812995195389,
          ...
        ],
        "statistics": {
          "token_count": 4,
          "truncated": false
        }
      }
    }
  ]
}