マルチモーダル埋め込み (バージョン 4.0) を使用して画像取得を行う

マルチモーダル埋め込み API は、画像とテキスト クエリの "ベクトル化" を可能にします。 それらは、多次元ベクトル空間内の座標に画像を変換します。 その後は、受信したテキスト クエリをベクトルに変換することもでき、セマンティックの近さに基づいて画像をテキストと照合できます。 これにより、ユーザーは画像タグや他のメタデータを使わなくても、テキストを使って画像のセットを検索できます。 セマンティックの近さにより、多くの場合、検索でより良い結果が得られます。

2024-02-01 API には、102 個の言語でのテキスト検索をサポートする多言語モデルが含まれています。 元の英語のみのモデルは引き続き使用できますが、同じ検索インデックス内で新しいモデルと組み合わせることはできません。 英語のみのモデルを使用してテキストと画像をベクター化した場合、これらのベクターは多言語テキストと画像のベクターと互換性がありません。

重要

これらの API は、特定の地理的リージョンでのみ使用できます。 利用可能なリージョンに関するページを参照してください。

前提条件

  • Azure サブスクリプション - 無料アカウントを作成します
  • Azure サブスクリプションを入手したら、Azure portal で Computer Vision リソースを作成し、キーとエンドポイントを取得します。 必ず、サポートされている地理的リージョンのいずれかに作成してください。「利用可能なリージョン」を参照してください。
    • デプロイされたら、 [リソースに移動] を選択します。 後で使うので、キーとエンドポイントを一時的な場所にコピーしておきます。

マルチモーダル埋め込みを試す

Vision Studio を使用すると、ブラウザーですばやく簡単にマルチモーダル埋め込み機能を試すことができます。

重要

Vision Studio のエクスペリエンスは、500 個の画像に制限されています。 より大きな画像セットを使用するには、このガイドの API を使用して独自の検索アプリケーションを作成します。

Vectorize Image API を呼び出す

retrieval:vectorizeImage API を使うと、画像のデータをベクトルに変換できます。 それを呼び出すには、以下の cURL コマンドを次のように変更します。

  1. <endpoint> を Azure AI Vision エンドポイントに置き換えます。
  2. <subscription-key> を Azure AI Vision キーに置き換えます。
  3. 要求本文の "url" を、使用するリモート画像の URL に設定します。
  4. 必要に応じて、model-version パラメーターを古いバージョンに変更します。 2022-04-11 は、英語テキストしかサポートしないレガシ モデルです。 特定のモデルを使用してベクトル化された画像とテキストは、他のモデルと互換性がないため、どちらに対しても同じモデルを使用するようにしてください。
curl.exe -v -X POST "<endpoint>/computervision/retrieval:vectorizeImage?api-version=2024-02-01&model-version=2023-04-15" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: <subscription-key>" --data-ascii "
{
'url':'https://video2.skills-academy.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png'
}"

ローカルの画像をベクトル化するには、バイナリ データを HTTP 要求本文に配置します。

API 呼び出しから返されるベクトル JSON オブジェクトでは、高次元ベクトル空間内での画像の座標が定義されています。

{ 
  "modelVersion": "2022-04-11", 
  "vector": [ -0.09442752, -0.00067171326, -0.010985051, ... ] 
}

Vectorize Text API を呼び出す

retrieval:vectorizeText API を使うと、テキスト文字列をベクトルに変換できます。 それを呼び出すには、以下の cURL コマンドを次のように変更します。

  1. <endpoint> を Azure AI Vision エンドポイントに置き換えます。
  2. <subscription-key> を Azure AI Vision キーに置き換えます。
  3. 要求本文の "text" を、使用する検索用語の例に設定します。
  4. 必要に応じて、model-version パラメーターを古いバージョンに変更します。 2022-04-11 は、英語テキストしかサポートしないレガシ モデルです。 特定のモデルを使用してベクトル化された画像とテキストは、他のモデルと互換性がないため、どちらに対しても同じモデルを使用するようにしてください。
curl.exe -v -X POST "<endpoint>/computervision/retrieval:vectorizeText?api-version=2024-02-01&model-version=2023-04-15" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: <subscription-key>" --data-ascii "
{
'text':'cat jumping'
}"

API 呼び出しから返されるベクトル JSON オブジェクトでは、高次元ベクトル空間内でのテキスト文字列の座標が定義されています。

{ 
  "modelVersion": "2022-04-11", 
  "vector": [ -0.09442752, -0.00067171326, -0.010985051, ... ] 
}

ベクトルの類似性を計算する

コサイン類似度は、2 つのベクトルの類似度を測定するための方法です。 画像取得のシナリオでは、検索クエリ ベクトルと各画像のベクトルを比較します。 類似度が一定のしきい値を超える画像は、検索結果として返すことができます。

次のコード例は、2 つのベクター間のコサイン類似度を計算します。 検索結果として画像を返すために使う類似度のしきい値は、ユーザーが決める必要があります。

public static float GetCosineSimilarity(float[] vector1, float[] vector2)
{ 
    float dotProduct = 0; 
    int length = Math.Min(vector1.Length, vector2.Length); 
    for (int i = 0; i < length; i++) 
    { 
        dotProduct += vector1[i] * vector2[i]; 
    } 
    float magnitude1 = Math.Sqrt(vector1.Select(x => x * x).Sum());
    float magnitude2 = Math.Sqrt(vector2.Select(x => x * x).Sum());
    
    return dotProduct / (magnitude1 * magnitude2);
}

次のステップ