Yerleştirmeler

Gemini API, kelimeler, ifadeler, cümleler ve kod için yerleştirmeler oluşturmak üzere metin yerleştirme modelleri sunar. Bu temel yerleştirmeler, semantik arama, sınıflandırma ve kümeleme gibi gelişmiş doğal dil işleme görevlerine güç vererek anahtar kelime tabanlı yaklaşımlara kıyasla daha doğru ve bağlama duyarlı sonuçlar sağlar.

Almayla Artırılmış Üretim (RAG) sistemleri oluşturmak, yerleştirmelerin yaygın kullanım alanlarından biridir. Gömme işlemleri, model çıkışlarını önemli ölçüde iyileştirerek doğruluk, tutarlılık ve bağlamsal zenginlik açısından önemli bir rol oynar. Bu aracılar, bilgi tabanlarından alakalı bilgileri verimli bir şekilde alır. Bilgi tabanları, yerleştirmelerle temsil edilir. Bu yerleştirmeler daha sonra giriş isteminde ek bağlam olarak dil modellerine iletilir ve bu modellerin daha bilinçli ve doğru yanıtlar üretmesi sağlanır.

Kurumsal düzeydeki uygulamalar ve yüksek hacimli iş yükleri için Vertex AI'daki yerleştirme modellerini kullanmanızı öneririz.

Yerleştirilmiş öğeler oluşturma

Metin gömmeleri oluşturmak için embedContent yöntemini kullanın:

Python

from google import genai

client = genai.Client()

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

print(result.embeddings)

JavaScript

import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({});

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

    console.log(response.embeddings);
}

main();

Go

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    contents := []*genai.Content{
        genai.NewContentFromText("What is the meaning of life?", genai.RoleUser),
    }
    result, err := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        contents,
        nil,
    )
    if err != nil {
        log.Fatal(err)
    }

    embeddings, err := json.MarshalIndent(result.Embeddings, "", "  ")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(embeddings))
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-001",
     "content": {"parts":[{"text": "What is the meaning of life?"}]}
    }'

Ayrıca, birden fazla parçayı dize listesi olarak ileterek bu parçalar için aynı anda yerleştirme oluşturabilirsiniz.

Python

from google import genai

client = genai.Client()

result = client.models.embed_content(
        model="gemini-embedding-001",
        contents= [
            "What is the meaning of life?",
            "What is the purpose of existence?",
            "How do I bake a cake?"
        ])

for embedding in result.embeddings:
    print(embedding)

JavaScript

import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({});

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-001',
        contents: [
            'What is the meaning of life?',
            'What is the purpose of existence?',
            'How do I bake a cake?'
        ],
    });

    console.log(response.embeddings);
}

main();

Go

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    contents := []*genai.Content{
        genai.NewContentFromText("What is the meaning of life?"),
        genai.NewContentFromText("How does photosynthesis work?"),
        genai.NewContentFromText("Tell me about the history of the internet."),
    }
    result, err := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        contents,
        nil,
    )
    if err != nil {
        log.Fatal(err)
    }

    embeddings, err := json.MarshalIndent(result.Embeddings, "", "  ")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(embeddings))
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-001",
     "content": [
        {"parts": [{"text": "What is the meaning of life?"}]},
        {"parts": [{"text": "What is the purpose of existence?"}]},
        {"parts": [{"text": "How do I bake a cake?"}]}
        ]
    }'

Performansı artırmak için görev türünü belirtin

Sınıflandırmadan belge aramaya kadar çeşitli görevler için gömmeleri kullanabilirsiniz. Doğru görev türünü belirtmek, yerleştirmelerin amaçlanan ilişkiler için optimize edilmesine yardımcı olarak doğruluğu ve verimliliği en üst düzeye çıkarır. Desteklenen görev türlerinin tam listesi için Desteklenen görev türleri tablosuna bakın.

Aşağıdaki örnekte, metin dizelerinin anlam olarak ne kadar benzer olduğunu kontrol etmek için SEMANTIC_SIMILARITY simgesini nasıl kullanabileceğiniz gösterilmektedir.

Python

from google import genai
from google.genai import types
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

client = genai.Client()

