埋め込みモデルは、テキスト、画像、動画などのデータをベクトルに変換し、セマンティック検索、レコメンデーション、クラスタリング、分類、異常検知などの下流タスクに使用します。
前提条件
API キーを取得し、API キーを環境変数としてエクスポートします。 OpenAI SDK または DashScope SDK を使用して呼び出しを行う場合は、SDK をインストールしてください。
埋め込みの取得
テキスト埋め込み
API リクエストを行うには、埋め込むテキストと使用するモデルを指定します。
OpenAI 互換 API
import os
from openai import OpenAI
input_text = "The quality of the clothes is excellent"
client = OpenAI(
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
api_key=os.getenv("DASHSCOPE_API_KEY"), # 環境変数を設定していない場合は、これを API キーに置き換えてください。
# これはシンガポールリージョンの URL です。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.embeddings.create(
model="text-embedding-v4",
input=input_text
)
print(completion.model_dump_json())
const OpenAI = require("openai");
// OpenAI クライアントを初期化します。
const openai = new OpenAI({
// 環境変数を設定していない場合は、これを API キーに置き換えてください。
// API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
apiKey: process.env.DASHSCOPE_API_KEY,
// これはシンガポールリージョンの URL です。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。
baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1'
});
async function getEmbedding() {
try {
const inputTexts = "The quality of the clothes is excellent";
const completion = await openai.embeddings.create({
model: "text-embedding-v4",
input: inputTexts,
dimensions: 1024 // ベクトル次元を指定します。このパラメーターは text-embedding-v3 と text-embedding-v4 でのみサポートされています。
});
console.log(JSON.stringify(completion, null, 2));
} catch (error) {
console.error('Error:', error);
}
}
getEmbedding();curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/embeddings' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "text-embedding-v4",
"input": "The quality of the clothes is excellent"
}'DashScope
import dashscope
from http import HTTPStatus
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
input_text = "The quality of the clothes is excellent"
resp = dashscope.TextEmbedding.call(
model="text-embedding-v4",
input=input_text,
)
if resp.status_code == HTTPStatus.OK:
print(resp)import com.alibaba.dashscope.embeddings.TextEmbedding;
import com.alibaba.dashscope.embeddings.TextEmbeddingParam;
import com.alibaba.dashscope.embeddings.TextEmbeddingResult;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import java.util.Collections;
public class Main {
static {
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
// 中国 (北京) リージョンを使用している場合は、URL を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください
}
public static void main(String[] args) {
String inputTexts = "The quality of the clothes is excellent";
try {
// リクエストパラメーターをビルドします。
TextEmbeddingParam param = TextEmbeddingParam
.builder()
.model("text-embedding-v4")
// 入力テキスト。
.texts(Collections.singleton(inputTexts))
.build();
// モデルインスタンスを作成し、呼び出しを行います。
TextEmbedding textEmbedding = new TextEmbedding();
TextEmbeddingResult result = textEmbedding.call(param);
// 結果を出力します。
System.out.println(result);
} catch (NoApiKeyException e) {
// API キーが見つからない場合の例外をキャッチして処理します。
System.err.println("An exception occurred during the API call: " + e.getMessage());
System.err.println("Please check if your API key is configured correctly.");
e.printStackTrace();
}
}
}# ======= 重要 =======
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding に置き換えてください
# === 実行する前にこのコメントを削除してください ===
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "text-embedding-v4",
"input": {
"texts": [
"The quality of the clothes is excellent"
]
}
}'独立したマルチモーダルベクトル
テキスト、画像、動画など、コンテンツの種類ごとに個別のベクトルを生成できます。これは、各コンテンツタイプを個別に処理する場合に役立ちます。
独立したマルチモーダルベクトルを生成するには、DashScope SDK を使用するか、API を直接呼び出します。この機能は、OpenAI 互換 API やコンソールでは利用できません。
Python
import dashscope
import json
import os
from http import HTTPStatus
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# 上記の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、base_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください
# 入力は動画でも可能です。
# video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4"
# input = [{'video': video}]
# または画像。
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
input = [{'image': image}]
resp = dashscope.MultiModalEmbedding.call(
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: api_key="sk-xxx",
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="tongyi-embedding-vision-plus",
input=input
)
print(json.dumps(resp.output, indent=4))
Java
import com.alibaba.dashscope.embeddings.MultiModalEmbedding;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemImage;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemVideo;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingParam;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import java.util.Collections;
public class Main {
static {
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
// 中国 (北京) リージョンを使用している場合は、URL を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください
}
public static void main(String[] args) {
try {
MultiModalEmbedding embedding = new MultiModalEmbedding();
// 入力は動画でも可能です。
// MultiModalEmbeddingItemVideo video = new MultiModalEmbeddingItemVideo(
// "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4");
// または画像。
MultiModalEmbeddingItemImage image = new MultiModalEmbeddingItemImage(
"https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png");
MultiModalEmbeddingParam param = MultiModalEmbeddingParam.builder()
// 環境変数を設定していない場合は、.apiKey("sk-xxx") を使用して Model Studio API キーを追加してください
.model("tongyi-embedding-vision-plus")
.contents(Collections.singletonList(image))
.build();
MultiModalEmbeddingResult result = embedding.call(param);
System.out.println(result);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.err.println("An exception occurred during the API call: " + e.getMessage());
e.printStackTrace();
}
}
}マルチモーダル融合ベクトル
テキスト、画像、動画など、異なるモダリティのコンテンツを単一の融合ベクトルに結合できます。これにより、テキストによる画像検索、画像間の検索、テキストによる動画検索、クロスモーダル検索などのアプリケーションが可能になります。
マルチモーダル融合ベクトルを生成するには、Python DashScope SDK を使用するか、API を直接呼び出します。この機能は、OpenAI 互換 API、Java DashScope SDK、またはコンソールでは利用できません。
qwen3-vl-embedding:融合ベクトルと独立ベクトルの両方の生成をサポートします。融合ベクトルを生成するには、ブール値パラメーターenable_fusionをtrueに設定します。qwen2.5-vl-embedding:融合埋め込みのみをサポートし、独立埋め込みはサポートしません。
Python
import dashscope
import json
import os
from http import HTTPStatus
# 以下の構成は中国 (北京) リージョン用です。呼び出しを行う際は、{WorkspaceId} を実際のワークスペース ID に置き換えてください。構成はリージョン固有です。
dashscope.base_http_api_url = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1"
# マルチモーダル融合ベクトル: テキスト、画像、動画を単一の融合ベクトルに結合します。
# クロスモーダル検索や画像検索などのユースケースに適しています。
text = "This is a test text for generating a multimodal fused vector"
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4"
# 入力にはテキスト、画像、動画が含まれます。enable_fusion パラメーターを設定することで、融合ベクトルが生成されます。
input_data = [
{"text": text},
{"image": image},
{"video": video}
]
# qwen3-vl-embedding を使用して融合ベクトルを生成します。
resp = dashscope.MultiModalEmbedding.call(
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3-vl-embedding",
input=input_data,
enable_fusion=True,
# オプションのパラメーター: ベクトル次元を指定します。サポートされている値: 2560, 2048, 1536, 1024, 768, 512, 256。デフォルト: 2560。
# dimension = 1024
)
print(json.dumps(resp.output, indent=4))Java (HTTP)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: String apiKey = "sk-xxx";
String apiKey = System.getenv("DASHSCOPE_API_KEY");
// enable_fusion を使用して、テキスト、画像、動画を単一の融合ベクトルに結合します。
String requestBody = "{"
+ "\"model\": \"qwen3-vl-embedding\","
+ "\"input\": {"
+ " \"contents\": ["
+ " {\"text\": \"This is a test text for generating a multimodal fused vector\"},"
+ " {\"image\": \"https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png\"},"
+ " {\"video\": \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4\"}"
+ " ]"
+ "},"
+ "\"parameters\": {"
+ " \"enable_fusion\": true"
+ "}"
+ "}";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/embeddings/multimodal-embedding/multimodal-embedding"))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}モデルの選択
入力データの種類とユースケースに基づいて、適切なモデルを選択してください。
プレーンテキストまたはコードの処理:
text-embedding-v4を使用します。これは最高のパフォーマンスを誇るモデルで、タスク命令や疎ベクトルなどの高度な機能をサポートし、ほとんどのテキスト処理ユースケースをカバーします。マルチモーダルコンテンツの処理:
融合埋め込み:クロスモーダル検索や画像検索などのユースケースで、単一モーダルまたは混合モーダルの入力を融合埋め込みとして表現するには、
qwen3-vl-embeddingを使用します。たとえば、シャツの画像と「より若々しく見える同様のスタイルを見つける」というテキストを入力すると、モデルは画像とタスク命令を単一の埋め込みに融合して処理します。独立埋め込み:各入力部分 (画像とそれに対応するテキストキャプションなど) に独立した埋め込みを生成するには、
tongyi-embedding-vision-plus、tongyi-embedding-vision-flash、または汎用マルチモーダルモデルmultimodal-embedding-v1を使用します。
大規模データの処理:大規模な非リアルタイムのテキストデータを処理するには、
text-embedding-v4を OpenAI 互換バッチ API と共に使用することで、コストを大幅に削減できます。
この表は、利用可能なすべての埋め込みモデルの仕様を詳述しています。
テキスト埋め込み
北京
モデル名 | 埋め込み次元 | バッチサイズ | 最大バッチトークン数 (注) | 価格 / 100 万トークン | 言語 |
text-embedding-v4 Qwen3-Embedding シリーズの一部 | 2,048、1,536、1,024 (デフォルト)、768、512、256、128、64 | 10 | 8,192 | $0.072 | 中国語、英語、スペイン語、フランス語、ポルトガル語、インドネシア語、日本語、韓国語、ドイツ語、ロシア語、および複数のプログラミング言語を含む 100 以上の主要言語 |
香港
モデル名 | 埋め込み次元 | バッチサイズ | 最大バッチトークン数 (注) | 価格 / 100 万トークン | 言語 |
text-embedding-v4 Qwen3-Embedding シリーズの一部 | 2,048、1,536、1,024 (デフォルト)、768、512、256、128、64 | 10 | 8,192 | $0.07 | 中国語、英語、スペイン語、フランス語、ポルトガル語、インドネシア語、日本語、韓国語、ドイツ語、ロシア語、および複数のプログラミング言語を含む 100 以上の主要言語 |
シンガポール
モデル名 | 埋め込み次元 | バッチサイズ | 最大バッチトークン数 (注) | 価格 / 100 万トークン | 言語 | 無料クォータ (注) |
text-embedding-v4 Qwen3-Embedding シリーズの一部 | 2,048、1,536、1,024 (デフォルト)、768、512、256、128、64 | 10 | 8,192 | $0.07 | 中国語、英語、スペイン語、フランス語、ポルトガル語、インドネシア語、日本語、韓国語、ドイツ語、ロシア語、および複数のプログラミング言語を含む 100 以上の主要言語 | 100 万トークン Model Studio を有効化してから 90 日間有効 |
text-embedding-v3 | 1,024 (デフォルト)、768、512 | 中国語、英語、スペイン語、フランス語、ポルトガル語、インドネシア語、日本語、韓国語、ドイツ語、ロシア語を含む 50 以上の主要言語 | 500,000 トークン Model Studio を有効化してから 90 日間有効 |
バッチサイズは、API 呼び出しあたりの最大テキスト数です。たとえば、text-embedding-v4 のバッチサイズは 10 で、リクエストごとに最大 10 個のテキストをベクトル化のために含めることができ、各テキストは 8,192 トークンに制限されます。この制限は以下に適用されます:
文字列配列入力:配列には最大 10 個の要素を含めることができます。
ファイル入力:テキストファイルには最大 10 行を含めることができます。
マルチモーダル埋め込み
このモデルは、テキスト、画像、または動画の入力から埋め込みを生成します。これらの埋め込みは、動画や画像の分類、画像とテキストの検索、テキストから画像またはテキストから動画への検索などのタスクに使用できます。
API は、単一のテキスト、画像、または動画の入力、およびテキストと画像のような組み合わせを受け入れます。一部のモデルは、複数の画像など、同じタイプの複数の入力をサポートします。詳細については、各モデルの制限事項をご参照ください。
シンガポール
モデル | 埋め込み次元 | テキスト長の制限 | 画像サイズの制限 | 動画サイズの制限 | 価格 (100 万トークンあたり) | 無料クォータ (注) |
tongyi-embedding-vision-plus | 1152 | 1,024 トークン | 画像あたり最大 3 MB。最大 8 枚の画像をサポート。 | 動画ファイルあたり最大 10 MB | 画像/動画:$0.09 テキスト:$0.09 | 100 万トークン この無料クォータは、Model Studio を有効化してから 90 日後に失効します。 |
tongyi-embedding-vision-flash | 768 | 画像/動画:$0.03 テキスト:$0.09 |
中国 (北京)
モデル | 埋め込み次元 | テキスト長の制限 | 画像サイズの制限 | 動画サイズの制限 | 価格 (100 万トークンあたり) |
qwen3-vl-embedding | 2560 (デフォルト)、2048、1536、1024、768、512、256 | 32,000 トークン | 最大サイズ 5 MB の画像を最大 1 枚 | 動画ファイルあたり最大 50 MB | 画像/動画:$0.258 テキスト:$0.1 |
multimodal-embedding-v1 | 1024 | 512 トークン | 最大サイズ 3 MB の画像を最大 8 枚。 | 動画ファイルあたり最大 10 MB | 無料トライアル |
入力と言語の制限
融合マルチモーダルモデル | ||||
モデル | テキスト | 画像 | 動画 | リクエストの制限 |
qwen3-vl-embedding | 中国語、英語、日本語、韓国語、フランス語、ドイツ語など、33 の主要言語をサポートしています。 | JPEG、PNG、WEBP、BMP、TIFF、ICO、DIB、ICNS、SGI (URL または Base64 をサポート) | MP4、AVI、MOV (URL のみ) | 1 回のリクエストに含まれるコンテンツ要素の総数は 20 を超えることはできません。画像の数は 5 を超えることはできません。画像、テキスト、動画はこの制限を共有します。 |
独立したマルチモーダルモデル | ||||
モデル | テキスト | 画像 | 動画 | リクエストの制限 |
tongyi-embedding-vision-plus | 中国語/英語 | JPG、PNG、BMP (URL または Base64 をサポート) | MP4、MPEG、AVI、MOV、MPG、WEBM、FLV、MKV (URL のみ) | コンテンツ要素の数に制限はありません。入力トークンの総数がトークン制限を超えてはなりません。 |
tongyi-embedding-vision-flash | ||||
multimodal-embedding-v1 | 1 回のリクエストに含まれるコンテンツ要素の総数は 20 を超えることはできません。リクエストには最大 1 枚の画像、1 つの動画、20 個のテキストエントリを含めることができます。これらのアイテムは総制限を共有します。 | |||
コア機能
ベクトル次元のカスタマイズ
text-embedding-v4、text-embedding-v3、tongyi-embedding-vision-plus、tongyi-embedding-vision-flash、qwen3-vl-embedding モデルは、カスタムベクトル次元をサポートしています。次元が高いほど多くのセマンティック情報が保持されますが、ストレージと計算コストが増加します。
一般的なユースケース (推奨):1024 の次元は、パフォーマンスとコストの最適なバランスを提供し、ほとんどのセマンティック検索タスクに理想的です。
高精度シナリオ:高精度が要求されるアプリケーションでは、1536 または 2048 の次元を選択できます。これにより精度は向上しますが、ストレージと計算のオーバーヘッドが大幅に増加します。
リソース制約のある環境:コストに敏感なシナリオでは、768 以下の次元を選択します。これにより、一部のセマンティック情報が失われる代わりに、リソース消費が大幅に削減されます。
OpenAI 互換 API
import os
from openai import OpenAI
client = OpenAI(
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
api_key=os.getenv("DASHSCOPE_API_KEY"),
# これはシンガポールリージョンのベース URL です。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョン固有です。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
resp = client.embeddings.create(
model="text-embedding-v4",
input=["I like it and will buy from here again"],
# ベクトル次元を 256 に設定
dimensions=256
)
print(f"Vector dimension: {len(resp.data[0].embedding)}")
DashScope
import dashscope
# 中国 (北京) リージョンのモデルを使用する場合は、base_http_api_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
resp = dashscope.TextEmbedding.call(
model="text-embedding-v4",
input=["I like it and will buy from here again"],
# ベクトル次元を 256 に設定
dimension=256
)
print(f"Vector dimension: {len(resp.output['embeddings'][0]['embedding'])}")
クエリ vs. ドキュメントテキスト (text_type)
このパラメーターは、DashScope SDK および API を通じてのみ利用可能です。
検索タスクで最適な結果を得るには、コンテンツの役割に基づいてベクトル化を区別する必要があります。text_type パラメーターはこの目的のために設計されています:
text_type: 'query':ユーザーが提供するクエリテキストに使用します。モデルは、情報検索に最適化された、より指向性の高い「タイトル風」のベクトルを生成します。text_type: 'document'(デフォルト):ナレッジベースに保存されているドキュメントテキストに使用します。モデルは、より包括的な情報を含み、マッチングに最適化された「本文風」のベクトルを生成します。
短いテキストと長いテキストを照合する場合、query と document を区別する必要があります。ただし、すべてのテキストが同じ役割を持つクラスタリングや分類などのタスクでは、このパラメーターを設定する必要はありません。
タスク命令 (instruct)
このパラメーターは、DashScope SDK および API を通じてのみ利用可能です。
明確な英語のタスク命令を提供することで、text-embedding-v4 モデルを特定の検索シナリオに合わせてベクトル品質を最適化し、精度を向上させることができます。この機能を使用する場合、text_type パラメーターを query に設定する必要があります。
# 例: ドキュメントベクトルを構築する際に、検索品質を最適化するための命令を追加します。
resp = dashscope.TextEmbedding.call(
model="text-embedding-v4",
input="Research papers on machine learning",
text_type="query",
instruct="Given a research paper query, retrieve relevant research paper"
)
密ベクトルと疎ベクトル
このパラメーターは、DashScope SDK および API を通じてのみ利用可能です。
text-embedding-v4 および text-embedding-v3 モデルは、さまざまな検索戦略に対応するために 3 種類のベクトル出力タイプをサポートしています。
ベクトルタイプ (output_type) | 利点 | 制限事項 | ユースケース |
dense | 同義語や文脈を識別し、より関連性の高い結果をもたらす深いセマンティック理解。 | 計算およびストレージコストが高い。キーワードの完全一致を保証しない。 | セマンティック検索、AI による Q&A、コンテンツレコメンデーション。 |
sparse | 高い計算効率で、キーワードの完全一致に重点を置き、高速なフィルタリングを可能にする。 | セマンティック理解に欠け、同義語や文脈を処理できない。 | ログ検索、製品 SKU 検索、精密な情報フィルタリング。 |
dense&sparse | セマンティックマッチングとキーワードマッチングを組み合わせて、最適な検索結果を実現。生成コストは変わらず、API 呼び出しのオーバーヘッドは単一ベクトルモードと同じ。 | より多くのストレージが必要であり、システムアーキテクチャと検索ロジックがより複雑になる。 | 高品質で本番環境レベルのハイブリッド検索エンジン。 |
ユースケース
以下のコードはデモンストレーションのみを目的としています。本番環境では、埋め込みを事前に計算し、ベクトルデータベースに保存してください。これにより、検索のためにクエリ埋め込みを生成するだけで済みます。
セマンティック検索
クエリ埋め込みとドキュメント埋め込みの間の類似度を計算することで、正確なセマンティックマッチングを実行します。
import dashscope
import numpy as np
from dashscope import TextEmbedding
# 中国 (北京) リージョンのモデルを使用するには、base_http_api_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
def cosine_similarity(a, b):
"""コサイン類似度を計算します。"""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def semantic_search(query, documents, top_k=5):
"""セマンティック検索を実行します。"""
# クエリ埋め込みを生成します。
query_resp = TextEmbedding.call(
model="text-embedding-v4",
input=query,
dimension=1024
)
query_embedding = query_resp.output['embeddings'][0]['embedding']
# ドキュメント埋め込みを生成します。
doc_resp = TextEmbedding.call(
model="text-embedding-v4",
input=documents,
dimension=1024
)
# 類似度を計算します。
similarities = []
for i, doc_emb in enumerate(doc_resp.output['embeddings']):
similarity = cosine_similarity(query_embedding, doc_emb['embedding'])
similarities.append((i, similarity))
# 上位 k 件の結果をソートして返します。
similarities.sort(key=lambda x: x[1], reverse=True)
return [(documents[i], sim) for i, sim in similarities[:top_k]]
# 使用例
documents = [
"Artificial intelligence is a branch of computer science",
"Machine learning is an important method for achieving artificial intelligence",
"Deep learning is a subfield of machine learning"
]
query = "What is AI?"
results = semantic_search(query, documents, top_k=2)
for doc, sim in results:
print(f"Similarity: {sim:.3f}, Document: {doc}")レコメンデーションシステム
ユーザーの行動履歴の埋め込みを分析して興味を特定し、類似のアイテムを推奨します。
import dashscope
import numpy as np
from dashscope import TextEmbedding
# 中国 (北京) リージョンのモデルを使用するには、base_http_api_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
def cosine_similarity(a, b):
"""コサイン類似度を計算します。"""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def build_recommendation_system(user_history, all_items, top_k=10):
"""レコメンデーションシステムを構築します。"""
# ユーザー履歴の埋め込みを生成します。
history_resp = TextEmbedding.call(
model="text-embedding-v4",
input=user_history,
dimension=1024
)
# 平均化によってユーザーの嗜好埋め込みを計算します。
user_embedding = np.mean([
emb['embedding'] for emb in history_resp.output['embeddings']
], axis=0)
# すべてのアイテムの埋め込みを生成します。
items_resp = TextEmbedding.call(
model="text-embedding-v4",
input=all_items,
dimension=1024
)
# レコメンデーションスコアを計算します。
recommendations = []
for i, item_emb in enumerate(items_resp.output['embeddings']):
score = cosine_similarity(user_embedding, item_emb['embedding'])
recommendations.append((all_items[i], score))
# レコメンデーション結果をソートして返します。
recommendations.sort(key=lambda x: x[1], reverse=True)
return recommendations[:top_k]
# 使用例
user_history = ["Science Fiction", "Action", "Suspense"]
all_movies = ["Future World", "Space Adventure", "Ancient War", "Romantic Journey", "Superhero"]
recommendations = build_recommendation_system(user_history, all_movies)
for movie, score in recommendations:
print(f"Recommendation Score: {score:.3f}, Movie: {movie}")テキストクラスタリング
埋め込み間の距離を分析することで、類似のテキストをグループ化します。
# scikit-learn が必要です: pip install scikit-learn
import dashscope
import numpy as np
from sklearn.cluster import KMeans
# 中国 (北京) リージョンのモデルを使用するには、base_http_api_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
def cluster_texts(texts, n_clusters=2):
"""テキストのセットをクラスタリングします。"""
# 1. すべてのテキストの埋め込みを取得します。
resp = dashscope.TextEmbedding.call(
model="text-embedding-v4",
input=texts,
dimension=1024
)
embeddings = np.array([item['embedding'] for item in resp.output['embeddings']])
# 2. KMeans アルゴリズムを使用してクラスタリングを行います。
kmeans = KMeans(n_clusters=n_clusters, random_state=0, n_init='auto').fit(embeddings)
# 3. 結果を整理して返します。
clusters = {i: [] for i in range(n_clusters)}
for i, label in enumerate(kmeans.labels_):
clusters[label].append(texts[i])
return clusters
# 使用例
documents_to_cluster = [
"Mobile phone company A releases a new phone",
"Search engine company B launches a new system",
"World Cup final: Argentina vs. France",
"China wins another gold medal at the Olympics",
"A company releases its latest AI chip",
"European Cup match report"
]
clusters = cluster_texts(documents_to_cluster, n_clusters=2)
for cluster_id, docs in clusters.items():
print(f"--- Cluster {cluster_id} ---")
for doc in docs:
print(f"- {doc}")テキスト分類
入力テキストの埋め込みと事前定義されたラベル埋め込みの類似度を計算することで、ゼロショットテキスト分類を実行します。このプロセスは、事前にラベル付けされた例を必要とせずに、テキストを新しいカテゴリに分類します。
import dashscope
import numpy as np
# 中国 (北京) リージョンのモデルを使用するには、base_http_api_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
def cosine_similarity(a, b):
"""コサイン類似度を計算します。"""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def classify_text_zero_shot(text, labels):
"""ゼロショットテキスト分類を実行します。"""
# 1. 入力テキストとすべてのラベルの埋め込みを取得します。
resp = dashscope.TextEmbedding.call(
model="text-embedding-v4",
input=[text] + labels,
dimension=1024
)
embeddings = resp.output['embeddings']
text_embedding = embeddings[0]['embedding']
label_embeddings = [emb['embedding'] for emb in embeddings[1:]]
# 2. 各ラベルとの類似度を計算します。
scores = [cosine_similarity(text_embedding, label_emb) for label_emb in label_embeddings]
# 3. 最も類似度の高いラベルを返します。
best_match_index = np.argmax(scores)
return labels[best_match_index], scores[best_match_index]
# 使用例
text_to_classify = "The fabric of this dress is comfortable, and the style is nice too"
possible_labels = ["Digital Products", "Apparel & Accessories", "Food & Beverage", "Home & Living"]
label, score = classify_text_zero_shot(text_to_classify, possible_labels)
print(f"Input text: '{text_to_classify}'")
print(f"Best matching category: '{label}' (Similarity: {score:.3f})")異常検知
テキストの埋め込みと正常サンプルの中心埋め込みとの類似度を計算することで、異常データを特定します。このパターンから著しく逸脱するデータは異常と見なされます。
例の threshold はデモンストレーション目的です。理想的な値はデータの内容と分布によって異なるため、独自のデータセットを使用して調整する必要があります。import dashscope
import numpy as np
# 中国 (北京) リージョンのモデルを使用するには、base_http_api_url を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に変更してください
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
def cosine_similarity(a, b):
"""コサイン類似度を計算します。"""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def detect_anomaly(new_comment, normal_comments, threshold=0.6):
# 1. すべての正常なコメントと新しいコメントの埋め込みを生成します。
all_texts = normal_comments + [new_comment]
resp = dashscope.TextEmbedding.call(
model="text-embedding-v4",
input=all_texts,
dimension=1024
)
embeddings = [item['embedding'] for item in resp.output['embeddings']]
# 2. 正常なコメントの中心埋め込み (平均) を計算します。
normal_embeddings = np.array(embeddings[:-1])
normal_center_vector = np.mean(normal_embeddings, axis=0)
# 3. 新しいコメントの埋め込みと中心埋め込みの類似度を計算します。
new_comment_embedding = np.array(embeddings[-1])
similarity = cosine_similarity(new_comment_embedding, normal_center_vector)
# 4. 異常かどうかを判断します。
is_anomaly = similarity < threshold
return is_anomaly, similarity
# 使用例
normal_user_comments = [
"Today's meeting was productive",
"The project is progressing smoothly",
"The new version will be released next week",
"User feedback is positive"
]
test_comments = {
"Normal comment": "The feature works as expected",
"Anomaly - meaningless garbled text": "asdfghjkl zxcvbnm"
}
print("--- Anomaly Detection Example ---")
for desc, comment in test_comments.items():
is_anomaly, score = detect_anomaly(comment, normal_user_comments)
result = "Yes" if is_anomaly else "No"
print(f"Comment: '{comment}'")
print(f"Is anomaly: {result} (Similarity to normal samples: {score:.3f})\n")API リファレンス
一般的なテキスト埋め込み
マルチモーダル埋め込み
エラーコード
モデルの呼び出しが失敗し、エラーメッセージが返された場合は、「エラーコード」で解決策をご参照ください。
レート制限
モデルのレート制限条件については、「レート制限」をご参照ください。
モデルパフォーマンス (MTEB/CMTEB)
評価ベンチマーク
MTEB (Massive Text Embedding Benchmark):分類、クラスタリング、検索などのタスクにおけるテキスト埋め込みの汎用パフォーマンスを評価する包括的なベンチマーク。
CMTEB (Chinese Massive Text Embedding Benchmark):中国語のテキスト埋め込みを評価するために特化した大規模なベンチマーク。
スコアは 0 から 100 の範囲です。スコアが高いほどパフォーマンスが良いことを示します。
モデル | MTEB | MTEB (検索タスク) | CMTEB | CMTEB (検索タスク) |
text-embedding-v3 (512 次元) | 62.11 | 54.30 | 66.81 | 71.88 |
text-embedding-v3 (768 次元) | 62.43 | 54.74 | 67.90 | 72.29 |
text-embedding-v3 (1024 次元) | 63.39 | 55.41 | 68.92 | 73.23 |
text-embedding-v4 (512 次元) | 64.73 | 56.34 | 68.79 | 73.33 |
text-embedding-v4 (1024 次元) | 68.36 | 59.30 | 70.14 | 73.98 |
text-embedding-v4 (2048 次元) | 71.58 | 61.97 | 71.99 | 75.01 |