Gemini API obsługuje kilka modeli embeddingu, które generują embeddingi słów, wyrażeń, kodu i zdań. Uzyskane w ten sposób embeddingi można następnie wykorzystać do zadań takich jak wyszukiwanie semantyczne, klasyfikacja tekstu czy grupowanie.
Co to są wbudowane modele?
Umieszczanie to liczbowe reprezentacje tekstu (lub innych formatów multimediów), które odzwierciedlają relacje między danymi wejściowymi. Wstawianie tekstu polega na konwertowaniu tekstu na tablice liczb zmiennoprzecinkowych, czyli wektorów. Te wektory są zaprojektowane tak, aby odzwierciedlać znaczenie tekstu. Długość tablicy wektorów to wymiar wektora. Fragment tekstu może być reprezentowany przez wektor zawierający setki wymiarów.
Reprezentacje właściwościowe uchwytują znaczenie semantyczne i kontekst, dzięki czemu teksty o podobnym znaczeniu mają „bliższe” reprezentacje. Na przykład zdania „Zabiorę psa do weterynarza” i „Zabiorę kota do weterynarza” będą miały wbudowane elementy, które są blisko siebie w przestrzeni wektorowej.
Za pomocą wektorów własnego podobieństwa możesz porównywać różne teksty i poznawać ich wzajemne zależności. Jeśli na przykład kody uczenia głębokiego tekstu „kot” i „pies” są blisko siebie, można wywnioskować, że te słowa są podobne pod względem znaczenia, kontekstu lub obu tych czynników. Umożliwia to stosowanie AI w różnych typowych przypadkach.
Generowanie wektorów
Aby wygenerować ukryte reprezentacje tekstu, użyj metody embedContent
:
Python
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)
JavaScript
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();
Przeczytaj
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)
REST
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?"}]}
}'
Możesz też wygenerować embeddingi dla wielu kawałków naraz, przekazując je jako listę ciągów znaków.
Typy zadań
Podczas tworzenia systemów generowania wspomaganego przez wyszukiwanie w zapisanych informacjach (RAG) często stosuje się wektory dystrybucyjne tekstu do wyszukiwania podobieństw. W niektórych przypadkach może to obniżyć jakość, ponieważ pytania i ich odpowiedzi nie są podobne pod względem semantycznym. Na przykład pytanie „Dlaczego niebo jest niebieskie?” i odpowiedź „Rozproszenie światła słonecznego powoduje niebieski kolor” mają wyraźnie różne znaczenia, co oznacza, że system RAG nie będzie automatycznie rozpoznawał ich wzajemnych relacji.
Typy zadań umożliwiają generowanie zoptymalizowanych wektorów w przypadku określonych zadań, co pozwala zaoszczędzić czas i pieniądze oraz poprawić wydajność.
Python
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)
JavaScript
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();
REST
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"
}'
Obsługiwane typy zadań
Typ zadania | Opis |
---|---|
SEMANTIC_SIMILARITY |
Służy do generowania wektorów osadzonych, które są optymalizowane pod kątem oceny podobieństwa tekstu. |
CLASSIFICATION |
Służy do generowania wektorów, które są optymalizowane pod kątem klasyfikowania tekstów według wstępnie zdefiniowanych etykiet. |
CLUSTERING |
Służy do generowania wektorów, które są optymalizowane pod kątem grupowania tekstów na podstawie ich podobieństw. |
RETRIEVAL_DOCUMENT , RETRIEVAL_QUERY , QUESTION_ANSWERING i FACT_VERIFICATION |
Służy do generowania elementów zastępczych zoptymalizowanych pod kątem wyszukiwania dokumentów lub pobierania informacji. |
CODE_RETRIEVAL_QUERY |
Służy do pobierania bloku kodu na podstawie zapytania w języku naturalnym, np. sortowania tablicy lub odwracania połączonej listy. Wstawianie bloków kodu jest obliczane za pomocą funkcji RETRIEVAL_DOCUMENT . |
Przypadki użycia
Węzły tekstowe są używane w różnych typowych przypadkach użycia AI, takich jak:
Wyszukiwanie informacji: dzięki wektorom dystrybucyjnym możesz pobrać tekst semantycznie podobny do podanego przez użytkownika.
Klasteryzacja: porównanie grup wektorów zagęszczenia może pomóc w identyfikacji ukrytych trendów.
Baza danych wektorowych: podczas wdrażania różnych zastosowań wektorów dystrybucyjnych w środowisku produkcyjnym często przechowuje się je w bazie danych wektorowych.
Klasyfikacja: możesz trenować model za pomocą wektorów zanurzonych, aby klasyfikować dokumenty według kategorii.
Modele wektora dystrybucyjnego
Gemini API udostępnia 3 modele, które generują wektory dystrybucyjne tekstu:
Co dalej?
Zapoznaj się z notebookiem z krótkim wprowadzeniem do kodowania za pomocą embeddingów.