Gemini API のエンベディング

Gemini API のエンベディング サービスは、単語、フレーズ、文の最先端のエンベディングを生成します。生成されたエンベディングは、セマンティック検索、テキスト分類、クラスタリングなどの自然言語処理(NLP)タスクに使用できます。

このページでは、エンベディングについて簡単に説明し、エンベディング サービスの主なユースケースをいくつか紹介します。

エンベディングとは

テキスト エンベディングは、テキストを数値座標(ベクトルと呼ばれる)に変換する自然言語処理(NLP)手法であり、n 次元空間にプロットできます。このアプローチでは、テキストをリレーショナル データとして扱い、そのデータでモデルをトレーニングできます。

エンベディングはセマンティックな意味とコンテキストをキャプチャするため、意味が似ているテキストはより近いエンベディングになります。たとえば、「犬を獣医に連れて行った」と「猫を獣医に連れて行った」という文は、どちらも類似したコンテキストを記述しているため、ベクトル空間内で互いに近いエンベディングを持ちます。

エンベディングを使用すると、さまざまなテキストを比較し、それぞれの関連性を理解できます。たとえば、「cat」と「dog」というテキストのエンベディングが近接している場合、これらの単語は意味やコンテキストが類似していると推測できます。このアビリティにより、次のセクションで説明するさまざまなユースケースが可能になります。

ユースケース

テキスト エンベディングは、次のようなさまざまな NLP ユースケースで使用されます。

  • 情報の取得: エンベディングを使用して、入力テキストから意味的に類似したテキストを取得できます。セマンティック検索、質問への回答、要約などの情報検索システムでは、さまざまなアプリケーションがサポートされます。
  • 分類: エンベディングを使用してモデルをトレーニングし、ドキュメントをカテゴリに分類できます。たとえば、ユーザー コメントを否定的または肯定的に分類する場合は、エンベディング サービスを使用して各コメントのベクトル表現を取得し、分類器をトレーニングします。
  • クラスタリング: テキストのベクトルを比較することで、類似度や相違点を把握できます。この機能を使用すると、類似のテキストやドキュメントをグループ化するクラスタリング モデルをトレーニングし、データの異常を検出できます。
  • ベクトル データベース: 生成されたエンベディングをベクトル データベースに保存することで、NLP アプリケーションの精度と効率を改善できます。ベクトル データベースを使用してテキスト プロンプトを数値ベクトルに変換する方法については、次のチュートリアルをご覧ください。

Gemini エンベディング モデル

Gemini API には、テキスト エンベディングを生成するモデルとして、テキスト エンベディングエンベディングの 2 つがあります。テキスト エンベディングはエンベディング モデルの更新版で、768 ディメンション未満の弾力性のあるエンベディング サイズを提供します。弾力性のあるエンベディングでは、出力次元が小さくなり、パフォーマンスの低下を最小限に抑えながら、コンピューティングとストレージの費用を節約できる可能性があります。

新しいプロジェクトやアプリケーションにテキスト エンベディングを使用する。アプリケーションでテキスト エンベディングを使用するように移行できない場合にのみ、エンベディング モデルを使用する必要があります。

Gemini API を使用してエンベディングを生成する

embedContent メソッドを使用して、テキスト エンベディングを生成します。

Python

result = genai.embed_content(
model="models/text-embedding-004",
content="What is the meaning of life?",
task_type="retrieval_document",
title="Embedding of single string")

# 1 input > 1 vector output
print(str(result['embedding'])[:50], '... TRIMMED]')

実行可能なサンプル全体については、スタートガイドをご覧ください。

Go

ctx := context.Background()
// Access your API key as an environment variable (see our Getting Started tutorial)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
log.Fatal(err)
}
defer client.Close()
// For embeddings, use the Text Embeddings model
em := client.EmbeddingModel("text-embedding-004")
res, err := em.EmbedContent(ctx, genai.Text("The quick brown fox jumps over the lazy dog."))

if err != nil {
panic(err)
}
fmt.Println(res.Embedding.Values)

実行可能なサンプル全体については、スタートガイドをご覧ください。

Node.js

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see our Getting Started tutorial)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

async function run() {
// For embeddings, use the Text Embeddings model
const model = genAI.getGenerativeModel({ model: "text-embedding-004"});

const text = "The quick brown fox jumps over the lazy dog."

const result = await model.embedContent(text);
const embedding = result.embedding;
console.log(embedding.values);
}

run();

実行可能なサンプル全体については、スタートガイドをご覧ください。

Dart(Flutter)

final model = GenerativeModel(model: 'text-embedding-004', apiKey: apiKey);
final content = Content.text('The quick brown fox jumps over the lazy dog.');
final result = await model.embedContent(content);
print(result.embedding.values);

実行可能なサンプル全体については、スタートガイドをご覧ください。

curl

curl "https://generativelanguage.googleapis.com/v1beta/models/text-embedding-004:embedContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/text-embedding-004",
    "content": {
    "parts":[{
    "text": "Hello world"}]}, }' 2> /dev/null | head

実行可能な完全な例については、GitHub の REST クックブックによるエンベディング クイックスタートをご覧ください。

次のステップ