埋め込みモデルは、テキスト、画像、動画などのデータを数値ベクトルに変換します。これらのベクトルは、セマンティック検索、レコメンデーション、クラスタリング、分類、異常検知などの下流タスクで使用されます。
事前準備
API キーの取得とAPI キーの環境変数への設定が必要です。OpenAI SDK または DashScope SDK を使用して API を呼び出す場合は、SDK のインストールも必要です。
埋め込みの取得
テキスト埋め込み
API を呼び出す際は、リクエスト内で埋め込み対象のテキストとモデル名を指定します。
OpenAI 互換インターフェイス
import os
from openai import OpenAI
input_text = "衣服の品質は非常に優れています"
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 環境変数が設定されていない場合は、ここに API キーを直接記述してください。
# 次の URL はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/compatible-mode/v1」に置き換えてください。
base_url="https://dashscope-intl.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({
// DASHSCOPE_API_KEY 環境変数が正しく設定されていることを確認してください。
apiKey: process.env.DASHSCOPE_API_KEY, // 環境変数が設定されていない場合は、ここに API キーを直接記述してください。
// 次の URL はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/compatible-mode/v1」に置き換えてください。
baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1'
});
async function getEmbedding() {
try {
const inputTexts = "衣服の品質は非常に優れています";
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);
}
}
getEmbedding();curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/embeddings' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "text-embedding-v4",
"input": "衣服の品質は非常に優れています"
}'DashScope
import dashscope
from http import HTTPStatus
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を「https://dashscope.aliyuncs.com/api/v1」に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
input_text = "衣服の品質は非常に優れています"
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://dashscope-intl.aliyuncs.com/api/v1";
// 中国 (北京) リージョン向けには、これを「https://dashscope.aliyuncs.com/api/v1」に置き換えてください。
}
public static void main(String[] args) {
String inputTexts = "衣服の品質は非常に優れています";
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("API 呼び出し時に例外が発生しました: " + e.getMessage());
System.err.println("API キーが正しく設定されているか確認してください。");
e.printStackTrace();
}
}
}# ======= 重要 =======
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を「https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding」に置き換えてください。
# === 実行前にこのコメントを削除してください ====
curl --location 'https://dashscope-intl.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": [
"衣服の品質は非常に優れています"
]
}
}'独立型マルチモーダルベクトル
テキスト、画像、動画など、異なるモダリティのコンテンツに対して個別にベクトルを生成します。この機能は、各コンテンツタイプを個別に処理する必要があるシナリオに適しています。
DashScope SDK または API を使用して、独立型マルチモーダルベクトル化機能を呼び出します。OpenAI 互換インターフェイスおよびコンソールでは、この機能はサポートされていません。
Python
import dashscope
import json
import os
from http import HTTPStatus
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# 上記の URL はシンガポールリージョン向けの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を「https://dashscope.aliyuncs.com/api/v1」に置き換えてください。
# 入力には動画も指定可能
# video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/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/en/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 java.util.Collections;
public class Main {
static {
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
// 中国 (北京) リージョン向けには、これを「https://dashscope.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/zh-CN/20250107/lbcemt/new+video.mp4");
// または画像を指定
MultiModalEmbeddingItemImage image = new MultiModalEmbeddingItemImage(
"https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png");
MultiModalEmbeddingParam param = MultiModalEmbeddingParam.builder()
// 環境変数が設定されていない場合は、以下の行に Model Studio API キー(例:.apiKey("sk-xxx"))を追加してください。
.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("API 呼び出し時に例外が発生しました: " + e.getMessage());
e.printStackTrace();
}
}
}融合型マルチモーダルベクトル
テキスト、画像、動画など、異なるモダリティのコンテンツを単一の融合ベクトルに統合します。この手法は、テキストから画像への検索、画像から画像への検索、テキストから動画への検索、クロスモーダル検索などのシナリオに有効です。
Python の DashScope SDK または API を使用して、融合型マルチモーダルベクトル機能を呼び出します。OpenAI 互換インターフェイス、Java の DashScope SDK、およびコンソールでは、この機能はサポートされていません。
qwen3-vl-embedding: 融合ベクトルおよび個別ベクトルの両方を生成できます。同一オブジェクト内にテキスト、画像、動画を含める場合、モデルは融合ベクトルを生成します。これらを個別の要素として提供する場合、それぞれに対して個別ベクトルを生成します。qwen2.5-vl-embedding: 融合ベクトルのみをサポートし、個別ベクトルはサポートしません。
Python
import dashscope
import json
import os
from http import HTTPStatus
# マルチモーダル融合ベクトル:テキスト、画像、動画を 1 つの融合ベクトルに統合
# クロスモーダル検索、画像検索などのシナリオに適しています
text = "マルチモーダル融合ベクトルを生成するために使用されるテスト用テキストです"
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250107/lbcemt/new+video.mp4"
# 入力にはテキスト、画像、動画を含めます。モデルはこれらを 1 つのベクトルに融合します
input_data = [
{
"text": text,
"image": image,
"video": video
}
]
# 融合ベクトルを生成するために qwen3-vl-embedding を使用
resp = dashscope.MultiModalEmbedding.call(
# 環境変数が設定されていない場合は、次の行を「api_key="sk-xxx"」に置き換えてください。
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3-vl-embedding",
input=input_data,
# オプションパラメーター:ベクトルのディメンションを指定(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 {
// 環境変数が設定されていない場合は、次の行を「String apiKey = "sk-xxx";」に置き換えてください。
String apiKey = System.getenv("DASHSCOPE_API_KEY");
// マルチモーダル融合ベクトル:テキスト、画像、動画を 1 つの融合ベクトルに統合
// 融合ベクトルを生成するには、テキスト、画像、動画を同一オブジェクトに配置します
String requestBody = "{"
+ "\"model\": \"qwen3-vl-embedding\","
+ "\"input\": {"
+ " \"contents\": [{"
+ " \"text\": \"マルチモーダル融合ベクトルを生成するために使用されるテスト用テキストです\","
+ " \"image\": \"https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png\","
+ " \"video\": \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250107/lbcemt/new+video.mp4\""
+ " }]"
+ "}"
+ "}";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://dashscope.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を選択します。これにより、入力の各部分(画像、テキストなど)に対して個別のベクトルが生成されます。
以下の表には、利用可能なすべての埋め込みモデルの詳細仕様が記載されています。
テキスト埋め込み
シンガポール
モデル | 埋め込みディメンション | バッチサイズ | バッチあたりの最大トークン数(注) | 価格(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 以上の主要言語 | 50 万トークン 有効期間:Model Studio の有効化後 90 日間 |
中国 (北京)
モデル | 埋め込みディメンション | バッチサイズ | バッチあたりの最大トークン数(注) | 価格(100 万トークンあたり) | 対応言語 |
text-embedding-v4 Qwen3-Embedding シリーズの一部 | 2,048、1,536、1,024(デフォルト)、768、512、256、128、64 | 10 | 8,192 | $0.072 | 中国語、英語、スペイン語、フランス語、ポルトガル語、インドネシア語、日本語、韓国語、ドイツ語、および多数のプログラミング言語など、100 以上の主要言語 |
バッチサイズとは、1 回の API 呼び出しで処理可能な最大テキスト数です。たとえば、text-embedding-v4 のバッチサイズは 10 です。これは、1 回のリクエストで最大 10 個のテキストを埋め込み処理できることを意味し、各テキストは 8,192 トークンを超えてはいけません。この制限は以下に適用されます。
文字列配列入力:配列には最大 10 個の要素を含めることができます。
ファイル入力:テキストファイルには最大 10 行のテキストを含めることができます。
マルチモーダル埋め込み
このモデルは、ユーザーが入力したテキスト、画像、動画に基づいて連続的なベクトルを生成します。これは、動画分類、画像分類、画像・テキスト検索、テキスト/画像から画像への検索、テキスト/画像から動画への検索などのタスクに適しています。
このインターフェイスでは、単一のテキストセグメント、単一の画像、単一の動画ファイルのアップロードが可能です。また、異なるタイプ(テキスト+画像など)の組み合わせも許可されます。一部のモデルでは、同一タイプの複数の入力(複数の画像など)もサポートされます。詳細については、特定のモデルの制限事項をご確認ください。
シンガポール
モデル | 埋め込みディメンション | テキスト長の上限 | 画像サイズの上限 | 動画サイズの上限 | 価格(100 万トークンあたり) | 無料クォータ(注) |
tongyi-embedding-vision-plus | 1152、1024、512、256、128、64 | 1,024 トークン | 単一ファイルは3 MBを超えてはいけません。 | 動画ファイルサイズは10 MBまで | 画像/動画:$0.09 テキスト:$0.09 | 100 万トークン 有効期間:Model Studio の有効化後 90 日間 |
tongyi-embedding-vision-flash | 768、512、256、128、64 | 画像/動画:$0.03 テキスト:$0.09 |
中国 (北京)
モデル | 埋め込みディメンション | テキスト長の上限 | 画像サイズの上限 | 動画サイズの上限 | 価格(100 万トークンあたり) |
qwen3-vl-embedding | 2560、2048、1536、1024、768、512、256 | 32,000 トークン | 最大1枚、5 MBまで | 動画ファイルサイズは50 MBまで | 画像/動画:$0.258 テキスト:$0.1 |
multimodal-embedding-v1 | 1024 | 512 トークン | 最大8枚、各ファイルは3 MBまで | 動画ファイルサイズは10 MBまで | 無料トライアル |
入力制限:
融合型マルチモーダル埋め込みモデル | ||||
モデル | テキスト | 画像 | 動画 | 1 回のリクエストあたりの最大要素数 |
qwen3-vl-embedding | 中国語、英語、日本語、韓国語、フランス語、ドイツ語など、33 の主要言語をサポート | JPEG、PNG、WEBP、BMP、TIFF、ICO、DIB、ICNS、SGI(URL または Base64 対応) | MP4、AVI、MOV(URL のみ) | 1 回のリクエストあたりの総コンテンツ要素数は 20 を超えてはいけません(画像、テキスト、動画は合計で 20 を超えてはいけません)。 |
独立型マルチモーダル埋め込みモデル | ||||
モデル | テキスト | 画像 | 動画 | 1 回のリクエストあたりの最大要素数 |
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 個)。合計で 20 を超えてはいけません。 | |||
主な機能
埋め込みディメンションの切り替え
text-embedding-v4、text-embedding-v3、tongyi-embedding-vision-plus、tongyi-embedding-vision-flash、qwen3-vl-embedding はカスタム埋め込みディメンションをサポートしています。高いディメンションほど豊かなセマンティクス情報を保持できますが、ストレージおよび計算コストも増加します。
一般的なシナリオ(推奨): 1024 ディメンションは、パフォーマンスとコストのバランスが最も良く、ほとんどのセマンティック検索タスクに適しています。
高精度を要するシナリオ: 高精度が求められるドメインでは、1536 または 2048 ディメンションを選択します。これにより一定の精度向上が得られますが、ストレージおよび計算負荷が大幅に増加します。
リソースが制約されるシナリオ: コストに敏感なシナリオでは、768 以下のディメンションを選択します。これによりリソース消費が大幅に削減されますが、セマンティクス情報の一部が失われます。
OpenAI 互換インターフェイス
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 次の URL はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を「https://dashscope.aliyuncs.com/compatible-mode/v1」に置き換えてください。
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
resp = client.embeddings.create(
model="text-embedding-v4",
input=["気に入りました。今後もここで購入します"],
# 埋め込みディメンションを 256 に設定
dimensions=256
)
print(f"埋め込みディメンション: {len(resp.data[0].embedding)}")
DashScope
import dashscope
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を「https://dashscope.aliyuncs.com/api/v1」に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
resp = dashscope.TextEmbedding.call(
model="text-embedding-v4",
input=["気に入りました。今後もここで購入します"],
# 埋め込みディメンションを 256 に設定
dimension=256
)
print(f"埋め込みディメンション: {len(resp.output['embeddings'][0]['embedding'])}")
クエリとドキュメントテキストの区別(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="機械学習に関する研究論文",
text_type="query",
instruct="研究論文のクエリを提示し、関連する研究論文を取得します"
)
密ベクトルおよび疎ベクトル
このパラメーターは、現在 DashScope SDK および API のみで有効化できます。
text-embedding-v4 および text-embedding-v3 は、異なる検索戦略のニーズに対応するため、3 種類のベクトル出力をサポートしています。
ベクトルタイプ(output_type) | 主な利点 | 主な欠点 | 典型的な適用シーン |
密 | 深いセマンティクス理解。類義語や文脈を認識でき、より関連性の高い検索結果を提供します。 | 計算およびストレージコストが高い。正確なキーワードマッチングは保証されません。 | セマンティック検索、AI チャット、コンテンツレコメンデーション。 |
疎 | 高い計算効率。正確なキーワードマッチングと高速フィルタリングに焦点を当てています。 | セマンティクス理解を犠牲にする。類義語や文脈を処理できません。 | ログ検索、製品 SKU 検索、正確な情報フィルタリング。 |
密&疎 | セマンティクスとキーワードを組み合わせ、最高品質の検索結果を実現します。生成コストは同一であり、API 呼び出しのオーバーヘッドは単一ベクトルモードと同一です。 | ストレージ要件が大きい。システムアーキテクチャーおよび検索ロジックがより複雑になります。 | 高品質な本番運用向けハイブリッド検索エンジン。 |
使用例
以下のコードはデモンストレーション専用です。本番環境では、埋め込みベクトルを事前に計算してベクトルデータベースに格納してください。検索時には、クエリベクトルのみを計算すれば十分です。
セマンティック検索
クエリとドキュメントのベクトル間の類似度を計算することで、正確なセマンティックマッチングを実現します。
import dashscope
import numpy as np
from dashscope import TextEmbedding
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を「https://dashscope.aliyuncs.com/api/v1」に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.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 = [
"人工知能はコンピュータ科学の一分野です",
"機械学習は人工知能を実現するための重要な手法です",
"ディープラーニングは機械学習のサブフィールドです"
]
query = "AI とは何ですか?"
results = semantic_search(query, documents, top_k=2)
for doc, sim in results:
print(f"類似度: {sim:.3f}, ドキュメント: {doc}")レコメンデーションシステム
ユーザーの履歴行動から得られたベクトルを分析し、ユーザーの興味を把握して類似アイテムをレコメンデーションします。
import dashscope
import numpy as np
from dashscope import TextEmbedding
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を「https://dashscope.aliyuncs.com/api/v1」に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.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 = ["SF", "アクション", "サスペンス"]
all_movies = ["未来世界", "宇宙冒険", "古代戦争", "ロマンスの旅", "スーパーヒーロー"]
recommendations = build_recommendation_system(user_history, all_movies)
for movie, score in recommendations:
print(f"レコメンデーションスコア: {score:.3f}, 映画: {movie}")テキストクラスタリング
ベクトル間の距離を分析することで、類似したテキストを自動的にグループ化します。
# scikit-learn が必要です:pip install scikit-learn
import dashscope
import numpy as np
from sklearn.cluster import KMeans
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を「https://dashscope.aliyuncs.com/api/v1」に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.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 = [
"携帯電話会社 A が新製品を発表",
"検索エンジン会社 B が新しいシステムをリリース",
"ワールドカップ決勝:アルゼンチン vs フランス",
"オリンピックで中国が金メダルを獲得",
"ある企業が最新の AI チップを発表",
"欧州カップ試合レポート"
]
clusters = cluster_texts(documents_to_cluster, n_clusters=2)
for cluster_id, docs in clusters.items():
print(f"--- クラスター {cluster_id} ---")
for doc in docs:
print(f"- {doc}")テキスト分類
事前にラベル付けされたサンプルを用意せずに、入力テキストと事前に定義されたラベルとのベクトル類似度を計算することで、新しいカテゴリを認識・分類します。
import dashscope
import numpy as np
# 中国 (北京) リージョンのモデルを使用する場合は、base_url を「https://dashscope.aliyuncs.com/api/v1」に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.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 = "このドレスの生地は快適で、デザインも素敵です"
possible_labels = ["デジタル製品", "アパレルおよびアクセサリー", "食品および飲料", "ホームおよびリビング"]
label, score = classify_text_zero_shot(text_to_classify, possible_labels)
print(f"入力テキスト: '{text_to_classify}'")
print(f"最も一致するカテゴリ: '{label}'(類似度: {score:.3f})")異常検知
テキストベクトルと正常サンプルベクトルの中心との類似度を計算し、正常パターンから大きく逸脱した異常データを特定します。
例コード内のしきい値はあくまでデモンストレーション用です。実際のビジネスシナリオでは、具体的な類似度の値はデータの内容および分布によって異なり、固定値は存在しません。ご自身のデータセットに基づいて、この値を校正してください。
import dashscope
import numpy as np
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 = [
"今日のミーティングは成果がありました",
"プロジェクトは順調に進んでいます",
"新バージョンは来週リリース予定です",
"ユーザーからのフィードバックは好意的です"
]
test_comments = {
"正常なコメント": "この機能は期待通りに動作します",
"異常 - 文字化け": "asdfghjkl zxcvbnm"
}
print("--- 異常検知の例 ---")
for desc, comment in test_comments.items():
is_anomaly, score = detect_anomaly(comment, normal_user_comments)
result = "はい" if is_anomaly else "いいえ"
print(f"コメント: '{comment}'")
print(f"異常: {result}(正常サンプルとの類似度: {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 |