API-ja Gemini ofron modele të ngulitura teksti për të gjeneruar ngulitje për fjalë, fraza, fjali dhe kod. Këto ngulitje themelore fuqizojnë detyra të avancuara të NLP-së, të tilla si kërkimi semantik, klasifikimi dhe grupimi, duke ofruar rezultate më të sakta dhe të ndërgjegjshme për kontekstin sesa qasjet e bazuara në fjalë kyçe.
Ndërtimi i sistemeve të Gjenerimit të Shtuar të Rikthimit (RAG) është një rast i zakonshëm përdorimi për integrimet. Integrimet luajnë një rol kyç në përmirësimin e ndjeshëm të rezultateve të modelit me saktësi faktike, koherencë dhe pasuri kontekstuale të përmirësuar. Ato rikuperojnë në mënyrë efikase informacionin përkatës nga bazat e njohurive, të përfaqësuara nga integrimet, të cilat më pas kalohen si kontekst shtesë në kërkesën hyrëse te modelet gjuhësore, duke i udhëzuar ato të gjenerojnë përgjigje më të informuara dhe të sakta.
Për të mësuar më shumë rreth varianteve të disponueshme të modelit të ngulitur, shihni seksionin Versionet e modelit . Për rendiment më të lartë shërbimi me gjysmën e çmimit, provoni Batch API Embedding .
Gjenerimi i ngulitjeve
Përdorni metodën embedContent për të gjeneruar ngulitje teksti:
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();
Shko
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))
}
PUSHTIM
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?"}]}
}'
Gjithashtu mund të gjeneroni ngulitje për disa pjesë njëkohësisht duke i kaluar ato si një listë vargjesh.
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();
Shko
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))
}
PUSHTIM
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:batchEmbedContents" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"requests": [{
"model": "models/gemini-embedding-001",
"content": {
"parts":[{
"text": "What is the meaning of life?"}]}, },
{
"model": "models/gemini-embedding-001",
"content": {
"parts":[{
"text": "How much wood would a woodchuck chuck?"}]}, },
{
"model": "models/gemini-embedding-001",
"content": {
"parts":[{
"text": "How does the brain work?"}]}, }, ]}' 2> /dev/null | grep -C 5 values
```
Specifikoni llojin e detyrës për të përmirësuar performancën
Mund të përdorni ngulitje për një gamë të gjerë detyrash, nga klasifikimi deri te kërkimi i dokumenteve. Specifikimi i llojit të duhur të detyrës ndihmon në optimizimin e ngulitjeve për marrëdhëniet e synuara, duke maksimizuar saktësinë dhe efikasitetin. Për një listë të plotë të llojeve të mbështetura të detyrave, shihni tabelën Llojet e mbështetura të detyrave .
Shembulli i mëposhtëm tregon se si mund ta përdorni SEMANTIC_SIMILARITY për të kontrolluar se sa të ngjashëm në kuptim janë vargjet e teksteve.
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();
Shko
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)
}
}
}
PUSHTIM
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 '{"task_type": "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?"}]}
}'
Më poshtë tregohet një shembull i rezultatit nga ky fragment kodi:
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
Llojet e detyrave të mbështetura
| Lloji i detyrës | Përshkrimi | Shembuj |
|---|---|---|
| NGJASHMËRI_SEMANTIKE | Integrimet janë optimizuar për të vlerësuar ngjashmërinë e tekstit. | Sistemet e rekomandimit, zbulimi i dyfishimeve |
| KLASIFIKIMI | Integrimet janë optimizuar për të klasifikuar tekstet sipas etiketave të paracaktuara. | Analiza e ndjenjës, zbulimi i spamit |
| GRUMBULLIM | Integrimet janë optimizuar për të grupuar tekstet bazuar në ngjashmëritë e tyre. | Organizimi i dokumenteve, hulumtimi i tregut, zbulimi i anomalive |
| RETRIEVAL_DOCUMENT | Integrime të optimizuara për kërkimin e dokumenteve. | Indeksimi i artikujve, librave ose faqeve të internetit për kërkim. |
| RETRIEVAL_QUERY | Integrimet janë optimizuar për pyetje të përgjithshme kërkimi. Përdorni RETRIEVAL_QUERY për pyetjet; RETRIEVAL_DOCUMENT për dokumentet që do të merren. | Kërkim i personalizuar |
| QËLLIMI_I_KODIT_IT | Integrime të optimizuara për rikuperimin e blloqeve të kodit bazuar në pyetje në gjuhën natyrore. Përdorni CODE_RETRIEVAL_QUERY për pyetjet; RETRIEVAL_DOCUMENT për blloqet e kodit që do të rikuperohen. | Sugjerime kodi dhe kërkim |
| PËRGJIGJE_PYETJESH | Përfshirje për pyetje në një sistem pyetje-përgjigjesh, të optimizuar për gjetjen e dokumenteve që i përgjigjen pyetjes. Përdorni QUESTION_ANSWERING për pyetjet; RETRIEVAL_DOCUMENT për dokumentet që do të merren. | Kutia e bisedave |
| VERIFIKIMI I FAKTIT | Vendosje për deklarata që duhen verifikuar, të optimizuara për marrjen e dokumenteve që përmbajnë prova që mbështesin ose hedhin poshtë deklaratën. Përdorni FACT_VERIFICATION për tekstin e synuar; RETRIEVAL_DOCUMENT për dokumentet që do të merren. | Sisteme të automatizuara të verifikimit të fakteve |
Kontrollimi i madhësisë së ngulitur
Modeli i ngulitur i Gemini-t, gemini-embedding-001 , trajnohet duke përdorur teknikën e Mësimit të Përfaqësimit Matryoshka (MRL) e cila i mëson një modeli të mësojë ngulitje me dimensione të larta që kanë segmente fillestare (ose parashtesa) të cilat janë gjithashtu versione të dobishme dhe më të thjeshta të të njëjtave të dhëna.
Përdorni parametrin output_dimensionality për të kontrolluar madhësinë e vektorit të ngulitur të daljes. Zgjedhja e një dimensionaliteti më të vogël të daljes mund të kursejë hapësirë ruajtjeje dhe të rrisë efikasitetin llogaritës për aplikacionet pasuese, ndërkohë që sakrifikon pak për sa i përket cilësisë. Si parazgjedhje, ajo nxjerr një ngulitur 3072-dimensional, por mund ta shkurtoni atë në një madhësi më të vogël pa humbur cilësinë për të kursyer hapësirë ruajtjeje. Ne rekomandojmë përdorimin e dimensioneve të daljes 768, 1536 ose 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();
Shko
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)
}
PUSHTIM
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 '{
"content": {"parts":[{ "text": "What is the meaning of life?"}]},
"output_dimensionality": 768
}'
Shembull rezultati nga fragmenti i kodit:
Length of embedding: 768
Sigurimi i cilësisë për dimensione më të vogla
Vendosja e dimensionit 3072 është e normalizuar. Vendosjet e normalizuara prodhojnë ngjashmëri semantike më të saktë duke krahasuar drejtimin vektorial, jo madhësinë. Për dimensione të tjera, duke përfshirë 768 dhe 1536, duhet të normalizoni vendosjet si më poshtë:
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
Shembull rezultati nga ky fragment kodi:
Normed embedding length: 768
Norm of normed embedding: 1.000000
Tabela e mëposhtme tregon rezultatet e MTEB, një pikë referimi e përdorur zakonisht për integrimet, për dimensione të ndryshme. Veçanërisht, rezultati tregon se performanca nuk është e lidhur ngushtë me madhësinë e dimensionit të integrimit, me dimensionet më të ulëta që arrijnë rezultate të krahasueshme me homologët e tyre me dimensione më të larta.
| Dimensioni MRL | Rezultati i MTEB |
|---|---|
| 2048 | 68.16 |
| 1536 | 68.17 |
| 768 | 67.99 |
| 512 | 67.55 |
| 256 | 66.19 |
| 128 | 63.31 |
Rastet e përdorimit
Integrimet e tekstit janë thelbësore për një sërë rastesh të zakonshme përdorimi të IA-së, siç janë:
- Gjenerimi i Shtuar i Rikthimit (RAG): Integrimet përmirësojnë cilësinë e tekstit të gjeneruar duke rikthyer dhe përfshirë informacionin përkatës në kontekstin e një modeli.
Rikthimi i informacionit: Kërko tekstin ose dokumentet më të ngjashme semantikisht duke pasur parasysh një tekst të dhënë.
Rirenditja e kërkimit : Përparësoni artikujt më të rëndësishëm duke vlerësuar semantikisht rezultatet fillestare kundrejt pyetjes.
Zbulimi i anomalive: Krahasimi i grupeve të ngulitjeve mund të ndihmojë në identifikimin e tendencave të fshehura ose vlerave të jashtëzakonshme.
Klasifikimi: Kategorizoni automatikisht tekstin bazuar në përmbajtjen e tij, siç është analiza e ndjenjave ose zbulimi i spamit
Grupimi: Kapni në mënyrë efektive marrëdhëniet komplekse duke krijuar grupe dhe vizualizime të ngulitjeve tuaja.
Ruajtja e ngulitjeve
Ndërsa i çoni ngulitje në prodhim, është e zakonshme të përdorni baza të dhënash vektoriale për të ruajtur, indeksuar dhe rikuperuar në mënyrë efikase ngulitje me dimensione të larta. Google Cloud ofron shërbime të të dhënave të menaxhuara që mund të përdoren për këtë qëllim, duke përfshirë BigQuery , AlloyDB dhe Cloud SQL .
Tutorialet e mëposhtme tregojnë se si të përdorni baza të dhënash vektoriale të palëve të treta me Gemini Embedding.
Versionet e modelit
| Pronë | Përshkrimi |
|---|---|
| Kodi i modelit të | API-ja e Gemini-t |
| llojet e të dhënave të mbështetura | Hyrje Tekst Prodhimi Vendosja e tekstit |
| Limitet token-it [*] | Limiti i tokenit të hyrjes 2,048 Madhësia e dimensionit të daljes Fleksibël, mbështet: 128 - 3072, i rekomanduar: 768, 1536, 3072 |
| Versione |
|
| Përditësimi më i fundit | Qershor 2025 |
Vendosje në grup
Nëse vonesa nuk është shqetësuese, provoni të përdorni modelin Gemini Embeddings me Batch API . Kjo lejon një rendiment shumë më të lartë me 50% të çmimeve interaktive të Embedding. Gjeni shembuj se si të filloni në librin e gatimit të Batch API .
Njoftim për përdorim të përgjegjshëm
Ndryshe nga modelet gjeneruese të IA-së që krijojnë përmbajtje të re, modeli Gemini Embedding ka për qëllim vetëm të transformojë formatin e të dhënave tuaja hyrëse në një përfaqësim numerik. Ndërsa Google është përgjegjës për ofrimin e një modeli integrimi që transformon formatin e të dhënave tuaja hyrëse në formatin numerik të kërkuar, përdoruesit mbajnë përgjegjësi të plotë për të dhënat që ata futin dhe integrimet që rezultojnë. Duke përdorur modelin Gemini Embedding, ju konfirmoni se keni të drejtat e nevojshme për çdo përmbajtje që ngarkoni. Mos gjeneroni përmbajtje që shkel të drejtat e pronësisë intelektuale ose të privatësisë së të tjerëve. Përdorimi juaj i këtij shërbimi i nënshtrohet Politikës sonë të Përdorimit të Ndaluar dhe Kushteve të Shërbimit të Google .
Filloni ndërtimin me integrime
Shikoni fletoren e nisjes së shpejtë të ngulitjeve për të eksploruar aftësitë e modelit dhe për të mësuar se si të personalizoni dhe vizualizoni ngulitjete tuaja.
Njoftim për heqjen dorë nga modelet e trashëguara
Modelet e mëposhtme do të hiqen nga përdorimi në tetor 2025: - embedding-001 - embedding-gecko-001 - gemini-embedding-exp-03-07 ( gemini-embedding-exp )