埋め込みモデルは、テキスト・画像・動画などのデータを数値ベクトルに変換します。これらのベクトルは、セマンティック検索・レコメンデーション・クラスタリング・分類・異常検知などの下流タスクに利用されます。
事前準備
API キーを取得し、環境変数として API キーを設定する必要があります。OpenAI SDK または DashScope SDK を使用して呼び出す場合は、SDK をインストールする必要もあります。
埋め込みの取得
テキスト埋め込み
API を呼び出す際は、リクエスト内で埋め込むテキストとモデル名を指定します。
OpenAI 互換インターフェイス
import os
from openai import OpenAI
input_text = "The quality of the clothes is excellent"
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 = "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://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": "The quality of the clothes is excellent"
}'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 = "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://dashscope-intl.aliyuncs.com/api/v1";
// 中国 (北京) リージョンの場合は、https://dashscope.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("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": [
"The quality of the clothes is excellent"
]
}
}'独立型マルチモーダル埋め込み
独立型マルチモーダル埋め込み機能は、DashScope SDK または API のみで利用可能です。OpenAI 互換インターフェイスやコンソールではサポートされていません。この機能は、テキスト・画像・動画など異なるモダリティのコンテンツに対して、それぞれ独立したベクトルを生成します。各コンテンツタイプを個別に処理する必要があるシナリオに適しています。
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 を 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/zh/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))
融合型マルチモーダル埋め込み
融合型マルチモーダル埋め込み機能は、DashScope SDK または API のみで利用可能です。OpenAI 互換インターフェイスやコンソールではサポートされていません。この機能は、テキスト・画像・動画など異なるモダリティのコンテンツを単一の融合ベクトルに統合します。テキストから画像への検索・画像間検索・テキストから動画への検索・クロスモーダル取得などのシナリオに適しています。
qwen3-vl-embeddingは、融合埋め込みおよび独立埋め込みの両方をサポートします。テキスト・画像・動画が同一オブジェクト内に配置された場合、融合ベクトルが生成されます。これらが別々の要素として配置された場合、それぞれ独立したベクトルが生成されます。qwen2.5-vl-embeddingは融合埋め込みのみをサポートし、独立埋め込みはサポートしていません。
import dashscope
import json
import os
from http import HTTPStatus
# 融合型マルチモーダル埋め込み: テキスト・画像・動画を単一の融合ベクトルに統合します。
# クロスモーダル取得や画像検索などのシナリオに適しています。
text = "This is a test text for generating a fused multimodal embedding"
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"
# 入力にはテキスト・画像・動画が含まれます。モデルはこれらを単一の融合ベクトルに統合します。
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,
# オプションパラメーター: 埋め込みディメンションを指定します(2560, 2048, 1536, 1024, 768, 512, 256 をサポート。デフォルトは 2560)。
# parameters={"dimension": 1024}
)
print(json.dumps(resp.output, indent=4))
モデル選択
適切なモデルは、入力データのタイプおよびアプリケーションシナリオによって異なります。
プレーンテキストまたはコードの場合: 現在利用可能な最も高性能なモデルである
text-embedding-v4を使用します。命令や疎ベクトルなどの高度な機能をサポートしており、ほとんどのテキスト処理シナリオに対応しています。マルチモーダルコンテンツを処理する場合:
融合型マルチモーダル埋め込み: 単一モダリティまたは複合モダリティの入力を融合ベクトルとして表現する必要があるクロスモーダル取得や画像検索などのシナリオでは、
qwen3-vl-embeddingを使用します。たとえば、「より若々しいスタイルの似たようなシャツを探してください」というテキストとともにシャツの画像を入力すると、モデルは画像とテキスト命令を単一のベクトルに融合して理解できます。独立埋め込み: 画像とその対応するテキストタイトルなど、各入力に対して独立したベクトルを生成する必要がある場合は、
tongyi-embedding-vision-plus、tongyi-embedding-vision-flash、または汎用マルチモーダルモデルmultimodal-embedding-v1を選択します。これにより、入力の各部分(画像・テキスト)に対して個別のベクトルが生成されます。
以下の表は、利用可能なすべての埋め込みモデルの詳細な仕様を示しています。
テキスト埋め込み
シンガポール
モデル | 埋め込みディメンション | バッチサイズ | バッチあたりの最大トークン数 (注記) | 料金 (1M 入力トークンあたり) | サポート言語 | 無料クォータ(注記) |
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 日間 |
北京
モデル | 埋め込みディメンション | バッチサイズ | バッチあたりの最大トークン数 (注記) | 料金 (1M 入力トークンあたり) | サポート言語 |
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 行のテキストを含めることができます。
マルチモーダル埋め込み
このモデルは、ユーザー入力に基づいて連続ベクトルを生成します。入力はテキスト・画像・動画のいずれかです。これは、動画分類・画像分類・画像-テキスト取得・テキスト/画像から画像への検索・テキスト/画像から動画への検索などのタスクに適しています。
このインターフェイスでは、単一のテキストセグメント・単一の画像・単一の動画ファイルのアップロードがサポートされています。また、異なるタイプの組み合わせ(テキスト + 画像など)も可能です。一部のモデルでは、同じタイプの複数入力(複数の画像など)もサポートされています。詳細については、特定のモデルの制限事項をご確認ください。
シンガポール
モデル | 埋め込みディメンション | テキスト長制限 | 画像サイズ制限 | 動画サイズ制限 | 料金 (1M 入力トークンあたり) | 無料クォータ(注記) |
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 |
北京
モデル | 埋め込みディメンション | テキスト長制限 | 画像サイズ制限 | 動画サイズ制限 | 料金 (1M 入力トークンあたり) |
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 | 無料トライアル |
入力制限:
融合型マルチモーダル埋め込みモデル | ||||
モデル | テキスト | 画像 | 動画 | リクエストあたりの最大要素数 |
qwen3-vl-embedding | 中国語・英語・日本語・韓国語・フランス語・ドイツ語を含む 33 の主要言語をサポート | JPEG、PNG、WEBP、BMP、TIFF、ICO、DIB、ICNS、SGI (URL または Base64 対応) | MP4、AVI、MOV (URL のみ) | リクエストあたりのコンテンツ要素総数は 20 を超えてはなりません。画像・テキスト・動画はこの制限を共有します。 |
独立型マルチモーダル埋め込みモデル | ||||
モデル | テキスト | 画像 | 動画 | リクエストあたりの最大要素数 |
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 | リクエストあたりのコンテンツ要素総数は 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 互換インターフェイス
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=["I like it and will buy from here again"],
# 埋め込みディメンションを 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=["I like it and will buy from here again"],
# 埋め込みディメンションを 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="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 チャット、コンテンツレコメンデーション。 |
sparse | 計算効率が高い。完全一致キーワードマッチング に重点を置き、高速フィルタリングを実現します。 | セマンティック理解を犠牲にする。同義語や文脈を処理できません。 | ログ取得、商品 SKU 検索、正確な情報フィルタリング。 |
dense&sparse | セマンティクスとキーワードを組み合わせることで、最良の検索結果を実現します。生成コストは同じです。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))
# 並べ替えて top_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 |