46.6kデモを予約するログイン無料で始める

OpenAIのテキスト埋め込みモデルを使うための初心者ガイド

OpenAIのテキスト埋め込みモデルを使った埋め込み作成とセマンティック検索の総合ガイド。

ベクター埋め込みと埋め込みモデル入門

ベクトル埋め込み**はAIにおける中核概念であり、画像、テキスト、動画、音声ファイルなどの複雑な非構造化データを、機械が理解し処理できる数値ベクトルとして表現する。これらのベクトル化された形式は、データ内の意味と関係を捉え、AIモデルがより効果的にコンテンツを分析、比較、生成できるようにする。自然言語処理(NLP)では、単語、文、または文書全体が高密度のベクトルに変換され、アルゴリズムが個々の意味だけでなく、それらの間の文脈上の関係も把握できるようにする。

埋め込みモデル**は、これらのベクトル表現を生成するために設計された特殊なアルゴリズムである。膨大なデータセットで訓練されたこれらのモデルは、データ内の基本的なパターンと関係を符号化することを学習し、正確で文脈を意識した埋め込みを生成します。例えば、OpenAIのテキスト埋め込みモデルは特に強力で、意味検索、 クラスタリング、レコメンデーション、異常検知、多様性測定、分類など、幅広いタスクに適用できる高品質の埋め込みを提供します。

ベクトル埋め込みと埋め込みモデルの重要なアプリケーションの1つは、検索拡張生成(RAG)システムの構築です。RAGは、埋め込みと生成AIの長所を組み合わせたもので、回答を生成する前にMilvusのようなベクトルデータベースに格納された膨大なデータベースから関連情報を検索することで、より洗練された正確な回答を可能にします。このアプローチは、AIが詳細で事実に基づいた回答を提供する必要がある状況で非常に貴重であり、企業や開発者にとって同様に不可欠なツールとなっている。

このガイドでは、OpenAIのテキスト埋め込みモデルのパワーを活用する方法を探求し、よりインテリジェントで応答性の高いAIシステムを構築するために必要なツールと洞察を提供します。

OpenAI テキスト埋め込みモデル

OpenAIは、様々な自然言語処理(NLP)タスクに合わせた一連のテキスト埋め込みモデルを提供しています。その中でも、レガシーな text-embedding-ada-002 と最新の text-embedding-3-small と text-embedding-3-large モデルが際立っています。2024年1月25日にリリースされたtext-embedding-3-smallとtext-embedding-3-largeモデルは、text-embedding-ada-002によって築かれた強固な基盤の上に、この分野における大きな進歩を表している。次の表は、これら3つのモデルの主な特徴を簡単に比較したものである:

モデル説明出力寸法最大入力価格
text-embedding-3-large|英語と非英語の両方のタスクに対応する最も高性能な埋め込みモデル|3,072|8191|0.13ドル/1Mトークン
text-embedding-3-small|第2世代のadaエンベッディングモデルよりも性能が向上|1,536|8191|0.10ドル/1Mトークン|text-embedding-3-small|第2世代のadaエンベッディングモデルよりも性能が向上。
text-embedding-ada-002|最も高性能な第2世代エンベッディングモデル。

表 OpenAIのテキスト埋め込みモデルを比較する表

text-embedding-3-large`は、言語のニュアンスを捉えることが重要な、高精度なタスクのために設計されています。埋め込み次元が3,072と大きいため、詳細な意味情報をエンコードすることができ、深い意味検索、高度なレコメンデーションシステム、高度なテキスト分析などの複雑なアプリケーションに最適です。

**text-embedding-3-small**は、性能とリソース効率のバランスが非常に優れている。出力次元が1,536であるため、よりコンパクトなテキスト表現を維持しながら、旧式のtext-embedding-ada-002` と比べてパフォーマンスが向上している。このモデルは、リアルタイムアプリケーションや計算リソースが限られているユースケースに特に適しており、大きなモデルのオーバーヘッドなしに高い精度を提供します。

