Gemini API의 임베딩

Gemini API의 임베딩 서비스는 단어, 구문, 문장에 대한 최첨단 임베딩을 생성합니다. 그런 다음 그 결과로 생성된 임베딩을 시맨틱 검색, 텍스트 분류, 클러스터링과 같은 자연어 처리 (NLP) 작업에 사용할 수 있습니다.

이 페이지에서는 임베딩에 대해 간략하게 설명하고 시작하는 데 도움이 되는 임베딩 서비스의 주요 사용 사례를 소개합니다.

임베딩이 무엇인가요?

텍스트 임베딩은 텍스트를 N차원 공간에서 표시할 수 있는 숫자 좌표 (벡터라고 함)로 변환하는 자연어 처리 (NLP) 기술입니다. 이 접근 방식을 사용하면 텍스트 조각을 관계형 데이터의 비트로 취급하여 모델을 학습시킬 수 있습니다.

임베딩은 시맨틱 의미와 컨텍스트를 캡처하여 임베딩에 가까운 의미를 갖는 텍스트를 생성합니다. 예를 들어 '강아지를 수의사에게 데려갔습니다'와 '고양이를 수의사에게 데려갔습니다'라는 문장은 둘 다 유사한 컨텍스트를 설명하기 때문에 벡터 공간에서 서로 가까운 임베딩을 갖게 됩니다.

임베딩을 사용하여 다양한 텍스트를 비교하고 어떻게 연관되는지 파악할 수 있습니다. 예를 들어 텍스트 'cat'과 'dog'의 임베딩이 서로 가까우면 이러한 단어가 의미나 맥락에서 비슷하거나 둘 다 비슷하다고 추론할 수 있습니다. 이 기능을 사용하면 다음 섹션에서 설명하는 다양한 사용 사례가 가능합니다.

사용 사례

텍스트 임베딩은 다음과 같은 다양한 NLP 사용 사례에 사용됩니다.

  • 정보 검색: 임베딩을 사용하여 입력 텍스트 일부에서 의미상 유사한 텍스트를 검색할 수 있습니다. 시맨틱 검색, 질문에 대한 답변, 요약과 같은 정보 검색 시스템은 다양한 애플리케이션을 지원할 수 있습니다.
  • 분류: 임베딩을 사용하여 모델을 학습시켜 문서를 카테고리로 분류할 수 있습니다. 예를 들어 사용자 댓글을 부정적 또는 양성으로 분류하려는 경우 임베딩 서비스를 사용하여 각 댓글의 벡터 표현을 가져와 분류기를 학습시킬 수 있습니다.
  • 클러스터링: 텍스트 벡터를 비교하면 텍스트 벡터의 유사성 또는 차이점을 확인할 수 있습니다. 이 기능은 유사한 텍스트 또는 문서를 그룹화하는 클러스터링 모델을 학습시키고 데이터에서 이상치를 감지하는 데 사용할 수 있습니다.
  • 벡터 데이터베이스: 생성된 임베딩을 벡터 데이터베이스에 저장하여 NLP 애플리케이션의 정확성과 효율성을 개선할 수 있습니다. 벡터 데이터베이스를 사용하여 텍스트 프롬프트를 숫자 벡터로 변환하는 방법을 알아보려면 다음 튜토리얼을 참고하세요.

Gemini 임베딩 모델

Gemini API는 텍스트 임베딩을 생성하는 두 가지 모델, 즉 텍스트 임베딩임베딩을 제공합니다. 텍스트 임베딩은 768차원 미만에서 탄력적인 임베딩 크기를 제공하는 임베딩 모델의 업데이트된 버전입니다. 탄력적 임베딩은 더 작은 출력 차원을 생성하고, 약간의 성능 손실로 컴퓨팅 및 스토리지 비용을 절감할 수 있습니다.

새 프로젝트나 애플리케이션에 텍스트 임베딩을 사용합니다. 애플리케이션에서는 텍스트 임베딩을 사용하도록 모델을 이전할 수 없는 경우에만 임베딩 모델을 사용해야 합니다.

Gemini API로 임베딩 생성

텍스트 임베딩을 생성하려면 embedContent 메서드를 사용합니다.

Python

result = genai.embed_content(
model="models/text-embedding-004",
content="What is the meaning of life?",
task_type="retrieval_document",
title="Embedding of single string")

# 1 input > 1 vector output
print(str(result['embedding'])[:50], '... TRIMMED]')

실행 가능한 전체 예는 시작 튜토리얼을 참조하세요.

Go

ctx := context.Background()
// Access your API key as an environment variable (see our Getting Started tutorial)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
log.Fatal(err)
}
defer client.Close()
// For embeddings, use the Text Embeddings model
em := client.EmbeddingModel("text-embedding-004")
res, err := em.EmbedContent(ctx, genai.Text("The quick brown fox jumps over the lazy dog."))

if err != nil {
panic(err)
}
fmt.Println(res.Embedding.Values)

실행 가능한 전체 예는 시작 튜토리얼을 참조하세요.

Node.js

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see our Getting Started tutorial)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

async function run() {
// For embeddings, use the Text Embeddings model
const model = genAI.getGenerativeModel({ model: "text-embedding-004"});

const text = "The quick brown fox jumps over the lazy dog."

const result = await model.embedContent(text);
const embedding = result.embedding;
console.log(embedding.values);
}

run();

실행 가능한 전체 예는 시작 튜토리얼을 참조하세요.

Dart (Flutter)

final model = GenerativeModel(model: 'text-embedding-004', apiKey: apiKey);
final content = Content.text('The quick brown fox jumps over the lazy dog.');
final result = await model.embedContent(content);
print(result.embedding.values);

실행 가능한 전체 예는 시작 튜토리얼을 참조하세요.

curl

curl "https://generativelanguage.googleapis.com/v1beta/models/text-embedding-004:embedContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/text-embedding-004",
    "content": {
    "parts":[{
    "text": "Hello world"}]}, }' 2> /dev/null | head

실행 가능한 전체 예는 GitHub에서 REST를 사용한 빠른 시작 삽입을 참조하세요.

다음 단계