Embeddings

A API Gemini oferece suporte a vários modelos de embedding que geram embeddings para palavras, frases, códigos e frases. Os embeddings resultantes podem ser usados para tarefas como pesquisa semântica, classificação de texto e agrupamento, entre muitas outras.

O que são embeddings?

Os embeddings são representações numéricas de texto (ou outros formatos de mídia) que capturam as relações entre as entradas. Os embeddings de texto funcionam convertendo texto em matrizes de números de ponto flutuante, chamados de vetores. Esses vetores são projetados para capturar o significado do texto. O comprimento da matriz de embedding é chamado de dimensionalidade do vetor. Uma passagem de texto pode ser representada por um vetor com centenas de dimensões.

Os embeddings capturam o significado semântico e o contexto, o que resulta em texto com significados semelhantes com embeddings "mais próximos". Por exemplo, as frases "Eu levei meu cachorro ao veterinário" e "Eu levei meu gato ao veterinário" teriam embeddings próximos entre si no espaço vetorial.

É possível usar os embeddings para comparar textos diferentes e entender como eles se relacionam. Por exemplo, se as embeddings do texto "cat" e "dog" estiverem próximas uma da outra, é possível inferir que essas palavras são semelhantes em significado, contexto ou ambos. Isso permite uma variedade de casos de uso comuns de IA.

Gerar embeddings

Use o método embedContent para gerar embeddings de texto:

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

result = client.models.embed_content(
        model="gemini-embedding-exp-03-07",
        contents="What is the meaning of life?")

print(result.embeddings)
import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-exp-03-07',
        contents: 'What is the meaning of life?',
    });

    console.log(response.embeddings);
}

main();
ctx := context.Background()

client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("GEMINI_API_KEY")))
if err != nil {
    log.Fatal(err)
}
defer client.Close()

em := client.EmbeddingModel("gemini-embedding-exp-03-07")
res, err := em.EmbedContent(ctx, genai.Text("What is the meaning of life?"))

if err != nil {
    panic(err)
}
fmt.Println(res.Embedding.Values)
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-exp-03-07:embedContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-exp-03-07",
     "content": {
     "parts":[{
     "text": "What is the meaning of life?"}]}
    }'

Também é possível gerar embeddings para vários pedaços de uma só vez transmitindo-os como uma lista de strings.

Tipos de tarefa

Ao criar sistemas de geração aumentada de recuperação (RAG), um design comum é usar embeddings de texto para realizar uma pesquisa de similaridade. Em alguns casos, isso pode prejudicar a qualidade, porque as perguntas e as respostas não são semanticamente semelhantes. Por exemplo, uma pergunta como "Por que o céu é azul?" e a resposta "A dispersão da luz solar causa a cor azul" têm significados distintos como declarações, o que significa que um sistema RAG não reconhece automaticamente a relação delas.

Os tipos de tarefa permitem gerar embeddings otimizados para tarefas específicas, economizando tempo e custo e melhorando o desempenho.

from google import genai
from google.genai import types

client = genai.Client(api_key="GEMINI_API_KEY")

result = client.models.embed_content(
        model="gemini-embedding-exp-03-07",
        contents="What is the meaning of life?",
        config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")
)
print(result.embeddings)
import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-exp-03-07',
        contents: 'What is the meaning of life?',
        config: {
            taskType: "SEMANTIC_SIMILARITY",
        }
    });

    console.log(response.embeddings);
}

main();
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-exp-03-07:embedContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-exp-03-07",
     "content": {
     "parts":[{
     "text": "What is the meaning of life?"}]},
     "taskType": "SEMANTIC_SIMILARITY"
    }'

Tipos de tarefas com suporte

Tipo de tarefa Descrição
SEMANTIC_SIMILARITY Usado para gerar embeddings otimizados para avaliar a similaridade de texto.
CLASSIFICATION Usado para gerar embeddings otimizados para classificar textos de acordo com rótulos predefinidos.
CLUSTERING Usado para gerar embeddings otimizados para agrupar textos com base nas semelhanças deles.
RETRIEVAL_DOCUMENT, RETRIEVAL_QUERY, QUESTION_ANSWERING e FACT_VERIFICATION Usado para gerar embeddings otimizados para pesquisa de documentos ou recuperação de informações.
CODE_RETRIEVAL_QUERY Usado para recuperar um bloco de código com base em uma consulta de linguagem natural, como classificar uma matriz ou reverter uma lista vinculada. As incorporações dos blocos de código são computadas usando RETRIEVAL_DOCUMENT.

Casos de uso

As embeddings de texto são usadas em vários casos de uso comuns de IA, como:

Modelos de embeddings

A API Gemini oferece três modelos que geram embeddings de texto:

A seguir

Confira o notebook de início rápido de embeddings.