التضمينات

توفّر Gemini API نماذج تضمين النصوص لإنشاء عمليات تضمين للكلمات والعبارات والجمل والرموز البرمجية. مهام التضمين، مثل البحث الدلالي والتصنيف والتجميع، ما يوفّر نتائج أكثر دقة وملاءمةً للسياق مقارنةً بالأساليب المستندة إلى الكلمات الرئيسية

إنشاء أنظمة التوليد المعزّز بالاسترجاع (RAG) هو حالة استخدام شائعة لمنتجات الذكاء الاصطناعي. تؤدي التضمينات دورًا رئيسيًا في تحسين مخرجات النماذج بشكل كبير، من خلال تعزيز دقتها الوقائعية وتماسكها وثراء سياقها. إذا كنت تفضّل استخدام حلّ مُدار للتوليد المعزّز بالاسترجاع، أنشأنا أداة البحث عن الملفات التي تسهّل إدارة عملية التوليد المعزّز بالاسترجاع وتجعلها أكثر فعالية من حيث التكلفة.

إنشاء التضمينات

استخدِم طريقة embedContent لإنشاء تضمينات نصية:

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 "Content-Type: application/json" \
    -H "x-goog-api-key: ${GEMINI_API_KEY}" \
    -d '{
        "model": "models/gemini-embedding-001",
        "content": {
        "parts": [{
            "text": "What is the meaning of life?"
        }]
        }
    }'

يمكنك أيضًا إنشاء تضمينات لعدّة أجزاء في الوقت نفسه من خلال تمريرها كقائمة من السلاسل.

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 "Content-Type: application/json" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -d '{
    "content": {
        "parts": [
        {
            "text": "What is the meaning of life?"
        },
        {
            "text": "How much wood would a woodchuck chuck?"
        },
        {
            "text": "How does the brain work?"
        }
        ]
    },
    "taskType": "SEMANTIC_SIMILARITY"
    }'

تحديد نوع المهمة لتحسين الأداء

يمكنك استخدام التضمينات في مجموعة كبيرة من المهام، بدءًا من التصنيف وصولاً إلى البحث عن المستندات. يساعد تحديد نوع المهمة المناسب في تحسين عمليات التضمين للعلاقات المقصودة، ما يؤدي إلى زيادة الدقة والفعالية إلى أقصى حد. للحصول على قائمة كاملة بأنواع المهام المتوافقة، راجِع جدول أنواع المهام المتوافقة.

يوضّح المثال التالي كيف يمكنك استخدام SEMANTIC_SIMILARITY للتحقّق من مدى تشابه معاني سلاسل النصوص.

Python

from google import genai
from google.genai import types
import pandas as pd
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 = client.models.embed_content(
    model="gemini-embedding-001",
    contents=texts,
    config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")
)

# Create a 3x3 table to show the similarity matrix
df = pd.DataFrame(
    cosine_similarity([e.values for e in result.embeddings]),
    index=texts,
    columns=texts,
)

print(df)

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 "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -d '{
    "taskType": "SEMANTIC_SIMILARITY",
    "content": {
        "parts": [
        {
            "text": "What is the meaning of life?"
        },
        {
            "text": "How much wood would a woodchuck chuck?"
        },
        {
            "text": "How does the brain work?"
        }
        ]
    }
    }'

ستوضّح مقتطفات الرموز مدى تشابه مقاطع النص المختلفة مع بعضها البعض عند تشغيلها.

أنواع المهام المتوافقة

نوع المهمة الوصف أمثلة
SEMANTIC_SIMILARITY تضمينات محسَّنة لتقييم التشابه بين النصوص أنظمة الاقتراح، رصد المحتوى المكرّر
التصنيف تضمينات محسَّنة لتصنيف النصوص وفقًا لتصنيفات محدَّدة مسبقًا تحليل الآراء ورصد المحتوى غير المرغوب فيه
التجميع تكون عمليات التضمين محسّنة لتجميع النصوص استنادًا إلى أوجه التشابه بينها. تنظيم المستندات وأبحاث السوق ورصد القيم الشاذة
RETRIEVAL_DOCUMENT تضمينات محسّنة للبحث عن المستندات فهرسة المقالات أو الكتب أو صفحات الويب لتسهيل البحث فيها
RETRIEVAL_QUERY تكون عمليات التضمين محسّنة لطلبات البحث العامة. استخدِم RETRIEVAL_QUERY لطلبات البحث وRETRIEVAL_DOCUMENT للمستندات التي سيتم استرجاعها. تجربة مخصّصة على شبكة البحث
CODE_RETRIEVAL_QUERY تضمينات محسَّنة لاسترداد مجموعات الرموز استنادًا إلى طلبات بحث باللغة الطبيعية استخدِم CODE_RETRIEVAL_QUERY لطلبات البحث وRETRIEVAL_DOCUMENT لمجموعات الرموز البرمجية التي تريد استردادها. اقتراحات الرموز البرمجية والبحث
QUESTION_ANSWERING تضمينات للأسئلة في نظام الإجابة عن الأسئلة، تم تحسينها للعثور على المستندات التي تجيب عن السؤال استخدِم QUESTION_ANSWERING لطرح الأسئلة وRETRIEVAL_DOCUMENT لاسترداد المستندات. Chatbox
FACT_VERIFICATION تضمين عبارات تحتاج إلى التحقّق، مع تحسينها لاسترداد المستندات التي تتضمّن أدلة تؤيّد العبارة أو تدحضها استخدِم FACT_VERIFICATION للنص المستهدَف وRETRIEVAL_DOCUMENT للمستندات المطلوب استرجاعها أنظمة التحقّق الآلي من صحة الأخبار