text-embedding-ada-002`は、上記2つの新しいモデルが導入される前は、OpenAIの埋め込みモデルの中でトップクラスの性能を誇っていました。バランスの取れたアプローチで幅広いNLPタスクを処理できることで知られています。1,536次元の出力次元を持ち、意味検索、分類、クラスタリングなど様々なアプリケーションに適した高品質な埋め込みを提供することで、以前のモデルよりも大幅にアップグレードされています。

OpenAIテキスト埋め込みモデルによる埋め込み作成

OpenAIのテキスト埋め込みモデルを使ってベクトル埋め込みを作成するには、主に2つの方法があります。

  • PyMilvus](https://github.com/milvus-io/pymilvus):Milvus](https://zilliz.com/what-is-milvus)ベクトルデータベース用のPython SDKで、 text-embedding-ada-002 のようなモデルとシームレスに統合できます。

  • OpenAI Library: OpenAIが提供するPython SDKです。

以下のセクションでは、PyMilvusを例として、OpenAIのテキスト埋め込みモデルを使って埋め込みを作成する方法を示します。OpenAI Libraryを使ったエンベッディング作成の詳細については、AIモデルのページを参照するか、OpenAIのドキュメントを参照することをお勧めします。

ベクトル埋め込みが生成されたら、Zilliz Cloud (Milvusによるフルマネージドベクトルデータベースサービス)に保存し、意味的類似性検索に使用することができます。ここでは、すぐに始めるための4つの重要なステップを紹介します。

  • Zilliz Cloudアカウントに無料でサインアップ](https://cloud.zilliz.com/signup)する。

  • サーバーレスクラスターをセットアップ](https://docs.zilliz.com/docs/create-cluster#set-up-a-free-cluster)し、パブリックエンドポイントとAPIキーを取得する。

  • ベクターコレクションを作成し、ベクター埋め込みを挿入する。

  • 格納された埋め込みに対してセマンティック検索を実行する。

text-embedding-ada-002`で埋め込みを作成し、Zilliz Cloudに挿入してセマンティック検索を行う。

from pymilvus.model.dense import OpenAIEmbeddingFunction
from pymilvus import MilvusClient

OPENAI_API_KEY = "your-openai-api-key"
ef = OpenAIEmbeddingFunction("text-embedding-ada-002", api_key=OPENAI_API_KEY)

docs = [
   「人工知能は1956年に学問分野として創設された、
   「アラン・チューリングは人工知能の実質的な研究を行った最初の人物である、
   「チューリングはロンドンのマイダ・ベイルで生まれ、イングランド南部で育った。
]
# ドキュメントの埋め込みを生成する
docs_embeddings = ef(docs)

queries = ["人工知能はいつ創設されたか"、
          「アラン・チューリングはどこで生まれたのか?]
# クエリの埋め込みを生成する
query_embeddings = ef(queries)

# Public EndpointとAPI Keyを使ってZilliz Cloudに接続する
client = MilvusClient(
    uri=ZILLIZ_PUBLIC_ENDPOINT、
    token=ZILLIZ_API_KEY)

COLLECTION = "documents"
if client.has_collection(collection_name=COLLECTION):
    client.drop_collection(collection_name=COLLECTION)
client.create_collection(
    コレクション名=COLLECTION、
    dimension=ef.dim、
    auto_id=True)

for doc, embedding in zip(docs, docs_embeddings):
    client.insert(COLLECTION, {"text": doc, "vector": embedding})
    
results = client.search(
    collection_name=COLLECTION、
    data=query_embeddings、
    consistency_level="Strong"、
    output_fields=["text"])

text-embedding-3-small`で埋め込みデータを作成し、Zilliz Cloudに挿入する。

from pymilvus import model, MilvusClient

OPENAI_API_KEY = "your-openai-api-key"
ef = model.dense.OpenAIEmbeddingFunction(
   model_name="text-embedding-3-small"、
   api_key=OPENAI_API_KEY、
   )

# ドキュメントの埋め込みを生成する
ドキュメント = [
   「人工知能は1956年に学問分野として創設された、
   "アラン・チューリングは、AIの実質的な研究を行った最初の人物である。"、
   "チューリングはロンドンのマイダヴェールで生まれ、イングランド南部で育った。"
]

docs_embeddings = ef.encode_documents(docs)

# クエリの埋め込みを生成する
queries = ["人工知能はいつ誕生したのか?
          「アラン・チューリングはどこで生まれましたか?]

query_embeddings = ef.encode_queries(queries)

# Public EndpointとAPI KeyでZilliz Cloudに接続する
client = MilvusClient(
    uri=ZILLIZ_PUBLIC_ENDPOINT、
    token=ZILLIZ_API_KEY)

COLLECTION = "documents"
if client.has_collection(collection_name=COLLECTION):
    client.drop_collection(collection_name=COLLECTION)
client.create_collection(
    コレクション名=COLLECTION、
    dimension=ef.dim、
    auto_id=True)

for doc, embedding in zip(docs, docs_embeddings):
    client.insert(COLLECTION, {"text": doc, "vector": embedding})
    
results = client.search(
    collection_name=COLLECTION、
    data=query_embeddings、
    consistency_level="Strong"、
    output_fields=["text"])

text-embedding-3-large`でエンベッディングを作成し、Zilliz Cloudに挿入する。

