AI・機械学習
中級

text-embedding-3-small(OpenAI)(テキストエンベディングスリースモール)

OpenAIの第3世代テキスト埋め込みモデル。最大8,192トークン・1536次元・1M tokens $0.02で、RAGやセマンティック検索の標準的な選択肢。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
embedding
openai
llm
rag
vector-search
mrl

text-embedding-3-small(OpenAI)

概要

text-embedding-3-smallは、OpenAIが2024年1月にリリースした第3世代テキスト埋め込みモデルです。前世代のtext-embedding-ada-002と比較して、MTEB(Massive Text Embedding Benchmark)スコアが向上しながら料金が60%削減($0.10/1M tokens → $0.02/1M tokens)されました。RAGシステム・セマンティック検索・テキスト分類など多様なNLPタスクで活用されています。

スペック

項目text-embedding-3-smalltext-embedding-3-largetext-embedding-ada-002
最大入力トークン8,1928,1928,191
デフォルト次元数1,5363,0721,536
最小次元数(MRL)512256なし
料金$0.02/1M$0.13/1M$0.10/1M
MTEB Avg スコア62.364.661.0

使用方法

from openai import OpenAI

client = OpenAI()

# 基本的な埋め込み生成
response = client.embeddings.create(
    input=["PCパーツの選び方について教えてください"],
    model="text-embedding-3-small"
)

vector = response.data[0].embedding  # 1536次元のリスト
print(f"次元数: {len(vector)}")  # 1536

# MRL: 次元削減して利用(コスト・ストレージ節約)
response_small = client.embeddings.create(
    input=["PCパーツの選び方について教えてください"],
    model="text-embedding-3-small",
    dimensions=512  # 512次元に削減
)

vector_small = response_small.data[0].embedding
print(f"削減後次元数: {len(vector_small)}")  # 512

MRL(Matryoshka Representation Learning)

dimensionsパラメータで出力ベクトルの次元数を動的に削減できる技術です。通常の次元削減(PCA等)と異なり、情報損失を最小化しながら短いベクトルで効率的に検索できます。

次元数ストレージ削減検索精度(MTEB比)用途
15360%100%高精度検索
102433%約98%バランス
51267%約95%コスト重視

RAGパイプラインでの活用

import numpy as np
from openai import OpenAI

client = OpenAI()

def cosine_similarity(a: list, b: list) -> float:
    a, b = np.array(a), np.array(b)
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

documents = [
    "DDR5メモリはDDR4の2倍の帯域幅を持つ",
    "NVMe SSDはSATA SSDより約5倍高速",
    "GeForce RTX 4090は24GB GDDR6Xを搭載"
]

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

query = "最新メモリの帯域幅は?"
query_embedding = client.embeddings.create(
    input=[query], model="text-embedding-3-small"
).data[0].embedding

similarities = [
    (doc, cosine_similarity(query_embedding, emb))
    for doc, emb in zip(documents, doc_embeddings)
]
similarities.sort(key=lambda x: x[1], reverse=True)
print(f"最類似: {similarities[0][0]} (score: {similarities[0][1]:.3f})")

他モデルとの使い分け

  • text-embedding-3-small: コスト重視・高頻度呼び出し・プロトタイプ開発
  • text-embedding-3-large: 精度重視・最終製品・多言語対応が重要な場合
  • text-embedding-ada-002: レガシーシステム(移行推奨)
  • ローカルモデル(BGE-M3等): プライバシー重視・オフライン環境
この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/7