texts = [
    "What is the meaning of life?",
    "What is the purpose of existence?",
    "How do I bake a cake?"]

result = [
    np.array(e.values) for e in client.models.embed_content(
        model="gemini-embedding-001",
        contents=texts, 
        config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")).embeddings
]

# Calculate cosine similarity. Higher scores = greater semantic similarity.

embeddings_matrix = np.array(result)
similarity_matrix = cosine_similarity(embeddings_matrix)

for i, text1 in enumerate(texts):
    for j in range(i + 1, len(texts)):
        text2 = texts[j]
        similarity = similarity_matrix[i, j]
        print(f"Similarity between '{text1}' and '{text2}': {similarity:.4f}")

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as cosineSimilarity from "compute-cosine-similarity";

async function main() {
    const ai = new GoogleGenAI({});

    const texts = [
        "What is the meaning of life?",
        "What is the purpose of existence?",
        "How do I bake a cake?",
    ];

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-001',
        contents: texts,
        taskType: 'SEMANTIC_SIMILARITY'
    });

    const embeddings = response.embeddings.map(e => e.values);

    for (let i = 0; i < texts.length; i++) {
        for (let j = i + 1; j < texts.length; j++) {
            const text1 = texts[i];
            const text2 = texts[j];
            const similarity = cosineSimilarity(embeddings[i], embeddings[j]);
            console.log(`Similarity between '${text1}' and '${text2}': ${similarity.toFixed(4)}`);
        }
    }
}

main();

Go

package main

import (
    "context"
    "fmt"
    "log"
    "math"

    "google.golang.org/genai"
)

// cosineSimilarity calculates the similarity between two vectors.
func cosineSimilarity(a, b []float32) (float64, error) {
    if len(a) != len(b) {
        return 0, fmt.Errorf("vectors must have the same length")
    }

    var dotProduct, aMagnitude, bMagnitude float64
    for i := 0; i < len(a); i++ {
        dotProduct += float64(a[i] * b[i])
        aMagnitude += float64(a[i] * a[i])
        bMagnitude += float64(b[i] * b[i])
    }

    if aMagnitude == 0 || bMagnitude == 0 {
        return 0, nil
    }

    return dotProduct / (math.Sqrt(aMagnitude) * math.Sqrt(bMagnitude)), nil
}

func main() {
    ctx := context.Background()
    client, _ := genai.NewClient(ctx, nil)
    defer client.Close()

    texts := []string{
        "What is the meaning of life?",
        "What is the purpose of existence?",
        "How do I bake a cake?",
    }

    var contents []*genai.Content
    for _, text := range texts {
        contents = append(contents, genai.NewContentFromText(text, genai.RoleUser))
    }

    result, _ := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        contents,
        &genai.EmbedContentRequest{TaskType: genai.TaskTypeSemanticSimilarity},
    )

    embeddings := result.Embeddings

    for i := 0; i < len(texts); i++ {
        for j := i + 1; j < len(texts); j++ {
            similarity, _ := cosineSimilarity(embeddings[i].Values, embeddings[j].Values)
            fmt.Printf("Similarity between '%s' and '%s': %.4f\n", texts[i], texts[j], similarity)
        }
    }
}

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "contents": [
        {"parts": [{"text": "What is the meaning of life?"}]},
        {"parts": [{"text": "What is the purpose of existence?"}]},
        {"parts": [{"text": "How do I bake a cake?"}]}
    ],
    "embedding_config": {
        "task_type": "SEMANTIC_SIMILARITY"
    }
}'

Aşağıda, bu kod snippet'inden alınan örnek bir çıkış gösterilmektedir:

Similarity between 'What is the meaning of life?' and 'What is the purpose of existence?': 0.9481

Similarity between 'What is the meaning of life?' and 'How do I bake a cake?': 0.7471

Similarity between 'What is the purpose of existence?' and 'How do I bake a cake?': 0.7371

Desteklenen görev türleri

Görev türü Açıklama Örnekler
SEMANTIC_SIMILARITY Metin benzerliğini değerlendirmek için optimize edilmiş yerleştirmeler. Öneri sistemleri, yinelenen öğe algılama
SINIFLANDIRMA Metinleri önceden ayarlanmış etiketlere göre sınıflandırmak için optimize edilmiş gömmeler. Yaklaşım analizi, spam yakalama
KÜMELEME (CLUSTERING) Metinleri benzerliklerine göre kümelemek için optimize edilmiş gömmeler. Belge düzenleme, pazar araştırması, anormallik algılama
RETRIEVAL_DOCUMENT Doküman arama için optimize edilmiş gömmeler. Arama için makaleleri, kitapları veya web sayfalarını dizine ekleme
RETRIEVAL_QUERY Genel arama sorguları için optimize edilmiş gömmeler. Sorgular için RETRIEVAL_QUERY, alınacak dokümanlar için RETRIEVAL_DOCUMENT kullanın. Özel arama ağı
CODE_RETRIEVAL_QUERY Doğal dil sorgularına dayalı kod bloklarının alınması için optimize edilmiş gömmeler. Sorgular için CODE_RETRIEVAL_QUERY, alınacak kod blokları için RETRIEVAL_DOCUMENT kullanın. Kod önerileri ve arama
QUESTION_ANSWERING Soru-cevap sistemindeki sorular için yerleştirmeler. Soruyu yanıtlayan belgeleri bulmak üzere optimize edilmiştir. Sorular için QUESTION_ANSWERING, alınacak dokümanlar için RETRIEVAL_DOCUMENT kullanın. Sohbet kutusu
FACT_VERIFICATION Doğrulanması gereken ifadeler için yerleştirmeler. İfadeyi destekleyen veya çürüten kanıtlar içeren belgelerin alınması için optimize edilmiştir. Hedef metin için FACT_VERIFICATION, alınacak dokümanlar için RETRIEVAL_DOCUMENT kullanın. Otomatik doğruluk kontrolü sistemleri

Yerleştirme boyutunu kontrol etme

Gemini yerleştirme modeli gemini-embedding-001, Matryoshka Representation Learning (MRL) tekniği kullanılarak eğitilir. Bu teknik, bir modele aynı verilerin daha basit ve kullanışlı olan ilk segmentlere (veya öneklere) sahip yüksek boyutlu yerleştirmeleri öğrenmeyi öğretir. 3.072 boyutlu yerleştirmenin tamamını kullanabilir veya depolama alanından tasarruf etmek için kaliteyi düşürmeden daha küçük bir boyuta kısaltabilirsiniz. En iyi kalite için ilk 768 ve 1536'yı kullanmanızı öneririz.

Kullanıcılar, output_dimensionality parametresini kullanarak çıkış yerleştirme vektörünün boyutunu kontrol edebilir. Daha küçük bir çıkış boyutu seçmek, depolama alanından tasarruf etmenizi ve sonraki uygulamalar için hesaplama verimliliğini artırmanızı sağlayabilir. Bu sırada kaliteden çok az ödün verilir.

Python

from google import genai
from google.genai import types

client = genai.Client()

result = client.models.embed_content(
    model="gemini-embedding-001",
    contents="What is the meaning of life?",
    config=types.EmbedContentConfig(output_dimensionality=768)
)

[embedding_obj] = result.embeddings
embedding_length = len(embedding_obj.values)

print(f"Length of embedding: {embedding_length}")

JavaScript

import { GoogleGenAI } from "@google/genai";

async function main() {
    const ai = new GoogleGenAI({});

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-001',
        content: 'What is the meaning of life?',
        outputDimensionality: 768,
    });

    const embeddingLength = response.embedding.values.length;
    console.log(`Length of embedding: ${embeddingLength}`);
}

main();

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    // The client uses Application Default Credentials.
    // Authenticate with 'gcloud auth application-default login'.
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    contents := []*genai.Content{
        genai.NewContentFromText("What is the meaning of life?", genai.RoleUser),
    }

    result, err := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        contents,
        &genai.EmbedContentRequest{OutputDimensionality: 768},
    )
    if err != nil {
        log.Fatal(err)
    }

    embedding := result.Embeddings[0]
    embeddingLength := len(embedding.Values)
    fmt.Printf("Length of embedding: %d\n", embeddingLength)
}

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "x-goog-api-key: YOUR_GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "contents": [
        {"parts": [{"text": "What is the meaning of life?"}]}
    ],
    "embedding_config": {
        "output_dimensionality": 768
    }
}'

