1. 埋め込みについての紹介

1.1. 埋め込みとは

機械学習の分野において、特に自然言語処理(NLP)の問題に取り組む際に、埋め込みはテキストデータを数値ベクトルに変換する手法です。言語において、単語やフレーズの意味はその文脈や使用方法によって決まります。埋め込みの目標は、これらの言語単位の意味を捉えてコンピュータが理解し処理できるようにすることです。

埋め込みの中心的な考えは、類義語を数学的な空間内で近くに位置するように単語をマッピングすることで、単語を高次元の空間内の点として表現することです。これにより、意味が近い単語(例: "王" と "女王")は空間内で近くに位置するようになります。埋め込みは通常、浮動小数点配列で構成されており、非常に異なるテキスト断片(例: "犬" と "犬科の動物")でも類似した埋め込み表現を持つようにします。

ヒント: アプリケーション開発者としては、類似した意味を持つ2つのテキスト文の埋め込みベクトルの類似度が高いことを簡単に理解できます。

1.2. 埋め込みの応用

埋め込みはさまざまなシナリオで広く利用されており、以下は主な使用例です。

  1. 検索: 埋め込み特徴を使用して検索結果をクエリテキストとの関連性に基づいてランク付けします。
  2. クラスタリング: 埋め込みは意味的に類似なテキスト断片を特定し分類するのに役立ちます。
  3. 推薦システム: 類似性に基づいてアイテムを推薦することで、既知のアイテムと類似した他のアイテムを発見し推薦するのに役立ちます。
  4. 異常検知: 埋め込みは、主要なデータセットから著しく異なるデータポイントを識別するために使用できます。
  5. 多様性の測定: 埋め込みは、さまざまなテキスト間の類似性分布を分析するためにも使用できます。
  6. 分類: 既知のラベル埋め込みとテキストを比較し、それを最も類似したカテゴリに分類するのに使用できます。

2. OpenAI埋め込みの紹介

2.1. OpenAI埋め込みモデルの概要

OpenAIは、「text-embedding-3-small」と「text-embedding-3-large」を含む第3世代の埋め込みモデルを提供しています。これらのモデルは、OpenAI独自の深層学習技術を基に構築されており、高度な多言語対応性を提供し、同時にコストを削減しようとしています。

これらのモデルは埋め込みを処理する際の独自の特性を持っています。例えば、「text-embedding-3-small」は1536次元の埋め込みベクトルを提供し、「text-embedding-3-large」はより複雑なテキスト特徴をカバーするために3072次元の埋め込みベクトルを提供します。パラメータを調整することで、埋め込みの次元を制御して、アプリケーションシナリオの特定のニーズに対応できます。

2.2. モデルの選択と使用法

適切な埋め込みモデルを選択することは、アプリケーションの具体的な要件に依存します。以下は異なるアプリケーションシナリオでの選択方法です。

  1. パフォーマンス重視のシナリオ: 細かい推奨システムや高精度なテキスト分類など、より詳細な意味情報を捉える必要がある場合は、通常は「text-embedding-3-large」を使用することが推奨されます。より小さいモデルよりも高価ではありますが、より豊富なテキスト特徴の表現を提供できます。

  2. コスト重視のアプリケーション: 大量のデータを処理するが特に高い精度要件がないようなアプリケーション(例: 初期データ探索や迅速なプロトタイピング)の場合、「text-embedding-3-small」はより経済的な選択肢です。コストを大幅に削減する一方で、比較的高いパフォーマンスを維持できます。

  3. 多言語環境: これらの埋め込みモデルは高い多言語対応性を持っており、クロスリンガルまたはマルチリンガルのシナリオで特に有用です。グローバルなアプリケーションには最適の選択肢と言えます。

適切な埋め込みモデルを選択することは、具体的な要件、データの複雑さ、パフォーマンスとコストのバランスポイントに応じるでしょう。

3. 埋め込みの使用方法

3.1 Embeddings APIの呼び出しにcurlを使用する

curlはHTTPリクエストを送信するためのよく使われるコマンドラインツールです。以下の例は、curlを使用してテキストの埋め込み表現を取得する方法を示しています:

curl https://api.openai.com/v1/embeddings \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -d '{
        "input": "Machine learning is a branch of artificial intelligence.",
        "model": "text-embedding-3-small"
    }'

上記のコマンドでは、$OPENAI_API_KEY変数にはユーザーのOpenAI APIキーが含まれており、実際の使用のために有効なキーに置き換える必要があります。

このコマンドを実行すると、OpenAI Embeddings APIからテキストの埋め込み表現を含むレスポンスが返されます。以下はAPIの呼び出し結果の例です:

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [  // ここに特徴ベクトルがあります
        -0.006929283495992422,
        -0.005336422007530928,
        ...  // 表示のために残りの数字は省略されています
        -4.547132266452536e-05,
        -0.024047505110502243
      ]
    }
  ],
  "model": "text-embedding-3-small",
  "usage": {
    "prompt_tokens": 5,
    "total_tokens": 5
  }
}

3.2 Pythonクライアントを使用してEmbeddings APIを呼び出す

curlを直接コマンドラインからAPIを呼び出す以外にも、Pythonクライアントを使用することができます。これにはまず公式のopenaiライブラリをインストールする必要があります。以下はPythonを使用してテキストの埋め込みを取得する方法の例です:

import openai

openai.api_key = 'YOUR_OPENAI_API_KEY'  # お使いのOpenAI APIキーに置き換えてください

response = openai.Embedding.create(
  input="Artificial intelligence is changing the world.",
  model="text-embedding-3-small"
)

embedding_vector = response['data'][0]['embedding']
print(embedding_vector)

このPythonスクリプトを実行すると、curlを使用した場合と同様の埋め込みベクトルが得られます。このベクトルは、入力テキストの埋め込み空間での数値表現を示す浮動小数点数のリストです。

呼び出し結果は次のようになります:

[-0.0032198824, 0.0022555287, ..., 0.0015886585, -0.0021505365]

3.2 埋め込みベクトルの操作

OpenAIは埋め込みテキストベクトル化計算モデルのみを提供しています。埋め込みを使用してテキスト類似性検索などの機能を実装したい場合は、Qdrant、Chroma、Milvusなどのベクトルデータベースについて学ぶ必要があります。

以下のベクトルデータベースのチュートリアルを参照してください: