Model embedding mengonversi data seperti teks, gambar, dan video menjadi vektor numerik. Vektor ini digunakan untuk berbagai tugas lanjutan, seperti pencarian semantik, rekomendasi, pengelompokan, klasifikasi, dan deteksi anomali.
Persiapan
Anda harus mendapatkan Kunci API dan menyetel Kunci API sebagai Variabel lingkungan. Jika Anda menggunakan SDK OpenAI atau SDK DashScope untuk melakukan panggilan, Anda juga harus menginstal SDK.
Mendapatkan embedding
Text embedding
Saat memanggil API, tentukan teks yang akan di-embed dan nama model dalam permintaan.
Antarmuka kompatibel dengan 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"), # Jika Anda belum mengonfigurasi variabel lingkungan, ganti dengan Kunci API Anda di sini
# Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti 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({
// Pastikan Anda telah menyetel variabel lingkungan DASHSCOPE_API_KEY dengan benar
apiKey: process.env.DASHSCOPE_API_KEY, // Jika Anda belum mengonfigurasi variabel lingkungan, ganti dengan Kunci API Anda di sini
// Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: 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 // 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
# 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'
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 wilayah 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 disetel
System.err.println("Terjadi pengecualian saat memanggil API: " + e.getMessage());
System.err.println("Periksa apakah Kunci API Anda dikonfigurasi dengan benar.");
e.printStackTrace();
}
}
}# ======= Penting =======
# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_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"
]
}
}'Embedding multimodal independen
Fitur embedding multimodal independen hanya tersedia melalui SDK DashScope atau API. Fitur ini tidak didukung oleh antarmuka kompatibel OpenAI atau Konsol. Fitur ini menghasilkan vektor terpisah dan independen untuk konten dari modalitas berbeda, seperti teks, gambar, dan video. Fitur ini cocok untuk skenario di mana Anda perlu memproses setiap jenis konten secara individual.
import dashscope
import json
import os
from http import HTTPStatus
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# Di atas adalah URL dasar untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
# Masukan bisa berupa video
# video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/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 Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
# Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Untuk mendapatkan Kunci API, lihat 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))
Embedding multimodal terpadu
Fitur embedding multimodal terpadu hanya tersedia melalui SDK DashScope atau API. Fitur ini tidak didukung oleh antarmuka kompatibel OpenAI atau Konsol. Fitur ini menggabungkan konten dari modalitas berbeda, seperti teks, gambar, dan video, menjadi satu vektor terpadu. Fitur ini cocok untuk skenario seperti pencarian teks-ke-gambar, pencarian gambar-ke-gambar, pencarian teks-ke-video, dan pengambilan lintas-modalitas.
qwen3-vl-embeddingmendukung pembuatan embedding terpadu maupun independen. Saat teks, gambar, dan video ditempatkan dalam objek yang sama, vektor terpadu dihasilkan. Saat mereka merupakan elemen terpisah, vektor independen dihasilkan untuk masing-masing.qwen2.5-vl-embeddinghanya mendukung embedding terpadu dan tidak mendukung embedding independen.
import dashscope
import json
import os
from http import HTTPStatus
# Embedding multimodal terpadu: Menggabungkan teks, gambar, dan video menjadi satu vektor terpadu
# Cocok untuk skenario seperti pengambilan lintas-modalitas dan pencarian gambar
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"
# Masukan mencakup teks, gambar, dan video. Model akan menggabungkannya menjadi satu vektor terpadu.
input_data = [
{
"text": text,
"image": image,
"video": video
}
]
# Gunakan qwen3-vl-embedding untuk menghasilkan vektor terpadu
resp = dashscope.MultiModalEmbedding.call(
# Jika Anda belum mengonfigurasi variabel lingkungan, 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,
# Parameter opsional: Tentukan dimensi vektor (Mendukung 2560, 2048, 1536, 1024, 768, 512, 256. Default: 2560)
# parameters={"dimension": 1024}
)
print(json.dumps(resp.output, indent=4))
Pemilihan model
Pemilihan model yang sesuai bergantung pada jenis data masukan dan skenario aplikasi Anda.
Untuk teks biasa atau kode: Gunakan
text-embedding-v4. Ini adalah model paling kuat yang tersedia saat ini. Model ini mendukung fitur-fitur canggih seperti instruksi dan vektor jarang, serta mencakup sebagian besar skenario pemrosesan teks.Memproses konten multimodal:
Embedding multimodal terpadu: Untuk merepresentasikan masukan single-modal atau mixed-modal sebagai vektor terpadu dalam skenario seperti pengambilan lintas-modalitas dan pencarian gambar, gunakan
qwen3-vl-embedding. Misalnya, Anda dapat memasukkan gambar kemeja dengan teks "temukan gaya serupa yang terlihat lebih muda". Model dapat menggabungkan gambar dan instruksi teks menjadi satu vektor untuk pemahaman.Embedding independen: Untuk menghasilkan vektor independen untuk setiap masukan, seperti gambar dan judul teks yang sesuai, pilih
tongyi-embedding-vision-plus,tongyi-embedding-vision-flash, atau model multimodal umummultimodal-embedding-v1. Ini menghasilkan vektor terpisah untuk setiap bagian masukan (gambar, teks).
Tabel berikut menyediakan spesifikasi terperinci untuk semua model embedding yang tersedia.
Text embedding
Singapura
Nama model | Dimensi vektor | Ukuran batch | Token maks per batch (Catatan) | Harga (per 1 juta token masukan) | Bahasa yang didukung | 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 Masa berlaku: 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 Masa berlaku: 90 hari setelah mengaktifkan Model Studio |
Beijing
Nama model | Dimensi vektor | Ukuran batch | Token maks per batch (Catatan) | Harga (per 1 juta token masukan) | Bahasa yang didukung |
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 | 100+ bahasa utama, termasuk Tiongkok, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan beberapa bahasa pemrograman |
Ukuran batch adalah jumlah maksimum teks yang dapat diproses dalam satu panggilan API. Misalnya, ukuran batch untuk text-embedding-v4 adalah 10. Artinya, Anda dapat mengirimkan hingga 10 teks untuk di-embed dalam satu permintaan, dan setiap teks tidak boleh melebihi 8.192 token. Batasan ini berlaku untuk:
Masukan array string: Array dapat berisi maksimal 10 elemen.
Masukan file: File teks dapat berisi maksimal 10 baris teks.
Multimodal embedding
Model menghasilkan vektor kontinu berdasarkan masukan pengguna, yang dapat berupa teks, gambar, atau video. Ini cocok untuk tugas seperti klasifikasi video, klasifikasi gambar, pengambilan gambar-teks, pencarian gambar-ke-gambar, dan pencarian video-ke-teks/gambar.
Antarmuka mendukung pengunggahan satu segmen teks, satu gambar, atau satu file video. Antarmuka juga memungkinkan kombinasi jenis berbeda (seperti teks + gambar). Beberapa model mendukung beberapa masukan dari jenis yang sama (seperti beberapa gambar). Untuk informasi lebih lanjut, lihat detail batasan untuk model tertentu.
Singapura
Nama model | Dimensi vektor | Batas panjang teks | Batas ukuran gambar | Batas ukuran video | Harga (per 1 juta token masukan) | Kuota gratis(Catatan) |
tongyi-embedding-vision-plus | 1152, 1024, 512, 256, 128, 64 | 1.024 token | Satu file tidak boleh lebih besar dari 3 MB. | Ukuran file video hingga 10 MB | Gambar/Video: $0,09 Teks: $0,09 | 1 juta token Masa berlaku: 90 hari setelah mengaktifkan Model Studio |
tongyi-embedding-vision-flash | 768, 512, 256, 128, 64 | Gambar/Video: $0,03 Teks: $0,09 |
Beijing
Nama model | Dimensi vektor | Batas panjang teks | Batas ukuran gambar | Batas ukuran video | Harga (per 1 juta token masukan) |
qwen3-vl-embedding | 2560, 2048, 1536, 1024, 768, 512, 256 | 32.000 token | Maks 1 gambar, hingga 5 MB | Ukuran file video hingga 50 MB | Gambar/Video: $0,258 Teks: $0,1 |
multimodal-embedding-v1 | 1024 | 512 token | Maks 8 gambar, hingga 3 MB masing-masing | Ukuran file video hingga 10 MB | Uji coba gratis |
Format masukan dan batasan bahasa:
Model embedding multimodal terpadu | ||||
Model | Teks | Gambar | Video | Elemen maks per 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) | Total elemen konten per permintaan tidak boleh melebihi 20. Gambar, teks, dan video berbagi batas ini. |
Model embedding multimodal independen | ||||
Model | Teks | Gambar | Video | Elemen maks per permintaan |
tongyi-embedding-vision-plus | Tiongkok/Inggris | JPG, PNG, BMP (URL atau Base64 didukung) | MP4, MPEG, AVI, MOV, MPG, WEBM, FLV, MKV (hanya URL) | Tidak ada batasan jumlah elemen konten. Total jumlah token tidak boleh melebihi batas token. |
tongyi-embedding-vision-flash | ||||
multimodal-embedding-v1 | Total elemen konten per permintaan tidak boleh melebihi 20. Maks 1 gambar, 1 video, dan 20 entri teks, berbagi batas total. | |||
Fitur inti
Ubah dimensi vektor
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 informasi semantik yang lebih kaya tetapi juga meningkatkan biaya penyimpanan dan komputasi.
Skenario umum (Direkomendasikan): Dimensi 1024 menawarkan keseimbangan terbaik antara kinerja dan biaya, cocok untuk sebagian besar tugas pengambilan semantik.
Skenario presisi tinggi: Untuk domain yang memerlukan presisi tinggi, pilih dimensi 1536 atau 2048. Ini memberikan peningkatan presisi tertentu tetapi secara signifikan meningkatkan overhead penyimpanan dan komputasi.
Skenario terbatas sumber daya: Dalam skenario yang sensitif biaya, pilih dimensi 768 atau lebih rendah. Ini secara signifikan mengurangi konsumsi sumber daya tetapi mengakibatkan kehilangan informasi semantik.
Antarmuka kompatibel dengan OpenAI
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
# Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti 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"],
# Setel dimensi vektor ke 256
dimensions=256
)
print(f"Dimensi vektor: {len(resp.data[0].embedding)}")
DashScope
import dashscope
# 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'
resp = dashscope.TextEmbedding.call(
model="text-embedding-v4",
input=["I like it and will buy from here again"],
# Setel dimensi vektor ke 256
dimension=256
)
print(f"Dimensi vektor: {len(resp.output['embeddings'][0]['embedding'])}")
Bedakan antara teks kueri dan dokumen (text_type)
Parameter ini saat ini hanya dapat diaktifkan melalui SDK dan API DashScope.
Untuk mencapai hasil terbaik dalam tugas pencarian, Anda harus memproses jenis konten yang berbeda dengan vektorisasi yang ditargetkan untuk memanfaatkan sepenuhnya peran masing-masing. Parameter text_type dirancang untuk tujuan ini:
text_type: 'query': Gunakan untuk teks kueri yang dimasukkan 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 di database. Model menghasilkan vektor "seperti isi" yang berisi informasi lebih komprehensif dan dioptimalkan untuk diambil.
Saat menggunakan teks pendek untuk mencocokkan teks panjang, bedakan antara query dan document. Untuk tugas di mana semua teks memiliki peran yang sama, seperti pengelompokan atau klasifikasi, Anda tidak perlu menyetel parameter ini.
Gunakan instruksi untuk meningkatkan kinerja (instruct)
Parameter ini saat ini hanya dapat diaktifkan melalui SDK dan API DashScope.
Dengan memberikan instruksi bahasa Inggris yang jelas, Anda dapat membimbing model text-embedding-v4 untuk mengoptimalkan kualitas vektor bagi skenario pengambilan tertentu, sehingga secara efektif meningkatkan presisi. Saat menggunakan fitur ini, Anda harus menyetel 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 vektor jarang
Parameter ini saat ini hanya dapat diaktifkan melalui SDK dan API DashScope.
text-embedding-v4 dan text-embedding-v3 mendukung tiga jenis keluaran vektor untuk memenuhi kebutuhan strategi pengambilan yang berbeda.
Jenis vektor (output_type) | Keunggulan utama | Kelemahan utama | Skenario aplikasi khas |
dense | Pemahaman semantik mendalam. Dapat mengidentifikasi sinonim dan konteks, menghasilkan hasil pengambilan yang lebih relevan. | Biaya komputasi dan penyimpanan lebih tinggi. Tidak dapat menjamin pencocokan kata kunci eksak. | Pencarian semantik, Chat AI, rekomendasi konten. |
sparse | Efisiensi komputasi tinggi. Fokus pada pencocokan kata kunci eksak dan penyaringan cepat. | Mengorbankan pemahaman semantik. Tidak dapat menangani sinonim atau konteks. | Pengambilan log, pencarian SKU produk, penyaringan informasi tepat. |
dense&sparse | Menggabungkan semantik dan kata kunci untuk hasil pencarian terbaik. Biaya pembuatan sama. Overhead panggilan API identik dengan mode vektor tunggal. | Kebutuhan penyimpanan besar. Arsitektur sistem dan logika pengambilan lebih kompleks. | Mesin pencari hibrida berkualitas tinggi untuk lingkungan produksi. |
Contoh aplikasi
Kode berikut hanya untuk tujuan demonstrasi. Di lingkungan produksi, Anda harus menghitung vektor terlebih dahulu dan menyimpannya di database vektor. Selama pengambilan, Anda hanya perlu menghitung vektor kueri.
Pencarian semantik
Anda dapat mencapai pencocokan semantik yang tepat dengan menghitung kesamaan vektor 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 kesamaan cosinus"""
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 vektor kueri
query_resp = TextEmbedding.call(
model="text-embedding-v4",
input=query,
dimension=1024
)
query_embedding = query_resp.output['embeddings'][0]['embedding']
# Hasilkan vektor dokumen
doc_resp = TextEmbedding.call(
model="text-embedding-v4",
input=documents,
dimension=1024
)
# Hitung kesamaan
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"Kesamaan: {sim:.3f}, Dokumen: {doc}")Sistem rekomendasi
Anda dapat menemukan minat pengguna dan merekomendasikan item serupa dengan menganalisis vektor dari perilaku historis mereka.
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 kesamaan cosinus"""
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 vektor riwayat pengguna
history_resp = TextEmbedding.call(
model="text-embedding-v4",
input=user_history,
dimension=1024
)
# Hitung vektor preferensi pengguna (dengan merata-ratakan)
user_embedding = np.mean([
emb['embedding'] for emb in history_resp.output['embeddings']
], axis=0)
# Hasilkan semua vektor 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
Anda dapat mengelompokkan teks serupa secara otomatis dengan menganalisis jarak antara vektor-vektornya.
# 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 vektor 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"--- Cluster {cluster_id} ---")
for doc in docs:
print(f"- {doc}")Klasifikasi teks
Anda dapat mengenali dan mengklasifikasikan kategori baru tanpa contoh berlabel sebelumnya dengan menghitung kesamaan vektor antara teks masukan dan label yang telah ditentukan.
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 kesamaan cosinus"""
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 vektor 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 kesamaan dengan setiap label
scores = [cosine_similarity(text_embedding, label_emb) for label_emb in label_embeddings]
# 3. Kembalikan label dengan kesamaan 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}' (Kesamaan: {score:.3f})")Deteksi anomali
Anda dapat mengidentifikasi data anomali yang berbeda secara signifikan dari pola normal dengan menghitung kesamaan vektor antara vektor teks dan pusat vektor sampel normal.
Ambang batas dalam kode contoh hanya untuk tujuan demonstrasi. Dalam skenario bisnis dunia nyata, nilai kesamaan spesifik bervariasi tergantung pada konten dan distribusi data. Tidak ada ambang batas tetap. Kalibrasi nilai ini berdasarkan dataset Anda sendiri.
import dashscope
import numpy as np
def cosine_similarity(a, b):
"""Hitung kesamaan cosinus"""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def detect_anomaly(new_comment, normal_comments, threshold=0.6):
# 1. Vektorisasi 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 vektor pusat (nilai rata-rata) komentar normal
normal_embeddings = np.array(embeddings[:-1])
normal_center_vector = np.mean(normal_embeddings, axis=0)
# 3. Hitung kesamaan antara komentar baru dan vektor 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} (Kesamaan dengan sampel normal: {score:.3f})\n")Referensi API
Embedding teks umum
Multimodal embedding
Kode error
Jika panggilan gagal, lihat Pesan error untuk troubleshooting.
Pembatasan kecepatan
Untuk informasi tentang kondisi pembatasan kecepatan model, lihat Pembatasan kecepatan.
Kinerja model (MTEB/CMTEB)
Tolok ukur evaluasi
MTEB: Massive Text Embedding Benchmark, evaluasi komprehensif kemampuan tujuan umum untuk tugas seperti klasifikasi, pengelompokan, dan pengambilan.
CMTEB: Chinese Massive Text Embedding Benchmark, evaluasi khusus untuk teks Tiongkok.
Skor berkisar dari 0 hingga 100. Nilai yang lebih tinggi menunjukkan kinerja yang 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 |