Örnek çıkış:

Length of embedding: 768

3.072 boyutlu yerleştirme normalleştirilir. Normalleştirilmiş yerleştirmeler, vektör yönünü karşılaştırarak (büyüklük değil) daha doğru anlamsal benzerlik üretir. 768 ve 1536 dahil olmak üzere diğer boyutlar için yerleştirmeleri aşağıdaki gibi normalleştirmeniz gerekir:

Python

import numpy as np
from numpy.linalg import norm

embedding_values_np = np.array(embedding_obj.values)
normed_embedding = embedding_values_np / np.linalg.norm(embedding_values_np)

print(f"Normed embedding length: {len(normed_embedding)}")
print(f"Norm of normed embedding: {np.linalg.norm(normed_embedding):.6f}") # Should be very close to 1

Örnek çıkış:

Normed embedding length: 768
Norm of normed embedding: 1.000000

Kullanım alanları

Metin yerleştirmeleri, aşağıdakiler gibi çeşitli yaygın yapay zeka kullanım alanları için çok önemlidir:

  • Almayla Artırılmış Üretim (RAG): Yerleştirmeler, alakalı bilgileri alıp bir modelin bağlamına dahil ederek oluşturulan metnin kalitesini artırır.
  • Bilgi Alma: Giriş metni verildiğinde semantik olarak benzer metin veya dokümanları aramak için yerleştirilmiş öğeleri kullanın.

    Belge arama eğitimi

  • Anomali algılama: Yerleştirme gruplarını karşılaştırmak, gizli eğilimleri veya aykırı değerleri belirlemeye yardımcı olabilir.

    Anormallik algılama eğitimi

  • Sınıflandırma: Metni içeriğine göre otomatik olarak kategorilere ayırın (ör. duygu analizi veya spam algılama).

    Sınıflandırma eğitimi

  • Kümeleme: İlişkileri anlamanın etkili bir yolu, yerleştirmelerinizin kümelerini ve görselleştirmelerini oluşturmaktır.

    Kümeleme görselleştirme eğitimi

Yerleştirilmiş öğeleri depolama

Yerleştirmeleri üretime alırken yüksek boyutlu yerleştirmeleri verimli bir şekilde depolamak, dizine eklemek ve almak için vektör veritabanlarını kullanmak yaygın bir uygulamadır. Google Cloud, bu amaçla kullanılabilecek yönetilen veri hizmetleri sunar. Bu hizmetler arasında BigQuery, AlloyDB ve Cloud SQL yer alır.

Aşağıdaki eğitimlerde, Gemini Embedding ile diğer üçüncü taraf vektör veritabanlarının nasıl kullanılacağı gösterilmektedir.

Yerleştirme modelleri

Genel kullanıma açık model

Eski modeller

  • embedding-001 (14 Ağustos 2025'te desteği sonlandırılacak)
  • text-embedding-004 (14 Ocak 2026'da desteği sonlandırılacak)

Yerleştirilmiş öğeleri kullanma

Yeni içerik oluşturan üretken yapay zeka modellerinin aksine, Gemini Embedding modeli yalnızca giriş verilerinizin biçimini sayısal bir temsile dönüştürmek için tasarlanmıştır. Google, giriş verilerinizin biçimini istenen sayısal biçime dönüştüren bir yerleştirme modeli sağlamaktan sorumludur. Ancak kullanıcılar, girdikleri veriler ve ortaya çıkan yerleştirmelerle ilgili tüm sorumluluğu üstlenir. Gemini Embedding modelini kullanarak yüklediğiniz tüm içeriklerle ilgili gerekli haklara sahip olduğunuzu onaylarsınız. Başkalarının fikri mülkiyet haklarını veya gizlilik haklarını ihlal eden içerikler üretmeyin. Bu hizmeti kullanımınız Yasaklanan Kullanım Politikamıza ve Google Hizmet Şartları'na tabidir.

Yerleştirmelerle geliştirmeye başlama

Model özelliklerini keşfetmek ve yerleştirmelerinizi nasıl özelleştirip görselleştireceğinizi öğrenmek için yerleştirme hızlı başlangıç not defterine göz atın.