توفّر Gemini API نماذج لتضمين النصوص من أجل إنشاء عمليات تضمين للكلمات والعبارات والجمل والرموز البرمجية. تتيح هذه التضمينات الأساسية تنفيذ مهام متقدّمة في معالجة اللغة الطبيعية، مثل البحث الدلالي والتصنيف والتجميع، ما يوفّر نتائج أكثر دقة ومراعية للسياق مقارنةً بالطرق المستندة إلى الكلمات الرئيسية.
يُعدّ إنشاء أنظمة الاسترجاع المعزّز بالإنشاء (RAG) إحدى حالات الاستخدام الشائعة لعمليات التضمين. تؤدي التضمينات دورًا أساسيًا في تحسين مخرجات النماذج بشكل كبير، من خلال تعزيز دقتها الوقائعية وتماسكها وثراء سياقها. تسترجع هذه الأدوات المعلومات ذات الصلة بكفاءة من قواعد المعرفة، والتي يتم تمثيلها من خلال التضمينات، ثم يتم تمريرها كسياق إضافي في طلب الإدخال إلى نماذج اللغة، ما يوجّهها لإنشاء ردود أكثر دقة واستنارة.
بالنسبة إلى التطبيقات على مستوى المؤسسة وأحمال العمل الكبيرة، ننصحك باستخدام نماذج التضمين على Vertex AI.
إنشاء التضمينات
استخدِم طريقة 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();
انتقال
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?"}]}
}'
يمكنك أيضًا إنشاء تضمينات لعدّة أجزاء في الوقت نفسه من خلال تمريرها كقائمة من السلاسل.
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();
انتقال
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?"}]}
]
}'
تحديد نوع المهمة لتحسين الأداء
يمكنك استخدام التضمينات في مجموعة كبيرة من المهام، بدءًا من التصنيف إلى البحث عن المستندات. يساعد تحديد نوع المهمة المناسب في تحسين التضمينات للعلاقات المقصودة، ما يؤدي إلى زيادة الدقة والفعالية إلى أقصى حد. للحصول على قائمة كاملة بأنواع المهام المتوافقة، راجِع جدول أنواع المهام المتوافقة.
يوضّح المثال التالي كيف يمكنك استخدام
SEMANTIC_SIMILARITY
للتحقّق من مدى تشابه معاني سلاسل النصوص.
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();
انتقال
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"
}
}'
في ما يلي مثال على الناتج من مقتطف الرمز هذا:
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
أنواع المهام المتوافقة
نوع المهمة | الوصف | أمثلة |
---|---|---|
SEMANTIC_SIMILARITY | تضمينات محسَّنة لتقييم التشابه بين النصوص | أنظمة الاقتراحات ورصد المحتوى المكرّر |
التصنيف | تضمينات محسَّنة لتصنيف النصوص وفقًا لتصنيفات محدَّدة مسبقًا | تحليل الآراء ورصد المحتوى غير المرغوب فيه |
التجميع | تكون عمليات التضمين محسّنة لتجميع النصوص استنادًا إلى أوجه التشابه بينها. | تنظيم المستندات، وأبحاث السوق، ورصد القيم الشاذة |
RETRIEVAL_DOCUMENT | تضمينات محسَّنة للبحث عن المستندات | فهرسة المقالات أو الكتب أو صفحات الويب لتسهيل البحث فيها |
RETRIEVAL_QUERY |
تكون عمليات التضمين محسّنة لطلبات البحث العامة.
استخدِم RETRIEVAL_QUERY لطلبات البحث وRETRIEVAL_DOCUMENT للمستندات التي سيتم استرجاعها.
|
تجربة مخصّصة على شبكة البحث |
CODE_RETRIEVAL_QUERY |
عمليات التضمين المحسَّنة لاسترداد مجموعات الرموز استنادًا إلى طلبات البحث باللغة الطبيعية
استخدِم CODE_RETRIEVAL_QUERY للاستعلامات وRETRIEVAL_DOCUMENT لكتل الرموز البرمجية التي سيتم استردادها.
|
اقتراحات الرموز البرمجية والبحث |
QUESTION_ANSWERING |
تضمينات للأسئلة في نظام الإجابة عن الأسئلة، تم تحسينها للعثور على المستندات التي تجيب عن السؤال
استخدِم QUESTION_ANSWERING للأسئلة وRETRIEVAL_DOCUMENT للمستندات التي تريد استرجاعها.
|
مربّع الدردشة |
FACT_VERIFICATION |
تضمين عبارات تحتاج إلى التحقّق، مع تحسينها لاسترداد المستندات التي تتضمّن أدلة تؤيّد العبارة أو تدحضها
استخدِم FACT_VERIFICATION للنص المستهدَف وRETRIEVAL_DOCUMENT للمستندات المطلوب استرجاعها
|
أنظمة التحقّق الآلي من صحة الأخبار |
التحكّم في حجم التضمين
يتم تدريب نموذج تضمين Gemini، gemini-embedding-001
، باستخدام تقنية Matryoshka Representation Learning (MRL) التي تعلّم النموذج كيفية إنشاء عمليات تضمين عالية الأبعاد تتضمّن مقاطع أولية (أو بادئات) مفيدة أيضًا، وهي عبارة عن إصدارات أبسط من البيانات نفسها. يمكنك اختيار استخدام التضمين الكامل ذي الأبعاد 3072، أو يمكنك اقتطاعه إلى حجم أصغر بدون فقدان الجودة لتوفير مساحة تخزين. للحصول على أفضل جودة، ننصحك باستخدام أول 768 و1536.
باستخدام المَعلمة output_dimensionality
، يمكن للمستخدمين التحكّم في حجم
المتّجه المضمّن الناتج. يمكن أن يؤدي اختيار عدد أقل من الأبعاد الناتجة إلى توفير مساحة التخزين وزيادة كفاءة الحوسبة للتطبيقات اللاحقة، مع التضحية بالقليل من حيث الجودة.
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();
انتقال
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
}
}'
مثال على الناتج:
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
حالات الاستخدام
تُعدّ تضمينات النصوص ضرورية لمجموعة متنوّعة من حالات الاستخدام الشائعة للذكاء الاصطناعي، مثل:
- الإنشاء المعزّز بالاسترجاع (RAG): تعمل التضمينات على تحسين جودة النص الذي يتم إنشاؤه من خلال استرجاع المعلومات ذات الصلة ودمجها في سياق النموذج.
استرجاع المعلومات: يمكنك استخدام التضمينات للبحث عن نصوص أو مستندات متشابهة دلاليًا استنادًا إلى جزء من النص المدخل.
رصد القيم الشاذة: يمكن أن تساعد مقارنة مجموعات التضمينات في تحديد المؤشرات أو القيم الشاذة المخفية.
التصنيف: تصنيف النصوص تلقائيًا استنادًا إلى محتواها، مثل تحليل الآراء أو رصد الرسائل غير المرغوب فيها
التجميع: من الطرق الفعالة لفهم العلاقات إنشاء مجموعات وتصوّرات لعمليات التضمين.
تخزين التضمينات
عند نقل عمليات التضمين إلى مرحلة الإنتاج، من الشائع استخدام قواعد بيانات المتجهات لتخزين عمليات التضمين العالية الأبعاد وفهرستها واسترجاعها بكفاءة. توفّر Google Cloud خدمات بيانات مُدارة يمكن استخدامها لهذا الغرض، بما في ذلك BigQuery وAlloyDB وCloud SQL.
توضّح البرامج التعليمية التالية كيفية استخدام قواعد بيانات متّجهة تابعة لجهات خارجية أخرى مع Gemini Embedding.
- برامج تعليمية حول ChromaDB
- فيديوهات QDrant التعليمية
- برامج Weaviate التعليمية
- برامج Pinecone التعليمية
نماذج التضمين
النموذج المتاح للجميع
النماذج القديمة
embedding-001
(سيتم إيقافها نهائيًا في 14 أغسطس 2025)text-embedding-004
(سيتم إيقافها نهائيًا في 14 يناير 2026)
استخدام التضمينات
على عكس نماذج الذكاء الاصطناعي التوليدي التي تنشئ محتوًى جديدًا، يهدف نموذج Gemini Embedding إلى تحويل تنسيق بيانات الإدخال إلى تمثيل رقمي فقط. في حين أنّ Google مسؤولة عن توفير نموذج تضمين يحوّل تنسيق بيانات الإدخال إلى التنسيق الرقمي المطلوب، يحتفظ المستخدمون بالمسؤولية الكاملة عن البيانات التي يدخلونها وعمليات التضمين الناتجة. يشير استخدامك لنموذج Gemini Embedding إلى تأكيدك على امتلاك الحقوق اللازمة لأي محتوى يتم تحميله. لا يجوز إنشاء محتوى ينتهك حقوق الملكية الفكرية أو حقوق الخصوصية الخاصة بالآخرين. يخضع استخدامك لهذه الخدمة لسياسة الاستخدام المحظور وبنود خدمة Google.
بدء التطوير باستخدام التضمينات
اطّلِع على دفتر ملاحظات البدء السريع الخاص بالتضمينات لاستكشاف إمكانات النموذج والتعرّف على كيفية تخصيص التضمينات وعرضها بشكل مرئي.