Model embedding mengonversi data seperti teks, gambar, dan video menjadi vektor numerik. Vektor ini digunakan untuk 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 OpenAI SDK atau DashScope SDK 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 embedding (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 input
.texts(Collections.singleton(inputTexts))
.build();
// Buat instance 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 DashScope SDK 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
# Input 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 Model Studio 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 DashScope SDK 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. Ketika teks, gambar, dan video ditempatkan dalam objek yang sama, vektor terpadu akan dihasilkan. Ketika mereka merupakan elemen terpisah, vektor independen akan 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"
# Input 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 Model Studio Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3-vl-embedding",
input=input_data,
# Parameter opsional: Tentukan dimensi embedding (Mendukung 2560, 2048, 1536, 1024, 768, 512, 256. Default: 2560)
# parameters={"dimension": 1024}
)
print(json.dumps(resp.output, indent=4))
Pemilihan model
Model yang tepat bergantung pada jenis data masukan dan skenario aplikasi Anda.
Untuk teks biasa atau kode: Gunakan
text-embedding-v4, model paling canggih yang tersedia saat ini. Model ini mendukung fitur lanjutan seperti instruksi dan vektor jarang, serta mencakup sebagian besar skenario pemrosesan teks.Memproses konten multimodal:
Embedding multimodal terpadu: Untuk merepresentasikan input modal-tunggal atau campuran sebagai vektor terpadu dalam skenario seperti pengambilan lintas-modalitas dan pencarian gambar, gunakan
qwen3-vl-embedding. Misalnya, Anda dapat memasukkan gambar kaus 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 input, 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 input (gambar, teks).
Tabel berikut menyediakan spesifikasi terperinci untuk semua model embedding yang tersedia.
Text embedding
Singapura
Model | Dimensi embedding | Ukuran batch | Token maks per batch (Catatan) | Harga (per 1 juta token input) | 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 Tionghoa, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan Rusia | 1 juta token Berlaku: 90 hari setelah mengaktifkan Model Studio |
text-embedding-v3 | 1.024 (bawaan), 768, 512 | Lebih dari 50 bahasa utama, termasuk Tionghoa, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan Rusia | 500.000 token Berlaku: 90 hari setelah mengaktifkan Model Studio |
Beijing
Model | Dimensi embedding | Ukuran batch | Token maks per batch (Catatan) | Harga (per 1 juta token input) | 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 | Lebih dari 100 bahasa utama, termasuk Tionghoa, 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:
Input array string: Array dapat berisi maksimal 10 elemen.
Input file: File teks dapat berisi maksimal 10 baris teks.
Multimodal embedding
Model menghasilkan vektor kontinu berdasarkan input pengguna, yang dapat berupa teks, gambar, atau video. Ini cocok untuk tugas seperti klasifikasi video, klasifikasi gambar, pengambilan teks-gambar, 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 input dari jenis yang sama (seperti beberapa gambar). Untuk informasi lebih lanjut, lihat detail batasan untuk model tertentu.
Singapura
Model | Dimensi embedding | Batas panjang teks | Batas ukuran gambar | Batas ukuran video | Harga (per 1 juta token input) | 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 Berlaku: 90 hari setelah mengaktifkan Model Studio |
tongyi-embedding-vision-flash | 768, 512, 256, 128, 64 | Gambar/Video: $0,03 Teks: $0,09 |
Beijing
Model | Dimensi embedding | Batas panjang teks | Batas ukuran gambar | Batas ukuran video | Harga (per 1 juta token input) |
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, masing-masing hingga 3 MB | Ukuran file video hingga 10 MB | Uji coba gratis |
Batasan input:
Model embedding multimodal terpadu | ||||
Model | Teks | Gambar | Video | Elemen maks per permintaan |
qwen3-vl-embedding | Mendukung 33 bahasa utama, termasuk Tionghoa, 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 | Tionghoa/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
Mengganti dimensi embedding
text-embedding-v4, text-embedding-v3, tongyi-embedding-vision-plus, tongyi-embedding-vision-flash, dan qwen3-vl-embedding mendukung dimensi embedding 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 membutuhkan 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 embedding ke 256
dimensions=256
)
print(f"Dimensi embedding: {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 embedding ke 256
dimension=256
)
print(f"Dimensi embedding: {len(resp.output['embeddings'][0]['embedding'])}")
Membedakan antara teks kueri dan dokumen (text_type)
Parameter ini saat ini hanya dapat diaktifkan melalui DashScope SDK dan API.
Untuk mencapai hasil terbaik dalam tugas pencarian, proses konten jenis berbeda dengan embedding 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 DashScope SDK dan API.
Berikan instruksi bahasa Inggris yang jelas untuk membimbing text-embedding-v4 mengoptimalkan kualitas vektor untuk skenario pengambilan tertentu, sehingga secara efektif meningkatkan presisi. Saat menggunakan fitur ini, setel 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 saat ini hanya dapat diaktifkan melalui DashScope SDK dan API.
text-embedding-v4 dan text-embedding-v3 mendukung tiga jenis output vektor untuk memenuhi kebutuhan strategi pengambilan berbeda.
Jenis vektor (output_type) | Keunggulan utama | Kekurangan 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 presisi. |
dense&sparse | Menggabungkan semantik dan kata kunci untuk hasil pencarian terbaik. Biaya generasi 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 penggunaan
Kode berikut hanya untuk tujuan demonstrasi. Di lingkungan produksi, pra-hitung vektor embedding dan simpan di database vektor. Selama pengambilan, Anda hanya perlu menghitung vektor kueri.
Pencarian semantik
Mencapai pencocokan semantik presisi 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
Temukan minat pengguna dan rekomendasikan 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 rata-rata)
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
Otomatis mengelompokkan teks serupa dengan menganalisis jarak antara vektor 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 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
Kenali dan klasifikasikan kategori baru tanpa contoh berlabel sebelumnya dengan menghitung kesamaan vektor antara teks input 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 input 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 input: '{text_to_classify}'")
print(f"Kategori yang paling cocok: '{label}' (Kesamaan: {score:.3f})")Deteksi anomali
Identifikasi 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.
Batas laju
Lihat Batas laju.
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 Tionghoa.
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 |