التحكّم في حجم التضمين

يتم تدريب نموذج تضمين Gemini، gemini-embedding-001، باستخدام تقنية تعلُّم التمثيل المتداخل (MRL) التي تعلّم النموذج كيفية تعلُّم عمليات التضمين العالية الأبعاد التي تحتوي على مقاطع أولية (أو بادئات) مفيدة أيضًا، وهي إصدارات أبسط من البيانات نفسها.

استخدِم المَعلمة output_dimensionality للتحكّم في حجم متجه التضمين الناتج. يمكن أن يؤدي اختيار عدد أقل من الأبعاد الناتجة إلى توفير مساحة التخزين وزيادة كفاءة الحوسبة للتطبيقات اللاحقة، مع التضحية بالقليل من حيث الجودة. يتم تلقائيًا إنشاء تضمين ذي 3,072 بُعدًا، ولكن يمكنك اقتطاعه إلى حجم أصغر بدون فقدان الجودة لتوفير مساحة تخزين. ننصحك باستخدام أبعاد إخراج تبلغ 768 أو 1536 أو 3072.

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 'Content-Type: application/json' \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -d '{
        "content": {"parts":[{ "text": "What is the meaning of life?"}]},
        "output_dimensionality": 768
    }'

مثال على الناتج من مقتطف الرمز:

Length of embedding: 768

ضمان الجودة للأبعاد الأصغر

يتم تسوية تضمين الأبعاد 3072. تنتج التضمينات العادية تشابهًا دلاليًا أكثر دقة من خلال مقارنة اتجاه المتّجه، وليس حجمه. بالنسبة إلى السمات الأخرى، بما في ذلك 768 و1536، عليك تسوية التضمينات على النحو التالي:

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

مثال على الناتج من مقتطف الرمز هذا:

Normed embedding length: 768
Norm of normed embedding: 1.000000

يعرض الجدول التالي نتائج MTEB، وهو مقياس أداء شائع الاستخدام لعمليات التضمين، وذلك لمختلف السمات. والجدير بالذكر أنّ النتيجة توضّح أنّ الأداء لا يرتبط بشكل صارم بحجم سمة التضمين، إذ حقّقت السمات ذات الأبعاد المنخفضة نتائج مماثلة للسمات ذات الأبعاد الأعلى.

سمة MRL نتيجة MTEB
2048 68.16
1536 68.17
768 67.99
512 67.55
256 66.19
128 63.31

حالات الاستخدام

تُعدّ تضمينات النصوص ضرورية لمجموعة متنوّعة من حالات الاستخدام الشائعة للذكاء الاصطناعي، مثل:

تخزين التضمينات

عند نقل عمليات التضمين إلى مرحلة الإنتاج، من الشائع استخدام قواعد بيانات المتّجهات لتخزين عمليات التضمين العالية الأبعاد وفهرستها واسترجاعها بكفاءة. توفّر Google Cloud خدمات بيانات مُدارة يمكن استخدامها لهذا الغرض، بما في ذلك BigQuery وAlloyDB وCloud SQL.

توضّح البرامج التعليمية التالية كيفية استخدام قواعد بيانات متجهات تابعة لجهات خارجية أخرى مع Gemini Embedding.

إصدارات النماذج

الموقع الوصف
رمز النموذج

Gemini API

gemini-embedding-001

أنواع البيانات المتوافقة

الإدخال

نص

الناتج

تضمينات النص

حدود الرموز المميزة[*]

حد الرموز المميزة المدخلة

2,048

حجم سمة الإخراج

مرن، ويتوافق مع: 128 - 3072، الحجم المقترَح: 768 و1536 و3072

إصدارات
يمكنك الاطّلاع على أنماط إصدارات النماذج لمزيد من التفاصيل.
  • إصدار ثابت: gemini-embedding-001
آخر تعديل يونيو 2025

بالنسبة إلى نماذج Embeddings المتوقّفة نهائيًا، يُرجى الانتقال إلى صفحة الإيقافات النهائية.

التضمينات المجمّعة

إذا لم يكن وقت الاستجابة مشكلة، جرِّب استخدام نموذج Gemini Embeddings مع Batch API. يتيح ذلك معدل نقل بيانات أعلى بكثير بنسبة% 50 من سعر Embedding التلقائي. يمكنك العثور على أمثلة حول كيفية البدء في كتاب وصفات Batch API.

إشعار الاستخدام المسؤول

على عكس نماذج الذكاء الاصطناعي التوليدي التي تنشئ محتوًى جديدًا، يهدف نموذج Gemini Embedding إلى تحويل تنسيق بيانات الإدخال إلى تمثيل رقمي فقط. في حين أنّ Google مسؤولة عن توفير نموذج تضمين يحوّل تنسيق بيانات الإدخال إلى التنسيق الرقمي المطلوب، يحتفظ المستخدمون بالمسؤولية الكاملة عن البيانات التي يدخلونها وعمليات التضمين الناتجة. يشير استخدامك لنموذج Gemini Embedding إلى تأكيدك على امتلاك الحقوق اللازمة لأي محتوى يتم تحميله. ويجب عدم إنشاء محتوى ينتهك حقوق الملكية الفكرية أو حقوق الخصوصية للآخرين. يخضع استخدامك لهذه الخدمة لسياسة الاستخدام المحظور وبنود خدمة Google.

بدء إنشاء المحتوى باستخدام التضمينات

اطّلِع على دفتر ملاحظات البدء السريع الخاص بالتضمينات لاستكشاف إمكانات النموذج والتعرّف على كيفية تخصيص تضميناتك وعرضها بشكل مرئي.