メインコンテンツへスキップ

概要

埋め込み(embedding)は、テキストの意味を数値ベクトルとして表現する方法です。これにより、テキスト同士の「距離」や「類似度」を計算できます。 セマンティック検索、クラスタリング、レコメンド、異常検知、分類など、多くの AI アプリケーションの基盤になります。YouRouter はシンプルで統一された API で主要な埋め込みモデルにアクセスできます。

使い方

from openai import OpenAI

client = OpenAI(
    api_key="your-api-key-here",
    base_url="https://api.yourouter.ai/v1"
)

response = client.embeddings.create(
    input="The quick brown fox jumps over the lazy dog",
    model="text-embedding-ada-002",
)

embedding = response.data[0].embedding
print(f"Embedding dimensions: {len(embedding)}")

バッチ処理

input に文字列配列を渡すと、1 回のリクエストで複数埋め込みを生成できます。
response = client.embeddings.create(
    input=[
        "First sentence to embed.",
        "Another sentence for batch processing.",
    ],
    model="text-embedding-ada-002",
)

for i, data in enumerate(response.data):
    print(f"Embedding for input {i+1}: {len(data.embedding)} dimensions")

パラメータ

input
string or array
必須
埋め込み対象のテキスト。単一文字列または配列(バッチ)を指定できます。
model
string
必須
使用する埋め込みモデル ID(例: text-embedding-ada-002)。
encoding_format
string
デフォルト:"float"
返却形式。float または base64。JSON サイズ削減には base64 が有効です。
user
string
エンドユーザー識別子。監視や不正利用検知に利用できます。

ユースケース

セマンティック検索

キーワード一致ではなく、意味的な近さで検索します。クエリと文書のベクトルを比較します。
import numpy as np
from scipy.spatial.distance import cosine

documents = [
    "The sky is blue and beautiful.",
    "The sun is the star at the center of the Solar System.",
    "Artificial intelligence will reshape our world.",
]

doc_embeddings = [
    client.embeddings.create(input=doc, model="text-embedding-ada-002").data[0].embedding
    for doc in documents
]

query = "What is the future of AI?"
query_embedding = client.embeddings.create(input=query, model="text-embedding-ada-002").data[0].embedding

similarities = [1 - cosine(query_embedding, doc_emb) for doc_emb in doc_embeddings]
most_similar_index = int(np.argmax(similarities))

print(f"Query: '{query}'")
print(f"Most similar document: '{documents[most_similar_index]}'")

分類とクラスタリング

埋め込みは特徴量として強力です。分類器の学習やクラスタリングに使えます。

ベストプラクティス

モデルは強力ですが、用途によっては軽い正規化が有効な場合があります。過度な stemming やストップワード除去は文脈を壊しやすいので注意してください。
複数テキストは配列でまとめて送り、往復回数を減らします。
同じテキストを繰り返し埋め込む場合は Redis などでキャッシュするとコストと遅延が下がります。

スケール:ベクトル DB

数千件を超えると全件比較は遅くなります。大規模ではベクトルデータベース(Pinecone、Weaviate、Milvus、Chroma、Qdrant など)を検討してください。