Model penyematan mengonversi data seperti teks, gambar, dan video menjadi vektor untuk berbagai tugas lanjutan, termasuk pencarian semantik, rekomendasi, pengelompokan, klasifikasi, dan deteksi anomali.
Prasyarat
Dapatkan Kunci API dan ekspor Kunci API sebagai variabel lingkungan. Jika Anda menggunakan OpenAI SDK atau DashScope SDK untuk melakukan panggilan, instal SDK.
Dapatkan penyematan
Penyematan teks
Tentukan teks yang akan disematkan dan nama model dalam permintaan Anda.
API kompatibel dengan OpenAI
import os
from openai import OpenAI
input_text = "The quality of the clothes is excellent"
client = OpenAI(
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"), # Jika variabel lingkungan tidak diatur, ganti ini dengan Kunci API Anda.
# base_url ini untuk Singapura. Untuk menggunakan model di Tiongkok (Beijing), ganti base_url dengan: 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");
// Inisialisasi klien OpenAI.
const openai = new OpenAI({
// Jika variabel lingkungan tidak diatur, ganti ini dengan Kunci API Anda.
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// baseURL ini untuk Singapura. Untuk menggunakan model di Tiongkok (Beijing), ganti baseURL dengan: https://dashscope-intl.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 // Tentukan dimensi vektor. Parameter ini hanya didukung oleh text-embedding-v3 dan 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
# Untuk menggunakan model di Tiongkok (Beijing), ganti base_url dengan: 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";
// Untuk Tiongkok (Beijing), ganti dengan: https://dashscope.aliyuncs.com/api/v1
}
public static void main(String[] args) {
String inputTexts = "The quality of the clothes is excellent";
try {
// Bangun parameter permintaan.
TextEmbeddingParam param = TextEmbeddingParam
.builder()
.model("text-embedding-v4")
// Teks masukan.
.texts(Collections.singleton(inputTexts))
.build();
// Buat instans model dan panggil.
TextEmbedding textEmbedding = new TextEmbedding();
TextEmbeddingResult result = textEmbedding.call(param);
// Cetak hasilnya.
System.out.println(result);
} catch (NoApiKeyException e) {
// Tangkap dan tangani pengecualian untuk Kunci API yang belum diatur.
System.err.println("Terjadi pengecualian selama pemanggilan API: " + e.getMessage());
System.err.println("Periksa apakah Kunci API Anda dikonfigurasi dengan benar.");
e.printStackTrace();
}
}
}# ======= Penting =======
# Untuk menggunakan model di Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding
# === Hapus komentar ini sebelum eksekusi ===
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"
]
}
}'Vektor multimodal independen
Menghasilkan vektor independen untuk setiap modalitas (teks, gambar, video). Ideal untuk memproses setiap jenis konten secara terpisah.
Gunakan SDK DashScope atau panggil API secara langsung untuk menghasilkan vektor multimodal independen. Fitur ini tidak didukung oleh antarmuka kompatibel OpenAI atau konsol.
Python
import dashscope
import json
import os
from http import HTTPStatus
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# base_url di atas untuk Singapura. Untuk menggunakan model di Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
# Masukan dapat berupa video.
# video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4"
# input = [{'video': video}]
# atau gambar.
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
input = [{'image': image}]
resp = dashscope.MultiModalEmbedding.call(
# Jika variabel lingkungan tidak diatur, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat 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 com.alibaba.dashscope.utils.Constants;
import java.util.Collections;
public class Main {
static {
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
// Untuk Tiongkok (Beijing), ganti dengan: https://dashscope.aliyuncs.com/api/v1
}
public static void main(String[] args) {
try {
MultiModalEmbedding embedding = new MultiModalEmbedding();
// Masukan dapat berupa video.
// MultiModalEmbeddingItemVideo video = new MultiModalEmbeddingItemVideo(
// "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4");
// atau gambar.
MultiModalEmbeddingItemImage image = new MultiModalEmbeddingItemImage(
"https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png");
MultiModalEmbeddingParam param = MultiModalEmbeddingParam.builder()
// Jika variabel lingkungan tidak diatur, tambahkan Kunci API Studio Model Anda, contoh: .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("Terjadi pengecualian selama pemanggilan API: " + e.getMessage());
e.printStackTrace();
}
}
}
Vektor multimodal terpadu
Menggabungkan konten dari berbagai modalitas (teks, gambar, video) menjadi satu vektor terpadu. Cocok untuk pencarian teks-ke-gambar, pencarian gambar-ke-gambar, pencarian teks-ke-video, dan pengambilan lintas-modalitas.
Gunakan SDK DashScope Python atau panggil API secara langsung untuk menghasilkan vektor multimodal terpadu. Fitur ini tidak didukung oleh antarmuka kompatibel OpenAI, SDK DashScope Java, atau konsol.
-
qwen3-vl-embedding: Menghasilkan vektor terpadu maupun independen. Untuk menghasilkan vektor terpadu, atur parameter Booleanenable_fusionketrue. -
qwen2.5-vl-embedding: Hanya menghasilkan vektor terpadu.
Python
import dashscope
import json
import os
from http import HTTPStatus
# Vektor multimodal terpadu: Menggabungkan teks, gambar, dan video menjadi satu vektor terpadu.
# Cocok untuk kasus penggunaan seperti pengambilan lintas-modalitas dan pencarian gambar.
text = "This is a test text used to generate 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"
# Masukan berisi teks, gambar, dan video. Vektor terpadu dihasilkan dengan menggunakan parameter enable_fusion.
input_data = [
{"text": text},
{"image": image},
{"video": video}
]
# Gunakan qwen3-vl-embedding untuk menghasilkan vektor terpadu.
resp = dashscope.MultiModalEmbedding.call(
# Jika variabel lingkungan tidak diatur, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3-vl-embedding",
input=input_data,
enable_fusion=True,
# Parameter opsional: Menentukan dimensi vektor. Nilai yang didukung: 2560, 2048, 1536, 1024, 768, 512, dan 256. Default: 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 {
// Jika variabel lingkungan tidak diatur, ganti baris berikut dengan Kunci API Studio Model Anda: String apiKey = "sk-xxx";
String apiKey = System.getenv("DASHSCOPE_API_KEY");
// Vektor multimodal terpadu: Gunakan enable_fusion untuk menggabungkan teks, gambar, dan video menjadi vektor terpadu.
String requestBody = "{"
+ "\"model\": \"qwen3-vl-embedding\","
+ "\"input\": {"
+ " \"contents\": ["
+ " {\"text\": \"This is a test text used to generate 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://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());
}
}
Pemilihan model
Pemilihan model tergantung pada jenis data masukan dan kasus penggunaan Anda.
-
Untuk teks biasa atau kode: Gunakan
text-embedding-v4. Ini adalah model dengan performa tertinggi, mendukung fitur lanjutan seperti instruksi tugas dan vektor jarang, serta mencakup sebagian besar kasus penggunaan pemrosesan teks. -
Untuk konten multimodal:
-
Penyematan terpadu: Untuk merepresentasikan masukan single-modal atau mixed-modal sebagai penyematan terpadu dalam kasus penggunaan seperti pengambilan lintas-modalitas dan pencarian gambar, gunakan
qwen3-vl-embedding. Misalnya, masukkan gambar kaus dengan teks "temukan gaya serupa yang terlihat lebih muda," dan model akan menggabungkan gambar dan instruksi tugas menjadi satu penyematan. -
Penyematan independen: Hasilkan penyematan independen untuk setiap masukan, seperti gambar dan keterangan teksnya, menggunakan
tongyi-embedding-vision-plus,tongyi-embedding-vision-flash, atau model multimodal tujuan umummultimodal-embedding-v1.
-
-
Untuk data skala besar: Proses data teks skala besar non-real-time dengan
text-embedding-v4dan OpenAI compatible batch API untuk mengurangi biaya.
Spesifikasi semua model penyematan yang tersedia:
Penyematan teks
Singapura
|
Model |
Dimensi penyematan |
Ukuran batch |
Token batch maks (Catatan) |
Harga / 1 juta token |
Bahasa |
Kuota gratis (Catatan) |
|
text-embedding-v4 Bagian dari seri Qwen3-Embedding |
2.048, 1.536, 1.024 (default), 768, 512, 256, 128, 64 |
10 |
8.192 |
$0,07 |
Lebih dari 100 bahasa utama, termasuk Mandarin, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan Rusia |
1 juta token Berlaku selama 90 hari setelah mengaktifkan Model Studio |
|
text-embedding-v3 |
1.024 (default), 768, 512 |
Lebih dari 50 bahasa utama, termasuk Tiongkok, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan Rusia |
500.000 token Berlaku selama 90 hari setelah mengaktifkan Model Studio |
Tiongkok (Beijing)
|
Model |
Dimensi penyematan |
Ukuran batch |
Token batch maks (Catatan) |
Harga / 1 juta token |
Bahasa |
|
text-embedding-v4 Bagian dari seri Qwen3-Embedding |
2.048, 1.536, 1.024 (default), 768, 512, 256, 128, 64 |
10 |
8.192 |
$0,072 |
Lebih dari 100 bahasa utama, termasuk Tiongkok, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan Rusia, serta beberapa bahasa pemrograman |
Tiongkok (Hong Kong)
|
Model |
Dimensi penyematan |
Ukuran batch |
Token batch maks (Catatan) |
Harga / 1 juta token |
Bahasa |
|
text-embedding-v4 Bagian dari seri Qwen3-Embedding |
2.048, 1.536, 1.024 (default), 768, 512, 256, 128, 64 |
10 |
8.192 |
$0,07 |
Lebih dari 100 bahasa utama, termasuk Tiongkok, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan Rusia, serta beberapa bahasa pemrograman |
Ukuran batch adalah jumlah maksimum teks yang dapat diproses dalam satu panggilan API. Misalnya, text-embedding-v4 memiliki ukuran batch 10, artinya Anda dapat menyertakan hingga 10 teks per permintaan, masing-masing tidak melebihi 8.192 token. Batasan ini berlaku untuk:
-
masukan array string: Array dapat berisi hingga 10 elemen.
-
masukan file: File teks dapat berisi hingga 10 baris.
Penyematan multimodal
Model menghasilkan penyematan vektor dari masukan seperti teks, gambar, atau video. Penyematan ini digunakan untuk klasifikasi video, klasifikasi gambar, pengambilan gambar-teks, pencarian teks-ke-gambar, dan pencarian teks-ke-video.
Anda dapat mengunggah satu segmen teks, gambar, atau file video. API juga mendukung kombinasi jenis masukan, seperti teks dan gambar. Beberapa model mendukung beberapa masukan jenis yang sama, seperti beberapa gambar. Untuk detailnya, lihat batasan masing-masing model.
Singapura
|
Nama model |
Dimensi penyematan |
Batas panjang teks |
Batas ukuran gambar |
Batas ukuran video |
Harga (per 1 juta token masukan) |
Kuota gratis (Catatan) |
|
tongyi-embedding-vision-plus |
1152 |
1.024 token |
Hingga 3 MB per gambar. Mendukung hingga 8 gambar. |
Hingga 10 MB per file video |
Gambar/Video: $0,09 Teks: $0,09 |
1 juta token Berlaku selama 90 hari setelah mengaktifkan Model Studio |
|
tongyi-embedding-vision-flash |
768 |
Gambar/Video: $0,03 Teks: $0,09 |
Tiongkok (Beijing)
|
Nama model |
Dimensi penyematan |
Batas panjang teks |
Batas ukuran gambar |
Batas ukuran video |
Harga (per 1 juta token masukan) |
|
qwen3-vl-embedding |
2560 (default), 2048, 1536, 1024, 768, 512, 256 |
32.000 token |
Hingga 5 gambar, hingga 5 MB per gambar |
Hingga 50 MB per file video |
Gambar/Video: $0,258 Teks: $0,1 |
|
multimodal-embedding-v1 |
1024 |
512 token |
Hingga 8 gambar, 3 MB masing-masing |
Hingga 10 MB per file video |
Uji coba gratis |
Batasan masukan dan bahasa
|
Model multimodal terpadu |
||||
|
Model |
Teks |
Gambar |
Video |
Batas permintaan |
|
qwen3-vl-embedding |
Mendukung 33 bahasa utama, termasuk Mandarin, Inggris, Jepang, Korea, Prancis, dan Jerman. |
JPEG, PNG, WEBP, BMP, TIFF, ICO, DIB, ICNS, SGI (URL atau Base64 didukung) |
MP4, AVI, MOV (hanya URL) |
Hingga 20 elemen konten per permintaan, dengan maksimum 5 gambar dan 1 video. |
|
Model multimodal independen |
||||
|
Model |
Teks |
Gambar |
Video |
Batas permintaan |
|
tongyi-embedding-vision-plus |
Tiongkok dan Inggris |
JPG, PNG, BMP (URL atau Base64 didukung) |
MP4, MPEG, MOV, MPG, WEBM, AVI, FLV, MKV (hanya URL) |
Tidak ada batasan jumlah elemen konten. Jumlah total token masukan tidak boleh melebihi batas token pemrosesan batch. |
|
tongyi-embedding-vision-flash |
||||
|
multimodal-embedding-v1 |
JPG, PNG, BMP (URL atau Base64 didukung) |
Hingga 20 elemen konten per permintaan, dengan maksimum 20 segmen teks, 1 gambar, dan 1 video. |
||
Fitur inti
Dimensi vektor kustom
Model text-embedding-v4, text-embedding-v3, tongyi-embedding-vision-plus, tongyi-embedding-vision-flash, qwen3-vl-embedding mendukung dimensi vektor kustom. Dimensi yang lebih tinggi mempertahankan lebih banyak informasi semantik tetapi meningkatkan biaya penyimpanan dan komputasi.
-
Kasus penggunaan umum (Direkomendasikan): Dimensi 1024 memberikan keseimbangan optimal antara performa dan biaya, menjadikannya ideal untuk sebagian besar tugas pencarian semantik.
-
Skenario presisi tinggi: Untuk aplikasi presisi tinggi, pilih dimensi 1536 atau 2048. Ini meningkatkan presisi tetapi secara signifikan meningkatkan overhead penyimpanan dan komputasi.
-
Lingkungan dengan sumber daya terbatas: Dalam skenario sensitif biaya, pilih dimensi 768 atau lebih rendah. Ini secara signifikan mengurangi konsumsi sumber daya dengan mengorbankan sebagian informasi semantik.
API kompatibel dengan OpenAI
import os
from openai import OpenAI
client = OpenAI(
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# Ini adalah URL untuk Singapura. Untuk menggunakan model di wilayah Tiongkok (Beijing), ganti `base_url` dengan: 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"],
# Atur dimensi vektor ke 256
dimensions=256
)
print(f"Dimensi vektor: {len(resp.data[0].embedding)}")
DashScope
import dashscope
# Untuk menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: 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"],
# Atur dimensi vektor ke 256
dimension=256
)
print(f"Dimensi vektor: {len(resp.output['embeddings'][0]['embedding'])}")
Teks kueri vs. dokumen (text_type)
Parameter ini hanya tersedia melalui SDK dan API DashScope.
Untuk mencapai hasil optimal dalam tugas pencarian, vektorisasi konten secara berbeda berdasarkan perannya yang dimaksudkan. Parameter text_type dirancang untuk tujuan ini:
-
text_type: 'query': Gunakan untuk teks kueri pengguna. Model menghasilkan vektor "seperti judul" yang lebih terarah dan dioptimalkan untuk "bertanya" dan "menemukan." -
text_type: 'document'(default): Gunakan untuk teks dokumen yang disimpan dalam basis pengetahuan Anda. Model menghasilkan vektor "seperti isi" yang berisi informasi lebih komprehensif dan dioptimalkan untuk pencocokan.
Saat mencocokkan teks pendek dengan teks panjang, bedakan antara query dan document. Namun, untuk tugas seperti pengelompokan atau klasifikasi di mana semua teks memiliki peran yang sama, Anda tidak perlu mengatur parameter ini.
Instruksi tugas (instruct)
Parameter ini hanya tersedia melalui SDK dan API DashScope.
Berikan instruksi tugas berbahasa Inggris yang jelas untuk membimbing model text-embedding-v4 agar mengoptimalkan kualitas vektor untuk skenario pengambilan tertentu. Saat menggunakan fitur ini, atur parameter text_type ke query.
# Skenario: Saat membangun vektor dokumen untuk mesin pencari, Anda dapat menambahkan instruksi untuk mengoptimalkan kualitas vektor untuk pengambilan.
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"
)
Vektor padat dan jarang
Parameter ini hanya tersedia melalui SDK dan API DashScope.
Model text-embedding-v4 dan text-embedding-v3 mendukung tiga jenis keluaran vektor untuk strategi pengambilan yang berbeda.
|
Jenis vektor (output_type) |
Keunggulan utama |
Batasan utama |
Kasus penggunaan khas |
|
dense |
Pemahaman semantik mendalam; mengidentifikasi sinonim dan konteks, menghasilkan hasil pengambilan yang lebih relevan. |
Biaya komputasi dan penyimpanan lebih tinggi; tidak menjamin kecocokan tepat untuk kata kunci. |
Pencarian semantik, Tanya Jawab berbasis AI, rekomendasi konten. |
|
sparse |
Efisiensi komputasi tinggi; fokus pada kecocokan tepat untuk kata kunci dan memungkinkan penyaringan cepat. |
Kurang pemahaman semantik; tidak dapat memproses sinonim atau konteks. |
Pengambilan log, pencarian SKU produk, penyaringan informasi tepat. |
|
dense&sparse |
Menggabungkan pencocokan semantik dan kata kunci untuk hasil pencarian optimal. Biaya pembuatan tetap sama, dan overhead panggilan API sama dengan mode vektor tunggal. |
Memerlukan lebih banyak penyimpanan, dan arsitektur sistem serta logika pengambilan lebih kompleks. |
Mesin pencari hibrida berkualitas tinggi untuk produksi. |
Contoh
Kode hanya untuk demonstrasi. Untuk produksi, pra-hitung dan simpan penyematan dalam database vektor. Saat pengambilan, Anda hanya perlu menghasilkan penyematan kueri.
Pencarian semantik
Raih pencocokan semantik tepat dengan menghitung kemiripan penyematan antara kueri dan dokumen.
import dashscope
import numpy as np
from dashscope import TextEmbedding
# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
def cosine_similarity(a, b):
"""Hitung kemiripan kosinus."""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def semantic_search(query, documents, top_k=5):
"""Lakukan pencarian semantik."""
# Hasilkan penyematan kueri.
query_resp = TextEmbedding.call(
model="text-embedding-v4",
input=query,
dimension=1024
)
query_embedding = query_resp.output['embeddings'][0]['embedding']
# Hasilkan penyematan dokumen.
doc_resp = TextEmbedding.call(
model="text-embedding-v4",
input=documents,
dimension=1024
)
# Hitung kemiripan.
similarities = []
for i, doc_emb in enumerate(doc_resp.output['embeddings']):
similarity = cosine_similarity(query_embedding, doc_emb['embedding'])
similarities.append((i, similarity))
# Urutkan dan kembalikan hasil top-k.
similarities.sort(key=lambda x: x[1], reverse=True)
return [(documents[i], sim) for i, sim in similarities[:top_k]]
# Contoh penggunaan
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"Kemiripan: {sim:.3f}, Dokumen: {doc}")
Sistem rekomendasi
Analisis penyematan dari riwayat perilaku pengguna untuk mengidentifikasi minat dan merekomendasikan item serupa.
import dashscope
import numpy as np
from dashscope import TextEmbedding
# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
def cosine_similarity(a, b):
"""Hitung kemiripan kosinus."""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def build_recommendation_system(user_history, all_items, top_k=10):
"""Bangun sistem rekomendasi."""
# Hasilkan penyematan riwayat pengguna.
history_resp = TextEmbedding.call(
model="text-embedding-v4",
input=user_history,
dimension=1024
)
# Hitung penyematan preferensi pengguna (dengan merata-ratakan).
user_embedding = np.mean([
emb['embedding'] for emb in history_resp.output['embeddings']
], axis=0)
# Hasilkan penyematan semua item.
items_resp = TextEmbedding.call(
model="text-embedding-v4",
input=all_items,
dimension=1024
)
# Hitung skor rekomendasi.
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))
# Urutkan dan kembalikan hasil rekomendasi.
recommendations.sort(key=lambda x: x[1], reverse=True)
return recommendations[:top_k]
# Contoh penggunaan
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"Skor Rekomendasi: {score:.3f}, Film: {movie}")
Pengelompokan teks
Kelompokkan teks serupa secara otomatis dengan menganalisis jarak antar penyematan mereka.
# scikit-learn diperlukan: pip install scikit-learn
import dashscope
import numpy as np
from sklearn.cluster import KMeans
# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: 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):
"""Kelompokkan sekumpulan teks."""
# 1. Dapatkan penyematan untuk semua teks.
resp = dashscope.TextEmbedding.call(
model="text-embedding-v4",
input=texts,
dimension=1024
)
embeddings = np.array([item['embedding'] for item in resp.output['embeddings']])
# 2. Gunakan algoritma KMeans untuk pengelompokan.
kmeans = KMeans(n_clusters=n_clusters, random_state=0, n_init='auto').fit(embeddings)
# 3. Atur dan kembalikan hasilnya.
clusters = {i: [] for i in range(n_clusters)}
for i, label in enumerate(kmeans.labels_):
clusters[label].append(texts[i])
return clusters
# Contoh penggunaan
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"--- Kluster {cluster_id} ---")
for doc in docs:
print(f"- {doc}")
Klasifikasi teks
Lakukan klasifikasi teks zero-shot dengan menghitung kemiripan penyematan antara teks masukan dan label yang telah ditentukan. Pendekatan ini mengklasifikasikan teks ke dalam kategori baru tanpa contoh berlabel sebelumnya.
import dashscope
import numpy as np
# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
def cosine_similarity(a, b):
"""Hitung kemiripan kosinus."""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def classify_text_zero_shot(text, labels):
"""Lakukan klasifikasi teks zero-shot."""
# 1. Dapatkan penyematan untuk teks masukan dan semua label.
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. Hitung kemiripan dengan setiap label.
scores = [cosine_similarity(text_embedding, label_emb) for label_emb in label_embeddings]
# 3. Kembalikan label dengan kemiripan tertinggi.
best_match_index = np.argmax(scores)
return labels[best_match_index], scores[best_match_index]
# Contoh penggunaan
text_to_classify = "The fabric of this dress is comfortable and the style is nice"
possible_labels = ["Digital Products", "Apparel & Accessories", "Food & Beverage", "Home & Living"]
label, score = classify_text_zero_shot(text_to_classify, possible_labels)
print(f"Teks masukan: '{text_to_classify}'")
print(f"Kategori yang paling cocok: '{label}' (Kemiripan: {score:.3f})")
Deteksi anomali
Identifikasi data anomali dengan menghitung kemiripan penyematan terhadap penyematan pusat sampel normal. Skor kemiripan rendah menunjukkan anomali.
ambang batas dalam kode contoh hanya untuk demonstrasi. Dalam produksi, skor kemiripan bervariasi berdasarkan konten dan distribusi data, sehingga tidak ada ambang batas universal. Kalibrasi nilai ini pada dataset Anda sendiri.import dashscope
import numpy as np
def cosine_similarity(a, b):
"""Hitung kemiripan kosinus."""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def detect_anomaly(new_comment, normal_comments, threshold=0.6):
# 1. Hasilkan penyematan untuk semua komentar normal dan komentar baru.
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. Hitung penyematan pusat (rata-rata) komentar normal.
normal_embeddings = np.array(embeddings[:-1])
normal_center_vector = np.mean(normal_embeddings, axis=0)
# 3. Hitung kemiripan antara penyematan komentar baru dan penyematan pusat.
new_comment_embedding = np.array(embeddings[-1])
similarity = cosine_similarity(new_comment_embedding, normal_center_vector)
# 4. Tentukan apakah ini anomali.
is_anomaly = similarity < threshold
return is_anomaly, similarity
# Contoh penggunaan
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("--- Contoh Deteksi Anomali ---")
for desc, comment in test_comments.items():
is_anomaly, score = detect_anomaly(comment, normal_user_comments)
result = "Ya" if is_anomaly else "Tidak"
print(f"Komentar: '{comment}'")
print(f"Apakah anomali: {result} (Kemiripan dengan sampel normal: {score:.3f})\n")
Referensi API
-
Penyematan teks umum
-
Penyematan multimodal
Kode kesalahan
Jika pemanggilan model gagal dan mengembalikan pesan kesalahan, lihat Pesan kesalahan untuk penyelesaian.
Batas laju
Untuk batas laju, lihat Batas laju.
Performa model (MTEB/CMTEB)
Tolok ukur evaluasi
-
MTEB (Massive Text Embedding Benchmark): Tolok ukur komprehensif yang menilai performa umum penyematan teks di berbagai tugas seperti klasifikasi, pengelompokan, dan pengambilan.
-
CMTEB (Chinese Massive Text Embedding Benchmark): Tolok ukur skala besar yang secara khusus mengevaluasi penyematan teks Tiongkok.
-
Skor berkisar dari 0 hingga 100. Skor lebih tinggi menunjukkan performa lebih baik.
|
Model |
MTEB |
MTEB (tugas pengambilan) |
CMTEB |
CMTEB (tugas pengambilan) |
|
text-embedding-v3 (512 dimensi) |
62,11 |
54,30 |
66,81 |
71,88 |
|
text-embedding-v3 (768 dimensi) |
62,43 |
54,74 |
67,90 |
72,29 |
|
text-embedding-v3 (1024 dimensi) |
63,39 |
55,41 |
68,92 |
73,23 |
|
text-embedding-v4 (512 dimensi) |
64,73 |
56,34 |
68,79 |
73,33 |
|
text-embedding-v4 (1024 dimensi) |
68,36 |
59,30 |
70,14 |
73,98 |
|
text-embedding-v4 (2048 dimensi) |
71,58 |
61,97 |
71,99 |
75,01 |