from pymilvus.model.dense import OpenAIEmbeddingFunction
from pymilvus import MilvusClient

OPENAI_API_KEY = "your-openai-api-key"
ef = OpenAIEmbeddingFunction("text-embedding-3-large", api_key=OPENAI_API_KEY)

docs = [
   「人工知能は1956年に学問分野として設立された、
   「アラン・チューリングは、人工知能の実質的な研究を行った最初の人物である、
   「チューリングはロンドンのマイダ・ベイルで生まれ、イングランド南部で育った。
]

# ドキュメントの埋め込みを生成する
docs_embeddings = ef(docs)

queries = ["人工知能が創設されたのはいつですか?
          「アラン・チューリングはどこで生まれましたか?]

# クエリの埋め込みを生成する
query_embeddings = ef(queries)

# Public EndpointとAPI KeyでZilliz Cloudに接続する
client = MilvusClient(
    uri=ZILLIZ_PUBLIC_ENDPOINT、
    token=ZILLIZ_API_KEY)

COLLECTION = "documents"
if client.has_collection(collection_name=COLLECTION):
    client.drop_collection(collection_name=COLLECTION)
client.create_collection(
    コレクション名=COLLECTION、
    dimension=ef.dim、
    auto_id=True)

for doc, embedding in zip(docs, docs_embeddings):
    client.insert(COLLECTION, {"text": doc, "vector": embedding})
    
results = client.search(
    collection_name=COLLECTION、
    data=query_embeddings、
    consistency_level="Strong"、
    output_fields=["text"])

OpenAIのテキスト埋め込みモデルと他の一般的なモデルの比較

自然言語処理(NLP)の急速な進歩に伴い、新しい埋め込みモデルが次々と登場し、それぞれが性能の限界に挑戦しています。Hugging Face MTEB leaderboard](https://huggingface.co/spaces/mteb/leaderboard)は、この分野の最新動向を追跡するための貴重なリソースです。以下に、OpenAIのモデルと同等の性能を発揮する、利用可能な最新の注目すべきエンベッディング・モデルのいくつかをリストアップします。

  • Voyage-large-2-instruct**:クラスタリング、分類、検索タスクに最適化された、命令チューニングされたエンベッディングモデルです。直接命令やクエリを含むタスクに優れています。

  • Cohere Embed v3**:クエリとドキュメントの関連性とコンテンツの品質を評価するために設計されています。ドキュメントのランキングを向上させ、ノイズの多いデータセットを効果的に処理します。

  • Google Gecko**:大規模な言語モデルから知識を抽出したコンパクトなモデル。

  • Mxbai-embed-2d-large-v1:Mxbai-embed-2d-large-v1:レイヤーと埋め込み次元の両方を削減する二重削減ストラテジーを特徴とし、競争力のある性能を備えたよりコンパクトなモデルを実現。

  • Nomic-embed-text-v1:Nomic-embed-text-v1:オープンソースで再現可能な埋め込みモデル。トレーニングコードとデータを公開し、透明性とアクセシビリティを重視。

  • BGE-M3:BGE-M3:100以上の言語をサポートし、多言語およびクロスリンガル検索タスクに優れています。単一のフレームワークで、高密度検索、マルチベクトル検索、スパース検索に対応。

エンベッディング・モデルとその使い方については、AIモデルのページをご覧ください。

結論

このガイドでは、OpenAIの最新のテキスト埋め込みモデル、特に text-embedding-3-small と text-embedding-3-large について説明しました。これらの高度なモデルは、セマンティック検索、リアルタイム処理、高精度アプリケーションなどのタスクにおいて、より高いパフォーマンスを提供する。

さらに、MilvusのPython SDKであるPyMilvusを活用し、OpenAIのモデルでベクトル埋め込みを生成し、MilvusのフルマネージドサービスであるZilliz Cloudを使って意味検索を実行する方法をデモンストレーションしました。

その他のリソース

  • ジェネレーティブAIリソースハブ|Zilliz

  • あなたのGenAIアプリのためのトップパフォーマンスAIモデル|Zilliz](https://zilliz.com/ai-models)

  • RAGとは】(https://zilliz.com/learn/Retrieval-Augmented-Generation)

  • ベクターデータベースとは何か、どのように機能するのか ](https://zilliz.com/learn/what-is-vector-database)

  • BGE-M3とSplade:人気のある2つのスパース埋め込みモデル ](https://zilliz.com/learn/bge-m3-and-splade-two-machine-learning-models-for-generating-sparse-embeddings)

  • AI・機械学習・ベクトルデータベース学習センター](https://zilliz.com/learn)