Gemini API มีโมเดลการฝังข้อความเพื่อสร้างการฝังสำหรับคำ วลี ประโยค และโค้ด งานการฝัง เช่น การค้นหาเชิงความหมาย การจัดประเภท และการจัดกลุ่ม ซึ่งให้ผลลัพธ์ที่แม่นยำและคำนึงถึงบริบทมากกว่า แนวทางที่อิงตามคีย์เวิร์ด
การสร้างระบบการสร้างข้อความตามการดึงข้อมูล (RAG) เป็น Use Case ทั่วไปสำหรับ ผลิตภัณฑ์ AI Embedding มีบทบาทสำคัญในการปรับปรุงเอาต์พุตของโมเดลอย่างมาก ด้วยความถูกต้องตามข้อเท็จจริง ความสอดคล้อง และความสมบูรณ์ตามบริบทที่ได้รับการปรับปรุง หากต้องการใช้โซลูชัน RAG ที่มีการจัดการ เราได้สร้างเครื่องมือการค้นหาไฟล์ ซึ่งช่วยให้การจัดการ 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 เพื่อตรวจสอบว่าข้อความ 2 ข้อความมีความหมายคล้ายกันเพียงใด
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 สำหรับเอกสารที่จะดึงข้อมูล
|
แชทบ็อกซ์ |
| FACT_VERIFICATION |
การฝังสำหรับข้อความที่ต้องได้รับการยืนยัน ซึ่งได้รับการเพิ่มประสิทธิภาพสำหรับการดึงเอกสารที่มีหลักฐานสนับสนุนหรือหักล้างข้อความ
ใช้ FACT_VERIFICATION สำหรับข้อความเป้าหมาย RETRIEVAL_DOCUMENT สำหรับเอกสารที่จะดึงข้อมูล
|
ระบบตรวจสอบข้อเท็จจริงอัตโนมัติ |
การควบคุมขนาดการฝัง
โมเดลการฝัง Gemini gemini-embedding-001 ได้รับการฝึกโดยใช้เทคนิค Matryoshka Representation Learning (MRL) ซึ่งสอนให้โมเดลgemini-embedding-001เรียนรู้การฝังแบบหลายมิติที่มีส่วนเริ่มต้น (หรือคำนำหน้า) ซึ่งเป็นเวอร์ชันที่ง่ายกว่าและมีประโยชน์ของข้อมูลเดียวกัน
ใช้พารามิเตอร์ output_dimensionality เพื่อควบคุมขนาดของ
เวกเตอร์การฝังเอาต์พุต การเลือกมิติข้อมูลเอาต์พุตที่เล็กลงจะช่วยประหยัด
พื้นที่เก็บข้อมูลและเพิ่มประสิทธิภาพการคำนวณสำหรับแอปพลิเคชันดาวน์สตรีม
โดยที่คุณภาพไม่ลดลงมากนัก โดยค่าเริ่มต้น โมเดลจะสร้างการฝังที่มีมิติข้อมูล 3072 แต่คุณสามารถตัดให้มีขนาดเล็กลงได้โดยไม่สูญเสียคุณภาพเพื่อประหยัดพื้นที่เก็บข้อมูล เราขอแนะนำให้ใช้ขนาดเอาต์พุต 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 |
กรณีการใช้งาน
การฝังข้อความมีความสําคัญอย่างยิ่งสําหรับกรณีการใช้งาน AI ทั่วไปที่หลากหลาย เช่น
- การสร้างแบบดึงข้อมูลเสริม (RAG): การฝังช่วยเพิ่มคุณภาพ ของข้อความที่สร้างขึ้นโดยการดึงและรวมข้อมูลที่เกี่ยวข้องเข้ากับ บริบทของโมเดล
การดึงข้อมูล: ค้นหาข้อความหรือเอกสารที่มีความหมายคล้ายกันมากที่สุดเมื่อได้รับข้อความนำเข้า
การจัดอันดับผลการค้นหาใหม่: จัดลำดับความสำคัญของรายการที่เกี่ยวข้องที่สุดโดยใช้การให้คะแนนความหมายของผลการค้นหาเริ่มต้นเทียบกับคำค้นหา
การตรวจจับความผิดปกติ: การเปรียบเทียบกลุ่มการฝังจะช่วยระบุ แนวโน้มที่ซ่อนอยู่หรือค่าผิดปกติ
การจัดประเภท: จัดหมวดหมู่ข้อความโดยอัตโนมัติตามเนื้อหา เช่น การวิเคราะห์ความเห็นหรือการตรวจหาจดหมายขยะ
การจัดกลุ่ม: ทำความเข้าใจความสัมพันธ์ที่ซับซ้อนได้อย่างมีประสิทธิภาพโดยการสร้างคลัสเตอร์ และการแสดงภาพการฝัง
การจัดเก็บ Embedding
เมื่อนำการฝังไปใช้ในเวอร์ชันที่ใช้งานจริง คุณมักจะใช้ฐานข้อมูลเวกเตอร์เพื่อจัดเก็บ จัดทำดัชนี และเรียกข้อมูลการฝังที่มีมิติสูงได้อย่างมีประสิทธิภาพ Google Cloud มีบริการข้อมูลที่มีการจัดการซึ่ง ใช้เพื่อวัตถุประสงค์นี้ได้ รวมถึง BigQuery AlloyDB และ Cloud SQL
บทแนะนำต่อไปนี้แสดงวิธีใช้ฐานข้อมูลเวกเตอร์ของบุคคลที่สามอื่นๆ กับ Gemini Embedding
เวอร์ชันของโมเดล
| พร็อพเพอร์ตี้ | คำอธิบาย |
|---|---|
| รหัสโมเดล |
Gemini API
|
| ประเภทข้อมูลที่รองรับ |
อินพุต ข้อความ เอาต์พุต การฝังข้อความ |
| ขีดจำกัดของโทเค็น[*] |
ขีดจำกัดของโทเค็นอินพุต 2,048 ขนาดมิติข้อมูลเอาต์พุต ยืดหยุ่น รองรับ: 128 - 3072, แนะนำ: 768, 1536, 3072 |
| เวอร์ชัน |
|
| การอัปเดตล่าสุด | มิถุนายน 2025 |
สำหรับโมเดลการฝังที่เลิกใช้งานแล้ว โปรดไปที่หน้าการเลิกใช้งาน
การฝังแบบกลุ่ม
หากไม่กังวลเรื่องเวลาในการตอบสนอง ให้ลองใช้โมเดลการฝัง Gemini กับ Batch API ซึ่งจะช่วยให้มีปริมาณงานที่สูงขึ้นมากที่ 50% ของราคา Embedding เริ่มต้น ดูตัวอย่างวิธีเริ่มต้นใช้งานได้ในคู่มือการใช้งาน Batch API
ประกาศเกี่ยวกับการใช้งานอย่างมีความรับผิดชอบ
โมเดลการฝัง Gemini มีจุดประสงค์เพื่อเปลี่ยนรูปแบบข้อมูลอินพุตให้เป็นการแสดงตัวเลขเท่านั้น ซึ่งแตกต่างจากโมเดล Generative AI ที่สร้างเนื้อหาใหม่ แม้ว่า Google จะมีหน้าที่รับผิดชอบในการจัดหาโมเดลการฝัง ที่แปลงรูปแบบของข้อมูลอินพุตเป็นรูปแบบตัวเลขที่ร้องขอ แต่ผู้ใช้ยังคงมีหน้าที่รับผิดชอบอย่างเต็มที่ต่อข้อมูลที่ป้อนและการฝังที่ได้ การใช้โมเดล Gemini Embedding เป็นการยืนยันว่าคุณมีสิทธิ์ที่จำเป็นในเนื้อหาใดๆ ที่คุณอัปโหลด อย่าสร้างเนื้อหาที่ ละเมิดสิทธิในทรัพย์สินทางปัญญาหรือสิทธิด้านความเป็นส่วนตัวของผู้อื่น การใช้บริการนี้เป็นไปตามนโยบายการใช้งานที่ไม่อนุญาตและข้อกำหนดในการให้บริการของ Google
เริ่มสร้างด้วยการฝัง
ดูสมุดบันทึกการเริ่มต้นใช้งานอย่างรวดเร็วของ Embedding เพื่อสำรวจความสามารถของโมเดลและดูวิธีปรับแต่งและแสดงภาพ Embedding